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.
- package/dist/index.d.mts +226 -258
- package/dist/index.d.ts +226 -258
- package/dist/index.js +28 -1917
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -1877
- package/dist/index.mjs.map +1 -1
- package/introspection/dist/index.d.mts +117 -171
- package/introspection/dist/index.d.ts +117 -171
- package/introspection/dist/index.js +6 -346
- package/introspection/dist/index.js.map +1 -1
- package/introspection/dist/index.mjs +5 -324
- package/introspection/dist/index.mjs.map +1 -1
- package/json/dist/index.d.mts +32 -1
- package/json/dist/index.d.ts +32 -1
- package/json/dist/index.js +31 -48
- package/json/dist/index.js.map +1 -1
- package/json/dist/index.mjs +6 -14
- package/json/dist/index.mjs.map +1 -1
- package/package.json +22 -14
- package/react/dist/index.js +34 -83
- package/react/dist/index.js.map +1 -1
- package/react/dist/index.mjs +7 -43
- package/react/dist/index.mjs.map +1 -1
- package/react-devtools/dist/index.css +1 -50
- package/react-devtools/dist/index.css.map +1 -1
- package/react-devtools/dist/index.d.mts +124 -188
- package/react-devtools/dist/index.d.ts +124 -188
- package/react-devtools/dist/index.js +56 -4674
- package/react-devtools/dist/index.js.map +1 -1
- package/react-devtools/dist/index.mjs +19 -4642
- package/react-devtools/dist/index.mjs.map +1 -1
- package/realtime/dist/index.d.mts +1 -3
- package/realtime/dist/index.d.ts +1 -3
- package/realtime/dist/index.js +26 -184
- package/realtime/dist/index.js.map +1 -1
- package/realtime/dist/index.mjs +4 -148
- package/realtime/dist/index.mjs.map +1 -1
- package/realtime-react/dist/index.d.mts +2 -4
- package/realtime-react/dist/index.d.ts +2 -4
- package/realtime-react/dist/index.js +41 -214
- package/realtime-react/dist/index.js.map +1 -1
- package/realtime-react/dist/index.mjs +9 -169
- package/realtime-react/dist/index.mjs.map +1 -1
- package/src/atom.ts +4 -3
- package/src/index.ts +12 -9
- package/src/logger.ts +5 -5
- package/src/selector.ts +3 -3
- package/src/silo.ts +36 -39
- package/src/subscribe.ts +24 -19
- package/src/timeline.ts +9 -4
- package/src/transaction.ts +3 -4
- package/src/internal/atom-internal.ts +0 -54
- package/src/internal/families-internal.ts +0 -144
- package/src/internal/get.ts +0 -129
- package/src/internal/index.ts +0 -15
- package/src/internal/is-default.ts +0 -35
- package/src/internal/operation.ts +0 -139
- package/src/internal/selector/create-read-write-selector.ts +0 -68
- package/src/internal/selector/create-readonly-selector.ts +0 -48
- package/src/internal/selector/index.ts +0 -4
- package/src/internal/selector/lookup-selector-sources.ts +0 -16
- package/src/internal/selector/register-selector.ts +0 -57
- package/src/internal/selector/trace-selector-atoms.ts +0 -43
- package/src/internal/selector/update-selector-atoms.ts +0 -33
- package/src/internal/selector-internal.ts +0 -58
- package/src/internal/set.ts +0 -99
- package/src/internal/store.ts +0 -151
- package/src/internal/subscribe-internal.ts +0 -88
- package/src/internal/time-travel-internal.ts +0 -91
- package/src/internal/timeline/add-atom-to-timeline.ts +0 -168
- package/src/internal/timeline/index.ts +0 -1
- package/src/internal/timeline-internal.ts +0 -107
- package/src/internal/transaction/abort-transaction.ts +0 -12
- package/src/internal/transaction/apply-transaction.ts +0 -57
- package/src/internal/transaction/build-transaction.ts +0 -33
- package/src/internal/transaction/index.ts +0 -25
- package/src/internal/transaction/redo-transaction.ts +0 -23
- package/src/internal/transaction/undo-transaction.ts +0 -23
- package/src/internal/transaction-internal.ts +0 -61
- package/src/introspection/attach-atom-index.ts +0 -73
- package/src/introspection/attach-introspection-states.ts +0 -42
- package/src/introspection/attach-selector-index.ts +0 -77
- package/src/introspection/attach-timeline-family.ts +0 -59
- package/src/introspection/attach-timeline-index.ts +0 -36
- package/src/introspection/attach-transaction-index.ts +0 -38
- package/src/introspection/attach-transaction-logs.ts +0 -40
- package/src/introspection/index.ts +0 -20
- package/src/json/index.ts +0 -1
- package/src/json/select-json.ts +0 -18
- package/src/react/index.ts +0 -2
- package/src/react/store-context.tsx +0 -13
- package/src/react/store-hooks.ts +0 -47
- package/src/react-devtools/AtomIODevtools.tsx +0 -107
- package/src/react-devtools/Button.tsx +0 -24
- package/src/react-devtools/StateEditor.tsx +0 -74
- package/src/react-devtools/StateIndex.tsx +0 -156
- package/src/react-devtools/TimelineIndex.tsx +0 -92
- package/src/react-devtools/TransactionIndex.tsx +0 -70
- package/src/react-devtools/Updates.tsx +0 -145
- package/src/react-devtools/devtools.scss +0 -310
- package/src/react-devtools/index.ts +0 -72
- package/src/react-explorer/AtomIOExplorer.tsx +0 -218
- package/src/react-explorer/explorer-effects.ts +0 -20
- package/src/react-explorer/explorer-states.ts +0 -217
- package/src/react-explorer/index.ts +0 -23
- package/src/react-explorer/space-states.ts +0 -72
- package/src/react-explorer/view-states.ts +0 -41
- package/src/realtime/README.md +0 -33
- package/src/realtime/hook-composition/expose-family.ts +0 -101
- package/src/realtime/hook-composition/expose-single.ts +0 -38
- package/src/realtime/hook-composition/expose-timeline.ts +0 -60
- package/src/realtime/hook-composition/index.ts +0 -12
- package/src/realtime/hook-composition/receive-state.ts +0 -29
- package/src/realtime/hook-composition/receive-transaction.ts +0 -18
- package/src/realtime/index.ts +0 -1
- package/src/realtime-react/index.ts +0 -3
- package/src/realtime-react/realtime-context.tsx +0 -30
- package/src/realtime-react/realtime-hooks.ts +0 -39
- package/src/realtime-react/realtime-state.ts +0 -10
- package/src/realtime-react/use-pull-family-member.ts +0 -26
- package/src/realtime-react/use-pull-family.ts +0 -24
- package/src/realtime-react/use-pull.ts +0 -24
- package/src/realtime-react/use-push.ts +0 -27
- package/src/realtime-react/use-server-action.ts +0 -33
- package/src/realtime-testing/index.ts +0 -1
- package/src/realtime-testing/setup-realtime-test.tsx +0 -159
- package/src/tracker/index.ts +0 -3
- package/src/tracker/tracker.ts +0 -61
- package/src/web-effects/index.ts +0 -1
- package/src/web-effects/storage.ts +0 -30
|
@@ -1,217 +1,44 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
197
|
-
var
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
|
|
2
|
-
import
|
|
3
|
-
import * as
|
|
4
|
-
import { io } from
|
|
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
|
-
|
|
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
|
-
|
|
18
|
-
|
|
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 {
|
|
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 "
|
|
13
|
-
import * as __INTERNAL__ from "
|
|
14
|
-
import type { Store } from "
|
|
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 "
|
|
25
|
-
export type { Json } from "
|
|
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 {
|
|
1
|
+
import { IMPLICIT } from "atom.io/internal"
|
|
2
|
+
import type { Store } from "atom.io/internal"
|
|
2
3
|
|
|
3
|
-
import
|
|
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
|
-
//
|
|
24
|
+
// biome-ignore lint/style/noNonNullAssertion: we just set it
|
|
25
25
|
store.config.logger![logLevel] = doNothing
|
|
26
26
|
} else {
|
|
27
|
-
//
|
|
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 {
|
|
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> = {
|