atom.io 0.6.7 → 0.6.9

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.
Files changed (129) hide show
  1. package/dist/index.d.mts +241 -263
  2. package/dist/index.d.ts +241 -263
  3. package/dist/index.js +28 -1911
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +5 -1871
  6. package/dist/index.mjs.map +1 -1
  7. package/introspection/dist/index.d.mts +121 -176
  8. package/introspection/dist/index.d.ts +121 -176
  9. package/introspection/dist/index.js +6 -346
  10. package/introspection/dist/index.js.map +1 -1
  11. package/introspection/dist/index.mjs +5 -324
  12. package/introspection/dist/index.mjs.map +1 -1
  13. package/json/dist/index.d.mts +37 -8
  14. package/json/dist/index.d.ts +37 -8
  15. package/json/dist/index.js +31 -48
  16. package/json/dist/index.js.map +1 -1
  17. package/json/dist/index.mjs +6 -14
  18. package/json/dist/index.mjs.map +1 -1
  19. package/package.json +30 -14
  20. package/react/dist/index.js +34 -83
  21. package/react/dist/index.js.map +1 -1
  22. package/react/dist/index.mjs +7 -43
  23. package/react/dist/index.mjs.map +1 -1
  24. package/react-devtools/dist/index.css +1 -42
  25. package/react-devtools/dist/index.css.map +1 -1
  26. package/react-devtools/dist/index.d.mts +128 -193
  27. package/react-devtools/dist/index.d.ts +128 -193
  28. package/react-devtools/dist/index.js +56 -4154
  29. package/react-devtools/dist/index.js.map +1 -1
  30. package/react-devtools/dist/index.mjs +19 -4117
  31. package/react-devtools/dist/index.mjs.map +1 -1
  32. package/realtime/dist/index.d.mts +7 -11
  33. package/realtime/dist/index.d.ts +7 -11
  34. package/realtime/dist/index.js +26 -185
  35. package/realtime/dist/index.js.map +1 -1
  36. package/realtime/dist/index.mjs +4 -149
  37. package/realtime/dist/index.mjs.map +1 -1
  38. package/realtime-react/dist/index.d.mts +12 -16
  39. package/realtime-react/dist/index.d.ts +12 -16
  40. package/realtime-react/dist/index.js +41 -214
  41. package/realtime-react/dist/index.js.map +1 -1
  42. package/realtime-react/dist/index.mjs +9 -169
  43. package/realtime-react/dist/index.mjs.map +1 -1
  44. package/src/atom.ts +7 -6
  45. package/src/index.ts +12 -9
  46. package/src/logger.ts +5 -5
  47. package/src/selector.ts +16 -14
  48. package/src/silo.ts +36 -39
  49. package/src/subscribe.ts +25 -20
  50. package/src/timeline.ts +9 -4
  51. package/src/transaction.ts +3 -4
  52. package/src/internal/atom-internal.ts +0 -54
  53. package/src/internal/families-internal.ts +0 -141
  54. package/src/internal/get.ts +0 -129
  55. package/src/internal/index.ts +0 -15
  56. package/src/internal/is-default.ts +0 -35
  57. package/src/internal/operation.ts +0 -139
  58. package/src/internal/selector/create-read-write-selector.ts +0 -66
  59. package/src/internal/selector/create-readonly-selector.ts +0 -46
  60. package/src/internal/selector/index.ts +0 -4
  61. package/src/internal/selector/lookup-selector-sources.ts +0 -16
  62. package/src/internal/selector/register-selector.ts +0 -57
  63. package/src/internal/selector/trace-selector-atoms.ts +0 -43
  64. package/src/internal/selector/update-selector-atoms.ts +0 -33
  65. package/src/internal/selector-internal.ts +0 -58
  66. package/src/internal/set.ts +0 -99
  67. package/src/internal/store.ts +0 -151
  68. package/src/internal/subject.ts +0 -24
  69. package/src/internal/subscribe-internal.ts +0 -88
  70. package/src/internal/time-travel-internal.ts +0 -91
  71. package/src/internal/timeline/add-atom-to-timeline.ts +0 -168
  72. package/src/internal/timeline/index.ts +0 -1
  73. package/src/internal/timeline-internal.ts +0 -107
  74. package/src/internal/transaction/abort-transaction.ts +0 -12
  75. package/src/internal/transaction/apply-transaction.ts +0 -57
  76. package/src/internal/transaction/build-transaction.ts +0 -33
  77. package/src/internal/transaction/index.ts +0 -25
  78. package/src/internal/transaction/redo-transaction.ts +0 -23
  79. package/src/internal/transaction/undo-transaction.ts +0 -23
  80. package/src/internal/transaction-internal.ts +0 -61
  81. package/src/introspection/attach-atom-index.ts +0 -73
  82. package/src/introspection/attach-introspection-states.ts +0 -42
  83. package/src/introspection/attach-selector-index.ts +0 -77
  84. package/src/introspection/attach-timeline-family.ts +0 -59
  85. package/src/introspection/attach-timeline-index.ts +0 -36
  86. package/src/introspection/attach-transaction-index.ts +0 -38
  87. package/src/introspection/attach-transaction-logs.ts +0 -40
  88. package/src/introspection/index.ts +0 -20
  89. package/src/json/index.ts +0 -1
  90. package/src/json/select-json.ts +0 -18
  91. package/src/react/index.ts +0 -2
  92. package/src/react/store-context.tsx +0 -13
  93. package/src/react/store-hooks.ts +0 -47
  94. package/src/react-devtools/AtomIODevtools.tsx +0 -107
  95. package/src/react-devtools/Button.tsx +0 -24
  96. package/src/react-devtools/StateEditor.tsx +0 -70
  97. package/src/react-devtools/StateIndex.tsx +0 -153
  98. package/src/react-devtools/TimelineIndex.tsx +0 -92
  99. package/src/react-devtools/TransactionIndex.tsx +0 -70
  100. package/src/react-devtools/Updates.tsx +0 -145
  101. package/src/react-devtools/devtools.scss +0 -311
  102. package/src/react-devtools/index.ts +0 -72
  103. package/src/react-explorer/AtomIOExplorer.tsx +0 -218
  104. package/src/react-explorer/explorer-effects.ts +0 -20
  105. package/src/react-explorer/explorer-states.ts +0 -217
  106. package/src/react-explorer/index.ts +0 -23
  107. package/src/react-explorer/space-states.ts +0 -72
  108. package/src/react-explorer/view-states.ts +0 -41
  109. package/src/realtime/README.md +0 -33
  110. package/src/realtime/hook-composition/expose-family.ts +0 -101
  111. package/src/realtime/hook-composition/expose-single.ts +0 -38
  112. package/src/realtime/hook-composition/expose-timeline.ts +0 -60
  113. package/src/realtime/hook-composition/index.ts +0 -12
  114. package/src/realtime/hook-composition/receive-state.ts +0 -29
  115. package/src/realtime/hook-composition/receive-transaction.ts +0 -18
  116. package/src/realtime/index.ts +0 -1
  117. package/src/realtime-react/index.ts +0 -3
  118. package/src/realtime-react/realtime-context.tsx +0 -30
  119. package/src/realtime-react/realtime-hooks.ts +0 -39
  120. package/src/realtime-react/realtime-state.ts +0 -10
  121. package/src/realtime-react/use-pull-family-member.ts +0 -26
  122. package/src/realtime-react/use-pull-family.ts +0 -24
  123. package/src/realtime-react/use-pull.ts +0 -22
  124. package/src/realtime-react/use-push.ts +0 -25
  125. package/src/realtime-react/use-server-action.ts +0 -33
  126. package/src/realtime-testing/index.ts +0 -1
  127. package/src/realtime-testing/setup-realtime-test.tsx +0 -159
  128. package/src/web-effects/index.ts +0 -1
  129. package/src/web-effects/storage.ts +0 -30
@@ -10,32 +10,28 @@ declare const RealtimeProvider: React.FC<{
10
10
  socket: Socket;
11
11
  }>;
12
12
 
13
- type ƒn = (...parameters: any[]) => any;
13
+ type primitive = boolean | number | string | null;
14
14
 
15
- type Primitive = boolean | number | string | null;
16
- type Serializable = Primitive | Readonly<{
15
+ type Serializable = primitive | Readonly<{
17
16
  [key: string]: Serializable;
18
17
  }> | ReadonlyArray<Serializable>;
19
- type JsonObj<Key extends string = string, Value extends Serializable = Serializable> = Record<Key, Value>;
20
- type JsonArr<Element extends Serializable = Serializable> = ReadonlyArray<Element>;
21
- type Json = JsonArr | JsonObj | Primitive;
22
18
 
23
- declare function usePull<J extends Json>(token: AtomIO.StateToken<J>): void;
19
+ declare function usePull<J extends Serializable>(token: AtomIO.StateToken<J>): void;
24
20
 
25
- declare function usePullFamily<J extends Json>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>): void;
21
+ declare function usePullFamily<J extends Serializable>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>): void;
26
22
 
27
- declare function usePullFamilyMember<J extends Json>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>, subKey: AtomIO.Serializable): void;
23
+ declare function usePullFamilyMember<J extends Serializable>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>, subKey: AtomIO.Json.Serializable): void;
28
24
 
29
- declare function usePush<J extends Json>(token: AtomIO.StateToken<J>): void;
25
+ declare function usePush<J extends Serializable>(token: AtomIO.StateToken<J>): void;
30
26
 
31
- declare function useServerAction<ƒ extends ƒn>(token: AtomIO.TransactionToken<ƒ>): (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
27
+ declare function useServerAction<ƒ extends AtomIO.ƒn>(token: AtomIO.TransactionToken<ƒ>): (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
32
28
 
33
29
  type RealtimeHooks = {
34
- usePull: <J extends Json>(token: AtomIO.StateToken<J>) => void;
35
- usePullFamily: <J extends Json>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>) => void;
36
- usePullFamilyMember: <J extends Json>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>, subKey: string) => void;
37
- usePush: <J extends Json>(token: AtomIO.StateToken<J>) => void;
38
- useServerAction: <ƒ extends ƒn>(token: AtomIO.TransactionToken<ƒ>) => (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
30
+ usePull: <J extends Serializable>(token: AtomIO.StateToken<J>) => void;
31
+ usePullFamily: <J extends Serializable>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>) => void;
32
+ usePullFamilyMember: <J extends Serializable>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>, subKey: string) => void;
33
+ usePush: <J extends Serializable>(token: AtomIO.StateToken<J>) => void;
34
+ useServerAction: <ƒ extends AtomIO.ƒn>(token: AtomIO.TransactionToken<ƒ>) => (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
39
35
  };
40
36
  declare const realtimeHooks: RealtimeHooks;
41
37
 
@@ -1,217 +1,44 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
-
29
- // ../src/realtime-react/index.ts
30
- var realtime_react_exports = {};
31
- __export(realtime_react_exports, {
32
- RealtimeContext: () => RealtimeContext,
33
- RealtimeProvider: () => RealtimeProvider,
34
- myIdState: () => myIdState,
35
- myIdState__INTERNAL: () => myIdState__INTERNAL,
36
- realtimeHooks: () => realtimeHooks,
37
- usePull: () => usePull,
38
- usePullFamily: () => usePullFamily,
39
- usePullFamilyMember: () => usePullFamilyMember,
40
- usePush: () => usePush,
41
- useServerAction: () => useServerAction
42
- });
43
- module.exports = __toCommonJS(realtime_react_exports);
44
-
45
- // ../src/realtime-react/realtime-context.tsx
46
- var AR = __toESM(require("atom.io/react"));
47
- var React = __toESM(require("react"));
48
- var import_socket = require("socket.io-client");
49
-
50
- // ../src/realtime-react/realtime-state.ts
51
- var AtomIO = __toESM(require("atom.io"));
52
- var myIdState__INTERNAL = AtomIO.atom({
53
- key: `myId__INTERNAL`,
54
- default: null
55
- });
56
- var myIdState = AtomIO.selector({
57
- key: `myId`,
58
- get: ({ get }) => get(myIdState__INTERNAL)
59
- });
60
-
61
- // ../src/realtime-react/realtime-context.tsx
62
- var import_jsx_dev_runtime = require("react/jsx-dev-runtime");
63
- var RealtimeContext = React.createContext({
64
- socket: (0, import_socket.io)()
65
- });
66
- var RealtimeProvider = ({ children, socket }) => {
67
- const setMyId = AR.useI(myIdState__INTERNAL);
68
- React.useEffect(() => {
69
- socket.on(`connect`, () => {
70
- setMyId(socket.id);
71
- });
72
- socket.on(`disconnect`, () => {
73
- setMyId(null);
74
- });
75
- }, [socket, setMyId]);
76
- return /* @__PURE__ */ (0, import_jsx_dev_runtime.jsxDEV)(RealtimeContext.Provider, { value: { socket }, children }, void 0, false, {
77
- fileName: "../src/realtime-react/realtime-context.tsx",
78
- lineNumber: 26,
79
- columnNumber: 3
80
- }, this);
81
- };
82
-
83
- // ../src/realtime-react/use-pull.ts
84
- var AtomIO3 = __toESM(require("atom.io"));
85
- var React3 = __toESM(require("react"));
86
-
87
- // ../src/react/store-context.tsx
88
- var AtomIO2 = __toESM(require("atom.io"));
89
- var React2 = __toESM(require("react"));
90
- var import_jsx_dev_runtime2 = require("react/jsx-dev-runtime");
91
- var StoreContext = React2.createContext(
92
- AtomIO2.__INTERNAL__.IMPLICIT.STORE
93
- );
94
-
95
- // ../src/realtime-react/use-pull.ts
96
- function usePull(token) {
97
- const { socket } = React3.useContext(RealtimeContext);
98
- const store = React3.useContext(StoreContext);
99
- React3.useEffect(() => {
100
- socket.on(`serve:${token.key}`, (data) => {
101
- AtomIO3.setState(token, data, store);
102
- });
103
- socket.emit(`sub:${token.key}`);
104
- return () => {
105
- socket.off(`serve:${token.key}`);
106
- socket.emit(`unsub:${token.key}`);
107
- };
108
- }, [token.key]);
109
- }
110
-
111
- // ../src/realtime-react/use-pull-family.ts
112
- var AtomIO4 = __toESM(require("atom.io"));
113
- var React4 = __toESM(require("react"));
114
- function usePullFamily(family) {
115
- const { socket } = React4.useContext(RealtimeContext);
116
- const store = React4.useContext(StoreContext);
117
- React4.useEffect(() => {
118
- socket.on(`serve:${family.key}`, (key, data) => {
119
- AtomIO4.setState(family(key), data, store);
120
- });
121
- socket == null ? void 0 : socket.emit(`sub:${family.key}`);
122
- return () => {
123
- socket == null ? void 0 : socket.off(`serve:${family.key}`);
124
- socket == null ? void 0 : socket.emit(`unsub:${family.key}`);
125
- };
126
- }, [family.key]);
127
- }
128
-
129
- // ../src/realtime-react/use-pull-family-member.ts
130
- var AtomIO5 = __toESM(require("atom.io"));
131
- var React5 = __toESM(require("react"));
132
- function usePullFamilyMember(family, subKey) {
133
- const token = family(subKey);
134
- const { socket } = React5.useContext(RealtimeContext);
135
- const store = React5.useContext(StoreContext);
136
- React5.useEffect(() => {
137
- socket == null ? void 0 : socket.on(`serve:${token.key}`, (data) => {
138
- AtomIO5.setState(family(subKey), data, store);
139
- });
140
- socket == null ? void 0 : socket.emit(`sub:${family.key}`, subKey);
141
- return () => {
142
- socket == null ? void 0 : socket.off(`serve:${token.key}`);
143
- socket == null ? void 0 : socket.emit(`unsub:${token.key}`);
144
- };
145
- }, [family.key]);
146
- }
147
-
148
- // ../src/realtime-react/use-push.ts
149
- var AtomIO6 = __toESM(require("atom.io"));
150
- var React6 = __toESM(require("react"));
151
- function usePush(token) {
152
- const { socket } = React6.useContext(RealtimeContext);
153
- const store = React6.useContext(StoreContext);
154
- React6.useEffect(() => {
155
- socket.emit(`claim:${token.key}`);
156
- AtomIO6.subscribe(
157
- token,
158
- ({ newValue }) => {
159
- socket.emit(`pub:${token.key}`, newValue);
160
- },
161
- store
162
- );
163
- return () => {
164
- socket.emit(`unclaim:${token.key}`);
165
- };
166
- }, [token.key]);
167
- }
168
-
169
- // ../src/realtime-react/use-server-action.ts
170
- var AtomIO7 = __toESM(require("atom.io"));
171
- var import_react5 = require("atom.io/react");
172
- var React7 = __toESM(require("react"));
173
- var TX_SUBS = /* @__PURE__ */ new Map();
174
- function useServerAction(token) {
175
- const store = React7.useContext(import_react5.StoreContext);
176
- const { socket } = React7.useContext(RealtimeContext);
177
- React7.useEffect(() => {
178
- var _a;
179
- const count = (_a = TX_SUBS.get(token.key)) != null ? _a : 0;
180
- TX_SUBS.set(token.key, count + 1);
181
- const unsubscribe = count === 0 ? AtomIO7.subscribeToTransaction(
182
- token,
183
- (update) => socket.emit(`tx:${token.key}`, update),
184
- store
185
- ) : () => null;
186
- return () => {
187
- var _a2;
188
- const newCount = (_a2 = TX_SUBS.get(token.key)) != null ? _a2 : 0;
189
- TX_SUBS.set(token.key, newCount - 1);
190
- unsubscribe();
191
- };
192
- }, [token.key]);
193
- return AtomIO7.runTransaction(token, store);
1
+ 'use strict';
2
+
3
+ var J = require('atom.io/react');
4
+ var n = require('react');
5
+ var socket_ioClient = require('socket.io-client');
6
+ var p = require('atom.io');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
194
25
  }
195
26
 
196
- // ../src/realtime-react/realtime-hooks.ts
197
- var realtimeHooks = {
198
- usePull,
199
- usePullFamily,
200
- usePullFamilyMember,
201
- usePush,
202
- useServerAction
203
- };
204
- // Annotate the CommonJS export names for ESM import in node:
205
- 0 && (module.exports = {
206
- RealtimeContext,
207
- RealtimeProvider,
208
- myIdState,
209
- myIdState__INTERNAL,
210
- realtimeHooks,
211
- usePull,
212
- usePullFamily,
213
- usePullFamilyMember,
214
- usePush,
215
- useServerAction
216
- });
27
+ var J__namespace = /*#__PURE__*/_interopNamespace(J);
28
+ var n__namespace = /*#__PURE__*/_interopNamespace(n);
29
+ var p__namespace = /*#__PURE__*/_interopNamespace(p);
30
+
31
+ var R=p__namespace.atom({key:"myId__INTERNAL",default:null}),h=p__namespace.selector({key:"myId",get:({get:e})=>e(R)});var m=n__namespace.createContext({socket:socket_ioClient.io()}),L=({children:e,socket:t})=>{let r=J__namespace.useI(R);return n__namespace.useEffect(()=>{t.on("connect",()=>{r(t.id);}),t.on("disconnect",()=>{r(null);});},[t,r]),jsxRuntime.jsx(m.Provider,{value:{socket:t},children:e})};function d(e){let{socket:t}=n__namespace.useContext(m),r=n__namespace.useContext(J.StoreContext);n__namespace.useEffect(()=>(t.on(`serve:${e.key}`,o=>{p__namespace.setState(e,o,r);}),t.emit(`sub:${e.key}`),()=>{t.off(`serve:${e.key}`),t.emit(`unsub:${e.key}`);}),[e.key]);}function b(e){let{socket:t}=n__namespace.useContext(m),r=n__namespace.useContext(J.StoreContext);n__namespace.useEffect(()=>(t.on(`serve:${e.key}`,(o,s)=>{p__namespace.setState(e(o),s,r);}),t==null||t.emit(`sub:${e.key}`),()=>{t==null||t.off(`serve:${e.key}`),t==null||t.emit(`unsub:${e.key}`);}),[e.key]);}function v(e,t){let r=e(t),{socket:o}=n__namespace.useContext(m),s=n__namespace.useContext(J.StoreContext);n__namespace.useEffect(()=>(o==null||o.on(`serve:${r.key}`,l=>{p__namespace.setState(e(t),l,s);}),o==null||o.emit(`sub:${e.key}`,t),()=>{o==null||o.off(`serve:${r.key}`),o==null||o.emit(`unsub:${r.key}`);}),[e.key]);}function P(e){let{socket:t}=n__namespace.useContext(m),r=n__namespace.useContext(J.StoreContext),o=n__namespace.useId();n__namespace.useEffect(()=>(t.emit(`claim:${e.key}`),p__namespace.subscribe(e,({newValue:s})=>{t.emit(`pub:${e.key}`,s);},`use-push:${o}`,r),()=>{t.emit(`unclaim:${e.key}`);}),[e.key]);}var x=new Map;function T(e){let t=n__namespace.useContext(J.StoreContext),{socket:r}=n__namespace.useContext(m);return n__namespace.useEffect(()=>{var l;let o=(l=x.get(e.key))!=null?l:0;x.set(e.key,o+1);let s=o===0?p__namespace.subscribeToTransaction(e,A=>r.emit(`tx:${e.key}`,A),"use-server-action",t):()=>null;return ()=>{var I;let A=(I=x.get(e.key))!=null?I:0;x.set(e.key,A-1),s();}},[e.key]),p__namespace.runTransaction(e,t)}var ue={usePull:d,usePullFamily:b,usePullFamilyMember:v,usePush:P,useServerAction:T};
32
+
33
+ exports.RealtimeContext = m;
34
+ exports.RealtimeProvider = L;
35
+ exports.myIdState = h;
36
+ exports.myIdState__INTERNAL = R;
37
+ exports.realtimeHooks = ue;
38
+ exports.usePull = d;
39
+ exports.usePullFamily = b;
40
+ exports.usePullFamilyMember = v;
41
+ exports.usePush = P;
42
+ exports.useServerAction = T;
43
+ //# sourceMappingURL=out.js.map
217
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/realtime-react/index.ts","../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/realtime-state.ts","../../src/realtime-react/use-pull.ts","../../src/react/store-context.tsx","../../src/realtime-react/use-pull-family.ts","../../src/realtime-react/use-pull-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/realtime-hooks.ts"],"sourcesContent":["export * from \"./realtime-context\"\nexport * from \"./realtime-hooks\"\nexport * from \"./realtime-state\"\n","import * as AR from \"atom.io/react\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\nimport { io } from \"socket.io-client\"\n\nimport { myIdState__INTERNAL } from \"./realtime-state\"\n\nexport const RealtimeContext = React.createContext<{ socket: Socket }>({\n\tsocket: io(),\n})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket\n}> = ({ children, socket }) => {\n\tconst setMyId = AR.useI(myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsocket.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket.on(`disconnect`, () => {\n\t\t\tsetMyId(null)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import * as AtomIO from \"atom.io\"\n\nexport const myIdState__INTERNAL = AtomIO.atom<string | null>({\n\tkey: `myId__INTERNAL`,\n\tdefault: null,\n})\nexport const myIdState = AtomIO.selector<string | null>({\n\tkey: `myId`,\n\tget: ({ get }) => get(myIdState__INTERNAL),\n})\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { StoreContext } from \"../react\"\n\nexport function usePull<J extends Json>(token: AtomIO.StateToken<J>): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.on(`serve:${token.key}`, (data: J) => {\n\t\t\tAtomIO.setState(token, data, store)\n\t\t})\n\t\tsocket.emit(`sub:${token.key}`)\n\t\treturn () => {\n\t\t\tsocket.off(`serve:${token.key}`)\n\t\t\tsocket.emit(`unsub:${token.key}`)\n\t\t}\n\t}, [token.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nexport const StoreContext = React.createContext<AtomIO.Store>(\n\tAtomIO.__INTERNAL__.IMPLICIT.STORE,\n)\n\nexport const StoreProvider: React.FC<{\n\tchildren: React.ReactNode\n\tstore?: AtomIO.Store\n}> = ({ children, store = AtomIO.__INTERNAL__.IMPLICIT.STORE }) => (\n\t<StoreContext.Provider value={store}>{children}</StoreContext.Provider>\n)\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { StoreContext } from \"../react\"\n\nexport function usePullFamily<J extends Json>(\n\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.on(`serve:${family.key}`, (key: Json, data: J) => {\n\t\t\tAtomIO.setState(family(key), data, store)\n\t\t})\n\t\tsocket?.emit(`sub:${family.key}`)\n\t\treturn () => {\n\t\t\tsocket?.off(`serve:${family.key}`)\n\t\t\tsocket?.emit(`unsub:${family.key}`)\n\t\t}\n\t}, [family.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { StoreContext } from \"../react\"\n\nexport function usePullFamilyMember<J extends Json>(\n\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\tsubKey: AtomIO.Serializable,\n): void {\n\tconst token = family(subKey)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket?.on(`serve:${token.key}`, (data: J) => {\n\t\t\tAtomIO.setState(family(subKey), data, store)\n\t\t})\n\t\tsocket?.emit(`sub:${family.key}`, subKey)\n\t\treturn () => {\n\t\t\tsocket?.off(`serve:${token.key}`)\n\t\t\tsocket?.emit(`unsub:${token.key}`)\n\t\t}\n\t}, [family.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { StoreContext } from \"../react\"\n\nexport function usePush<J extends Json>(token: AtomIO.StateToken<J>): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.emit(`claim:${token.key}`)\n\t\tAtomIO.subscribe(\n\t\t\ttoken,\n\t\t\t({ newValue }) => {\n\t\t\t\tsocket.emit(`pub:${token.key}`, newValue)\n\t\t\t},\n\t\t\tstore,\n\t\t)\n\t\treturn () => {\n\t\t\tsocket.emit(`unclaim:${token.key}`)\n\t\t}\n\t}, [token.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nconst TX_SUBS = new Map<string, number>()\nexport function useServerAction<ƒ extends ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tReact.useEffect(() => {\n\t\tconst count = TX_SUBS.get(token.key) ?? 0\n\t\tTX_SUBS.set(token.key, count + 1)\n\t\tconst unsubscribe =\n\t\t\tcount === 0\n\t\t\t\t? AtomIO.subscribeToTransaction(\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t\t(update) => socket.emit(`tx:${token.key}`, update),\n\t\t\t\t\t\tstore,\n\t\t\t\t )\n\t\t\t\t: () => null\n\t\treturn () => {\n\t\t\tconst newCount = TX_SUBS.get(token.key) ?? 0\n\t\t\tTX_SUBS.set(token.key, newCount - 1)\n\t\t\tunsubscribe()\n\t\t}\n\t}, [token.key])\n\treturn AtomIO.runTransaction(token, store)\n}\n","import type * as AtomIO from \"atom.io\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { usePull } from \"./use-pull\"\nimport { usePullFamily } from \"./use-pull-family\"\nimport { usePullFamilyMember } from \"./use-pull-family-member\"\nimport { usePush } from \"./use-push\"\nimport { useServerAction } from \"./use-server-action\"\n\nexport type RealtimeHooks = {\n\tusePull: <J extends Json>(token: AtomIO.StateToken<J>) => void\n\tusePullFamily: <J extends Json>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t) => void\n\tusePullFamilyMember: <J extends Json>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t\tsubKey: string,\n\t) => void\n\tusePush: <J extends Json>(token: AtomIO.StateToken<J>) => void\n\tuseServerAction: <ƒ extends ƒn>(\n\t\ttoken: AtomIO.TransactionToken<ƒ>,\n\t) => (...parameters: Parameters<ƒ>) => ReturnType<ƒ>\n}\n\nexport const realtimeHooks: RealtimeHooks = {\n\tusePull,\n\tusePullFamily,\n\tusePullFamilyMember,\n\tusePush,\n\tuseServerAction,\n}\n\nexport * from \"./use-pull\"\nexport * from \"./use-pull-family\"\nexport * from \"./use-pull-family-member\"\nexport * from \"./use-push\"\nexport * from \"./use-server-action\"\n"],"mappings":"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","names":["AtomIO","React","AtomIO","React","import_jsx_dev_runtime","AtomIO","React","AtomIO","React","AtomIO","React","AtomIO","import_react","React","_a"]}
1
+ {"version":3,"sources":["../src/realtime-context.tsx","../src/realtime-state.ts","../src/use-pull.ts","../src/use-pull-family.ts","../src/use-pull-family-member.ts","../src/use-push.ts","../src/use-server-action.ts","../src/realtime-hooks.ts"],"names":["AR","React","io","AtomIO","myIdState__INTERNAL","myIdState","get","jsx","RealtimeContext","RealtimeProvider","children","socket","setMyId","StoreContext","usePull","token","store","data","usePullFamily","family","key","usePullFamilyMember","subKey","usePush","id","newValue","TX_SUBS","useServerAction","_a","count","unsubscribe","update","newCount","realtimeHooks"],"mappings":"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","sourcesContent":["import * as AR from \"atom.io/react\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\nimport { io } from \"socket.io-client\"\n\nimport { myIdState__INTERNAL } from \"./realtime-state\"\n\nexport const RealtimeContext = React.createContext<{ socket: Socket }>({\n\tsocket: io(),\n})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket\n}> = ({ children, socket }) => {\n\tconst setMyId = AR.useI(myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsocket.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket.on(`disconnect`, () => {\n\t\t\tsetMyId(null)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import * as AtomIO from \"atom.io\"\n\nexport const myIdState__INTERNAL = AtomIO.atom<string | null>({\n\tkey: `myId__INTERNAL`,\n\tdefault: null,\n})\nexport const myIdState = AtomIO.selector<string | null>({\n\tkey: `myId`,\n\tget: ({ get }) => get(myIdState__INTERNAL),\n})\n","import * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePull<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.on(`serve:${token.key}`, (data: J) => {\n\t\t\tAtomIO.setState(token, data, store)\n\t\t})\n\t\tsocket.emit(`sub:${token.key}`)\n\t\treturn () => {\n\t\t\tsocket.off(`serve:${token.key}`)\n\t\t\tsocket.emit(`unsub:${token.key}`)\n\t\t}\n\t}, [token.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullFamily<J extends Json.Serializable>(\n\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.on(`serve:${family.key}`, (key: Json.Serializable, data: J) => {\n\t\t\tAtomIO.setState(family(key), data, store)\n\t\t})\n\t\tsocket?.emit(`sub:${family.key}`)\n\t\treturn () => {\n\t\t\tsocket?.off(`serve:${family.key}`)\n\t\t\tsocket?.emit(`unsub:${family.key}`)\n\t\t}\n\t}, [family.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullFamilyMember<J extends Json.Serializable>(\n\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\tsubKey: AtomIO.Json.Serializable,\n): void {\n\tconst token = family(subKey)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket?.on(`serve:${token.key}`, (data: J) => {\n\t\t\tAtomIO.setState(family(subKey), data, store)\n\t\t})\n\t\tsocket?.emit(`sub:${family.key}`, subKey)\n\t\treturn () => {\n\t\t\tsocket?.off(`serve:${token.key}`)\n\t\t\tsocket?.emit(`unsub:${token.key}`)\n\t\t}\n\t}, [family.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tconst id = React.useId()\n\tReact.useEffect(() => {\n\t\tsocket.emit(`claim:${token.key}`)\n\t\tAtomIO.subscribe(\n\t\t\ttoken,\n\t\t\t({ newValue }) => {\n\t\t\t\tsocket.emit(`pub:${token.key}`, newValue)\n\t\t\t},\n\t\t\t`use-push:${id}`,\n\t\t\tstore,\n\t\t)\n\t\treturn () => {\n\t\t\tsocket.emit(`unclaim:${token.key}`)\n\t\t}\n\t}, [token.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nconst TX_SUBS = new Map<string, number>()\nexport function useServerAction<ƒ extends AtomIO.ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tReact.useEffect(() => {\n\t\tconst count = TX_SUBS.get(token.key) ?? 0\n\t\tTX_SUBS.set(token.key, count + 1)\n\t\tconst unsubscribe =\n\t\t\tcount === 0\n\t\t\t\t? AtomIO.subscribeToTransaction(\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t\t(update) => socket.emit(`tx:${token.key}`, update),\n\t\t\t\t\t\t`use-server-action`,\n\t\t\t\t\t\tstore,\n\t\t\t\t )\n\t\t\t\t: () => null\n\t\treturn () => {\n\t\t\tconst newCount = TX_SUBS.get(token.key) ?? 0\n\t\t\tTX_SUBS.set(token.key, newCount - 1)\n\t\t\tunsubscribe()\n\t\t}\n\t}, [token.key])\n\treturn AtomIO.runTransaction(token, store)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nimport { usePull } from \"./use-pull\"\nimport { usePullFamily } from \"./use-pull-family\"\nimport { usePullFamilyMember } from \"./use-pull-family-member\"\nimport { usePush } from \"./use-push\"\nimport { useServerAction } from \"./use-server-action\"\n\nexport type RealtimeHooks = {\n\tusePull: <J extends Json.Serializable>(token: AtomIO.StateToken<J>) => void\n\tusePullFamily: <J extends Json.Serializable>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t) => void\n\tusePullFamilyMember: <J extends Json.Serializable>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t\tsubKey: string,\n\t) => void\n\tusePush: <J extends Json.Serializable>(token: AtomIO.StateToken<J>) => void\n\tuseServerAction: <ƒ extends AtomIO.ƒn>(\n\t\ttoken: AtomIO.TransactionToken<ƒ>,\n\t) => (...parameters: Parameters<ƒ>) => ReturnType<ƒ>\n}\n\nexport const realtimeHooks: RealtimeHooks = {\n\tusePull,\n\tusePullFamily,\n\tusePullFamilyMember,\n\tusePush,\n\tuseServerAction,\n}\n\nexport * from \"./use-pull\"\nexport * from \"./use-pull-family\"\nexport * from \"./use-pull-family-member\"\nexport * from \"./use-push\"\nexport * from \"./use-server-action\"\n"]}
@@ -1,172 +1,12 @@
1
- // ../src/realtime-react/realtime-context.tsx
2
- import * as AR from "atom.io/react";
3
- import * as React from "react";
4
- import { io } from "socket.io-client";
1
+ import * as J from 'atom.io/react';
2
+ import { StoreContext } from 'atom.io/react';
3
+ import * as n from 'react';
4
+ import { io } from 'socket.io-client';
5
+ import * as p from 'atom.io';
6
+ import { jsx } from 'react/jsx-runtime';
5
7
 
6
- // ../src/realtime-react/realtime-state.ts
7
- import * as AtomIO from "atom.io";
8
- var myIdState__INTERNAL = AtomIO.atom({
9
- key: `myId__INTERNAL`,
10
- default: null
11
- });
12
- var myIdState = AtomIO.selector({
13
- key: `myId`,
14
- get: ({ get }) => get(myIdState__INTERNAL)
15
- });
8
+ var R=p.atom({key:"myId__INTERNAL",default:null}),h=p.selector({key:"myId",get:({get:e})=>e(R)});var m=n.createContext({socket:io()}),L=({children:e,socket:t})=>{let r=J.useI(R);return n.useEffect(()=>{t.on("connect",()=>{r(t.id);}),t.on("disconnect",()=>{r(null);});},[t,r]),jsx(m.Provider,{value:{socket:t},children:e})};function d(e){let{socket:t}=n.useContext(m),r=n.useContext(StoreContext);n.useEffect(()=>(t.on(`serve:${e.key}`,o=>{p.setState(e,o,r);}),t.emit(`sub:${e.key}`),()=>{t.off(`serve:${e.key}`),t.emit(`unsub:${e.key}`);}),[e.key]);}function b(e){let{socket:t}=n.useContext(m),r=n.useContext(StoreContext);n.useEffect(()=>(t.on(`serve:${e.key}`,(o,s)=>{p.setState(e(o),s,r);}),t==null||t.emit(`sub:${e.key}`),()=>{t==null||t.off(`serve:${e.key}`),t==null||t.emit(`unsub:${e.key}`);}),[e.key]);}function v(e,t){let r=e(t),{socket:o}=n.useContext(m),s=n.useContext(StoreContext);n.useEffect(()=>(o==null||o.on(`serve:${r.key}`,l=>{p.setState(e(t),l,s);}),o==null||o.emit(`sub:${e.key}`,t),()=>{o==null||o.off(`serve:${r.key}`),o==null||o.emit(`unsub:${r.key}`);}),[e.key]);}function P(e){let{socket:t}=n.useContext(m),r=n.useContext(StoreContext),o=n.useId();n.useEffect(()=>(t.emit(`claim:${e.key}`),p.subscribe(e,({newValue:s})=>{t.emit(`pub:${e.key}`,s);},`use-push:${o}`,r),()=>{t.emit(`unclaim:${e.key}`);}),[e.key]);}var x=new Map;function T(e){let t=n.useContext(StoreContext),{socket:r}=n.useContext(m);return n.useEffect(()=>{var l;let o=(l=x.get(e.key))!=null?l:0;x.set(e.key,o+1);let s=o===0?p.subscribeToTransaction(e,A=>r.emit(`tx:${e.key}`,A),"use-server-action",t):()=>null;return ()=>{var I;let A=(I=x.get(e.key))!=null?I:0;x.set(e.key,A-1),s();}},[e.key]),p.runTransaction(e,t)}var ue={usePull:d,usePullFamily:b,usePullFamilyMember:v,usePush:P,useServerAction:T};
16
9
 
17
- // ../src/realtime-react/realtime-context.tsx
18
- import { jsxDEV } from "react/jsx-dev-runtime";
19
- var RealtimeContext = React.createContext({
20
- socket: io()
21
- });
22
- var RealtimeProvider = ({ children, socket }) => {
23
- const setMyId = AR.useI(myIdState__INTERNAL);
24
- React.useEffect(() => {
25
- socket.on(`connect`, () => {
26
- setMyId(socket.id);
27
- });
28
- socket.on(`disconnect`, () => {
29
- setMyId(null);
30
- });
31
- }, [socket, setMyId]);
32
- return /* @__PURE__ */ jsxDEV(RealtimeContext.Provider, { value: { socket }, children }, void 0, false, {
33
- fileName: "../src/realtime-react/realtime-context.tsx",
34
- lineNumber: 26,
35
- columnNumber: 3
36
- }, this);
37
- };
38
-
39
- // ../src/realtime-react/use-pull.ts
40
- import * as AtomIO3 from "atom.io";
41
- import * as React3 from "react";
42
-
43
- // ../src/react/store-context.tsx
44
- import * as AtomIO2 from "atom.io";
45
- import * as React2 from "react";
46
- import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
47
- var StoreContext = React2.createContext(
48
- AtomIO2.__INTERNAL__.IMPLICIT.STORE
49
- );
50
-
51
- // ../src/realtime-react/use-pull.ts
52
- function usePull(token) {
53
- const { socket } = React3.useContext(RealtimeContext);
54
- const store = React3.useContext(StoreContext);
55
- React3.useEffect(() => {
56
- socket.on(`serve:${token.key}`, (data) => {
57
- AtomIO3.setState(token, data, store);
58
- });
59
- socket.emit(`sub:${token.key}`);
60
- return () => {
61
- socket.off(`serve:${token.key}`);
62
- socket.emit(`unsub:${token.key}`);
63
- };
64
- }, [token.key]);
65
- }
66
-
67
- // ../src/realtime-react/use-pull-family.ts
68
- import * as AtomIO4 from "atom.io";
69
- import * as React4 from "react";
70
- function usePullFamily(family) {
71
- const { socket } = React4.useContext(RealtimeContext);
72
- const store = React4.useContext(StoreContext);
73
- React4.useEffect(() => {
74
- socket.on(`serve:${family.key}`, (key, data) => {
75
- AtomIO4.setState(family(key), data, store);
76
- });
77
- socket == null ? void 0 : socket.emit(`sub:${family.key}`);
78
- return () => {
79
- socket == null ? void 0 : socket.off(`serve:${family.key}`);
80
- socket == null ? void 0 : socket.emit(`unsub:${family.key}`);
81
- };
82
- }, [family.key]);
83
- }
84
-
85
- // ../src/realtime-react/use-pull-family-member.ts
86
- import * as AtomIO5 from "atom.io";
87
- import * as React5 from "react";
88
- function usePullFamilyMember(family, subKey) {
89
- const token = family(subKey);
90
- const { socket } = React5.useContext(RealtimeContext);
91
- const store = React5.useContext(StoreContext);
92
- React5.useEffect(() => {
93
- socket == null ? void 0 : socket.on(`serve:${token.key}`, (data) => {
94
- AtomIO5.setState(family(subKey), data, store);
95
- });
96
- socket == null ? void 0 : socket.emit(`sub:${family.key}`, subKey);
97
- return () => {
98
- socket == null ? void 0 : socket.off(`serve:${token.key}`);
99
- socket == null ? void 0 : socket.emit(`unsub:${token.key}`);
100
- };
101
- }, [family.key]);
102
- }
103
-
104
- // ../src/realtime-react/use-push.ts
105
- import * as AtomIO6 from "atom.io";
106
- import * as React6 from "react";
107
- function usePush(token) {
108
- const { socket } = React6.useContext(RealtimeContext);
109
- const store = React6.useContext(StoreContext);
110
- React6.useEffect(() => {
111
- socket.emit(`claim:${token.key}`);
112
- AtomIO6.subscribe(
113
- token,
114
- ({ newValue }) => {
115
- socket.emit(`pub:${token.key}`, newValue);
116
- },
117
- store
118
- );
119
- return () => {
120
- socket.emit(`unclaim:${token.key}`);
121
- };
122
- }, [token.key]);
123
- }
124
-
125
- // ../src/realtime-react/use-server-action.ts
126
- import * as AtomIO7 from "atom.io";
127
- import { StoreContext as StoreContext2 } from "atom.io/react";
128
- import * as React7 from "react";
129
- var TX_SUBS = /* @__PURE__ */ new Map();
130
- function useServerAction(token) {
131
- const store = React7.useContext(StoreContext2);
132
- const { socket } = React7.useContext(RealtimeContext);
133
- React7.useEffect(() => {
134
- var _a;
135
- const count = (_a = TX_SUBS.get(token.key)) != null ? _a : 0;
136
- TX_SUBS.set(token.key, count + 1);
137
- const unsubscribe = count === 0 ? AtomIO7.subscribeToTransaction(
138
- token,
139
- (update) => socket.emit(`tx:${token.key}`, update),
140
- store
141
- ) : () => null;
142
- return () => {
143
- var _a2;
144
- const newCount = (_a2 = TX_SUBS.get(token.key)) != null ? _a2 : 0;
145
- TX_SUBS.set(token.key, newCount - 1);
146
- unsubscribe();
147
- };
148
- }, [token.key]);
149
- return AtomIO7.runTransaction(token, store);
150
- }
151
-
152
- // ../src/realtime-react/realtime-hooks.ts
153
- var realtimeHooks = {
154
- usePull,
155
- usePullFamily,
156
- usePullFamilyMember,
157
- usePush,
158
- useServerAction
159
- };
160
- export {
161
- RealtimeContext,
162
- RealtimeProvider,
163
- myIdState,
164
- myIdState__INTERNAL,
165
- realtimeHooks,
166
- usePull,
167
- usePullFamily,
168
- usePullFamilyMember,
169
- usePush,
170
- useServerAction
171
- };
10
+ export { m as RealtimeContext, L as RealtimeProvider, h as myIdState, R as myIdState__INTERNAL, ue as realtimeHooks, d as usePull, b as usePullFamily, v as usePullFamilyMember, P as usePush, T as useServerAction };
11
+ //# sourceMappingURL=out.js.map
172
12
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/realtime-state.ts","../../src/realtime-react/use-pull.ts","../../src/react/store-context.tsx","../../src/realtime-react/use-pull-family.ts","../../src/realtime-react/use-pull-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/realtime-hooks.ts"],"sourcesContent":["import * as AR from \"atom.io/react\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\nimport { io } from \"socket.io-client\"\n\nimport { myIdState__INTERNAL } from \"./realtime-state\"\n\nexport const RealtimeContext = React.createContext<{ socket: Socket }>({\n\tsocket: io(),\n})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket\n}> = ({ children, socket }) => {\n\tconst setMyId = AR.useI(myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsocket.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket.on(`disconnect`, () => {\n\t\t\tsetMyId(null)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import * as AtomIO from \"atom.io\"\n\nexport const myIdState__INTERNAL = AtomIO.atom<string | null>({\n\tkey: `myId__INTERNAL`,\n\tdefault: null,\n})\nexport const myIdState = AtomIO.selector<string | null>({\n\tkey: `myId`,\n\tget: ({ get }) => get(myIdState__INTERNAL),\n})\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { StoreContext } from \"../react\"\n\nexport function usePull<J extends Json>(token: AtomIO.StateToken<J>): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.on(`serve:${token.key}`, (data: J) => {\n\t\t\tAtomIO.setState(token, data, store)\n\t\t})\n\t\tsocket.emit(`sub:${token.key}`)\n\t\treturn () => {\n\t\t\tsocket.off(`serve:${token.key}`)\n\t\t\tsocket.emit(`unsub:${token.key}`)\n\t\t}\n\t}, [token.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nexport const StoreContext = React.createContext<AtomIO.Store>(\n\tAtomIO.__INTERNAL__.IMPLICIT.STORE,\n)\n\nexport const StoreProvider: React.FC<{\n\tchildren: React.ReactNode\n\tstore?: AtomIO.Store\n}> = ({ children, store = AtomIO.__INTERNAL__.IMPLICIT.STORE }) => (\n\t<StoreContext.Provider value={store}>{children}</StoreContext.Provider>\n)\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { StoreContext } from \"../react\"\n\nexport function usePullFamily<J extends Json>(\n\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.on(`serve:${family.key}`, (key: Json, data: J) => {\n\t\t\tAtomIO.setState(family(key), data, store)\n\t\t})\n\t\tsocket?.emit(`sub:${family.key}`)\n\t\treturn () => {\n\t\t\tsocket?.off(`serve:${family.key}`)\n\t\t\tsocket?.emit(`unsub:${family.key}`)\n\t\t}\n\t}, [family.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { StoreContext } from \"../react\"\n\nexport function usePullFamilyMember<J extends Json>(\n\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\tsubKey: AtomIO.Serializable,\n): void {\n\tconst token = family(subKey)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket?.on(`serve:${token.key}`, (data: J) => {\n\t\t\tAtomIO.setState(family(subKey), data, store)\n\t\t})\n\t\tsocket?.emit(`sub:${family.key}`, subKey)\n\t\treturn () => {\n\t\t\tsocket?.off(`serve:${token.key}`)\n\t\t\tsocket?.emit(`unsub:${token.key}`)\n\t\t}\n\t}, [family.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport * as React from \"react\"\n\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { StoreContext } from \"../react\"\n\nexport function usePush<J extends Json>(token: AtomIO.StateToken<J>): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.emit(`claim:${token.key}`)\n\t\tAtomIO.subscribe(\n\t\t\ttoken,\n\t\t\t({ newValue }) => {\n\t\t\t\tsocket.emit(`pub:${token.key}`, newValue)\n\t\t\t},\n\t\t\tstore,\n\t\t)\n\t\treturn () => {\n\t\t\tsocket.emit(`unclaim:${token.key}`)\n\t\t}\n\t}, [token.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nconst TX_SUBS = new Map<string, number>()\nexport function useServerAction<ƒ extends ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tReact.useEffect(() => {\n\t\tconst count = TX_SUBS.get(token.key) ?? 0\n\t\tTX_SUBS.set(token.key, count + 1)\n\t\tconst unsubscribe =\n\t\t\tcount === 0\n\t\t\t\t? AtomIO.subscribeToTransaction(\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t\t(update) => socket.emit(`tx:${token.key}`, update),\n\t\t\t\t\t\tstore,\n\t\t\t\t )\n\t\t\t\t: () => null\n\t\treturn () => {\n\t\t\tconst newCount = TX_SUBS.get(token.key) ?? 0\n\t\t\tTX_SUBS.set(token.key, newCount - 1)\n\t\t\tunsubscribe()\n\t\t}\n\t}, [token.key])\n\treturn AtomIO.runTransaction(token, store)\n}\n","import type * as AtomIO from \"atom.io\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\nimport type { Json } from \"~/packages/anvl/src/json\"\n\nimport { usePull } from \"./use-pull\"\nimport { usePullFamily } from \"./use-pull-family\"\nimport { usePullFamilyMember } from \"./use-pull-family-member\"\nimport { usePush } from \"./use-push\"\nimport { useServerAction } from \"./use-server-action\"\n\nexport type RealtimeHooks = {\n\tusePull: <J extends Json>(token: AtomIO.StateToken<J>) => void\n\tusePullFamily: <J extends Json>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t) => void\n\tusePullFamilyMember: <J extends Json>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t\tsubKey: string,\n\t) => void\n\tusePush: <J extends Json>(token: AtomIO.StateToken<J>) => void\n\tuseServerAction: <ƒ extends ƒn>(\n\t\ttoken: AtomIO.TransactionToken<ƒ>,\n\t) => (...parameters: Parameters<ƒ>) => ReturnType<ƒ>\n}\n\nexport const realtimeHooks: RealtimeHooks = {\n\tusePull,\n\tusePullFamily,\n\tusePullFamilyMember,\n\tusePush,\n\tuseServerAction,\n}\n\nexport * from \"./use-pull\"\nexport * from \"./use-pull-family\"\nexport * from \"./use-pull-family-member\"\nexport * from \"./use-push\"\nexport * from \"./use-server-action\"\n"],"mappings":"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","names":["AtomIO","React","AtomIO","React","jsxDEV","AtomIO","React","AtomIO","React","AtomIO","React","AtomIO","StoreContext","React","StoreContext","_a"]}
1
+ {"version":3,"sources":["../src/realtime-context.tsx","../src/realtime-state.ts","../src/use-pull.ts","../src/use-pull-family.ts","../src/use-pull-family-member.ts","../src/use-push.ts","../src/use-server-action.ts","../src/realtime-hooks.ts"],"names":["AR","React","io","AtomIO","myIdState__INTERNAL","myIdState","get","jsx","RealtimeContext","RealtimeProvider","children","socket","setMyId","StoreContext","usePull","token","store","data","usePullFamily","family","key","usePullFamilyMember","subKey","usePush","id","newValue","TX_SUBS","useServerAction","_a","count","unsubscribe","update","newCount","realtimeHooks"],"mappings":"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","sourcesContent":["import * as AR from \"atom.io/react\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\nimport { io } from \"socket.io-client\"\n\nimport { myIdState__INTERNAL } from \"./realtime-state\"\n\nexport const RealtimeContext = React.createContext<{ socket: Socket }>({\n\tsocket: io(),\n})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket\n}> = ({ children, socket }) => {\n\tconst setMyId = AR.useI(myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsocket.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket.on(`disconnect`, () => {\n\t\t\tsetMyId(null)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import * as AtomIO from \"atom.io\"\n\nexport const myIdState__INTERNAL = AtomIO.atom<string | null>({\n\tkey: `myId__INTERNAL`,\n\tdefault: null,\n})\nexport const myIdState = AtomIO.selector<string | null>({\n\tkey: `myId`,\n\tget: ({ get }) => get(myIdState__INTERNAL),\n})\n","import * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePull<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.on(`serve:${token.key}`, (data: J) => {\n\t\t\tAtomIO.setState(token, data, store)\n\t\t})\n\t\tsocket.emit(`sub:${token.key}`)\n\t\treturn () => {\n\t\t\tsocket.off(`serve:${token.key}`)\n\t\t\tsocket.emit(`unsub:${token.key}`)\n\t\t}\n\t}, [token.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullFamily<J extends Json.Serializable>(\n\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket.on(`serve:${family.key}`, (key: Json.Serializable, data: J) => {\n\t\t\tAtomIO.setState(family(key), data, store)\n\t\t})\n\t\tsocket?.emit(`sub:${family.key}`)\n\t\treturn () => {\n\t\t\tsocket?.off(`serve:${family.key}`)\n\t\t\tsocket?.emit(`unsub:${family.key}`)\n\t\t}\n\t}, [family.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullFamilyMember<J extends Json.Serializable>(\n\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\tsubKey: AtomIO.Json.Serializable,\n): void {\n\tconst token = family(subKey)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tsocket?.on(`serve:${token.key}`, (data: J) => {\n\t\t\tAtomIO.setState(family(subKey), data, store)\n\t\t})\n\t\tsocket?.emit(`sub:${family.key}`, subKey)\n\t\treturn () => {\n\t\t\tsocket?.off(`serve:${token.key}`)\n\t\t\tsocket?.emit(`unsub:${token.key}`)\n\t\t}\n\t}, [family.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tconst id = React.useId()\n\tReact.useEffect(() => {\n\t\tsocket.emit(`claim:${token.key}`)\n\t\tAtomIO.subscribe(\n\t\t\ttoken,\n\t\t\t({ newValue }) => {\n\t\t\t\tsocket.emit(`pub:${token.key}`, newValue)\n\t\t\t},\n\t\t\t`use-push:${id}`,\n\t\t\tstore,\n\t\t)\n\t\treturn () => {\n\t\t\tsocket.emit(`unclaim:${token.key}`)\n\t\t}\n\t}, [token.key])\n}\n","import * as AtomIO from \"atom.io\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nconst TX_SUBS = new Map<string, number>()\nexport function useServerAction<ƒ extends AtomIO.ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tReact.useEffect(() => {\n\t\tconst count = TX_SUBS.get(token.key) ?? 0\n\t\tTX_SUBS.set(token.key, count + 1)\n\t\tconst unsubscribe =\n\t\t\tcount === 0\n\t\t\t\t? AtomIO.subscribeToTransaction(\n\t\t\t\t\t\ttoken,\n\t\t\t\t\t\t(update) => socket.emit(`tx:${token.key}`, update),\n\t\t\t\t\t\t`use-server-action`,\n\t\t\t\t\t\tstore,\n\t\t\t\t )\n\t\t\t\t: () => null\n\t\treturn () => {\n\t\t\tconst newCount = TX_SUBS.get(token.key) ?? 0\n\t\t\tTX_SUBS.set(token.key, newCount - 1)\n\t\t\tunsubscribe()\n\t\t}\n\t}, [token.key])\n\treturn AtomIO.runTransaction(token, store)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nimport { usePull } from \"./use-pull\"\nimport { usePullFamily } from \"./use-pull-family\"\nimport { usePullFamilyMember } from \"./use-pull-family-member\"\nimport { usePush } from \"./use-push\"\nimport { useServerAction } from \"./use-server-action\"\n\nexport type RealtimeHooks = {\n\tusePull: <J extends Json.Serializable>(token: AtomIO.StateToken<J>) => void\n\tusePullFamily: <J extends Json.Serializable>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t) => void\n\tusePullFamilyMember: <J extends Json.Serializable>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t\tsubKey: string,\n\t) => void\n\tusePush: <J extends Json.Serializable>(token: AtomIO.StateToken<J>) => void\n\tuseServerAction: <ƒ extends AtomIO.ƒn>(\n\t\ttoken: AtomIO.TransactionToken<ƒ>,\n\t) => (...parameters: Parameters<ƒ>) => ReturnType<ƒ>\n}\n\nexport const realtimeHooks: RealtimeHooks = {\n\tusePull,\n\tusePullFamily,\n\tusePullFamilyMember,\n\tusePush,\n\tuseServerAction,\n}\n\nexport * from \"./use-pull\"\nexport * from \"./use-pull-family\"\nexport * from \"./use-pull-family-member\"\nexport * from \"./use-push\"\nexport * from \"./use-server-action\"\n"]}
package/src/atom.ts CHANGED
@@ -1,8 +1,8 @@
1
- import type { Serializable } from "~/packages/anvl/src/json"
1
+ import type { Subject } from "atom.io/internal"
2
+ import { atomFamily__INTERNAL, atom__INTERNAL } from "atom.io/internal"
3
+ import type { Json } from "atom.io/json"
2
4
 
3
5
  import type { AtomToken } from "."
4
- import type { Subject } from "./internal"
5
- import { atomFamily__INTERNAL, atom__INTERNAL } from "./internal"
6
6
 
7
7
  export type Effectors<T> = {
8
8
  setSelf: <V extends T>(next: V | ((oldValue: T) => V)) => void
@@ -15,19 +15,20 @@ export type AtomOptions<T> = {
15
15
  key: string
16
16
  default: T | (() => T)
17
17
  effects?: AtomEffect<T>[]
18
+ mutable?: boolean
18
19
  }
19
20
 
20
21
  export function atom<T>(options: AtomOptions<T>): AtomToken<T> {
21
22
  return atom__INTERNAL<T>(options)
22
23
  }
23
24
 
24
- export type AtomFamilyOptions<T, K extends Serializable> = {
25
+ export type AtomFamilyOptions<T, K extends Json.Serializable> = {
25
26
  key: string
26
27
  default: T | ((key: K) => T)
27
28
  effects?: (key: K) => AtomEffect<T>[]
28
29
  }
29
30
 
30
- export type AtomFamily<T, K extends Serializable = Serializable> = ((
31
+ export type AtomFamily<T, K extends Json.Serializable = Json.Serializable> = ((
31
32
  key: K,
32
33
  ) => AtomToken<T>) & {
33
34
  key: string
@@ -35,7 +36,7 @@ export type AtomFamily<T, K extends Serializable = Serializable> = ((
35
36
  subject: Subject<AtomToken<T>>
36
37
  }
37
38
 
38
- export function atomFamily<T, K extends Serializable>(
39
+ export function atomFamily<T, K extends Json.Serializable>(
39
40
  options: AtomFamilyOptions<T, K>,
40
41
  ): AtomFamily<T, K> {
41
42
  return atomFamily__INTERNAL<T, K>(options)