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