atomaric 0.0.39 → 0.0.40

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
@@ -3,17 +3,17 @@ let R = () => {
3
3
  };
4
4
  const V = {}, K = (e) => {
5
5
  V.useSyncExternalStore = R = e.useSyncExternalStore, V.keyPathSeparator = e.keyPathSeparator;
6
- }, U = (e) => R(e.subscribe, e.get), W = (e) => e.set, ee = (e) => e.setDeferred, te = (e) => e.get, re = (e) => e.do, ne = (e) => [U(e), W(e)], se = (e, s) => new Y(e, s), q = (e, s) => {
6
+ }, U = (e) => R(e.subscribe, e.get), W = (e) => e.set, ee = (e) => e.setDeferred, te = (e) => e.get, ne = (e) => e.do, re = (e) => [U(e), W(e)], se = (e, s) => new Y(e, s), q = (e, s) => {
7
7
  const i = (d, g, w) => new Proxy(d, {
8
- get: (t, r, c) => {
9
- const o = w === 0 && s.get != null ? s.get(t, r, c) : t[r];
8
+ get: (t, n, c) => {
9
+ const o = w === 0 && s.get != null ? s.get(t, n, c) : t[n];
10
10
  return typeof o == "object" && o !== null ? i(
11
11
  Array.isArray(o) ? o.slice(0) : { ...o },
12
- g.concat(Array.isArray(t) ? +r : r),
12
+ g.concat(Array.isArray(t) ? +n : n),
13
13
  w + 1
14
14
  ) : o;
15
15
  },
16
- set: (t, r, c) => (s.onSet(t, g, r, c, t[r]) && (t[r] = c), !0)
16
+ set: (t, n, c) => (s.onSet(t, g, n, c, t[n]) && (t[n] = c), !0)
17
17
  });
18
18
  return i(e, [], 0);
19
19
  }, Q = (e, s, i) => {
@@ -21,8 +21,8 @@ const V = {}, K = (e) => {
21
21
  typeof e == "number" ? d = j(
22
22
  s,
23
23
  (t) => ({
24
- increment: (r) => {
25
- t.set(+t.get() + (r ?? 0));
24
+ increment: (n) => {
25
+ t.set(+t.get() + (n ?? 0));
26
26
  }
27
27
  })
28
28
  ) : typeof e == "boolean" ? d = j(
@@ -35,43 +35,46 @@ const V = {}, K = (e) => {
35
35
  ) : Array.isArray(e) ? d = j(
36
36
  s,
37
37
  (t) => ({
38
- push: (...r) => {
39
- t.set(t.get().concat(r));
38
+ push: (...n) => {
39
+ t.set(t.get().concat(n));
40
40
  },
41
- unshift: (...r) => {
42
- t.set(r.concat(t.get()));
41
+ unshift: (...n) => {
42
+ t.set(n.concat(t.get()));
43
43
  },
44
- update: (r) => {
45
- const c = t.get(), o = M(c, r);
44
+ update: (n) => {
45
+ const c = t.get(), o = M(c, n);
46
46
  o !== c && t.set(o);
47
47
  },
48
- filter: (r) => {
49
- t.set(t.get().filter(r ?? X));
48
+ filter: (n) => {
49
+ t.set(t.get().filter(n ?? X));
50
50
  },
51
- remove: (r) => {
52
- const c = t.get().indexOf(r);
51
+ add: (n) => {
52
+ t.get().includes(n) || t.set(t.get().concat([n]));
53
+ },
54
+ remove: (n) => {
55
+ const c = t.get().indexOf(n);
53
56
  if (c < 0) return;
54
57
  const o = t.get().slice(0);
55
58
  o.splice(c, 1), t.set(o);
56
59
  },
57
- toggle: (r, c) => {
58
- const o = t.get().slice(), f = o.indexOf(r);
59
- f < 0 ? c ? o.unshift(r) : o.push(r) : o.splice(f, 1), t.set(o);
60
+ toggle: (n, c) => {
61
+ const o = t.get().slice(), f = o.indexOf(n);
62
+ f < 0 ? c ? o.unshift(n) : o.push(n) : o.splice(f, 1), t.set(o);
60
63
  }
61
64
  })
62
65
  ) : e instanceof Set ? d = j(
63
66
  s,
64
67
  (t) => ({
65
- add: (r) => {
66
- t.set(new Set(t.get()).add(r));
68
+ add: (n) => {
69
+ t.set(new Set(t.get()).add(n));
67
70
  },
68
- delete: (r) => {
71
+ delete: (n) => {
69
72
  const c = new Set(t.get());
70
- c.delete(r), t.set(c);
73
+ c.delete(n), t.set(c);
71
74
  },
72
- toggle: (r) => {
75
+ toggle: (n) => {
73
76
  const c = new Set(t.get());
74
- c.has(r) ? c.delete(r) : c.add(r), t.set(c);
77
+ c.has(n) ? c.delete(n) : c.add(n), t.set(c);
75
78
  },
76
79
  clear: () => {
77
80
  t.set(/* @__PURE__ */ new Set());
@@ -80,17 +83,17 @@ const V = {}, K = (e) => {
80
83
  ) : e instanceof Object && (d = j(
81
84
  s,
82
85
  (t) => ({
83
- setPartial: (r) => t.set((c) => ({
86
+ setPartial: (n) => t.set((c) => ({
84
87
  ...c,
85
- ...typeof r == "function" ? r(t.get()) : r
88
+ ...typeof n == "function" ? n(t.get()) : n
86
89
  })),
87
- update: (r) => {
88
- const c = t.get(), o = M(c, r);
90
+ update: (n) => {
91
+ const c = t.get(), o = M(c, n);
89
92
  o !== c && t.set(o);
90
93
  },
91
- setDeepPartial: (r, c, o, f = V.keyPathSeparator ?? ".") => {
92
- if (r.includes(f)) {
93
- let h = r.split(f);
94
+ setDeepPartial: (n, c, o, f = V.keyPathSeparator ?? ".") => {
95
+ if (n.includes(f)) {
96
+ let h = n.split(f);
94
97
  const b = h[h.length - 1];
95
98
  h = h.slice(0, -1);
96
99
  const y = { ...t.get() };
@@ -99,21 +102,21 @@ const V = {}, K = (e) => {
99
102
  let p = A[S];
100
103
  const T = D = D == null ? void 0 : D[Array.isArray(D) ? "0" : S];
101
104
  if (p == null && (p = Array.isArray(T) ? [] : {}), p == null || typeof p != "object") {
102
- t.do.setPartial({ [r]: typeof c == "function" ? c(void 0) : c });
105
+ t.do.setPartial({ [n]: typeof c == "function" ? c(void 0) : c });
103
106
  return;
104
107
  }
105
108
  A = A[S] = Array.isArray(p) ? [...p] : { ...p };
106
109
  }
107
110
  A[b] = typeof c == "function" ? c(A[b]) : c, t.set(y);
108
- } else t.do.setPartial({ [r]: c });
111
+ } else t.do.setPartial({ [n]: c });
109
112
  }
110
113
  })
111
114
  ));
112
115
  const g = typeof i == "object" && i != null && "do" in i ? i.do(
113
- (t, r) => s.set(t, r),
116
+ (t, n) => s.set(t, n),
114
117
  () => s.get(),
115
118
  s,
116
- (t, r, c) => s.setDeferred(t, r, c)
119
+ (t, n, c) => s.setDeferred(t, n, c)
117
120
  ) : null, w = {};
118
121
  return g && Object.keys(g).forEach((t) => Object.defineProperty(w, t, { get: () => g[t] })), d && Object.keys(d).forEach(
119
122
  (t) => Object.defineProperty(w, t, { get: () => d[t] })
@@ -122,7 +125,7 @@ const V = {}, K = (e) => {
122
125
  const i = Array.isArray(e) ? e.slice(0) : { ...e };
123
126
  let d = !1;
124
127
  const g = q(e, {
125
- onSet: (w, t, r, c, o) => {
128
+ onSet: (w, t, n, c, o) => {
126
129
  if (c === o) return !0;
127
130
  let f = i;
128
131
  d = !0;
@@ -130,24 +133,24 @@ const V = {}, K = (e) => {
130
133
  const b = f[h];
131
134
  f = f[h] = Array.isArray(b) ? b.slice(0) : { ...b };
132
135
  }
133
- return f[r] = c, !0;
136
+ return f[n] = c, !0;
134
137
  }
135
138
  });
136
139
  return s(g), d ? i : e;
137
140
  };
138
141
  class Y {
139
142
  constructor(s, i) {
140
- const d = (n) => r = n, g = () => r, w = /* @__PURE__ */ new Set(), t = (n) => n(f());
141
- let r = s, c, o = () => {
143
+ const d = (r) => n = r, g = () => n, w = /* @__PURE__ */ new Set(), t = (r) => r(f());
144
+ let n = s, c, o = () => {
142
145
  }, f = () => g(), h = null, b = () => {
143
- const n = Q(s, y, i);
144
- return b = () => n, n;
146
+ const r = Q(s, y, i);
147
+ return b = () => r, r;
145
148
  };
146
149
  const y = new Proxy(this, {
147
- get: (n, a) => a === "do" ? b() : n[a],
150
+ get: (r, a) => a === "do" ? b() : r[a],
148
151
  set: Z
149
- }), A = (n, a) => {
150
- const x = typeof n == "function" ? n(f()) : n;
152
+ }), A = (r, a) => {
153
+ const x = typeof r == "function" ? r(f()) : r;
151
154
  if (!(x === f() || x === void 0 || typeof x == "number" && isNaN(x))) {
152
155
  d(x), w.forEach(t, this);
153
156
  try {
@@ -157,28 +160,28 @@ class Y {
157
160
  a !== !0 && o(x);
158
161
  }
159
162
  };
160
- this.set = (n, a) => A(n, a), this.get = () => f(), this.initialValue = s, this.isInitialValue = () => s === g(), this.subscribe = (n) => (w.add(n), () => {
161
- w.delete(n);
163
+ this.set = (r, a) => A(r, a), this.get = () => f(), this.initialValue = s, this.isInitialValue = () => s === g(), this.subscribe = (r) => (w.add(r), () => {
164
+ w.delete(r);
162
165
  }), this.reset = () => {
163
166
  A(s, !0), w.forEach(t, this);
164
167
  };
165
- const D = (n, a) => {
166
- A(n, a), c = void 0;
168
+ const D = (r, a) => {
169
+ A(r, a), c = void 0;
167
170
  };
168
- if (this.setDeferred = (n, a = 500, x, L = !0) => {
169
- L && c === void 0 && A(n, x), clearTimeout(c), c = setTimeout(D, a, n, x);
171
+ if (this.setDeferred = (r, a = 500, x, L = !0) => {
172
+ L && c === void 0 && A(r, x), clearTimeout(c), c = setTimeout(D, a, r, x);
170
173
  }, i == null) return y;
171
- let S = null, p = null, T = !0, P = !0, E = !1, z = -1, C = s instanceof Set ? (n) => new Set(n) : (n) => n, m = s instanceof Set ? (n) => {
172
- if (n instanceof Set) return Array.from(n);
173
- throw console.error(n), "The value is not Set instance";
174
- } : (n) => n;
174
+ let S = null, p = null, T = !0, P = !0, E = !1, z = -1, C = s instanceof Set ? (r) => new Set(r) : (r) => r, m = s instanceof Set ? (r) => {
175
+ if (r instanceof Set) return Array.from(r);
176
+ throw console.error(r), "The value is not Set instance";
177
+ } : (r) => r;
175
178
  if (typeof i == "string")
176
179
  S = i;
177
180
  else if ("storeKey" in i)
178
181
  T = i.warnOnDuplicateStoreKey ?? T, P = i.listenStorageChanges ?? P, S = i.storeKey, C = i.unzipValue ?? C, m = i.zipValue ?? m, E = i.unchangable ?? E, p = i.exp ?? p;
179
182
  else return y;
180
- const u = `${B}${S}`, F = p === null || !(p(y, u in l) instanceof Date) ? (n) => JSON.stringify([m(n)]) : (n) => (h ?? (h = {}), h.exp = p(y, u in l).getTime() + 0.2866, h.exp - Date.now() < 24 * 60 * 60 * 1e3 && (clearTimeout(z), clearTimeout(G[u]), z = setTimeout(() => this.reset(), h.exp - Date.now())), JSON.stringify([m(n), h])), J = (n) => {
181
- const a = JSON.parse(n);
183
+ const u = `${B}${S}`, F = p === null || !(p(y, u in l) instanceof Date) ? (r) => JSON.stringify([m(r)]) : (r) => (h ?? (h = {}), h.exp = p(y, u in l).getTime() + 0.2866, h.exp - Date.now() < 24 * 60 * 60 * 1e3 && (clearTimeout(z), clearTimeout(G[u]), z = setTimeout(() => this.reset(), h.exp - Date.now())), JSON.stringify([m(r), h])), J = (r) => {
184
+ const a = JSON.parse(r);
182
185
  return h = a[1], C(a[0]);
183
186
  };
184
187
  let H = !0;
@@ -192,30 +195,30 @@ class Y {
192
195
  }
193
196
  }
194
197
  return g();
195
- }, o = (n) => {
196
- if (n === s) {
198
+ }, o = (r) => {
199
+ if (r === s) {
197
200
  this.reset();
198
201
  return;
199
202
  }
200
- l[u] = F(n);
203
+ l[u] = F(r);
201
204
  }, this.reset = () => {
202
205
  delete l[u], A(s, !0);
203
206
  }, T && _[u] !== void 0 && console.warn("Duplicate Atom key", S), P)
204
207
  if (E) {
205
- let n = !1, a;
208
+ let r = !1, a;
206
209
  I[u] = this, _[u] = () => {
207
- clearTimeout(a), a = setTimeout(() => n = !1, 10), !n && (n = !0, l[u] = F(g()));
210
+ clearTimeout(a), a = setTimeout(() => r = !1, 10), !r && (r = !0, l[u] = F(g()));
208
211
  };
209
212
  } else
210
- _[u] = (n) => {
211
- if (n.newValue === null) {
213
+ _[u] = (r) => {
214
+ if (r.newValue === null) {
212
215
  this.reset();
213
216
  return;
214
217
  }
215
218
  try {
216
- A(J(n.newValue));
219
+ A(J(r.newValue));
217
220
  } catch {
218
- console.warn("Invalid json value", n.newValue);
221
+ console.warn("Invalid json value", r.newValue);
219
222
  }
220
223
  };
221
224
  return y;
@@ -259,8 +262,8 @@ export {
259
262
  se as atom,
260
263
  K as configureAtomaric,
261
264
  V as configuredOptions,
262
- ne as useAtom,
263
- re as useAtomDo,
265
+ re as useAtom,
266
+ ne as useAtomDo,
264
267
  te as useAtomGet,
265
268
  W as useAtomSet,
266
269
  ee as useAtomSetDeferred,
@@ -1 +1 @@
1
- (function(g,j){typeof exports=="object"&&typeof module<"u"?j(exports):typeof define=="function"&&define.amd?define(["exports"],j):(g=typeof globalThis<"u"?globalThis:g||self,j(g.atomaric={}))})(this,function(g){"use strict";let j=()=>{throw"call configureAtomaric() before all!"};const I={},Q=e=>{I.useSyncExternalStore=j=e.useSyncExternalStore,I.keyPathSeparator=e.keyPathSeparator},J=e=>j(e.subscribe,e.get),M=e=>e.set,X=e=>e.setDeferred,Y=e=>e.get,Z=e=>e.do,k=e=>[J(e),M(e)],O=(e,r)=>new H(e,r),K=(e,r)=>{const i=(d,h,w)=>new Proxy(d,{get:(t,n,c)=>{const o=w===0&&r.get!=null?r.get(t,n,c):t[n];return typeof o=="object"&&o!==null?i(Array.isArray(o)?o.slice(0):{...o},h.concat(Array.isArray(t)?+n:n),w+1):o},set:(t,n,c)=>(r.onSet(t,h,n,c,t[n])&&(t[n]=c),!0)});return i(e,[],0)},ee=(e,r,i)=>{let d=null;typeof e=="number"?d=x(r,t=>({increment:n=>{t.set(+t.get()+(n??0))}})):typeof e=="boolean"?d=x(r,t=>({toggle:()=>{t.set(!t.get())}})):Array.isArray(e)?d=x(r,t=>({push:(...n)=>{t.set(t.get().concat(n))},unshift:(...n)=>{t.set(n.concat(t.get()))},update:n=>{const c=t.get(),o=G(c,n);o!==c&&t.set(o)},filter:n=>{t.set(t.get().filter(n??te))},remove:n=>{const c=t.get().indexOf(n);if(c<0)return;const o=t.get().slice(0);o.splice(c,1),t.set(o)},toggle:(n,c)=>{const o=t.get().slice(),f=o.indexOf(n);f<0?c?o.unshift(n):o.push(n):o.splice(f,1),t.set(o)}})):e instanceof Set?d=x(r,t=>({add:n=>{t.set(new Set(t.get()).add(n))},delete:n=>{const c=new Set(t.get());c.delete(n),t.set(c)},toggle:n=>{const c=new Set(t.get());c.has(n)?c.delete(n):c.add(n),t.set(c)},clear:()=>{t.set(new Set)}})):e instanceof Object&&(d=x(r,t=>({setPartial:n=>t.set(c=>({...c,...typeof n=="function"?n(t.get()):n})),update:n=>{const c=t.get(),o=G(c,n);o!==c&&t.set(o)},setDeepPartial:(n,c,o,f=I.keyPathSeparator??".")=>{if(n.includes(f)){let A=n.split(f);const m=A[A.length-1];A=A.slice(0,-1);const b={...t.get()};let y=b,T=o;for(const p of A){let S=y[p];const P=T=T==null?void 0:T[Array.isArray(T)?"0":p];if(S==null&&(S=Array.isArray(P)?[]:{}),S==null||typeof S!="object"){t.do.setPartial({[n]:typeof c=="function"?c(void 0):c});return}y=y[p]=Array.isArray(S)?[...S]:{...S}}y[m]=typeof c=="function"?c(y[m]):c,t.set(b)}else t.do.setPartial({[n]:c})}})));const h=typeof i=="object"&&i!=null&&"do"in i?i.do((t,n)=>r.set(t,n),()=>r.get(),r,(t,n,c)=>r.setDeferred(t,n,c)):null,w={};return h&&Object.keys(h).forEach(t=>Object.defineProperty(w,t,{get:()=>h[t]})),d&&Object.keys(d).forEach(t=>Object.defineProperty(w,t,{get:()=>d[t]})),w},te=e=>e,x=(e,r,i)=>r(e),G=(e,r)=>{const i=Array.isArray(e)?e.slice(0):{...e};let d=!1;const h=K(e,{onSet:(w,t,n,c,o)=>{if(c===o)return!0;let f=i;d=!0;for(const A of t){const m=f[A];f=f[A]=Array.isArray(m)?m.slice(0):{...m}}return f[n]=c,!0}});return r(h),d?i:e};class H{constructor(r,i){const d=s=>n=s,h=()=>n,w=new Set,t=s=>s(f());let n=r,c,o=()=>{},f=()=>h(),A=null,m=()=>{const s=ee(r,b,i);return m=()=>s,s};const b=new Proxy(this,{get:(s,a)=>a==="do"?m():s[a],set:ne}),y=(s,a)=>{const D=typeof s=="function"?s(f()):s;if(!(D===f()||D===void 0||typeof D=="number"&&isNaN(D))){d(D),w.forEach(t,this);try{C.postMessage({key:l,value:h()})}catch{}a!==!0&&o(D)}};this.set=(s,a)=>y(s,a),this.get=()=>f(),this.initialValue=r,this.isInitialValue=()=>r===h(),this.subscribe=s=>(w.add(s),()=>{w.delete(s)}),this.reset=()=>{y(r,!0),w.forEach(t,this)};const T=(s,a)=>{y(s,a),c=void 0};if(this.setDeferred=(s,a=500,D,v=!0)=>{v&&c===void 0&&y(s,D),clearTimeout(c),c=setTimeout(T,a,s,D)},i==null)return b;let p=null,S=null,P=!0,N=!0,z=!1,B=-1,F=r instanceof Set?s=>new Set(s):s=>s,V=r instanceof Set?s=>{if(s instanceof Set)return Array.from(s);throw console.error(s),"The value is not Set instance"}:s=>s;if(typeof i=="string")p=i;else if("storeKey"in i)P=i.warnOnDuplicateStoreKey??P,N=i.listenStorageChanges??N,p=i.storeKey,F=i.unzipValue??F,V=i.zipValue??V,z=i.unchangable??z,S=i.exp??S;else return b;const l=`${L}${p}`,U=S===null||!(S(b,l in u)instanceof Date)?s=>JSON.stringify([V(s)]):s=>(A??(A={}),A.exp=S(b,l in u).getTime()+.2866,A.exp-Date.now()<24*60*60*1e3&&(clearTimeout(B),clearTimeout(R[l]),B=setTimeout(()=>this.reset(),A.exp-Date.now())),JSON.stringify([V(s),A])),W=s=>{const a=JSON.parse(s);return A=a[1],F(a[0])};let q=!0;if($[l]=b,u[`atom/${p}`]&&(u[l]||(u[l]=`[${u[`atom/${p}`]}]`),delete u[`atom/${p}`]),f=()=>{if(f=h,q){q=!1;try{d(l in u?W(u[l]):r)}catch{console.warn("Invalid json value",u[l])}}return h()},o=s=>{if(s===r){this.reset();return}u[l]=U(s)},this.reset=()=>{delete u[l],y(r,!0)},P&&_[l]!==void 0&&console.warn("Duplicate Atom key",p),N)if(z){let s=!1,a;E[l]=this,_[l]=()=>{clearTimeout(a),a=setTimeout(()=>s=!1,10),!s&&(s=!0,u[l]=U(h()))}}else _[l]=s=>{if(s.newValue===null){this.reset();return}try{y(W(s.newValue))}catch{console.warn("Invalid json value",s.newValue)}};return b}}let C;try{C=new BroadcastChannel("updateHere"),C.addEventListener("message",e=>{var r;(r=E[e.data.key])==null||r.set(e.data.value,!0)})}catch{}const u=window.localStorage,_={},E={},ne=(e,r)=>{throw`${r} is readonly property`};window.addEventListener("storage",e=>{var r;e.key===null||e.newValue===e.oldValue||(r=_[e.key])==null||r.call(_,e)});const se=u.setItem.bind(u),re=u.removeItem.bind(u);u.setItem=(e,r)=>{E[e]===void 0&&se.call(u,e,r)},u.removeItem=e=>{E[e]===void 0&&re.call(u,e)};const ce=/"exp":(\d+)\.2866/,L="atom\\",$={},R={};setTimeout(()=>{Object.keys(u).forEach(e=>{var i;if(!e.startsWith(L)||typeof u[e]!="string")return;const r=+((i=u[e].match(ce))==null?void 0:i[1]);r&&r-Date.now()<24*60*60*1e3&&(R[e]=setTimeout(()=>{$[e]?$[e].reset():delete u[e]},r-Date.now()))})},1e3),g.Atom=H,g.atom=O,g.configureAtomaric=Q,g.configuredOptions=I,g.useAtom=k,g.useAtomDo=Z,g.useAtomGet=Y,g.useAtomSet=M,g.useAtomSetDeferred=X,g.useAtomValue=J,Object.defineProperty(g,Symbol.toStringTag,{value:"Module"})});
1
+ (function(g,j){typeof exports=="object"&&typeof module<"u"?j(exports):typeof define=="function"&&define.amd?define(["exports"],j):(g=typeof globalThis<"u"?globalThis:g||self,j(g.atomaric={}))})(this,function(g){"use strict";let j=()=>{throw"call configureAtomaric() before all!"};const I={},X=e=>{I.useSyncExternalStore=j=e.useSyncExternalStore,I.keyPathSeparator=e.keyPathSeparator},J=e=>j(e.subscribe,e.get),M=e=>e.set,Y=e=>e.setDeferred,Z=e=>e.get,v=e=>e.do,k=e=>[J(e),M(e)],O=(e,r)=>new H(e,r),K=(e,r)=>{const i=(d,h,w)=>new Proxy(d,{get:(t,n,c)=>{const o=w===0&&r.get!=null?r.get(t,n,c):t[n];return typeof o=="object"&&o!==null?i(Array.isArray(o)?o.slice(0):{...o},h.concat(Array.isArray(t)?+n:n),w+1):o},set:(t,n,c)=>(r.onSet(t,h,n,c,t[n])&&(t[n]=c),!0)});return i(e,[],0)},ee=(e,r,i)=>{let d=null;typeof e=="number"?d=x(r,t=>({increment:n=>{t.set(+t.get()+(n??0))}})):typeof e=="boolean"?d=x(r,t=>({toggle:()=>{t.set(!t.get())}})):Array.isArray(e)?d=x(r,t=>({push:(...n)=>{t.set(t.get().concat(n))},unshift:(...n)=>{t.set(n.concat(t.get()))},update:n=>{const c=t.get(),o=G(c,n);o!==c&&t.set(o)},filter:n=>{t.set(t.get().filter(n??te))},add:n=>{t.get().includes(n)||t.set(t.get().concat([n]))},remove:n=>{const c=t.get().indexOf(n);if(c<0)return;const o=t.get().slice(0);o.splice(c,1),t.set(o)},toggle:(n,c)=>{const o=t.get().slice(),f=o.indexOf(n);f<0?c?o.unshift(n):o.push(n):o.splice(f,1),t.set(o)}})):e instanceof Set?d=x(r,t=>({add:n=>{t.set(new Set(t.get()).add(n))},delete:n=>{const c=new Set(t.get());c.delete(n),t.set(c)},toggle:n=>{const c=new Set(t.get());c.has(n)?c.delete(n):c.add(n),t.set(c)},clear:()=>{t.set(new Set)}})):e instanceof Object&&(d=x(r,t=>({setPartial:n=>t.set(c=>({...c,...typeof n=="function"?n(t.get()):n})),update:n=>{const c=t.get(),o=G(c,n);o!==c&&t.set(o)},setDeepPartial:(n,c,o,f=I.keyPathSeparator??".")=>{if(n.includes(f)){let A=n.split(f);const m=A[A.length-1];A=A.slice(0,-1);const b={...t.get()};let y=b,T=o;for(const p of A){let S=y[p];const P=T=T==null?void 0:T[Array.isArray(T)?"0":p];if(S==null&&(S=Array.isArray(P)?[]:{}),S==null||typeof S!="object"){t.do.setPartial({[n]:typeof c=="function"?c(void 0):c});return}y=y[p]=Array.isArray(S)?[...S]:{...S}}y[m]=typeof c=="function"?c(y[m]):c,t.set(b)}else t.do.setPartial({[n]:c})}})));const h=typeof i=="object"&&i!=null&&"do"in i?i.do((t,n)=>r.set(t,n),()=>r.get(),r,(t,n,c)=>r.setDeferred(t,n,c)):null,w={};return h&&Object.keys(h).forEach(t=>Object.defineProperty(w,t,{get:()=>h[t]})),d&&Object.keys(d).forEach(t=>Object.defineProperty(w,t,{get:()=>d[t]})),w},te=e=>e,x=(e,r,i)=>r(e),G=(e,r)=>{const i=Array.isArray(e)?e.slice(0):{...e};let d=!1;const h=K(e,{onSet:(w,t,n,c,o)=>{if(c===o)return!0;let f=i;d=!0;for(const A of t){const m=f[A];f=f[A]=Array.isArray(m)?m.slice(0):{...m}}return f[n]=c,!0}});return r(h),d?i:e};class H{constructor(r,i){const d=s=>n=s,h=()=>n,w=new Set,t=s=>s(f());let n=r,c,o=()=>{},f=()=>h(),A=null,m=()=>{const s=ee(r,b,i);return m=()=>s,s};const b=new Proxy(this,{get:(s,a)=>a==="do"?m():s[a],set:ne}),y=(s,a)=>{const D=typeof s=="function"?s(f()):s;if(!(D===f()||D===void 0||typeof D=="number"&&isNaN(D))){d(D),w.forEach(t,this);try{C.postMessage({key:l,value:h()})}catch{}a!==!0&&o(D)}};this.set=(s,a)=>y(s,a),this.get=()=>f(),this.initialValue=r,this.isInitialValue=()=>r===h(),this.subscribe=s=>(w.add(s),()=>{w.delete(s)}),this.reset=()=>{y(r,!0),w.forEach(t,this)};const T=(s,a)=>{y(s,a),c=void 0};if(this.setDeferred=(s,a=500,D,Q=!0)=>{Q&&c===void 0&&y(s,D),clearTimeout(c),c=setTimeout(T,a,s,D)},i==null)return b;let p=null,S=null,P=!0,N=!0,z=!1,B=-1,F=r instanceof Set?s=>new Set(s):s=>s,V=r instanceof Set?s=>{if(s instanceof Set)return Array.from(s);throw console.error(s),"The value is not Set instance"}:s=>s;if(typeof i=="string")p=i;else if("storeKey"in i)P=i.warnOnDuplicateStoreKey??P,N=i.listenStorageChanges??N,p=i.storeKey,F=i.unzipValue??F,V=i.zipValue??V,z=i.unchangable??z,S=i.exp??S;else return b;const l=`${L}${p}`,U=S===null||!(S(b,l in u)instanceof Date)?s=>JSON.stringify([V(s)]):s=>(A??(A={}),A.exp=S(b,l in u).getTime()+.2866,A.exp-Date.now()<24*60*60*1e3&&(clearTimeout(B),clearTimeout(R[l]),B=setTimeout(()=>this.reset(),A.exp-Date.now())),JSON.stringify([V(s),A])),W=s=>{const a=JSON.parse(s);return A=a[1],F(a[0])};let q=!0;if($[l]=b,u[`atom/${p}`]&&(u[l]||(u[l]=`[${u[`atom/${p}`]}]`),delete u[`atom/${p}`]),f=()=>{if(f=h,q){q=!1;try{d(l in u?W(u[l]):r)}catch{console.warn("Invalid json value",u[l])}}return h()},o=s=>{if(s===r){this.reset();return}u[l]=U(s)},this.reset=()=>{delete u[l],y(r,!0)},P&&_[l]!==void 0&&console.warn("Duplicate Atom key",p),N)if(z){let s=!1,a;E[l]=this,_[l]=()=>{clearTimeout(a),a=setTimeout(()=>s=!1,10),!s&&(s=!0,u[l]=U(h()))}}else _[l]=s=>{if(s.newValue===null){this.reset();return}try{y(W(s.newValue))}catch{console.warn("Invalid json value",s.newValue)}};return b}}let C;try{C=new BroadcastChannel("updateHere"),C.addEventListener("message",e=>{var r;(r=E[e.data.key])==null||r.set(e.data.value,!0)})}catch{}const u=window.localStorage,_={},E={},ne=(e,r)=>{throw`${r} is readonly property`};window.addEventListener("storage",e=>{var r;e.key===null||e.newValue===e.oldValue||(r=_[e.key])==null||r.call(_,e)});const se=u.setItem.bind(u),re=u.removeItem.bind(u);u.setItem=(e,r)=>{E[e]===void 0&&se.call(u,e,r)},u.removeItem=e=>{E[e]===void 0&&re.call(u,e)};const ce=/"exp":(\d+)\.2866/,L="atom\\",$={},R={};setTimeout(()=>{Object.keys(u).forEach(e=>{var i;if(!e.startsWith(L)||typeof u[e]!="string")return;const r=+((i=u[e].match(ce))==null?void 0:i[1]);r&&r-Date.now()<24*60*60*1e3&&(R[e]=setTimeout(()=>{$[e]?$[e].reset():delete u[e]},r-Date.now()))})},1e3),g.Atom=H,g.atom=O,g.configureAtomaric=X,g.configuredOptions=I,g.useAtom=k,g.useAtomDo=v,g.useAtomGet=Z,g.useAtomSet=M,g.useAtomSetDeferred=Y,g.useAtomValue=J,Object.defineProperty(g,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.39",
4
+ "version": "0.0.40",
5
5
  "type": "module",
6
6
  "main": "./build/atomaric.umd.cjs",
7
7
  "module": "./build/atomaric.js",
package/types/index.d.ts CHANGED
@@ -109,7 +109,9 @@ export type ArrayActions<Value> = UpdateAction<Value[]> & {
109
109
  filter: (filter?: (value: Value, index: number, array: Value[]) => any) => void;
110
110
  /** will add value if it doesn't exist, otherwise delete */
111
111
  toggle: (value: Value, isAddInStart?: boolean) => void;
112
- /** will delete item from array */
112
+ /** will add value if not exists */
113
+ add: (value: Value) => void;
114
+ /** will delete value from array */
113
115
  remove: (value: Value) => void;
114
116
  };
115
117