react-shared-states 2.0.0 → 2.0.1
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/dist/hooks/use-shared-subscription.d.ts +6 -2
- package/dist/main.esm.js +206 -204
- package/dist/main.min.js +2 -2
- package/package.json +1 -1
|
@@ -8,7 +8,7 @@ export declare namespace SubscriberEvents {
|
|
|
8
8
|
}
|
|
9
9
|
export type Subscriber<T> = (set: SubscriberEvents.Set<T>, onError: SubscriberEvents.OnError, onCompletion: SubscriberEvents.OnCompletion) => PotentialPromise<Unsubscribe | void | undefined>;
|
|
10
10
|
export type SharedSubscriptionValue<T> = {
|
|
11
|
-
data
|
|
11
|
+
data: T;
|
|
12
12
|
isLoading: boolean;
|
|
13
13
|
error?: unknown;
|
|
14
14
|
subscribed?: boolean;
|
|
@@ -19,8 +19,12 @@ interface SharedSubscription<T> extends SharedSubscriptionValue<T> {
|
|
|
19
19
|
export declare const sharedSubscriptionsApi: SharedValuesApi<SharedSubscription<any>>;
|
|
20
20
|
interface SharedSubscriptionCreated<T> extends SharedCreated {
|
|
21
21
|
subscriber: Subscriber<T>;
|
|
22
|
+
triggerImmediately?: boolean;
|
|
22
23
|
}
|
|
23
|
-
export declare const createSharedSubscription: <T>(subscriber: Subscriber<T>,
|
|
24
|
+
export declare const createSharedSubscription: <T>(subscriber: Subscriber<T>, options?: {
|
|
25
|
+
initialValue?: T;
|
|
26
|
+
triggerImmediately?: boolean;
|
|
27
|
+
}, scopeName?: Prefix) => SharedSubscriptionCreated<T>;
|
|
24
28
|
export type SharedSubscriptionStateReturn<T> = {
|
|
25
29
|
readonly state: NonNullable<SharedSubscriptionValue<T>>;
|
|
26
30
|
readonly trigger: () => void;
|
package/dist/main.esm.js
CHANGED
|
@@ -1,60 +1,60 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* react-shared-states v2.0.
|
|
2
|
+
* react-shared-states v2.0.1
|
|
3
3
|
* (c) Hichem Taboukouyout
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
* Github: github.com/HichemTab-tech/react-shared-states
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { jsx as
|
|
9
|
-
import { createContext as
|
|
10
|
-
let
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
},
|
|
14
|
-
|
|
8
|
+
import { jsx as M } from "react/jsx-runtime";
|
|
9
|
+
import { createContext as T, useMemo as b, useContext as W, useEffect as P, useSyncExternalStore as _, useRef as k } from "react";
|
|
10
|
+
let z = !1;
|
|
11
|
+
const Z = (o) => {
|
|
12
|
+
z = o;
|
|
13
|
+
}, K = (...o) => {
|
|
14
|
+
z && console.log(
|
|
15
15
|
"%c[react-shared-states]",
|
|
16
16
|
"color: #007acc; font-weight: bold",
|
|
17
17
|
...o
|
|
18
18
|
);
|
|
19
|
-
},
|
|
19
|
+
}, E = (o) => {
|
|
20
20
|
if (!o) throw new Error("Value is empty");
|
|
21
21
|
return o;
|
|
22
|
-
},
|
|
22
|
+
}, G = () => Math.random().toString(36).substring(2, 15), I = T(void 0), N = ({ children: o, scopeName: t }) => {
|
|
23
23
|
if (t && t.includes("//")) throw new Error("scopeName cannot contain '//'");
|
|
24
|
-
return t || (t = b(() =>
|
|
25
|
-
},
|
|
26
|
-
class
|
|
24
|
+
return t || (t = b(() => G(), [])), /* @__PURE__ */ M(I.Provider, { value: { scopeName: t }, children: o });
|
|
25
|
+
}, H = () => W(I), B = [];
|
|
26
|
+
class l {
|
|
27
27
|
constructor(t = () => null) {
|
|
28
28
|
this.defaultValue = t;
|
|
29
29
|
}
|
|
30
30
|
data = /* @__PURE__ */ new Map();
|
|
31
31
|
addListener(t, n, e) {
|
|
32
|
-
const i =
|
|
33
|
-
|
|
32
|
+
const i = l.prefix(t, n), r = this.data.get(i);
|
|
33
|
+
r && r.listeners.push(e);
|
|
34
34
|
}
|
|
35
35
|
removeListener(t, n, e) {
|
|
36
|
-
const i =
|
|
37
|
-
|
|
36
|
+
const i = l.prefix(t, n), r = this.data.get(i);
|
|
37
|
+
r && (r.listeners = r.listeners.filter((s) => s !== e));
|
|
38
38
|
}
|
|
39
39
|
callListeners(t, n) {
|
|
40
|
-
const e =
|
|
41
|
-
i && i.listeners.forEach((
|
|
40
|
+
const e = l.prefix(t, n), i = this.data.get(e);
|
|
41
|
+
i && i.listeners.forEach((r) => r());
|
|
42
42
|
}
|
|
43
43
|
init(t, n, e, i = !1) {
|
|
44
|
-
const
|
|
45
|
-
this.data.has(
|
|
44
|
+
const r = l.prefix(t, n);
|
|
45
|
+
this.data.has(r) || this.data.set(r, {
|
|
46
46
|
value: e,
|
|
47
47
|
isStatic: i || void 0,
|
|
48
48
|
listeners: []
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
createStatic(t, n, e) {
|
|
52
|
-
const i = e ?? "_global",
|
|
53
|
-
key:
|
|
52
|
+
const i = e ?? "_global", r = {
|
|
53
|
+
key: G(),
|
|
54
54
|
prefix: i,
|
|
55
55
|
...t
|
|
56
56
|
};
|
|
57
|
-
return
|
|
57
|
+
return B.push(r), this.init(r.key, r.prefix, n, !0), this.defaultValue = () => n, r;
|
|
58
58
|
}
|
|
59
59
|
initStatic(t) {
|
|
60
60
|
const { key: n, prefix: e } = t;
|
|
@@ -62,17 +62,17 @@ class d {
|
|
|
62
62
|
}
|
|
63
63
|
clearAll(t = !1, n = !1) {
|
|
64
64
|
this.data.forEach((e, i) => {
|
|
65
|
-
const [
|
|
66
|
-
this.clear(
|
|
65
|
+
const [r, s] = l.extractPrefix(i);
|
|
66
|
+
this.clear(s, r, t, n);
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
clear(t, n, e = !1, i = !1) {
|
|
70
|
-
const
|
|
70
|
+
const r = l.prefix(t, n);
|
|
71
71
|
e || this.callListeners(t, n);
|
|
72
|
-
const
|
|
73
|
-
if (
|
|
74
|
-
const
|
|
75
|
-
|
|
72
|
+
const s = this.data.get(r);
|
|
73
|
+
if (s && (this.data.delete(r), s.isStatic && !i)) {
|
|
74
|
+
const a = B.find((c) => c.key === t && c.prefix === n);
|
|
75
|
+
a && this.initStatic(a);
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
get(t, n) {
|
|
@@ -81,11 +81,11 @@ class d {
|
|
|
81
81
|
return this.data.get(e);
|
|
82
82
|
}
|
|
83
83
|
setValue(t, n, e) {
|
|
84
|
-
const i =
|
|
85
|
-
|
|
84
|
+
const i = l.prefix(t, n), r = this.data.get(i);
|
|
85
|
+
r && (r.value = e, this.data.set(i, r));
|
|
86
86
|
}
|
|
87
87
|
has(t, n) {
|
|
88
|
-
return this.data.has(
|
|
88
|
+
return this.data.has(l.prefix(t, n)) ? l.prefix(t, n) : this.data.has(l.prefix(t, "_global")) ? l.prefix(t, "_global") : void 0;
|
|
89
89
|
}
|
|
90
90
|
static prefix(t, n) {
|
|
91
91
|
if (t.includes("//")) throw new Error("key cannot contain '//'");
|
|
@@ -96,28 +96,28 @@ class d {
|
|
|
96
96
|
return [n[0], n.slice(1).join("//")];
|
|
97
97
|
}
|
|
98
98
|
useEffect(t, n, e = null) {
|
|
99
|
-
|
|
100
|
-
e?.(),
|
|
99
|
+
P(() => () => {
|
|
100
|
+
e?.(), K(`[${l.prefix(t, n)}]`, "unmount effect");
|
|
101
101
|
const i = this.get(t, n);
|
|
102
102
|
i && i.listeners?.length === 0 && this.clear(t, n);
|
|
103
103
|
}, [t, n]);
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
-
class
|
|
106
|
+
class q {
|
|
107
107
|
constructor(t) {
|
|
108
108
|
this.sharedData = t;
|
|
109
109
|
}
|
|
110
110
|
_get(t, n) {
|
|
111
111
|
let e, i = n;
|
|
112
112
|
if (typeof t != "string") {
|
|
113
|
-
const { key:
|
|
114
|
-
e =
|
|
113
|
+
const { key: a, prefix: c } = t;
|
|
114
|
+
e = a, i = c;
|
|
115
115
|
} else
|
|
116
|
-
e =
|
|
117
|
-
const
|
|
118
|
-
return
|
|
116
|
+
e = E(t);
|
|
117
|
+
const r = i || "_global", s = this.sharedData.get(e, r);
|
|
118
|
+
return s ? { value: s.value, key: e, prefix: r } : {
|
|
119
119
|
key: e,
|
|
120
|
-
prefix:
|
|
120
|
+
prefix: r,
|
|
121
121
|
value: void 0
|
|
122
122
|
};
|
|
123
123
|
}
|
|
@@ -125,20 +125,20 @@ class K {
|
|
|
125
125
|
return this._get(t, n).value;
|
|
126
126
|
}
|
|
127
127
|
set(t, n, e) {
|
|
128
|
-
let i,
|
|
128
|
+
let i, r = e;
|
|
129
129
|
if (typeof t != "string") {
|
|
130
|
-
const { key:
|
|
131
|
-
i =
|
|
130
|
+
const { key: a, prefix: c } = t;
|
|
131
|
+
i = a, r = c;
|
|
132
132
|
} else
|
|
133
|
-
i =
|
|
134
|
-
const
|
|
135
|
-
this.sharedData.init(i,
|
|
133
|
+
i = E(t);
|
|
134
|
+
const s = r || "_global";
|
|
135
|
+
this.sharedData.init(i, s, n), this.sharedData.setValue(i, s, n), this.sharedData.callListeners(i, s);
|
|
136
136
|
}
|
|
137
137
|
update(t, n, e) {
|
|
138
138
|
const i = this._get(t, e);
|
|
139
139
|
if (i) {
|
|
140
|
-
const
|
|
141
|
-
this.set(i.key,
|
|
140
|
+
const r = n(i.value);
|
|
141
|
+
this.set(i.key, r, i.prefix);
|
|
142
142
|
}
|
|
143
143
|
}
|
|
144
144
|
clearAll() {
|
|
@@ -147,8 +147,8 @@ class K {
|
|
|
147
147
|
clearScope(t) {
|
|
148
148
|
const n = t || "_global";
|
|
149
149
|
this.sharedData.data.forEach((e, i) => {
|
|
150
|
-
const [
|
|
151
|
-
|
|
150
|
+
const [r, s] = l.extractPrefix(i);
|
|
151
|
+
r === n && (this.sharedData.clear(s, r), this.sharedData.callListeners(s, r));
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
154
|
resolve(t) {
|
|
@@ -166,243 +166,245 @@ class K {
|
|
|
166
166
|
getAll() {
|
|
167
167
|
const t = {};
|
|
168
168
|
return this.sharedData.data.forEach((n, e) => {
|
|
169
|
-
const [i,
|
|
170
|
-
t[i] = t[i] || {}, t[i][
|
|
169
|
+
const [i, r] = l.extractPrefix(e);
|
|
170
|
+
t[i] = t[i] || {}, t[i][r] = n.value;
|
|
171
171
|
}), t;
|
|
172
172
|
}
|
|
173
173
|
subscribe(t, n, e) {
|
|
174
|
-
let i,
|
|
175
|
-
return typeof t == "string" ? (i = t,
|
|
176
|
-
this.sharedData.removeListener(i,
|
|
174
|
+
let i, r;
|
|
175
|
+
return typeof t == "string" ? (i = t, r = e || "_global") : (i = t.key, r = t.prefix), this.sharedData.addListener(i, r, n), () => {
|
|
176
|
+
this.sharedData.removeListener(i, r, n);
|
|
177
177
|
};
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
const j = (o) => {
|
|
181
|
-
const t =
|
|
181
|
+
const t = H();
|
|
182
182
|
return {
|
|
183
183
|
prefix: o ?? t?.scopeName ?? "_global"
|
|
184
184
|
};
|
|
185
185
|
};
|
|
186
|
-
function
|
|
186
|
+
function J(o) {
|
|
187
187
|
return o && o.__esModule && Object.prototype.hasOwnProperty.call(o, "default") ? o.default : o;
|
|
188
188
|
}
|
|
189
|
-
var C,
|
|
190
|
-
function
|
|
191
|
-
if (
|
|
192
|
-
|
|
189
|
+
var C, R;
|
|
190
|
+
function Q() {
|
|
191
|
+
if (R) return C;
|
|
192
|
+
R = 1;
|
|
193
193
|
var o = typeof Element < "u", t = typeof Map == "function", n = typeof Set == "function", e = typeof ArrayBuffer == "function" && !!ArrayBuffer.isView;
|
|
194
|
-
function i(
|
|
195
|
-
if (
|
|
196
|
-
if (
|
|
197
|
-
if (
|
|
198
|
-
var
|
|
199
|
-
if (Array.isArray(
|
|
200
|
-
if (
|
|
201
|
-
for (
|
|
202
|
-
if (!i(
|
|
194
|
+
function i(r, s) {
|
|
195
|
+
if (r === s) return !0;
|
|
196
|
+
if (r && s && typeof r == "object" && typeof s == "object") {
|
|
197
|
+
if (r.constructor !== s.constructor) return !1;
|
|
198
|
+
var a, c, d;
|
|
199
|
+
if (Array.isArray(r)) {
|
|
200
|
+
if (a = r.length, a != s.length) return !1;
|
|
201
|
+
for (c = a; c-- !== 0; )
|
|
202
|
+
if (!i(r[c], s[c])) return !1;
|
|
203
203
|
return !0;
|
|
204
204
|
}
|
|
205
|
-
var
|
|
206
|
-
if (t &&
|
|
207
|
-
if (
|
|
208
|
-
for (
|
|
209
|
-
if (!
|
|
210
|
-
for (
|
|
211
|
-
if (!i(
|
|
205
|
+
var u;
|
|
206
|
+
if (t && r instanceof Map && s instanceof Map) {
|
|
207
|
+
if (r.size !== s.size) return !1;
|
|
208
|
+
for (u = r.entries(); !(c = u.next()).done; )
|
|
209
|
+
if (!s.has(c.value[0])) return !1;
|
|
210
|
+
for (u = r.entries(); !(c = u.next()).done; )
|
|
211
|
+
if (!i(c.value[1], s.get(c.value[0]))) return !1;
|
|
212
212
|
return !0;
|
|
213
213
|
}
|
|
214
|
-
if (n &&
|
|
215
|
-
if (
|
|
216
|
-
for (
|
|
217
|
-
if (!
|
|
214
|
+
if (n && r instanceof Set && s instanceof Set) {
|
|
215
|
+
if (r.size !== s.size) return !1;
|
|
216
|
+
for (u = r.entries(); !(c = u.next()).done; )
|
|
217
|
+
if (!s.has(c.value[0])) return !1;
|
|
218
218
|
return !0;
|
|
219
219
|
}
|
|
220
|
-
if (e && ArrayBuffer.isView(
|
|
221
|
-
if (
|
|
222
|
-
for (
|
|
223
|
-
if (
|
|
220
|
+
if (e && ArrayBuffer.isView(r) && ArrayBuffer.isView(s)) {
|
|
221
|
+
if (a = r.length, a != s.length) return !1;
|
|
222
|
+
for (c = a; c-- !== 0; )
|
|
223
|
+
if (r[c] !== s[c]) return !1;
|
|
224
224
|
return !0;
|
|
225
225
|
}
|
|
226
|
-
if (
|
|
227
|
-
if (
|
|
228
|
-
if (
|
|
229
|
-
if (
|
|
230
|
-
for (
|
|
231
|
-
if (!Object.prototype.hasOwnProperty.call(
|
|
232
|
-
if (o &&
|
|
233
|
-
for (
|
|
234
|
-
if (!((
|
|
226
|
+
if (r.constructor === RegExp) return r.source === s.source && r.flags === s.flags;
|
|
227
|
+
if (r.valueOf !== Object.prototype.valueOf && typeof r.valueOf == "function" && typeof s.valueOf == "function") return r.valueOf() === s.valueOf();
|
|
228
|
+
if (r.toString !== Object.prototype.toString && typeof r.toString == "function" && typeof s.toString == "function") return r.toString() === s.toString();
|
|
229
|
+
if (d = Object.keys(r), a = d.length, a !== Object.keys(s).length) return !1;
|
|
230
|
+
for (c = a; c-- !== 0; )
|
|
231
|
+
if (!Object.prototype.hasOwnProperty.call(s, d[c])) return !1;
|
|
232
|
+
if (o && r instanceof Element) return !1;
|
|
233
|
+
for (c = a; c-- !== 0; )
|
|
234
|
+
if (!((d[c] === "_owner" || d[c] === "__v" || d[c] === "__o") && r.$$typeof) && !i(r[d[c]], s[d[c]]))
|
|
235
235
|
return !1;
|
|
236
236
|
return !0;
|
|
237
237
|
}
|
|
238
|
-
return
|
|
238
|
+
return r !== r && s !== s;
|
|
239
239
|
}
|
|
240
|
-
return C = function(
|
|
240
|
+
return C = function(s, a) {
|
|
241
241
|
try {
|
|
242
|
-
return i(
|
|
243
|
-
} catch (
|
|
244
|
-
if ((
|
|
242
|
+
return i(s, a);
|
|
243
|
+
} catch (c) {
|
|
244
|
+
if ((c.message || "").match(/stack|recursion/i))
|
|
245
245
|
return console.warn("react-fast-compare cannot handle circular refs"), !1;
|
|
246
|
-
throw
|
|
246
|
+
throw c;
|
|
247
247
|
}
|
|
248
248
|
}, C;
|
|
249
249
|
}
|
|
250
|
-
var
|
|
251
|
-
const
|
|
252
|
-
function
|
|
253
|
-
let e, i,
|
|
250
|
+
var U = Q();
|
|
251
|
+
const V = /* @__PURE__ */ J(U), h = new l(), ee = new q(h), te = (o, t) => h.createStatic({ initialValue: o }, o, t);
|
|
252
|
+
function re(o, t, n) {
|
|
253
|
+
let e, i, r = n;
|
|
254
254
|
if (typeof o != "string") {
|
|
255
255
|
const { key: f, initialValue: v, prefix: x } = o;
|
|
256
|
-
e = f, i = v,
|
|
256
|
+
e = f, i = v, r = x;
|
|
257
257
|
} else
|
|
258
|
-
e =
|
|
259
|
-
const { prefix:
|
|
260
|
-
h.init(e,
|
|
261
|
-
const
|
|
262
|
-
h.removeListener(e,
|
|
263
|
-
}), [e,
|
|
264
|
-
const v = typeof f == "function" ? f(h.get(e,
|
|
265
|
-
|
|
258
|
+
e = E(o), i = t;
|
|
259
|
+
const { prefix: s } = j(r);
|
|
260
|
+
h.init(e, s, i);
|
|
261
|
+
const a = b(() => (f) => (h.init(e, s, t), h.addListener(e, s, f), () => {
|
|
262
|
+
h.removeListener(e, s, f);
|
|
263
|
+
}), [e, s, t]), c = b(() => () => h.get(e, s)?.value, [e, s]), d = _(a, c), u = (f) => {
|
|
264
|
+
const v = typeof f == "function" ? f(h.get(e, s)?.value) : f;
|
|
265
|
+
V(v, d) || (h.setValue(e, s, v), h.callListeners(e, s));
|
|
266
266
|
};
|
|
267
|
-
return h.useEffect(e,
|
|
268
|
-
|
|
269
|
-
|
|
267
|
+
return h.useEffect(e, s), [
|
|
268
|
+
d,
|
|
269
|
+
u
|
|
270
270
|
];
|
|
271
271
|
}
|
|
272
|
-
function
|
|
272
|
+
function se(o, t, n) {
|
|
273
273
|
let e, i = n;
|
|
274
274
|
if (typeof o != "string") {
|
|
275
|
-
const { key:
|
|
276
|
-
e =
|
|
275
|
+
const { key: u, prefix: f } = o;
|
|
276
|
+
e = u, i = f;
|
|
277
277
|
} else
|
|
278
|
-
e =
|
|
279
|
-
const { prefix:
|
|
280
|
-
h.removeListener(e,
|
|
281
|
-
}), [e,
|
|
282
|
-
const
|
|
283
|
-
return
|
|
284
|
-
}, [e,
|
|
285
|
-
return h.useEffect(e,
|
|
278
|
+
e = E(o);
|
|
279
|
+
const { prefix: r } = j(i), s = k(void 0), a = b(() => (u) => (h.addListener(e, r, u), () => {
|
|
280
|
+
h.removeListener(e, r, u);
|
|
281
|
+
}), [e, r]), c = b(() => () => {
|
|
282
|
+
const u = h.get(e, r)?.value, f = t(u);
|
|
283
|
+
return V(s.current, f) ? s.current : (s.current = f, f);
|
|
284
|
+
}, [e, r, t]), d = _(a, c);
|
|
285
|
+
return h.useEffect(e, r), d;
|
|
286
286
|
}
|
|
287
|
-
const y = new
|
|
287
|
+
const y = new l(), A = new q(y), O = {
|
|
288
288
|
results: void 0,
|
|
289
289
|
isLoading: !1,
|
|
290
290
|
error: void 0
|
|
291
|
-
},
|
|
292
|
-
function
|
|
293
|
-
let e, i,
|
|
291
|
+
}, ne = (o, t) => y.createStatic({ fn: o }, O, t);
|
|
292
|
+
function ie(o, t, n) {
|
|
293
|
+
let e, i, r = n;
|
|
294
294
|
if (typeof o != "string") {
|
|
295
295
|
const { key: f, fn: v, prefix: x } = o;
|
|
296
|
-
e = f, i = v,
|
|
296
|
+
e = f, i = v, r = x;
|
|
297
297
|
} else
|
|
298
|
-
e =
|
|
299
|
-
const { prefix:
|
|
300
|
-
y.init(e,
|
|
301
|
-
const
|
|
302
|
-
() => (f) => (y.init(e,
|
|
303
|
-
y.removeListener(e,
|
|
298
|
+
e = E(o), i = t;
|
|
299
|
+
const { prefix: s } = j(r);
|
|
300
|
+
y.init(e, s, O);
|
|
301
|
+
const a = b(
|
|
302
|
+
() => (f) => (y.init(e, s, O), y.addListener(e, s, f), () => {
|
|
303
|
+
y.removeListener(e, s, f);
|
|
304
304
|
}),
|
|
305
|
-
[e,
|
|
306
|
-
),
|
|
307
|
-
() => () => y.get(e,
|
|
308
|
-
[e,
|
|
309
|
-
),
|
|
310
|
-
const x = y.get(e,
|
|
305
|
+
[e, s]
|
|
306
|
+
), c = b(
|
|
307
|
+
() => () => y.get(e, s).value,
|
|
308
|
+
[e, s]
|
|
309
|
+
), d = _(a, c), u = async (f, ...v) => {
|
|
310
|
+
const x = y.get(e, s);
|
|
311
311
|
if (!f && (x.value.isLoading || x.value.results !== void 0)) return x.value;
|
|
312
|
-
|
|
312
|
+
A.update(e, (S) => ({ ...S, isLoading: !0, error: void 0 }), s);
|
|
313
313
|
try {
|
|
314
|
-
const
|
|
315
|
-
|
|
316
|
-
} catch (
|
|
317
|
-
|
|
314
|
+
const S = await i(...v);
|
|
315
|
+
A.set(e, { results: S, isLoading: !1, error: void 0 }, s);
|
|
316
|
+
} catch (S) {
|
|
317
|
+
A.update(e, (p) => ({ ...p, isLoading: !1, error: S }), s);
|
|
318
318
|
}
|
|
319
319
|
};
|
|
320
|
-
return y.useEffect(e,
|
|
321
|
-
state:
|
|
320
|
+
return y.useEffect(e, s), {
|
|
321
|
+
state: d,
|
|
322
322
|
trigger: (...f) => {
|
|
323
|
-
|
|
323
|
+
u(!1, ...f);
|
|
324
324
|
},
|
|
325
325
|
forceTrigger: (...f) => {
|
|
326
|
-
|
|
326
|
+
u(!0, ...f);
|
|
327
327
|
},
|
|
328
328
|
clear: () => {
|
|
329
|
-
|
|
329
|
+
A.set(e, O, s);
|
|
330
330
|
}
|
|
331
331
|
};
|
|
332
332
|
}
|
|
333
|
-
const g = new
|
|
333
|
+
const g = new l(), w = new q(g), $ = {
|
|
334
334
|
data: void 0,
|
|
335
335
|
isLoading: !1,
|
|
336
336
|
error: void 0,
|
|
337
337
|
subscribed: !1,
|
|
338
338
|
unsubscribe: void 0
|
|
339
|
-
},
|
|
339
|
+
}, ae = (o, t, n) => g.createStatic({ subscriber: o }, { ...$, data: t?.initialValue }, n);
|
|
340
340
|
async function F(o, t) {
|
|
341
341
|
const n = g.get(o, t);
|
|
342
|
-
n?.value.unsubscribe && (n.value.unsubscribe(),
|
|
342
|
+
n?.value.unsubscribe && (n.value.unsubscribe(), w.update(o, (e) => ({ ...e, unsubscribe: void 0, subscribed: !1 }), t));
|
|
343
343
|
}
|
|
344
344
|
function oe(o, t, n) {
|
|
345
|
-
let e, i, s =
|
|
345
|
+
let e, i, r = n, s = !1;
|
|
346
346
|
if (typeof o != "string") {
|
|
347
|
-
const { key:
|
|
348
|
-
e =
|
|
347
|
+
const { key: p, subscriber: m, prefix: L, triggerImmediately: D } = o;
|
|
348
|
+
e = p, i = m, r = L, s = D ?? !1;
|
|
349
349
|
} else
|
|
350
|
-
e =
|
|
351
|
-
const { prefix:
|
|
352
|
-
g.init(e,
|
|
350
|
+
e = E(o), i = t;
|
|
351
|
+
const { prefix: a } = j(r);
|
|
352
|
+
g.init(e, a, $);
|
|
353
353
|
const c = b(
|
|
354
|
-
() => (
|
|
355
|
-
g.removeListener(e,
|
|
354
|
+
() => (p) => (g.init(e, a, $), g.addListener(e, a, p), () => {
|
|
355
|
+
g.removeListener(e, a, p);
|
|
356
356
|
}),
|
|
357
|
-
[e,
|
|
358
|
-
),
|
|
359
|
-
() => () => g.get(e,
|
|
360
|
-
[e,
|
|
361
|
-
),
|
|
362
|
-
|
|
363
|
-
},
|
|
364
|
-
|
|
365
|
-
},
|
|
366
|
-
|
|
367
|
-
},
|
|
368
|
-
const
|
|
369
|
-
if (
|
|
370
|
-
|
|
357
|
+
[e, a]
|
|
358
|
+
), d = b(
|
|
359
|
+
() => () => g.get(e, a).value,
|
|
360
|
+
[e, a]
|
|
361
|
+
), u = _(c, d), f = (p) => {
|
|
362
|
+
w.update(e, (m) => ({ ...m, data: p }), a);
|
|
363
|
+
}, v = (p) => {
|
|
364
|
+
w.update(e, (m) => ({ ...m, isLoading: !1, data: void 0, error: p }), a);
|
|
365
|
+
}, x = () => {
|
|
366
|
+
w.update(e, (p) => ({ ...p, isLoading: !1 }), a);
|
|
367
|
+
}, S = async (p) => {
|
|
368
|
+
const m = g.get(e, a);
|
|
369
|
+
if (p && await F(e, a), m.value.subscribed && !p) return m.value;
|
|
370
|
+
K("triggered !!"), w.update(e, (L) => ({ ...L, isLoading: !0, error: void 0 }), a);
|
|
371
371
|
try {
|
|
372
|
-
const L = await i(
|
|
373
|
-
|
|
372
|
+
const L = await i(f, v, x);
|
|
373
|
+
w.update(e, (D) => ({ ...D, unsubscribe: L, subscribed: !0, isLoading: !1 }), a);
|
|
374
374
|
} catch (L) {
|
|
375
|
-
|
|
375
|
+
w.update(e, (D) => ({ ...D, isLoading: !1, error: L }), a);
|
|
376
376
|
}
|
|
377
377
|
};
|
|
378
|
-
return
|
|
379
|
-
|
|
380
|
-
}, [e,
|
|
381
|
-
|
|
378
|
+
return P(() => () => {
|
|
379
|
+
K(`[${l.prefix(e, a)}]`, "unmount effect2"), g.get(e, a)?.listeners.length === 0 && F(e, a);
|
|
380
|
+
}, [e, a]), g.useEffect(e, a), P(() => {
|
|
381
|
+
s && S(!1);
|
|
382
|
+
}, []), {
|
|
383
|
+
state: u,
|
|
382
384
|
trigger: () => {
|
|
383
|
-
|
|
385
|
+
S(!1);
|
|
384
386
|
},
|
|
385
387
|
forceTrigger: () => {
|
|
386
|
-
|
|
388
|
+
S(!0);
|
|
387
389
|
},
|
|
388
390
|
unsubscribe: () => {
|
|
389
|
-
F(e,
|
|
391
|
+
F(e, a);
|
|
390
392
|
}
|
|
391
393
|
};
|
|
392
394
|
}
|
|
393
395
|
export {
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
396
|
+
N as SharedStatesProvider,
|
|
397
|
+
ne as createSharedFunction,
|
|
398
|
+
te as createSharedState,
|
|
399
|
+
ae as createSharedSubscription,
|
|
400
|
+
z as isDevMode,
|
|
401
|
+
Z as setDevMode,
|
|
402
|
+
A as sharedFunctionsApi,
|
|
403
|
+
ee as sharedStatesApi,
|
|
404
|
+
w as sharedSubscriptionsApi,
|
|
403
405
|
j as useSharedContext,
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
406
|
+
ie as useSharedFunction,
|
|
407
|
+
re as useSharedState,
|
|
408
|
+
se as useSharedStateSelector,
|
|
407
409
|
oe as useSharedSubscription
|
|
408
410
|
};
|
package/dist/main.min.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* react-shared-states v2.0.
|
|
2
|
+
* react-shared-states v2.0.1
|
|
3
3
|
* (c) Hichem Taboukouyout
|
|
4
4
|
* Released under the MIT License.
|
|
5
5
|
* Github: github.com/HichemTab-tech/react-shared-states
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
(function(
|
|
8
|
+
(function(c,A){typeof exports=="object"&&typeof module<"u"?A(exports,require("react/jsx-runtime"),require("react")):typeof define=="function"&&define.amd?define(["exports","react/jsx-runtime","react"],A):(c=typeof globalThis<"u"?globalThis:c||self,A(c.ReactSharedStates={},c.jsxRuntime,c.React))})(this,(function(c,A,d){"use strict";c.isDevMode=!1;const G=o=>{c.isDevMode=o},P=(...o)=>{c.isDevMode&&console.log("%c[react-shared-states]","color: #007acc; font-weight: bold",...o)},D=o=>{if(!o)throw new Error("Value is empty");return o},K=()=>Math.random().toString(36).substring(2,15),$=d.createContext(void 0),I=({children:o,scopeName:t})=>{if(t&&t.includes("//"))throw new Error("scopeName cannot contain '//'");return t||(t=d.useMemo(()=>K(),[])),A.jsx($.Provider,{value:{scopeName:t},children:o})},V=()=>d.useContext($),B=[];class h{constructor(t=()=>null){this.defaultValue=t}data=new Map;addListener(t,n,e){const i=h.prefix(t,n),r=this.data.get(i);r&&r.listeners.push(e)}removeListener(t,n,e){const i=h.prefix(t,n),r=this.data.get(i);r&&(r.listeners=r.listeners.filter(s=>s!==e))}callListeners(t,n){const e=h.prefix(t,n),i=this.data.get(e);i&&i.listeners.forEach(r=>r())}init(t,n,e,i=!1){const r=h.prefix(t,n);this.data.has(r)||this.data.set(r,{value:e,isStatic:i||void 0,listeners:[]})}createStatic(t,n,e){const i=e??"_global",r={key:K(),prefix:i,...t};return B.push(r),this.init(r.key,r.prefix,n,!0),this.defaultValue=()=>n,r}initStatic(t){const{key:n,prefix:e}=t;this.init(n,e,this.defaultValue(),!0)}clearAll(t=!1,n=!1){this.data.forEach((e,i)=>{const[r,s]=h.extractPrefix(i);this.clear(s,r,t,n)})}clear(t,n,e=!1,i=!1){const r=h.prefix(t,n);e||this.callListeners(t,n);const s=this.data.get(r);if(s&&(this.data.delete(r),s.isStatic&&!i)){const a=B.find(u=>u.key===t&&u.prefix===n);a&&this.initStatic(a)}}get(t,n){let e=this.has(t,n);if(e)return this.data.get(e)}setValue(t,n,e){const i=h.prefix(t,n),r=this.data.get(i);r&&(r.value=e,this.data.set(i,r))}has(t,n){return this.data.has(h.prefix(t,n))?h.prefix(t,n):this.data.has(h.prefix(t,"_global"))?h.prefix(t,"_global"):void 0}static prefix(t,n){if(t.includes("//"))throw new Error("key cannot contain '//'");return`${n}//${t}`}static extractPrefix(t){const n=t.split("//");return[n[0],n.slice(1).join("//")]}useEffect(t,n,e=null){d.useEffect(()=>()=>{e?.(),P(`[${h.prefix(t,n)}]`,"unmount effect");const i=this.get(t,n);i&&i.listeners?.length===0&&this.clear(t,n)},[t,n])}}class _{constructor(t){this.sharedData=t}_get(t,n){let e,i=n;if(typeof t!="string"){const{key:a,prefix:u}=t;e=a,i=u}else e=D(t);const r=i||"_global",s=this.sharedData.get(e,r);return s?{value:s.value,key:e,prefix:r}:{key:e,prefix:r,value:void 0}}get(t,n){return this._get(t,n).value}set(t,n,e){let i,r=e;if(typeof t!="string"){const{key:a,prefix:u}=t;i=a,r=u}else i=D(t);const s=r||"_global";this.sharedData.init(i,s,n),this.sharedData.setValue(i,s,n),this.sharedData.callListeners(i,s)}update(t,n,e){const i=this._get(t,e);if(i){const r=n(i.value);this.set(i.key,r,i.prefix)}}clearAll(){this.sharedData.clearAll()}clearScope(t){const n=t||"_global";this.sharedData.data.forEach((e,i)=>{const[r,s]=h.extractPrefix(i);r===n&&(this.sharedData.clear(s,r),this.sharedData.callListeners(s,r))})}resolve(t){const{key:n,prefix:e}=t;return this.get(n,e)}clear(t,n){let e,i;typeof t=="string"?(e=t,i=n||"_global"):(e=t.key,i=t.prefix),this.sharedData.clear(e,i)}has(t,n="_global"){const e=n||"_global";return!!this.sharedData.has(t,e)}getAll(){const t={};return this.sharedData.data.forEach((n,e)=>{const[i,r]=h.extractPrefix(e);t[i]=t[i]||{},t[i][r]=n.value}),t}subscribe(t,n,e){let i,r;return typeof t=="string"?(i=t,r=e||"_global"):(i=t.key,r=t.prefix),this.sharedData.addListener(i,r,n),()=>{this.sharedData.removeListener(i,r,n)}}}const j=o=>{const t=V();return{prefix:o??t?.scopeName??"_global"}};function W(o){return o&&o.__esModule&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o}var C,T;function k(){if(T)return C;T=1;var o=typeof Element<"u",t=typeof Map=="function",n=typeof Set=="function",e=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function i(r,s){if(r===s)return!0;if(r&&s&&typeof r=="object"&&typeof s=="object"){if(r.constructor!==s.constructor)return!1;var a,u,p;if(Array.isArray(r)){if(a=r.length,a!=s.length)return!1;for(u=a;u--!==0;)if(!i(r[u],s[u]))return!1;return!0}var l;if(t&&r instanceof Map&&s instanceof Map){if(r.size!==s.size)return!1;for(l=r.entries();!(u=l.next()).done;)if(!s.has(u.value[0]))return!1;for(l=r.entries();!(u=l.next()).done;)if(!i(u.value[1],s.get(u.value[0])))return!1;return!0}if(n&&r instanceof Set&&s instanceof Set){if(r.size!==s.size)return!1;for(l=r.entries();!(u=l.next()).done;)if(!s.has(u.value[0]))return!1;return!0}if(e&&ArrayBuffer.isView(r)&&ArrayBuffer.isView(s)){if(a=r.length,a!=s.length)return!1;for(u=a;u--!==0;)if(r[u]!==s[u])return!1;return!0}if(r.constructor===RegExp)return r.source===s.source&&r.flags===s.flags;if(r.valueOf!==Object.prototype.valueOf&&typeof r.valueOf=="function"&&typeof s.valueOf=="function")return r.valueOf()===s.valueOf();if(r.toString!==Object.prototype.toString&&typeof r.toString=="function"&&typeof s.toString=="function")return r.toString()===s.toString();if(p=Object.keys(r),a=p.length,a!==Object.keys(s).length)return!1;for(u=a;u--!==0;)if(!Object.prototype.hasOwnProperty.call(s,p[u]))return!1;if(o&&r instanceof Element)return!1;for(u=a;u--!==0;)if(!((p[u]==="_owner"||p[u]==="__v"||p[u]==="__o")&&r.$$typeof)&&!i(r[p[u]],s[p[u]]))return!1;return!0}return r!==r&&s!==s}return C=function(s,a){try{return i(s,a)}catch(u){if((u.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw u}},C}var H=k();const z=W(H),g=new h,J=new _(g),Q=(o,t)=>g.createStatic({initialValue:o},o,t);function U(o,t,n){let e,i,r=n;if(typeof o!="string"){const{key:f,initialValue:y,prefix:m}=o;e=f,i=y,r=m}else e=D(o),i=t;const{prefix:s}=j(r);g.init(e,s,i);const a=d.useMemo(()=>f=>(g.init(e,s,t),g.addListener(e,s,f),()=>{g.removeListener(e,s,f)}),[e,s,t]),u=d.useMemo(()=>()=>g.get(e,s)?.value,[e,s]),p=d.useSyncExternalStore(a,u),l=f=>{const y=typeof f=="function"?f(g.get(e,s)?.value):f;z(y,p)||(g.setValue(e,s,y),g.callListeners(e,s))};return g.useEffect(e,s),[p,l]}function X(o,t,n){let e,i=n;if(typeof o!="string"){const{key:l,prefix:f}=o;e=l,i=f}else e=D(o);const{prefix:r}=j(i),s=d.useRef(void 0),a=d.useMemo(()=>l=>(g.addListener(e,r,l),()=>{g.removeListener(e,r,l)}),[e,r]),u=d.useMemo(()=>()=>{const l=g.get(e,r)?.value,f=t(l);return z(s.current,f)?s.current:(s.current=f,f)},[e,r,t]),p=d.useSyncExternalStore(a,u);return g.useEffect(e,r),p}const x=new h,M=new _(x),O={results:void 0,isLoading:!1,error:void 0},Y=(o,t)=>x.createStatic({fn:o},O,t);function Z(o,t,n){let e,i,r=n;if(typeof o!="string"){const{key:f,fn:y,prefix:m}=o;e=f,i=y,r=m}else e=D(o),i=t;const{prefix:s}=j(r);x.init(e,s,O);const a=d.useMemo(()=>f=>(x.init(e,s,O),x.addListener(e,s,f),()=>{x.removeListener(e,s,f)}),[e,s]),u=d.useMemo(()=>()=>x.get(e,s).value,[e,s]),p=d.useSyncExternalStore(a,u),l=async(f,...y)=>{const m=x.get(e,s);if(!f&&(m.value.isLoading||m.value.results!==void 0))return m.value;M.update(e,b=>({...b,isLoading:!0,error:void 0}),s);try{const b=await i(...y);M.set(e,{results:b,isLoading:!1,error:void 0},s)}catch(b){M.update(e,S=>({...S,isLoading:!1,error:b}),s)}};return x.useEffect(e,s),{state:p,trigger:(...f)=>{l(!1,...f)},forceTrigger:(...f)=>{l(!0,...f)},clear:()=>{M.set(e,O,s)}}}const v=new h,E=new _(v),R={data:void 0,isLoading:!1,error:void 0,subscribed:!1,unsubscribe:void 0},N=(o,t,n)=>v.createStatic({subscriber:o},{...R,data:t?.initialValue},n);async function q(o,t){const n=v.get(o,t);n?.value.unsubscribe&&(n.value.unsubscribe(),E.update(o,e=>({...e,unsubscribe:void 0,subscribed:!1}),t))}function ee(o,t,n){let e,i,r=n,s=!1;if(typeof o!="string"){const{key:S,subscriber:L,prefix:w,triggerImmediately:F}=o;e=S,i=L,r=w,s=F??!1}else e=D(o),i=t;const{prefix:a}=j(r);v.init(e,a,R);const u=d.useMemo(()=>S=>(v.init(e,a,R),v.addListener(e,a,S),()=>{v.removeListener(e,a,S)}),[e,a]),p=d.useMemo(()=>()=>v.get(e,a).value,[e,a]),l=d.useSyncExternalStore(u,p),f=S=>{E.update(e,L=>({...L,data:S}),a)},y=S=>{E.update(e,L=>({...L,isLoading:!1,data:void 0,error:S}),a)},m=()=>{E.update(e,S=>({...S,isLoading:!1}),a)},b=async S=>{const L=v.get(e,a);if(S&&await q(e,a),L.value.subscribed&&!S)return L.value;P("triggered !!"),E.update(e,w=>({...w,isLoading:!0,error:void 0}),a);try{const w=await i(f,y,m);E.update(e,F=>({...F,unsubscribe:w,subscribed:!0,isLoading:!1}),a)}catch(w){E.update(e,F=>({...F,isLoading:!1,error:w}),a)}};return d.useEffect(()=>()=>{P(`[${h.prefix(e,a)}]`,"unmount effect2"),v.get(e,a)?.listeners.length===0&&q(e,a)},[e,a]),v.useEffect(e,a),d.useEffect(()=>{s&&b(!1)},[]),{state:l,trigger:()=>{b(!1)},forceTrigger:()=>{b(!0)},unsubscribe:()=>{q(e,a)}}}c.SharedStatesProvider=I,c.createSharedFunction=Y,c.createSharedState=Q,c.createSharedSubscription=N,c.setDevMode=G,c.sharedFunctionsApi=M,c.sharedStatesApi=J,c.sharedSubscriptionsApi=E,c.useSharedContext=j,c.useSharedFunction=Z,c.useSharedState=U,c.useSharedStateSelector=X,c.useSharedSubscription=ee,Object.defineProperty(c,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED