atomaric 0.0.26 → 0.0.28
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 +110 -97
- package/build/atomaric.umd.cjs +1 -1
- package/package.json +1 -1
- package/types/model.d.ts +10 -4
package/build/atomaric.js
CHANGED
|
@@ -1,179 +1,192 @@
|
|
|
1
|
-
const
|
|
1
|
+
const P = (n, e, c) => {
|
|
2
2
|
let u = null;
|
|
3
|
-
typeof
|
|
3
|
+
typeof n == "number" ? u = p(
|
|
4
4
|
{
|
|
5
|
-
increment: (
|
|
6
|
-
e.set(+e.get() + (
|
|
5
|
+
increment: (s) => {
|
|
6
|
+
e.set(+e.get() + (s ?? 0));
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
-
) : typeof
|
|
9
|
+
) : typeof n == "boolean" ? u = p(
|
|
10
10
|
{
|
|
11
11
|
toggle: () => {
|
|
12
12
|
e.set(!e.get());
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
) : Array.isArray(
|
|
15
|
+
) : Array.isArray(n) ? u = p(
|
|
16
16
|
{
|
|
17
|
-
push: (...
|
|
18
|
-
e.set(e.get().concat(
|
|
17
|
+
push: (...s) => {
|
|
18
|
+
e.set(e.get().concat(s));
|
|
19
19
|
},
|
|
20
|
-
unshift: (...
|
|
21
|
-
e.set(
|
|
20
|
+
unshift: (...s) => {
|
|
21
|
+
e.set(s.concat(e.get()));
|
|
22
22
|
},
|
|
23
|
-
update: (
|
|
23
|
+
update: (s) => {
|
|
24
24
|
const r = e.get().slice();
|
|
25
|
-
|
|
25
|
+
s(r), e.set(r);
|
|
26
26
|
},
|
|
27
|
-
filter: (
|
|
28
|
-
e.set(e.get().filter(
|
|
27
|
+
filter: (s) => {
|
|
28
|
+
e.set(e.get().filter(s ?? V));
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
-
) :
|
|
31
|
+
) : n instanceof Set ? u = p(
|
|
32
32
|
{
|
|
33
|
-
add: (
|
|
34
|
-
e.set(new Set(e.get()).add(
|
|
33
|
+
add: (s) => {
|
|
34
|
+
e.set(new Set(e.get()).add(s));
|
|
35
35
|
},
|
|
36
|
-
delete: (
|
|
36
|
+
delete: (s) => {
|
|
37
37
|
const r = new Set(e.get());
|
|
38
|
-
r.delete(
|
|
38
|
+
r.delete(s), e.set(r);
|
|
39
|
+
},
|
|
40
|
+
toggle: (s) => {
|
|
41
|
+
const r = new Set(e.get());
|
|
42
|
+
r.has(s) ? r.delete(s) : r.add(s), e.set(r);
|
|
39
43
|
},
|
|
40
44
|
clear: () => {
|
|
41
45
|
e.set(/* @__PURE__ */ new Set());
|
|
42
46
|
},
|
|
43
|
-
update: (
|
|
47
|
+
update: (s) => {
|
|
44
48
|
const r = new Set(e.get());
|
|
45
|
-
|
|
49
|
+
s(r), e.set(r);
|
|
46
50
|
}
|
|
47
51
|
}
|
|
48
|
-
) :
|
|
52
|
+
) : n instanceof Object && (u = p(
|
|
49
53
|
{
|
|
50
|
-
setPartial: (
|
|
54
|
+
setPartial: (s) => e.set((r) => ({
|
|
51
55
|
...r,
|
|
52
|
-
...typeof
|
|
56
|
+
...typeof s == "function" ? s(e.get()) : s
|
|
53
57
|
}))
|
|
54
58
|
}
|
|
55
59
|
));
|
|
56
60
|
const f = typeof c == "object" && c != null && "do" in c ? c.do(
|
|
57
|
-
(
|
|
61
|
+
(s, r) => e.set(s, r),
|
|
58
62
|
() => e.get(),
|
|
59
63
|
e,
|
|
60
|
-
(
|
|
64
|
+
(s, r, w) => e.setDeferred(s, r, w)
|
|
61
65
|
) : null, d = {};
|
|
62
|
-
return f && Object.keys(f).forEach((
|
|
63
|
-
(
|
|
66
|
+
return f && Object.keys(f).forEach((s) => Object.defineProperty(d, s, { get: () => f[s] })), u && Object.keys(u).forEach(
|
|
67
|
+
(s) => Object.defineProperty(d, s, { get: () => u[s] })
|
|
64
68
|
), d;
|
|
65
|
-
},
|
|
66
|
-
class
|
|
69
|
+
}, V = (n) => n, p = (n, e) => n;
|
|
70
|
+
class H {
|
|
67
71
|
constructor(e, c) {
|
|
68
|
-
const u = (
|
|
69
|
-
let r = e,
|
|
70
|
-
},
|
|
71
|
-
const
|
|
72
|
-
return
|
|
72
|
+
const u = (t) => r = t, f = () => r, d = /* @__PURE__ */ new Set(), s = (t) => t(S());
|
|
73
|
+
let r = e, w, $ = () => {
|
|
74
|
+
}, S = () => f(), g = null, k = () => {
|
|
75
|
+
const t = P(e, _, c);
|
|
76
|
+
return k = () => t, t;
|
|
73
77
|
};
|
|
74
|
-
const
|
|
75
|
-
get: (
|
|
76
|
-
set:
|
|
77
|
-
}),
|
|
78
|
-
const a = typeof
|
|
79
|
-
if (!(a ===
|
|
80
|
-
u(a), d.forEach(
|
|
78
|
+
const _ = new Proxy(this, {
|
|
79
|
+
get: (t, l) => l === "do" ? k() : t[l],
|
|
80
|
+
set: L
|
|
81
|
+
}), b = (t, l) => {
|
|
82
|
+
const a = typeof t == "function" ? t(S()) : t;
|
|
83
|
+
if (!(a === S() || a === void 0 || typeof a == "number" && isNaN(a))) {
|
|
84
|
+
u(a), d.forEach(s, this);
|
|
81
85
|
try {
|
|
82
|
-
|
|
86
|
+
C.postMessage({ key: i, value: f() });
|
|
83
87
|
} catch {
|
|
84
88
|
}
|
|
85
|
-
l !== !0 &&
|
|
89
|
+
l !== !0 && $(a);
|
|
86
90
|
}
|
|
87
91
|
};
|
|
88
|
-
|
|
89
|
-
d.delete(
|
|
92
|
+
this.set = (t, l) => b(t, l), this.get = () => S(), this.initialValue = e, this.isInitialValue = () => e === f(), this.subscribe = (t) => (d.add(t), () => {
|
|
93
|
+
d.delete(t);
|
|
90
94
|
}), this.reset = () => {
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
95
|
+
b(e, !0), d.forEach(s, this);
|
|
96
|
+
};
|
|
97
|
+
const J = (t, l) => {
|
|
98
|
+
b(t, l), w = void 0;
|
|
99
|
+
};
|
|
100
|
+
if (this.setDeferred = (t, l = 500, a, z = !0) => {
|
|
101
|
+
z && w === void 0 && b(t, a), clearTimeout(w), w = setTimeout(J, l, t, a);
|
|
102
|
+
}, c == null) return _;
|
|
103
|
+
let h = null, y = null, I = !0, x = !0, j = !1, E = e instanceof Set ? (t) => new Set(t) : (t) => t, m = e instanceof Set ? (t) => {
|
|
104
|
+
if (t instanceof Set) return Array.from(t);
|
|
105
|
+
throw console.error(t), "The value is not Set instance";
|
|
106
|
+
} : (t) => t;
|
|
107
|
+
if (typeof c == "string")
|
|
108
|
+
h = c;
|
|
109
|
+
else if ("storeKey" in c)
|
|
110
|
+
I = c.warnOnDuplicateStoreKey ?? I, x = c.listenStorageChanges ?? x, h = c.storeKey, E = c.unzipValue ?? E, m = c.zipValue ?? m, j = c.unchangable ?? j, y = c.exp ?? y;
|
|
111
|
+
else return _;
|
|
112
|
+
const v = y === null || !(y() instanceof Date) ? (t) => JSON.stringify([m(t)]) : (t) => (g ?? (g = {}), g.exp = y().getTime(), JSON.stringify([m(t), g])), T = (t) => {
|
|
113
|
+
const l = JSON.parse(t);
|
|
114
|
+
return g = l[1], g != null && g.exp != null && g.exp < Date.now() ? (this.reset(), e) : E(l[0]);
|
|
115
|
+
}, i = `atom\\${h}`;
|
|
103
116
|
let N = !0;
|
|
104
|
-
if (h = () => {
|
|
105
|
-
if (
|
|
117
|
+
if (o[`atom/${h}`] && (this.set(T(`[${o[`atom/${h}`]}]`)), delete o[`atom/${h}`]), S = () => {
|
|
118
|
+
if (S = f, N) {
|
|
106
119
|
N = !1;
|
|
107
120
|
try {
|
|
108
|
-
u(i in o ?
|
|
121
|
+
u(i in o ? T(o[i]) : e);
|
|
109
122
|
} catch {
|
|
110
123
|
console.warn("Invalid json value", o[i]);
|
|
111
124
|
}
|
|
112
125
|
}
|
|
113
126
|
return f();
|
|
114
|
-
},
|
|
115
|
-
if (
|
|
127
|
+
}, $ = (t) => {
|
|
128
|
+
if (t === e) {
|
|
116
129
|
this.reset();
|
|
117
130
|
return;
|
|
118
131
|
}
|
|
119
|
-
o[i] =
|
|
132
|
+
o[i] = v(t);
|
|
120
133
|
}, this.reset = () => {
|
|
121
|
-
delete o[i],
|
|
122
|
-
},
|
|
123
|
-
if (
|
|
124
|
-
let
|
|
125
|
-
|
|
126
|
-
clearTimeout(l), l = setTimeout(() =>
|
|
134
|
+
delete o[i], b(e, !0);
|
|
135
|
+
}, I && A[i] !== void 0 && console.warn("Duplicate Atom key", h), x)
|
|
136
|
+
if (j) {
|
|
137
|
+
let t = !1, l;
|
|
138
|
+
D[i] = this, A[i] = () => {
|
|
139
|
+
clearTimeout(l), l = setTimeout(() => t = !1, 10), !t && (t = !0, o[i] = v(f()));
|
|
127
140
|
};
|
|
128
141
|
} else
|
|
129
|
-
|
|
130
|
-
if (
|
|
142
|
+
A[i] = (t) => {
|
|
143
|
+
if (t.newValue === null) {
|
|
131
144
|
this.reset();
|
|
132
145
|
return;
|
|
133
146
|
}
|
|
134
147
|
try {
|
|
135
|
-
|
|
148
|
+
b(T(t.newValue));
|
|
136
149
|
} catch {
|
|
137
|
-
console.warn("Invalid json value",
|
|
150
|
+
console.warn("Invalid json value", t.newValue);
|
|
138
151
|
}
|
|
139
152
|
};
|
|
140
|
-
return
|
|
153
|
+
return _;
|
|
141
154
|
}
|
|
142
155
|
}
|
|
143
|
-
let
|
|
156
|
+
let C;
|
|
144
157
|
try {
|
|
145
|
-
|
|
158
|
+
C = new BroadcastChannel("updateHere"), C.addEventListener("message", (n) => {
|
|
146
159
|
var e;
|
|
147
|
-
(e =
|
|
160
|
+
(e = D[n.data.key]) == null || e.set(n.data.value, !0);
|
|
148
161
|
});
|
|
149
162
|
} catch {
|
|
150
163
|
}
|
|
151
|
-
const o = window.localStorage,
|
|
164
|
+
const o = window.localStorage, A = {}, D = {}, L = (n, e) => {
|
|
152
165
|
throw `${e} is readonly property`;
|
|
153
166
|
};
|
|
154
|
-
window.addEventListener("storage", (
|
|
167
|
+
window.addEventListener("storage", (n) => {
|
|
155
168
|
var e;
|
|
156
|
-
|
|
169
|
+
n.key === null || n.newValue === n.oldValue || (e = A[n.key]) == null || e.call(A, n);
|
|
157
170
|
});
|
|
158
|
-
const
|
|
159
|
-
o.setItem = (
|
|
160
|
-
|
|
171
|
+
const B = o.setItem.bind(o), G = o.removeItem.bind(o);
|
|
172
|
+
o.setItem = (n, e) => {
|
|
173
|
+
D[n] === void 0 && B.call(o, n, e);
|
|
161
174
|
};
|
|
162
|
-
o.removeItem = (
|
|
163
|
-
|
|
175
|
+
o.removeItem = (n) => {
|
|
176
|
+
D[n] === void 0 && G.call(o, n);
|
|
164
177
|
};
|
|
165
|
-
let
|
|
178
|
+
let F = () => {
|
|
166
179
|
throw "call configureAtomaric() before all!";
|
|
167
180
|
};
|
|
168
|
-
const
|
|
181
|
+
const q = (n) => F = n.useSyncExternalStore, M = (n) => F(n.subscribe, n.get), U = (n) => n.set, Q = (n) => n.setDeferred, R = (n) => n.get, W = (n) => n.do, X = (n) => [M(n), U(n)], Y = (n, e) => new H(n, e);
|
|
169
182
|
export {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
183
|
+
H as Atom,
|
|
184
|
+
Y as atom,
|
|
185
|
+
q as configureAtomaric,
|
|
186
|
+
X as useAtom,
|
|
187
|
+
W as useAtomDo,
|
|
188
|
+
R as useAtomGet,
|
|
189
|
+
U as useAtomSet,
|
|
190
|
+
Q as useAtomSetDeferred,
|
|
191
|
+
M as useAtomValue
|
|
179
192
|
};
|
package/build/atomaric.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(u,y){typeof exports=="object"&&typeof module<"u"?y(exports):typeof define=="function"&&define.amd?define(["exports"],y):(u=typeof globalThis<"u"?globalThis:u||self,y(u.atomaric={}))})(this,function(u){"use strict";const y=(n,e,c)=>{let i=null;typeof n=="number"?i=p({increment:s=>{e.set(+e.get()+(s??0))}}):typeof n=="boolean"?i=p({toggle:()=>{e.set(!e.get())}}):Array.isArray(n)?i=p({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??L))}}):n instanceof Set?i=p({add:s=>{e.set(new Set(e.get()).add(s))},delete:s=>{const r=new Set(e.get());r.delete(s),e.set(r)},toggle:s=>{const r=new Set(e.get());r.has(s)?r.delete(s):r.add(s),e.set(r)},clear:()=>{e.set(new Set)},update:s=>{const r=new Set(e.get());s(r),e.set(r)}}):n instanceof Object&&(i=p({setPartial:s=>e.set(r=>({...r,...typeof s=="function"?s(e.get()):s}))}));const a=typeof c=="object"&&c!=null&&"do"in c?c.do((s,r)=>e.set(s,r),()=>e.get(),e,(s,r,A)=>e.setDeferred(s,r,A)):null,g={};return a&&Object.keys(a).forEach(s=>Object.defineProperty(g,s,{get:()=>a[s]})),i&&Object.keys(i).forEach(s=>Object.defineProperty(g,s,{get:()=>i[s]})),g},L=n=>n,p=(n,e)=>n;class N{constructor(e,c){const i=t=>r=t,a=()=>r,g=new Set,s=t=>t(b());let r=e,A,x=()=>{},b=()=>a(),h=null,F=()=>{const t=y(e,I,c);return F=()=>t,t};const I=new Proxy(this,{get:(t,l)=>l==="do"?F():t[l],set:M}),m=(t,l)=>{const d=typeof t=="function"?t(b()):t;if(!(d===b()||d===void 0||typeof d=="number"&&isNaN(d))){i(d),g.forEach(s,this);try{j.postMessage({key:f,value:a()})}catch{}l!==!0&&x(d)}};this.set=(t,l)=>m(t,l),this.get=()=>b(),this.initialValue=e,this.isInitialValue=()=>e===a(),this.subscribe=t=>(g.add(t),()=>{g.delete(t)}),this.reset=()=>{m(e,!0),g.forEach(s,this)};const Z=(t,l)=>{m(t,l),A=void 0};if(this.setDeferred=(t,l=500,d,H=!0)=>{H&&A===void 0&&m(t,d),clearTimeout(A),A=setTimeout(Z,l,t,d)},c==null)return I;let S=null,_=null,E=!0,C=!0,v=!1,$=e instanceof Set?t=>new Set(t):t=>t,T=e instanceof Set?t=>{if(t instanceof Set)return Array.from(t);throw console.error(t),"The value is not Set instance"}:t=>t;if(typeof c=="string")S=c;else if("storeKey"in c)E=c.warnOnDuplicateStoreKey??E,C=c.listenStorageChanges??C,S=c.storeKey,$=c.unzipValue??$,T=c.zipValue??T,v=c.unchangable??v,_=c.exp??_;else return I;const J=_===null||!(_()instanceof Date)?t=>JSON.stringify([T(t)]):t=>(h??(h={}),h.exp=_().getTime(),JSON.stringify([T(t),h])),k=t=>{const l=JSON.parse(t);return h=l[1],h!=null&&h.exp!=null&&h.exp<Date.now()?(this.reset(),e):$(l[0])},f=`atom\\${S}`;let G=!0;if(o[`atom/${S}`]&&(this.set(k(`[${o[`atom/${S}`]}]`)),delete o[`atom/${S}`]),b=()=>{if(b=a,G){G=!1;try{i(f in o?k(o[f]):e)}catch{console.warn("Invalid json value",o[f])}}return a()},x=t=>{if(t===e){this.reset();return}o[f]=J(t)},this.reset=()=>{delete o[f],m(e,!0)},E&&w[f]!==void 0&&console.warn("Duplicate Atom key",S),C)if(v){let t=!1,l;D[f]=this,w[f]=()=>{clearTimeout(l),l=setTimeout(()=>t=!1,10),!t&&(t=!0,o[f]=J(a()))}}else w[f]=t=>{if(t.newValue===null){this.reset();return}try{m(k(t.newValue))}catch{console.warn("Invalid json value",t.newValue)}};return I}}let j;try{j=new BroadcastChannel("updateHere"),j.addEventListener("message",n=>{var e;(e=D[n.data.key])==null||e.set(n.data.value,!0)})}catch{}const o=window.localStorage,w={},D={},M=(n,e)=>{throw`${e} is readonly property`};window.addEventListener("storage",n=>{var e;n.key===null||n.newValue===n.oldValue||(e=w[n.key])==null||e.call(w,n)});const B=o.setItem.bind(o),U=o.removeItem.bind(o);o.setItem=(n,e)=>{D[n]===void 0&&B.call(o,n,e)},o.removeItem=n=>{D[n]===void 0&&U.call(o,n)};let z=()=>{throw"call configureAtomaric() before all!"};const q=n=>z=n.useSyncExternalStore,P=n=>z(n.subscribe,n.get),V=n=>n.set,Q=n=>n.setDeferred,R=n=>n.get,W=n=>n.do,X=n=>[P(n),V(n)],Y=(n,e)=>new N(n,e);u.Atom=N,u.atom=Y,u.configureAtomaric=q,u.useAtom=X,u.useAtomDo=W,u.useAtomGet=R,u.useAtomSet=V,u.useAtomSetDeferred=Q,u.useAtomValue=P,Object.defineProperty(u,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
package/types/model.d.ts
CHANGED
|
@@ -11,12 +11,16 @@ export type AtomOptions<Value, Actions extends Record<string, Function> = {}> =
|
|
|
11
11
|
* **default: true**
|
|
12
12
|
*/
|
|
13
13
|
listenStorageChanges?: boolean;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
|
|
15
|
+
/** zip Value to stringifiable value */
|
|
16
|
+
zipValue?: (value: Value) => any;
|
|
17
|
+
/** unzip stringifiable value to Value */
|
|
18
|
+
unzipValue?: (packedValue: any) => Value;
|
|
19
|
+
|
|
18
20
|
/** make your localStorage value unchangable */
|
|
19
21
|
unchangable?: true;
|
|
22
|
+
/** return value expire Date */
|
|
23
|
+
exp?: () => Date;
|
|
20
24
|
} & (
|
|
21
25
|
| {
|
|
22
26
|
/** save in localStorage by this key */
|
|
@@ -70,6 +74,8 @@ export type SetActions<Value> = UpdateAction<Value> & {
|
|
|
70
74
|
add: (value: Value) => void;
|
|
71
75
|
/** like the Set.prototype.delete() method */
|
|
72
76
|
delete: (value: Value) => void;
|
|
77
|
+
/** will add value if it doesn't exist, otherwise delete */
|
|
78
|
+
toggle: (value: Value) => void;
|
|
73
79
|
/** like the Set.prototype.clear() method */
|
|
74
80
|
clear: () => void;
|
|
75
81
|
};
|