atom.io 0.6.8 → 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 (130) hide show
  1. package/dist/index.d.mts +226 -258
  2. package/dist/index.d.ts +226 -258
  3. package/dist/index.js +28 -1917
  4. package/dist/index.js.map +1 -1
  5. package/dist/index.mjs +5 -1877
  6. package/dist/index.mjs.map +1 -1
  7. package/introspection/dist/index.d.mts +117 -171
  8. package/introspection/dist/index.d.ts +117 -171
  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 +32 -1
  14. package/json/dist/index.d.ts +32 -1
  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 +22 -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 -50
  25. package/react-devtools/dist/index.css.map +1 -1
  26. package/react-devtools/dist/index.d.mts +124 -188
  27. package/react-devtools/dist/index.d.ts +124 -188
  28. package/react-devtools/dist/index.js +56 -4674
  29. package/react-devtools/dist/index.js.map +1 -1
  30. package/react-devtools/dist/index.mjs +19 -4642
  31. package/react-devtools/dist/index.mjs.map +1 -1
  32. package/realtime/dist/index.d.mts +1 -3
  33. package/realtime/dist/index.d.ts +1 -3
  34. package/realtime/dist/index.js +26 -184
  35. package/realtime/dist/index.js.map +1 -1
  36. package/realtime/dist/index.mjs +4 -148
  37. package/realtime/dist/index.mjs.map +1 -1
  38. package/realtime-react/dist/index.d.mts +2 -4
  39. package/realtime-react/dist/index.d.ts +2 -4
  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 +4 -3
  45. package/src/index.ts +12 -9
  46. package/src/logger.ts +5 -5
  47. package/src/selector.ts +3 -3
  48. package/src/silo.ts +36 -39
  49. package/src/subscribe.ts +24 -19
  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 -144
  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 -68
  59. package/src/internal/selector/create-readonly-selector.ts +0 -48
  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/subscribe-internal.ts +0 -88
  69. package/src/internal/time-travel-internal.ts +0 -91
  70. package/src/internal/timeline/add-atom-to-timeline.ts +0 -168
  71. package/src/internal/timeline/index.ts +0 -1
  72. package/src/internal/timeline-internal.ts +0 -107
  73. package/src/internal/transaction/abort-transaction.ts +0 -12
  74. package/src/internal/transaction/apply-transaction.ts +0 -57
  75. package/src/internal/transaction/build-transaction.ts +0 -33
  76. package/src/internal/transaction/index.ts +0 -25
  77. package/src/internal/transaction/redo-transaction.ts +0 -23
  78. package/src/internal/transaction/undo-transaction.ts +0 -23
  79. package/src/internal/transaction-internal.ts +0 -61
  80. package/src/introspection/attach-atom-index.ts +0 -73
  81. package/src/introspection/attach-introspection-states.ts +0 -42
  82. package/src/introspection/attach-selector-index.ts +0 -77
  83. package/src/introspection/attach-timeline-family.ts +0 -59
  84. package/src/introspection/attach-timeline-index.ts +0 -36
  85. package/src/introspection/attach-transaction-index.ts +0 -38
  86. package/src/introspection/attach-transaction-logs.ts +0 -40
  87. package/src/introspection/index.ts +0 -20
  88. package/src/json/index.ts +0 -1
  89. package/src/json/select-json.ts +0 -18
  90. package/src/react/index.ts +0 -2
  91. package/src/react/store-context.tsx +0 -13
  92. package/src/react/store-hooks.ts +0 -47
  93. package/src/react-devtools/AtomIODevtools.tsx +0 -107
  94. package/src/react-devtools/Button.tsx +0 -24
  95. package/src/react-devtools/StateEditor.tsx +0 -74
  96. package/src/react-devtools/StateIndex.tsx +0 -156
  97. package/src/react-devtools/TimelineIndex.tsx +0 -92
  98. package/src/react-devtools/TransactionIndex.tsx +0 -70
  99. package/src/react-devtools/Updates.tsx +0 -145
  100. package/src/react-devtools/devtools.scss +0 -310
  101. package/src/react-devtools/index.ts +0 -72
  102. package/src/react-explorer/AtomIOExplorer.tsx +0 -218
  103. package/src/react-explorer/explorer-effects.ts +0 -20
  104. package/src/react-explorer/explorer-states.ts +0 -217
  105. package/src/react-explorer/index.ts +0 -23
  106. package/src/react-explorer/space-states.ts +0 -72
  107. package/src/react-explorer/view-states.ts +0 -41
  108. package/src/realtime/README.md +0 -33
  109. package/src/realtime/hook-composition/expose-family.ts +0 -101
  110. package/src/realtime/hook-composition/expose-single.ts +0 -38
  111. package/src/realtime/hook-composition/expose-timeline.ts +0 -60
  112. package/src/realtime/hook-composition/index.ts +0 -12
  113. package/src/realtime/hook-composition/receive-state.ts +0 -29
  114. package/src/realtime/hook-composition/receive-transaction.ts +0 -18
  115. package/src/realtime/index.ts +0 -1
  116. package/src/realtime-react/index.ts +0 -3
  117. package/src/realtime-react/realtime-context.tsx +0 -30
  118. package/src/realtime-react/realtime-hooks.ts +0 -39
  119. package/src/realtime-react/realtime-state.ts +0 -10
  120. package/src/realtime-react/use-pull-family-member.ts +0 -26
  121. package/src/realtime-react/use-pull-family.ts +0 -24
  122. package/src/realtime-react/use-pull.ts +0 -24
  123. package/src/realtime-react/use-push.ts +0 -27
  124. package/src/realtime-react/use-server-action.ts +0 -33
  125. package/src/realtime-testing/index.ts +0 -1
  126. package/src/realtime-testing/setup-realtime-test.tsx +0 -159
  127. package/src/tracker/index.ts +0 -3
  128. package/src/tracker/tracker.ts +0 -61
  129. package/src/web-effects/index.ts +0 -1
  130. package/src/web-effects/storage.ts +0 -30
@@ -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.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 * 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.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 * 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.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 * 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.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.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.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 ƒ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.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 * 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.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 * 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.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 * 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.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.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.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 ƒ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 { Json } 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,6 +15,7 @@ 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> {
package/src/index.ts CHANGED
@@ -1,17 +1,20 @@
1
- import { capitalize } from "~/packages/anvl/src/string/capitalize"
2
-
3
1
  import {
4
2
  IMPLICIT,
5
3
  closeOperation,
6
- openOperation,
7
4
  getState__INTERNAL,
8
- setState__INTERNAL,
9
5
  isAtomDefault,
10
6
  isSelectorDefault,
7
+ openOperation,
8
+ setState__INTERNAL,
11
9
  withdraw,
12
- } from "./internal"
13
- import * as __INTERNAL__ from "./internal"
14
- import type { Store } from "./internal/store"
10
+ } from "atom.io/internal"
11
+ import * as __INTERNAL__ from "atom.io/internal"
12
+ import type { Store } from "atom.io/internal"
13
+
14
+ import type { ƒn } from "~/packages/anvl/src/function"
15
+ import { capitalize } from "~/packages/anvl/src/string/capitalize"
16
+
17
+ export { ƒn }
15
18
 
16
19
  export * from "./atom"
17
20
  export * from "./logger"
@@ -21,8 +24,8 @@ export * from "./subscribe"
21
24
  export * from "./timeline"
22
25
  export * from "./transaction"
23
26
  export { __INTERNAL__ }
24
- export type { Store } from "./internal/store"
25
- export type { Json } from "~/packages/anvl/src/json"
27
+ export type { Store } from "atom.io/internal"
28
+ export type { Json } from "atom.io/json"
26
29
 
27
30
  export type AtomToken<_> = {
28
31
  key: string
package/src/logger.ts CHANGED
@@ -1,7 +1,7 @@
1
- import { doNothing } from "~/packages/anvl/src/function"
1
+ import { IMPLICIT } from "atom.io/internal"
2
+ import type { Store } from "atom.io/internal"
2
3
 
3
- import type { Store } from "./internal/store"
4
- import { IMPLICIT } from "./internal/store"
4
+ import { doNothing } from "~/packages/anvl/src/function"
5
5
 
6
6
  export type Logger = Pick<Console, `error` | `info` | `warn`>
7
7
  export const LOG_LEVELS: ReadonlyArray<keyof Logger> = [
@@ -21,10 +21,10 @@ export const setLogLevel = (
21
21
  store.config.logger = { ...console }
22
22
  LOG_LEVELS.forEach((logLevel) => {
23
23
  if (LOG_LEVELS.indexOf(logLevel) < LOG_LEVELS.indexOf(preferredLevel)) {
24
- // rome-ignore lint/style/noNonNullAssertion: we just set it
24
+ // biome-ignore lint/style/noNonNullAssertion: we just set it
25
25
  store.config.logger![logLevel] = doNothing
26
26
  } else {
27
- // rome-ignore lint/style/noNonNullAssertion: we just set it
27
+ // biome-ignore lint/style/noNonNullAssertion: we just set it
28
28
  store.config.logger![logLevel] = logger__INTERNAL[logLevel]
29
29
  }
30
30
  })
package/src/selector.ts CHANGED
@@ -1,8 +1,8 @@
1
- import type { Json } from "~/packages/anvl/src/json"
1
+ import type { Subject } from "atom.io/internal"
2
+ import { selectorFamily__INTERNAL, selector__INTERNAL } from "atom.io/internal"
3
+ import type { Json } from "atom.io/json"
2
4
 
3
5
  import type { ReadonlySelectorToken, SelectorToken } from "."
4
- import type { Subject } from "./internal"
5
- import { selectorFamily__INTERNAL, selector__INTERNAL } from "./internal"
6
6
  import type { Read, Write } from "./transaction"
7
7
 
8
8
  export type SelectorOptions<T> = {