react-use-singleton-hook 1.0.13 → 1.0.15

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/main.d.ts CHANGED
@@ -1,6 +1,9 @@
1
1
  import { singletonHook } from './singletonHook';
2
- export { singletonHook as useSingletonGlobalState };
2
+ export { singletonHook as createSingletonGlobalState };
3
3
  declare const ReactSingletonHook: {
4
- useSingletonGlobalState: typeof singletonHook;
4
+ createSingletonGlobalState: <T>(initValue: T | (() => T), useHookBody: () => T, options?: {
5
+ mountId?: string;
6
+ unmountIfNoConsumers?: boolean;
7
+ }) => (() => T);
5
8
  };
6
9
  export default ReactSingletonHook;
package/dist/main.js CHANGED
@@ -1,57 +1,67 @@
1
1
  import i, { useEffect as v } from "react";
2
- import { createRoot as E } from "react-dom/client";
3
- const g = (t) => {
4
- let e;
5
- const u = /* @__PURE__ */ new Set(), c = (o, s) => {
6
- const n = typeof o == "function" ? o(e) : o;
7
- if (!Object.is(n, e)) {
8
- const m = e;
9
- e = s ?? (typeof n != "object" || n === null) ? n : Object.assign({}, e, n), u.forEach((b) => b(e, m));
2
+ import { createRoot as h } from "react-dom/client";
3
+ const g = (e) => {
4
+ let n;
5
+ const s = /* @__PURE__ */ new Set(), l = (u, o) => {
6
+ const t = typeof u == "function" ? u(n) : u;
7
+ if (!Object.is(t, n)) {
8
+ const m = n;
9
+ n = o ?? (typeof t != "object" || t === null) ? t : Object.assign({}, n, t), s.forEach((b) => b(n, m));
10
10
  }
11
- }, a = () => e, l = { setState: c, getState: a, getInitialState: () => r, subscribe: (o) => (u.add(o), () => u.delete(o)) }, r = e = t(c, a, l);
12
- return l;
13
- }, h = ((t) => t ? g(t) : g), k = (t) => t;
14
- function C(t, e = k) {
15
- const u = i.useSyncExternalStore(
16
- t.subscribe,
17
- i.useCallback(() => e(t.getState()), [t, e]),
18
- i.useCallback(() => e(t.getInitialState()), [t, e])
11
+ }, a = () => n, c = { setState: l, getState: a, getInitialState: () => r, subscribe: (u) => (s.add(u), () => s.delete(u)) }, r = n = e(l, a, c);
12
+ return c;
13
+ }, k = ((e) => e ? g(e) : g), E = (e) => e;
14
+ function C(e, n = E) {
15
+ const s = i.useSyncExternalStore(
16
+ e.subscribe,
17
+ i.useCallback(() => n(e.getState()), [e, n]),
18
+ i.useCallback(() => n(e.getInitialState()), [e, n])
19
19
  );
20
- return i.useDebugValue(u), u;
20
+ return i.useDebugValue(s), s;
21
21
  }
22
- function j(t, e, u = {}) {
23
- const { mountId: c, unmountIfNoConsumers: a = !0 } = u, f = typeof t == "function";
24
- let S = !f, l = f ? void 0 : t;
25
- const r = h(() => ({ value: l }));
26
- let o = 0, s = null, n = null;
22
+ const j = (e, n, s = {}) => {
23
+ const { mountId: l, unmountIfNoConsumers: a = !0 } = s, f = typeof e == "function";
24
+ let S = !f, c = f ? void 0 : e;
25
+ const r = k(() => ({ value: c }));
26
+ let u = 0, o = null, t = null;
27
27
  function m() {
28
- const d = e();
28
+ const d = n();
29
29
  return v(() => {
30
30
  r.setState({ value: d });
31
31
  }, [d]), null;
32
32
  }
33
33
  function b() {
34
- s || (n = document.createElement("div"), n.style.display = "none", c && (n.id = c), document.body.appendChild(n), s = E(n), s.render(i.createElement(m)));
35
- }
36
- function I() {
37
- !s || !n || (s.unmount(), n.remove(), s = null, n = null);
34
+ if (o) {
35
+ if (t && document.body.contains(t)) return;
36
+ try {
37
+ o.unmount();
38
+ } catch {
39
+ }
40
+ o = null, t = null;
41
+ }
42
+ t = document.createElement("div"), t.style.display = "none", l && (t.id = l), document.body.appendChild(t), o = h(t), o.render(i.createElement(m));
38
43
  }
39
44
  function y() {
40
- !S && f && (S = !0, l = t(), r.setState({ value: l }));
45
+ !o || !t || queueMicrotask(() => {
46
+ !o || !t || u > 0 || (o.unmount(), t.remove(), o = null, t = null);
47
+ });
48
+ }
49
+ function I() {
50
+ !S && f && (S = !0, c = e(), r.setState({ value: c }));
41
51
  }
42
52
  function R() {
43
- y();
53
+ I();
44
54
  const d = C(r, (p) => p.value);
45
- return v(() => (o += 1, o === 1 && b(), () => {
46
- o -= 1, o === 0 && a && I();
55
+ return v(() => (u += 1, o || b(), () => {
56
+ u -= 1, u === 0 && a && y();
47
57
  }), []), d;
48
58
  }
49
59
  return R;
50
- }
51
- const G = {
52
- useSingletonGlobalState: j
60
+ }, G = {
61
+ //This Generic Arrow Function is creating a hook, not calling one, so naming convention should not have use prefix
62
+ createSingletonGlobalState: j
53
63
  };
54
64
  export {
55
- G as default,
56
- j as useSingletonGlobalState
65
+ j as createSingletonGlobalState,
66
+ G as default
57
67
  };
@@ -2,5 +2,5 @@ type Options = {
2
2
  mountId?: string;
3
3
  unmountIfNoConsumers?: boolean;
4
4
  };
5
- export declare function singletonHook<T>(initValue: T | (() => T), useHookBody: () => T, options?: Options): () => T;
5
+ export declare const singletonHook: <T>(initValue: T | (() => T), useHookBody: () => T, options?: Options) => (() => T);
6
6
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-use-singleton-hook",
3
- "version": "1.0.13",
3
+ "version": "1.0.15",
4
4
  "type": "module",
5
5
  "main": "dist/main.js",
6
6
  "module": "dist/main.js",