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
|
@@ -11,9 +11,7 @@ declare const useExposeSingle: ({ socket, store }: ServerConfig) => <J extends S
|
|
|
11
11
|
|
|
12
12
|
declare const useExposeFamily: ({ socket, store }: ServerConfig) => <J extends Serializable>(family: AtomIO.AtomFamily<J, Serializable> | AtomIO.SelectorFamily<J, Serializable>, index: AtomIO.StateToken<Set<string>>) => () => void;
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
declare const useReceiveTransaction: ({ socket, store }: ServerConfig) => <ƒ extends ƒn>(tx: AtomIO.TransactionToken<ƒ>) => () => void;
|
|
14
|
+
declare const useReceiveTransaction: ({ socket, store }: ServerConfig) => <ƒ extends AtomIO.ƒn>(tx: AtomIO.TransactionToken<ƒ>) => () => void;
|
|
17
15
|
|
|
18
16
|
declare const useReceiveState: ({ socket, store }: ServerConfig) => <J extends Serializable>(token: AtomIO.StateToken<J>) => () => void;
|
|
19
17
|
|
package/realtime/dist/index.d.ts
CHANGED
|
@@ -11,9 +11,7 @@ declare const useExposeSingle: ({ socket, store }: ServerConfig) => <J extends S
|
|
|
11
11
|
|
|
12
12
|
declare const useExposeFamily: ({ socket, store }: ServerConfig) => <J extends Serializable>(family: AtomIO.AtomFamily<J, Serializable> | AtomIO.SelectorFamily<J, Serializable>, index: AtomIO.StateToken<Set<string>>) => () => void;
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
declare const useReceiveTransaction: ({ socket, store }: ServerConfig) => <ƒ extends ƒn>(tx: AtomIO.TransactionToken<ƒ>) => () => void;
|
|
14
|
+
declare const useReceiveTransaction: ({ socket, store }: ServerConfig) => <ƒ extends AtomIO.ƒn>(tx: AtomIO.TransactionToken<ƒ>) => () => void;
|
|
17
15
|
|
|
18
16
|
declare const useReceiveState: ({ socket, store }: ServerConfig) => <J extends Serializable>(token: AtomIO.StateToken<J>) => () => void;
|
|
19
17
|
|
package/realtime/dist/index.js
CHANGED
|
@@ -1,190 +1,32 @@
|
|
|
1
|
-
|
|
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);
|
|
1
|
+
'use strict';
|
|
28
2
|
|
|
29
|
-
|
|
30
|
-
var realtime_exports = {};
|
|
31
|
-
__export(realtime_exports, {
|
|
32
|
-
useExposeFamily: () => useExposeFamily,
|
|
33
|
-
useExposeSingle: () => useExposeSingle,
|
|
34
|
-
useReceiveState: () => useReceiveState,
|
|
35
|
-
useReceiveTransaction: () => useReceiveTransaction
|
|
36
|
-
});
|
|
37
|
-
module.exports = __toCommonJS(realtime_exports);
|
|
3
|
+
var m = require('atom.io');
|
|
38
4
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
var
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
store
|
|
57
|
-
);
|
|
58
|
-
socket.on(`unsub:${token.key}`, fillUnsubRequest);
|
|
59
|
-
};
|
|
60
|
-
socket.on(`sub:${token.key}`, fillSubRequest);
|
|
61
|
-
return () => {
|
|
62
|
-
socket.off(`sub:${token.key}`, fillSubRequest);
|
|
63
|
-
unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
};
|
|
5
|
+
function _interopNamespace(e) {
|
|
6
|
+
if (e && e.__esModule) return e;
|
|
7
|
+
var n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
Object.keys(e).forEach(function (k) {
|
|
10
|
+
if (k !== 'default') {
|
|
11
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return e[k]; }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
67
22
|
|
|
68
|
-
|
|
69
|
-
var parseJson = (str) => JSON.parse(str);
|
|
23
|
+
var m__namespace = /*#__PURE__*/_interopNamespace(m);
|
|
70
24
|
|
|
71
|
-
|
|
72
|
-
var AtomIO2 = __toESM(require("atom.io"));
|
|
73
|
-
var subscribeToTokenCreation = (family, handleTokenCreation) => {
|
|
74
|
-
const subscription = family.type === `atom_family` ? family.subject.subscribe(handleTokenCreation) : family.subject.subscribe(handleTokenCreation);
|
|
75
|
-
return () => subscription.unsubscribe();
|
|
76
|
-
};
|
|
77
|
-
var useExposeFamily = ({ socket, store }) => {
|
|
78
|
-
return function exposeFamily(family, index) {
|
|
79
|
-
const unsubSingleCallbacksByKey = /* @__PURE__ */ new Map();
|
|
80
|
-
const unsubFamilyCallbacksByKey = /* @__PURE__ */ new Map();
|
|
81
|
-
const fillFamilyUnsubRequest = () => {
|
|
82
|
-
unsubFamilyCallbacksByKey.forEach((unsub) => unsub());
|
|
83
|
-
unsubFamilyCallbacksByKey.clear();
|
|
84
|
-
socket.off(`unsub:${family.key}`, fillFamilyUnsubRequest);
|
|
85
|
-
};
|
|
86
|
-
const fillSingleUnsubRequest = (key) => {
|
|
87
|
-
socket.off(`unsub:${key}`, fillSingleUnsubRequest);
|
|
88
|
-
const unsub = unsubSingleCallbacksByKey.get(key);
|
|
89
|
-
if (unsub) {
|
|
90
|
-
unsub();
|
|
91
|
-
unsubSingleCallbacksByKey.delete(key);
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
const fillSubRequest = (subKey) => {
|
|
95
|
-
if (subKey === void 0) {
|
|
96
|
-
const keys = AtomIO2.getState(index, store);
|
|
97
|
-
keys.forEach((key) => {
|
|
98
|
-
var _a;
|
|
99
|
-
const token = family(key);
|
|
100
|
-
socket.emit(
|
|
101
|
-
`serve:${family.key}`,
|
|
102
|
-
parseJson(((_a = token.family) == null ? void 0 : _a.subKey) || `null`),
|
|
103
|
-
AtomIO2.getState(token, store)
|
|
104
|
-
);
|
|
105
|
-
});
|
|
106
|
-
const unsubscribeFromTokenCreation = subscribeToTokenCreation(
|
|
107
|
-
family,
|
|
108
|
-
(token) => {
|
|
109
|
-
const unsub = AtomIO2.subscribe(
|
|
110
|
-
token,
|
|
111
|
-
({ newValue }) => {
|
|
112
|
-
var _a;
|
|
113
|
-
socket.emit(
|
|
114
|
-
`serve:${family.key}`,
|
|
115
|
-
parseJson(((_a = token.family) == null ? void 0 : _a.subKey) || `null`),
|
|
116
|
-
newValue
|
|
117
|
-
);
|
|
118
|
-
},
|
|
119
|
-
store
|
|
120
|
-
);
|
|
121
|
-
unsubFamilyCallbacksByKey.set(token.key, unsub);
|
|
122
|
-
}
|
|
123
|
-
);
|
|
124
|
-
unsubFamilyCallbacksByKey.set(family.key, unsubscribeFromTokenCreation);
|
|
125
|
-
socket.on(`unsub:${family.key}`, fillFamilyUnsubRequest);
|
|
126
|
-
} else {
|
|
127
|
-
const token = family(subKey);
|
|
128
|
-
socket.emit(`serve:${token.key}`, AtomIO2.getState(token, store));
|
|
129
|
-
const unsubscribe = AtomIO2.subscribe(
|
|
130
|
-
token,
|
|
131
|
-
({ newValue }) => {
|
|
132
|
-
socket.emit(`serve:${token.key}`, newValue);
|
|
133
|
-
},
|
|
134
|
-
store
|
|
135
|
-
);
|
|
136
|
-
unsubSingleCallbacksByKey.set(token.key, unsubscribe);
|
|
137
|
-
socket.on(`unsub:${token.key}`, () => {
|
|
138
|
-
fillSingleUnsubRequest(token.key);
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
socket.on(`sub:${family.key}`, fillSubRequest);
|
|
143
|
-
return () => {
|
|
144
|
-
socket.off(`sub:${family.key}`, fillSubRequest);
|
|
145
|
-
unsubFamilyCallbacksByKey.forEach((unsub) => unsub());
|
|
146
|
-
unsubSingleCallbacksByKey.forEach((unsub) => unsub());
|
|
147
|
-
unsubFamilyCallbacksByKey.clear();
|
|
148
|
-
unsubSingleCallbacksByKey.clear();
|
|
149
|
-
};
|
|
150
|
-
};
|
|
151
|
-
};
|
|
25
|
+
var $=({socket:e,store:t})=>function(o){let n=null,r=()=>{e.off(`unsub:${o.key}`,r),n==null||n(),n=null;},i=()=>{e.emit(`serve:${o.key}`,m__namespace.getState(o,t)),n=m__namespace.subscribe(o,({newValue:f})=>{e.emit(`serve:${o.key}`,f);},`expose-single:${e.id}`,t),e.on(`unsub:${o.key}`,r);};return e.on(`sub:${o.key}`,i),()=>{e.off(`sub:${o.key}`,i),n==null||n();}};var S=e=>JSON.parse(e);var v=(e,t,l)=>(e.type==="atom_family",e.subject.subscribe(t,l)),E=({socket:e,store:t})=>function(o,n){let r=new Map,i=new Map,f=()=>{i.forEach(s=>s()),i.clear(),e.off(`unsub:${o.key}`,f);},J=s=>{e.off(`unsub:${s}`,J);let a=r.get(s);a&&(a(),r.delete(s));},g=s=>{if(s===void 0){m__namespace.getState(n,t).forEach(u=>{var b;let p=o(u);e.emit(`serve:${o.key}`,S(((b=p.family)==null?void 0:b.subKey)||"null"),m__namespace.getState(p,t));});let c=v(o,`expose-family:${e.id}`,u=>{let p=m__namespace.subscribe(u,({newValue:b})=>{var x;e.emit(`serve:${o.key}`,S(((x=u.family)==null?void 0:x.subKey)||"null"),b);},`expose-family:${o.key}:${e.id}`,t);i.set(u.key,p);});i.set(o.key,c),e.on(`unsub:${o.key}`,f);}else {let a=o(s);e.emit(`serve:${a.key}`,m__namespace.getState(a,t));let c=m__namespace.subscribe(a,({newValue:u})=>{e.emit(`serve:${a.key}`,u);},`expose-family:${o.key}:${e.id}`,t);r.set(a.key,c),e.on(`unsub:${a.key}`,()=>{J(a.key);});}};return e.on(`sub:${o.key}`,g),()=>{e.off(`sub:${o.key}`,g),i.forEach(s=>s()),r.forEach(s=>s()),i.clear(),r.clear();}};var j=({socket:e,store:t})=>function(o){let n=r=>m__namespace.runTransaction(o,t)(...r.params);return e.on(`tx:${o.key}`,n),()=>e.off(`tx:${o.key}`,n)};var R=({socket:e,store:t})=>function(o){let n=f=>m__namespace.setState(o,f,t),r=()=>{e.off(`pub:${o.key}`,n),e.off(`unclaim:${o.key}`,r);},i=()=>{e.on(`pub:${o.key}`,n),e.on(`unclaim:${o.key}`,r);};return e.on(`claim:${o.key}`,i),()=>{e.off(`claim:${o.key}`,i),e.off(`pub:${o.key}`,n);}};
|
|
152
26
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
socket.on(`tx:${tx.key}`, fillTransactionRequest);
|
|
159
|
-
return () => socket.off(`tx:${tx.key}`, fillTransactionRequest);
|
|
160
|
-
};
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
// ../src/realtime/hook-composition/receive-state.ts
|
|
164
|
-
var AtomIO4 = __toESM(require("atom.io"));
|
|
165
|
-
var useReceiveState = ({ socket, store }) => {
|
|
166
|
-
return function receiveState(token) {
|
|
167
|
-
const publish = (newValue) => AtomIO4.setState(token, newValue, store);
|
|
168
|
-
const fillPubUnclaim = () => {
|
|
169
|
-
socket.off(`pub:${token.key}`, publish);
|
|
170
|
-
socket.off(`unclaim:${token.key}`, fillPubUnclaim);
|
|
171
|
-
};
|
|
172
|
-
const fillPubClaim = () => {
|
|
173
|
-
socket.on(`pub:${token.key}`, publish);
|
|
174
|
-
socket.on(`unclaim:${token.key}`, fillPubUnclaim);
|
|
175
|
-
};
|
|
176
|
-
socket.on(`claim:${token.key}`, fillPubClaim);
|
|
177
|
-
return () => {
|
|
178
|
-
socket.off(`claim:${token.key}`, fillPubClaim);
|
|
179
|
-
socket.off(`pub:${token.key}`, publish);
|
|
180
|
-
};
|
|
181
|
-
};
|
|
182
|
-
};
|
|
183
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
184
|
-
0 && (module.exports = {
|
|
185
|
-
useExposeFamily,
|
|
186
|
-
useExposeSingle,
|
|
187
|
-
useReceiveState,
|
|
188
|
-
useReceiveTransaction
|
|
189
|
-
});
|
|
27
|
+
exports.useExposeFamily = E;
|
|
28
|
+
exports.useExposeSingle = $;
|
|
29
|
+
exports.useReceiveState = R;
|
|
30
|
+
exports.useReceiveTransaction = j;
|
|
31
|
+
//# sourceMappingURL=out.js.map
|
|
190
32
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/realtime/index.ts","../../src/realtime/hook-composition/expose-single.ts","../../../anvl/src/json/index.ts","../../src/realtime/hook-composition/expose-family.ts","../../src/realtime/hook-composition/receive-transaction.ts","../../src/realtime/hook-composition/receive-state.ts"],"sourcesContent":["export * from \"./hook-composition\"\n","import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeSingle = ({ socket, store }: ServerConfig) => {\n\treturn function exposeSingle<J extends Json.Serializable>(\n\t\ttoken: AtomIO.StateToken<J>,\n\t): () => void {\n\t\tlet unsubscribeFromStateUpdates: (() => void) | null = null\n\n\t\tconst fillUnsubRequest = () => {\n\t\t\tsocket.off(`unsub:${token.key}`, fillUnsubRequest)\n\t\t\tunsubscribeFromStateUpdates?.()\n\t\t\tunsubscribeFromStateUpdates = null\n\t\t}\n\n\t\tconst fillSubRequest = () => {\n\t\t\tsocket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n\t\t\tunsubscribeFromStateUpdates = AtomIO.subscribe(\n\t\t\t\ttoken,\n\t\t\t\t({ newValue }) => {\n\t\t\t\t\tsocket.emit(`serve:${token.key}`, newValue)\n\t\t\t\t},\n\t\t\t\tstore,\n\t\t\t)\n\t\t\tsocket.on(`unsub:${token.key}`, fillUnsubRequest)\n\t\t}\n\n\t\tsocket.on(`sub:${token.key}`, fillSubRequest)\n\n\t\treturn () => {\n\t\t\tsocket.off(`sub:${token.key}`, fillSubRequest)\n\t\t\tunsubscribeFromStateUpdates?.()\n\t\t}\n\t}\n}\n","export * from \"./json-interface\"\nimport type * as Json from \"./json\"\nexport { Json }\n\nexport const parseJson = <S extends Stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends Stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\n\nexport type Stringified<J extends Json.Serializable> = string & { __json: J }\n\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): Stringified<J> => JSON.stringify(json) as Stringified<J>\n\nexport type Empty = Record<string, never>\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = typeof JSON_TYPE_NAMES[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n","import type { Json } from \"anvl/json\"\nimport { parseJson } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\nconst subscribeToTokenCreation = <T>(\n\tfamily: AtomIO.AtomFamily<T> | AtomIO.SelectorFamily<T>,\n\thandleTokenCreation: (token: AtomIO.StateToken<T>) => void,\n): (() => void) => {\n\tconst subscription =\n\t\tfamily.type === `atom_family`\n\t\t\t? family.subject.subscribe(handleTokenCreation)\n\t\t\t: family.subject.subscribe(handleTokenCreation)\n\treturn () => subscription.unsubscribe()\n}\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeFamily = ({ socket, store }: ServerConfig) => {\n\treturn function exposeFamily<J extends Json.Serializable>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t\tindex: AtomIO.StateToken<Set<string>>,\n\t): () => void {\n\t\tconst unsubSingleCallbacksByKey = new Map<string, () => void>()\n\t\tconst unsubFamilyCallbacksByKey = new Map<string, () => void>()\n\n\t\tconst fillFamilyUnsubRequest = () => {\n\t\t\tunsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubFamilyCallbacksByKey.clear()\n\t\t\tsocket.off(`unsub:${family.key}`, fillFamilyUnsubRequest)\n\t\t}\n\n\t\tconst fillSingleUnsubRequest = (key: string) => {\n\t\t\tsocket.off(`unsub:${key}`, fillSingleUnsubRequest)\n\t\t\tconst unsub = unsubSingleCallbacksByKey.get(key)\n\t\t\tif (unsub) {\n\t\t\t\tunsub()\n\t\t\t\tunsubSingleCallbacksByKey.delete(key)\n\t\t\t}\n\t\t}\n\n\t\tconst fillSubRequest = (subKey?: AtomIO.Json.Serializable) => {\n\t\t\tif (subKey === undefined) {\n\t\t\t\tconst keys = AtomIO.getState(index, store)\n\t\t\t\tkeys.forEach((key) => {\n\t\t\t\t\tconst token = family(key)\n\t\t\t\t\tsocket.emit(\n\t\t\t\t\t\t`serve:${family.key}`,\n\t\t\t\t\t\tparseJson(token.family?.subKey || `null`),\n\t\t\t\t\t\tAtomIO.getState(token, store),\n\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t\tconst unsubscribeFromTokenCreation = subscribeToTokenCreation(\n\t\t\t\t\tfamily,\n\t\t\t\t\t(token) => {\n\t\t\t\t\t\tconst unsub = AtomIO.subscribe(\n\t\t\t\t\t\t\ttoken,\n\t\t\t\t\t\t\t({ newValue }) => {\n\t\t\t\t\t\t\t\tsocket.emit(\n\t\t\t\t\t\t\t\t\t`serve:${family.key}`,\n\t\t\t\t\t\t\t\t\tparseJson(token.family?.subKey || `null`),\n\t\t\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tunsubFamilyCallbacksByKey.set(token.key, unsub)\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tunsubFamilyCallbacksByKey.set(family.key, unsubscribeFromTokenCreation)\n\n\t\t\t\tsocket.on(`unsub:${family.key}`, fillFamilyUnsubRequest)\n\t\t\t} else {\n\t\t\t\tconst token = family(subKey)\n\t\t\t\tsocket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n\t\t\t\tconst unsubscribe = AtomIO.subscribe(\n\t\t\t\t\ttoken,\n\t\t\t\t\t({ newValue }) => {\n\t\t\t\t\t\tsocket.emit(`serve:${token.key}`, newValue)\n\t\t\t\t\t},\n\t\t\t\t\tstore,\n\t\t\t\t)\n\t\t\t\tunsubSingleCallbacksByKey.set(token.key, unsubscribe)\n\t\t\t\tsocket.on(`unsub:${token.key}`, () => {\n\t\t\t\t\tfillSingleUnsubRequest(token.key)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tsocket.on(`sub:${family.key}`, fillSubRequest)\n\n\t\treturn () => {\n\t\t\tsocket.off(`sub:${family.key}`, fillSubRequest)\n\t\t\tunsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubSingleCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubFamilyCallbacksByKey.clear()\n\t\t\tunsubSingleCallbacksByKey.clear()\n\t\t}\n\t}\n}\n","import * as AtomIO from \"atom.io\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport type { ServerConfig } from \".\"\n\nexport const useReceiveTransaction = ({ socket, store }: ServerConfig) => {\n\treturn function receiveTransaction<ƒ extends ƒn>(\n\t\ttx: AtomIO.TransactionToken<ƒ>,\n\t): () => void {\n\t\tconst fillTransactionRequest = (update: AtomIO.TransactionUpdate<ƒ>) =>\n\t\t\tAtomIO.runTransaction<ƒ>(tx, store)(...update.params)\n\n\t\tsocket.on(`tx:${tx.key}`, fillTransactionRequest)\n\n\t\treturn () => socket.off(`tx:${tx.key}`, fillTransactionRequest)\n\t}\n}\n","import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useReceiveState = ({ socket, store }: ServerConfig) => {\n\treturn function receiveState<J extends Json.Serializable>(\n\t\ttoken: AtomIO.StateToken<J>,\n\t): () => void {\n\t\tconst publish = (newValue: J) => AtomIO.setState(token, newValue, store)\n\n\t\tconst fillPubUnclaim = () => {\n\t\t\tsocket.off(`pub:${token.key}`, publish)\n\t\t\tsocket.off(`unclaim:${token.key}`, fillPubUnclaim)\n\t\t}\n\t\tconst fillPubClaim = () => {\n\t\t\tsocket.on(`pub:${token.key}`, publish)\n\t\t\tsocket.on(`unclaim:${token.key}`, fillPubUnclaim)\n\t\t}\n\n\t\tsocket.on(`claim:${token.key}`, fillPubClaim)\n\n\t\treturn () => {\n\t\t\tsocket.off(`claim:${token.key}`, fillPubClaim)\n\t\t\tsocket.off(`pub:${token.key}`, publish)\n\t\t}\n\t}\n}\n"],"mappings":"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","names":["AtomIO","AtomIO","AtomIO"]}
|
|
1
|
+
{"version":3,"sources":["../src/hook-composition/expose-single.ts","../../../anvl/src/json/index.ts","../src/hook-composition/expose-family.ts","../src/hook-composition/receive-transaction.ts","../src/hook-composition/receive-state.ts"],"names":["AtomIO","useExposeSingle","socket","store","token","unsubscribeFromStateUpdates","fillUnsubRequest","fillSubRequest","newValue","parseJson","str","subscribeToTokenCreation","family","key","handleTokenCreation","useExposeFamily","index","unsubSingleCallbacksByKey","unsubFamilyCallbacksByKey","fillFamilyUnsubRequest","unsub","fillSingleUnsubRequest","subKey","_a","unsubscribeFromTokenCreation","unsubscribe","useReceiveTransaction","tx","fillTransactionRequest","update","useReceiveState","publish","fillPubUnclaim","fillPubClaim"],"mappings":"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","sourcesContent":["import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeSingle = ({ socket, store }: ServerConfig) => {\n\treturn function exposeSingle<J extends Json.Serializable>(\n\t\ttoken: AtomIO.StateToken<J>,\n\t): () => void {\n\t\tlet unsubscribeFromStateUpdates: (() => void) | null = null\n\n\t\tconst fillUnsubRequest = () => {\n\t\t\tsocket.off(`unsub:${token.key}`, fillUnsubRequest)\n\t\t\tunsubscribeFromStateUpdates?.()\n\t\t\tunsubscribeFromStateUpdates = null\n\t\t}\n\n\t\tconst fillSubRequest = () => {\n\t\t\tsocket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n\t\t\tunsubscribeFromStateUpdates = AtomIO.subscribe(\n\t\t\t\ttoken,\n\t\t\t\t({ newValue }) => {\n\t\t\t\t\tsocket.emit(`serve:${token.key}`, newValue)\n\t\t\t\t},\n\t\t\t\t`expose-single:${socket.id}`,\n\t\t\t\tstore,\n\t\t\t)\n\t\t\tsocket.on(`unsub:${token.key}`, fillUnsubRequest)\n\t\t}\n\n\t\tsocket.on(`sub:${token.key}`, fillSubRequest)\n\n\t\treturn () => {\n\t\t\tsocket.off(`sub:${token.key}`, fillSubRequest)\n\t\t\tunsubscribeFromStateUpdates?.()\n\t\t}\n\t}\n}\n","export * from \"./json-interface\"\nimport type * as Json from \"./json\"\nexport { Json }\n\nexport const parseJson = <S extends Stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends Stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\n\nexport type Stringified<J extends Json.Serializable> = string & { __json: J }\n\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): Stringified<J> => JSON.stringify(json) as Stringified<J>\n\nexport type Empty = Record<string, never>\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = typeof JSON_TYPE_NAMES[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n","import type { Json } from \"anvl/json\"\nimport { parseJson } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\nconst subscribeToTokenCreation = <T>(\n\tfamily: AtomIO.AtomFamily<T> | AtomIO.SelectorFamily<T>,\n\tkey: string,\n\thandleTokenCreation: (token: AtomIO.StateToken<T>) => void,\n): (() => void) => {\n\tconst unsubscribe =\n\t\tfamily.type === `atom_family`\n\t\t\t? family.subject.subscribe(key, handleTokenCreation)\n\t\t\t: family.subject.subscribe(key, handleTokenCreation)\n\treturn unsubscribe\n}\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeFamily = ({ socket, store }: ServerConfig) => {\n\treturn function exposeFamily<J extends Json.Serializable>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t\tindex: AtomIO.StateToken<Set<string>>,\n\t): () => void {\n\t\tconst unsubSingleCallbacksByKey = new Map<string, () => void>()\n\t\tconst unsubFamilyCallbacksByKey = new Map<string, () => void>()\n\n\t\tconst fillFamilyUnsubRequest = () => {\n\t\t\tunsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubFamilyCallbacksByKey.clear()\n\t\t\tsocket.off(`unsub:${family.key}`, fillFamilyUnsubRequest)\n\t\t}\n\n\t\tconst fillSingleUnsubRequest = (key: string) => {\n\t\t\tsocket.off(`unsub:${key}`, fillSingleUnsubRequest)\n\t\t\tconst unsub = unsubSingleCallbacksByKey.get(key)\n\t\t\tif (unsub) {\n\t\t\t\tunsub()\n\t\t\t\tunsubSingleCallbacksByKey.delete(key)\n\t\t\t}\n\t\t}\n\n\t\tconst fillSubRequest = (subKey?: AtomIO.Json.Serializable) => {\n\t\t\tif (subKey === undefined) {\n\t\t\t\tconst keys = AtomIO.getState(index, store)\n\t\t\t\tkeys.forEach((key) => {\n\t\t\t\t\tconst token = family(key)\n\t\t\t\t\tsocket.emit(\n\t\t\t\t\t\t`serve:${family.key}`,\n\t\t\t\t\t\tparseJson(token.family?.subKey || `null`),\n\t\t\t\t\t\tAtomIO.getState(token, store),\n\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t\tconst unsubscribeFromTokenCreation = subscribeToTokenCreation(\n\t\t\t\t\tfamily,\n\t\t\t\t\t`expose-family:${socket.id}`,\n\t\t\t\t\t(token) => {\n\t\t\t\t\t\tconst unsub = AtomIO.subscribe(\n\t\t\t\t\t\t\ttoken,\n\t\t\t\t\t\t\t({ newValue }) => {\n\t\t\t\t\t\t\t\tsocket.emit(\n\t\t\t\t\t\t\t\t\t`serve:${family.key}`,\n\t\t\t\t\t\t\t\t\tparseJson(token.family?.subKey || `null`),\n\t\t\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t`expose-family:${family.key}:${socket.id}`,\n\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tunsubFamilyCallbacksByKey.set(token.key, unsub)\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tunsubFamilyCallbacksByKey.set(family.key, unsubscribeFromTokenCreation)\n\n\t\t\t\tsocket.on(`unsub:${family.key}`, fillFamilyUnsubRequest)\n\t\t\t} else {\n\t\t\t\tconst token = family(subKey)\n\t\t\t\tsocket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n\t\t\t\tconst unsubscribe = AtomIO.subscribe(\n\t\t\t\t\ttoken,\n\t\t\t\t\t({ newValue }) => {\n\t\t\t\t\t\tsocket.emit(`serve:${token.key}`, newValue)\n\t\t\t\t\t},\n\t\t\t\t\t`expose-family:${family.key}:${socket.id}`,\n\t\t\t\t\tstore,\n\t\t\t\t)\n\t\t\t\tunsubSingleCallbacksByKey.set(token.key, unsubscribe)\n\t\t\t\tsocket.on(`unsub:${token.key}`, () => {\n\t\t\t\t\tfillSingleUnsubRequest(token.key)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tsocket.on(`sub:${family.key}`, fillSubRequest)\n\n\t\treturn () => {\n\t\t\tsocket.off(`sub:${family.key}`, fillSubRequest)\n\t\t\tunsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubSingleCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubFamilyCallbacksByKey.clear()\n\t\t\tunsubSingleCallbacksByKey.clear()\n\t\t}\n\t}\n}\n","import * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \".\"\n\nexport const useReceiveTransaction = ({ socket, store }: ServerConfig) => {\n\treturn function receiveTransaction<ƒ extends AtomIO.ƒn>(\n\t\ttx: AtomIO.TransactionToken<ƒ>,\n\t): () => void {\n\t\tconst fillTransactionRequest = (update: AtomIO.TransactionUpdate<ƒ>) =>\n\t\t\tAtomIO.runTransaction<ƒ>(tx, store)(...update.params)\n\n\t\tsocket.on(`tx:${tx.key}`, fillTransactionRequest)\n\n\t\treturn () => socket.off(`tx:${tx.key}`, fillTransactionRequest)\n\t}\n}\n","import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useReceiveState = ({ socket, store }: ServerConfig) => {\n\treturn function receiveState<J extends Json.Serializable>(\n\t\ttoken: AtomIO.StateToken<J>,\n\t): () => void {\n\t\tconst publish = (newValue: J) => AtomIO.setState(token, newValue, store)\n\n\t\tconst fillPubUnclaim = () => {\n\t\t\tsocket.off(`pub:${token.key}`, publish)\n\t\t\tsocket.off(`unclaim:${token.key}`, fillPubUnclaim)\n\t\t}\n\t\tconst fillPubClaim = () => {\n\t\t\tsocket.on(`pub:${token.key}`, publish)\n\t\t\tsocket.on(`unclaim:${token.key}`, fillPubUnclaim)\n\t\t}\n\n\t\tsocket.on(`claim:${token.key}`, fillPubClaim)\n\n\t\treturn () => {\n\t\t\tsocket.off(`claim:${token.key}`, fillPubClaim)\n\t\t\tsocket.off(`pub:${token.key}`, publish)\n\t\t}\n\t}\n}\n"]}
|
package/realtime/dist/index.mjs
CHANGED
|
@@ -1,151 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
import * as AtomIO from "atom.io";
|
|
3
|
-
var useExposeSingle = ({ socket, store }) => {
|
|
4
|
-
return function exposeSingle(token) {
|
|
5
|
-
let unsubscribeFromStateUpdates = null;
|
|
6
|
-
const fillUnsubRequest = () => {
|
|
7
|
-
socket.off(`unsub:${token.key}`, fillUnsubRequest);
|
|
8
|
-
unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
|
|
9
|
-
unsubscribeFromStateUpdates = null;
|
|
10
|
-
};
|
|
11
|
-
const fillSubRequest = () => {
|
|
12
|
-
socket.emit(`serve:${token.key}`, AtomIO.getState(token, store));
|
|
13
|
-
unsubscribeFromStateUpdates = AtomIO.subscribe(
|
|
14
|
-
token,
|
|
15
|
-
({ newValue }) => {
|
|
16
|
-
socket.emit(`serve:${token.key}`, newValue);
|
|
17
|
-
},
|
|
18
|
-
store
|
|
19
|
-
);
|
|
20
|
-
socket.on(`unsub:${token.key}`, fillUnsubRequest);
|
|
21
|
-
};
|
|
22
|
-
socket.on(`sub:${token.key}`, fillSubRequest);
|
|
23
|
-
return () => {
|
|
24
|
-
socket.off(`sub:${token.key}`, fillSubRequest);
|
|
25
|
-
unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
};
|
|
1
|
+
import * as m from 'atom.io';
|
|
29
2
|
|
|
30
|
-
|
|
31
|
-
var parseJson = (str) => JSON.parse(str);
|
|
3
|
+
var $=({socket:e,store:t})=>function(o){let n=null,r=()=>{e.off(`unsub:${o.key}`,r),n==null||n(),n=null;},i=()=>{e.emit(`serve:${o.key}`,m.getState(o,t)),n=m.subscribe(o,({newValue:f})=>{e.emit(`serve:${o.key}`,f);},`expose-single:${e.id}`,t),e.on(`unsub:${o.key}`,r);};return e.on(`sub:${o.key}`,i),()=>{e.off(`sub:${o.key}`,i),n==null||n();}};var S=e=>JSON.parse(e);var v=(e,t,l)=>(e.type==="atom_family",e.subject.subscribe(t,l)),E=({socket:e,store:t})=>function(o,n){let r=new Map,i=new Map,f=()=>{i.forEach(s=>s()),i.clear(),e.off(`unsub:${o.key}`,f);},J=s=>{e.off(`unsub:${s}`,J);let a=r.get(s);a&&(a(),r.delete(s));},g=s=>{if(s===void 0){m.getState(n,t).forEach(u=>{var b;let p=o(u);e.emit(`serve:${o.key}`,S(((b=p.family)==null?void 0:b.subKey)||"null"),m.getState(p,t));});let c=v(o,`expose-family:${e.id}`,u=>{let p=m.subscribe(u,({newValue:b})=>{var x;e.emit(`serve:${o.key}`,S(((x=u.family)==null?void 0:x.subKey)||"null"),b);},`expose-family:${o.key}:${e.id}`,t);i.set(u.key,p);});i.set(o.key,c),e.on(`unsub:${o.key}`,f);}else {let a=o(s);e.emit(`serve:${a.key}`,m.getState(a,t));let c=m.subscribe(a,({newValue:u})=>{e.emit(`serve:${a.key}`,u);},`expose-family:${o.key}:${e.id}`,t);r.set(a.key,c),e.on(`unsub:${a.key}`,()=>{J(a.key);});}};return e.on(`sub:${o.key}`,g),()=>{e.off(`sub:${o.key}`,g),i.forEach(s=>s()),r.forEach(s=>s()),i.clear(),r.clear();}};var j=({socket:e,store:t})=>function(o){let n=r=>m.runTransaction(o,t)(...r.params);return e.on(`tx:${o.key}`,n),()=>e.off(`tx:${o.key}`,n)};var R=({socket:e,store:t})=>function(o){let n=f=>m.setState(o,f,t),r=()=>{e.off(`pub:${o.key}`,n),e.off(`unclaim:${o.key}`,r);},i=()=>{e.on(`pub:${o.key}`,n),e.on(`unclaim:${o.key}`,r);};return e.on(`claim:${o.key}`,i),()=>{e.off(`claim:${o.key}`,i),e.off(`pub:${o.key}`,n);}};
|
|
32
4
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
var subscribeToTokenCreation = (family, handleTokenCreation) => {
|
|
36
|
-
const subscription = family.type === `atom_family` ? family.subject.subscribe(handleTokenCreation) : family.subject.subscribe(handleTokenCreation);
|
|
37
|
-
return () => subscription.unsubscribe();
|
|
38
|
-
};
|
|
39
|
-
var useExposeFamily = ({ socket, store }) => {
|
|
40
|
-
return function exposeFamily(family, index) {
|
|
41
|
-
const unsubSingleCallbacksByKey = /* @__PURE__ */ new Map();
|
|
42
|
-
const unsubFamilyCallbacksByKey = /* @__PURE__ */ new Map();
|
|
43
|
-
const fillFamilyUnsubRequest = () => {
|
|
44
|
-
unsubFamilyCallbacksByKey.forEach((unsub) => unsub());
|
|
45
|
-
unsubFamilyCallbacksByKey.clear();
|
|
46
|
-
socket.off(`unsub:${family.key}`, fillFamilyUnsubRequest);
|
|
47
|
-
};
|
|
48
|
-
const fillSingleUnsubRequest = (key) => {
|
|
49
|
-
socket.off(`unsub:${key}`, fillSingleUnsubRequest);
|
|
50
|
-
const unsub = unsubSingleCallbacksByKey.get(key);
|
|
51
|
-
if (unsub) {
|
|
52
|
-
unsub();
|
|
53
|
-
unsubSingleCallbacksByKey.delete(key);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const fillSubRequest = (subKey) => {
|
|
57
|
-
if (subKey === void 0) {
|
|
58
|
-
const keys = AtomIO2.getState(index, store);
|
|
59
|
-
keys.forEach((key) => {
|
|
60
|
-
var _a;
|
|
61
|
-
const token = family(key);
|
|
62
|
-
socket.emit(
|
|
63
|
-
`serve:${family.key}`,
|
|
64
|
-
parseJson(((_a = token.family) == null ? void 0 : _a.subKey) || `null`),
|
|
65
|
-
AtomIO2.getState(token, store)
|
|
66
|
-
);
|
|
67
|
-
});
|
|
68
|
-
const unsubscribeFromTokenCreation = subscribeToTokenCreation(
|
|
69
|
-
family,
|
|
70
|
-
(token) => {
|
|
71
|
-
const unsub = AtomIO2.subscribe(
|
|
72
|
-
token,
|
|
73
|
-
({ newValue }) => {
|
|
74
|
-
var _a;
|
|
75
|
-
socket.emit(
|
|
76
|
-
`serve:${family.key}`,
|
|
77
|
-
parseJson(((_a = token.family) == null ? void 0 : _a.subKey) || `null`),
|
|
78
|
-
newValue
|
|
79
|
-
);
|
|
80
|
-
},
|
|
81
|
-
store
|
|
82
|
-
);
|
|
83
|
-
unsubFamilyCallbacksByKey.set(token.key, unsub);
|
|
84
|
-
}
|
|
85
|
-
);
|
|
86
|
-
unsubFamilyCallbacksByKey.set(family.key, unsubscribeFromTokenCreation);
|
|
87
|
-
socket.on(`unsub:${family.key}`, fillFamilyUnsubRequest);
|
|
88
|
-
} else {
|
|
89
|
-
const token = family(subKey);
|
|
90
|
-
socket.emit(`serve:${token.key}`, AtomIO2.getState(token, store));
|
|
91
|
-
const unsubscribe = AtomIO2.subscribe(
|
|
92
|
-
token,
|
|
93
|
-
({ newValue }) => {
|
|
94
|
-
socket.emit(`serve:${token.key}`, newValue);
|
|
95
|
-
},
|
|
96
|
-
store
|
|
97
|
-
);
|
|
98
|
-
unsubSingleCallbacksByKey.set(token.key, unsubscribe);
|
|
99
|
-
socket.on(`unsub:${token.key}`, () => {
|
|
100
|
-
fillSingleUnsubRequest(token.key);
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
socket.on(`sub:${family.key}`, fillSubRequest);
|
|
105
|
-
return () => {
|
|
106
|
-
socket.off(`sub:${family.key}`, fillSubRequest);
|
|
107
|
-
unsubFamilyCallbacksByKey.forEach((unsub) => unsub());
|
|
108
|
-
unsubSingleCallbacksByKey.forEach((unsub) => unsub());
|
|
109
|
-
unsubFamilyCallbacksByKey.clear();
|
|
110
|
-
unsubSingleCallbacksByKey.clear();
|
|
111
|
-
};
|
|
112
|
-
};
|
|
113
|
-
};
|
|
114
|
-
|
|
115
|
-
// ../src/realtime/hook-composition/receive-transaction.ts
|
|
116
|
-
import * as AtomIO3 from "atom.io";
|
|
117
|
-
var useReceiveTransaction = ({ socket, store }) => {
|
|
118
|
-
return function receiveTransaction(tx) {
|
|
119
|
-
const fillTransactionRequest = (update) => AtomIO3.runTransaction(tx, store)(...update.params);
|
|
120
|
-
socket.on(`tx:${tx.key}`, fillTransactionRequest);
|
|
121
|
-
return () => socket.off(`tx:${tx.key}`, fillTransactionRequest);
|
|
122
|
-
};
|
|
123
|
-
};
|
|
124
|
-
|
|
125
|
-
// ../src/realtime/hook-composition/receive-state.ts
|
|
126
|
-
import * as AtomIO4 from "atom.io";
|
|
127
|
-
var useReceiveState = ({ socket, store }) => {
|
|
128
|
-
return function receiveState(token) {
|
|
129
|
-
const publish = (newValue) => AtomIO4.setState(token, newValue, store);
|
|
130
|
-
const fillPubUnclaim = () => {
|
|
131
|
-
socket.off(`pub:${token.key}`, publish);
|
|
132
|
-
socket.off(`unclaim:${token.key}`, fillPubUnclaim);
|
|
133
|
-
};
|
|
134
|
-
const fillPubClaim = () => {
|
|
135
|
-
socket.on(`pub:${token.key}`, publish);
|
|
136
|
-
socket.on(`unclaim:${token.key}`, fillPubUnclaim);
|
|
137
|
-
};
|
|
138
|
-
socket.on(`claim:${token.key}`, fillPubClaim);
|
|
139
|
-
return () => {
|
|
140
|
-
socket.off(`claim:${token.key}`, fillPubClaim);
|
|
141
|
-
socket.off(`pub:${token.key}`, publish);
|
|
142
|
-
};
|
|
143
|
-
};
|
|
144
|
-
};
|
|
145
|
-
export {
|
|
146
|
-
useExposeFamily,
|
|
147
|
-
useExposeSingle,
|
|
148
|
-
useReceiveState,
|
|
149
|
-
useReceiveTransaction
|
|
150
|
-
};
|
|
5
|
+
export { E as useExposeFamily, $ as useExposeSingle, R as useReceiveState, j as useReceiveTransaction };
|
|
6
|
+
//# sourceMappingURL=out.js.map
|
|
151
7
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/realtime/hook-composition/expose-single.ts","../../../anvl/src/json/index.ts","../../src/realtime/hook-composition/expose-family.ts","../../src/realtime/hook-composition/receive-transaction.ts","../../src/realtime/hook-composition/receive-state.ts"],"sourcesContent":["import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeSingle = ({ socket, store }: ServerConfig) => {\n\treturn function exposeSingle<J extends Json.Serializable>(\n\t\ttoken: AtomIO.StateToken<J>,\n\t): () => void {\n\t\tlet unsubscribeFromStateUpdates: (() => void) | null = null\n\n\t\tconst fillUnsubRequest = () => {\n\t\t\tsocket.off(`unsub:${token.key}`, fillUnsubRequest)\n\t\t\tunsubscribeFromStateUpdates?.()\n\t\t\tunsubscribeFromStateUpdates = null\n\t\t}\n\n\t\tconst fillSubRequest = () => {\n\t\t\tsocket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n\t\t\tunsubscribeFromStateUpdates = AtomIO.subscribe(\n\t\t\t\ttoken,\n\t\t\t\t({ newValue }) => {\n\t\t\t\t\tsocket.emit(`serve:${token.key}`, newValue)\n\t\t\t\t},\n\t\t\t\tstore,\n\t\t\t)\n\t\t\tsocket.on(`unsub:${token.key}`, fillUnsubRequest)\n\t\t}\n\n\t\tsocket.on(`sub:${token.key}`, fillSubRequest)\n\n\t\treturn () => {\n\t\t\tsocket.off(`sub:${token.key}`, fillSubRequest)\n\t\t\tunsubscribeFromStateUpdates?.()\n\t\t}\n\t}\n}\n","export * from \"./json-interface\"\nimport type * as Json from \"./json\"\nexport { Json }\n\nexport const parseJson = <S extends Stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends Stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\n\nexport type Stringified<J extends Json.Serializable> = string & { __json: J }\n\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): Stringified<J> => JSON.stringify(json) as Stringified<J>\n\nexport type Empty = Record<string, never>\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = typeof JSON_TYPE_NAMES[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n","import type { Json } from \"anvl/json\"\nimport { parseJson } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\nconst subscribeToTokenCreation = <T>(\n\tfamily: AtomIO.AtomFamily<T> | AtomIO.SelectorFamily<T>,\n\thandleTokenCreation: (token: AtomIO.StateToken<T>) => void,\n): (() => void) => {\n\tconst subscription =\n\t\tfamily.type === `atom_family`\n\t\t\t? family.subject.subscribe(handleTokenCreation)\n\t\t\t: family.subject.subscribe(handleTokenCreation)\n\treturn () => subscription.unsubscribe()\n}\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeFamily = ({ socket, store }: ServerConfig) => {\n\treturn function exposeFamily<J extends Json.Serializable>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t\tindex: AtomIO.StateToken<Set<string>>,\n\t): () => void {\n\t\tconst unsubSingleCallbacksByKey = new Map<string, () => void>()\n\t\tconst unsubFamilyCallbacksByKey = new Map<string, () => void>()\n\n\t\tconst fillFamilyUnsubRequest = () => {\n\t\t\tunsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubFamilyCallbacksByKey.clear()\n\t\t\tsocket.off(`unsub:${family.key}`, fillFamilyUnsubRequest)\n\t\t}\n\n\t\tconst fillSingleUnsubRequest = (key: string) => {\n\t\t\tsocket.off(`unsub:${key}`, fillSingleUnsubRequest)\n\t\t\tconst unsub = unsubSingleCallbacksByKey.get(key)\n\t\t\tif (unsub) {\n\t\t\t\tunsub()\n\t\t\t\tunsubSingleCallbacksByKey.delete(key)\n\t\t\t}\n\t\t}\n\n\t\tconst fillSubRequest = (subKey?: AtomIO.Json.Serializable) => {\n\t\t\tif (subKey === undefined) {\n\t\t\t\tconst keys = AtomIO.getState(index, store)\n\t\t\t\tkeys.forEach((key) => {\n\t\t\t\t\tconst token = family(key)\n\t\t\t\t\tsocket.emit(\n\t\t\t\t\t\t`serve:${family.key}`,\n\t\t\t\t\t\tparseJson(token.family?.subKey || `null`),\n\t\t\t\t\t\tAtomIO.getState(token, store),\n\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t\tconst unsubscribeFromTokenCreation = subscribeToTokenCreation(\n\t\t\t\t\tfamily,\n\t\t\t\t\t(token) => {\n\t\t\t\t\t\tconst unsub = AtomIO.subscribe(\n\t\t\t\t\t\t\ttoken,\n\t\t\t\t\t\t\t({ newValue }) => {\n\t\t\t\t\t\t\t\tsocket.emit(\n\t\t\t\t\t\t\t\t\t`serve:${family.key}`,\n\t\t\t\t\t\t\t\t\tparseJson(token.family?.subKey || `null`),\n\t\t\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tunsubFamilyCallbacksByKey.set(token.key, unsub)\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tunsubFamilyCallbacksByKey.set(family.key, unsubscribeFromTokenCreation)\n\n\t\t\t\tsocket.on(`unsub:${family.key}`, fillFamilyUnsubRequest)\n\t\t\t} else {\n\t\t\t\tconst token = family(subKey)\n\t\t\t\tsocket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n\t\t\t\tconst unsubscribe = AtomIO.subscribe(\n\t\t\t\t\ttoken,\n\t\t\t\t\t({ newValue }) => {\n\t\t\t\t\t\tsocket.emit(`serve:${token.key}`, newValue)\n\t\t\t\t\t},\n\t\t\t\t\tstore,\n\t\t\t\t)\n\t\t\t\tunsubSingleCallbacksByKey.set(token.key, unsubscribe)\n\t\t\t\tsocket.on(`unsub:${token.key}`, () => {\n\t\t\t\t\tfillSingleUnsubRequest(token.key)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tsocket.on(`sub:${family.key}`, fillSubRequest)\n\n\t\treturn () => {\n\t\t\tsocket.off(`sub:${family.key}`, fillSubRequest)\n\t\t\tunsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubSingleCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubFamilyCallbacksByKey.clear()\n\t\t\tunsubSingleCallbacksByKey.clear()\n\t\t}\n\t}\n}\n","import * as AtomIO from \"atom.io\"\n\nimport type { ƒn } from \"~/packages/anvl/src/function\"\n\nimport type { ServerConfig } from \".\"\n\nexport const useReceiveTransaction = ({ socket, store }: ServerConfig) => {\n\treturn function receiveTransaction<ƒ extends ƒn>(\n\t\ttx: AtomIO.TransactionToken<ƒ>,\n\t): () => void {\n\t\tconst fillTransactionRequest = (update: AtomIO.TransactionUpdate<ƒ>) =>\n\t\t\tAtomIO.runTransaction<ƒ>(tx, store)(...update.params)\n\n\t\tsocket.on(`tx:${tx.key}`, fillTransactionRequest)\n\n\t\treturn () => socket.off(`tx:${tx.key}`, fillTransactionRequest)\n\t}\n}\n","import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useReceiveState = ({ socket, store }: ServerConfig) => {\n\treturn function receiveState<J extends Json.Serializable>(\n\t\ttoken: AtomIO.StateToken<J>,\n\t): () => void {\n\t\tconst publish = (newValue: J) => AtomIO.setState(token, newValue, store)\n\n\t\tconst fillPubUnclaim = () => {\n\t\t\tsocket.off(`pub:${token.key}`, publish)\n\t\t\tsocket.off(`unclaim:${token.key}`, fillPubUnclaim)\n\t\t}\n\t\tconst fillPubClaim = () => {\n\t\t\tsocket.on(`pub:${token.key}`, publish)\n\t\t\tsocket.on(`unclaim:${token.key}`, fillPubUnclaim)\n\t\t}\n\n\t\tsocket.on(`claim:${token.key}`, fillPubClaim)\n\n\t\treturn () => {\n\t\t\tsocket.off(`claim:${token.key}`, fillPubClaim)\n\t\t\tsocket.off(`pub:${token.key}`, publish)\n\t\t}\n\t}\n}\n"],"mappings":"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","names":["AtomIO","AtomIO","AtomIO"]}
|
|
1
|
+
{"version":3,"sources":["../src/hook-composition/expose-single.ts","../../../anvl/src/json/index.ts","../src/hook-composition/expose-family.ts","../src/hook-composition/receive-transaction.ts","../src/hook-composition/receive-state.ts"],"names":["AtomIO","useExposeSingle","socket","store","token","unsubscribeFromStateUpdates","fillUnsubRequest","fillSubRequest","newValue","parseJson","str","subscribeToTokenCreation","family","key","handleTokenCreation","useExposeFamily","index","unsubSingleCallbacksByKey","unsubFamilyCallbacksByKey","fillFamilyUnsubRequest","unsub","fillSingleUnsubRequest","subKey","_a","unsubscribeFromTokenCreation","unsubscribe","useReceiveTransaction","tx","fillTransactionRequest","update","useReceiveState","publish","fillPubUnclaim","fillPubClaim"],"mappings":"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","sourcesContent":["import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeSingle = ({ socket, store }: ServerConfig) => {\n\treturn function exposeSingle<J extends Json.Serializable>(\n\t\ttoken: AtomIO.StateToken<J>,\n\t): () => void {\n\t\tlet unsubscribeFromStateUpdates: (() => void) | null = null\n\n\t\tconst fillUnsubRequest = () => {\n\t\t\tsocket.off(`unsub:${token.key}`, fillUnsubRequest)\n\t\t\tunsubscribeFromStateUpdates?.()\n\t\t\tunsubscribeFromStateUpdates = null\n\t\t}\n\n\t\tconst fillSubRequest = () => {\n\t\t\tsocket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n\t\t\tunsubscribeFromStateUpdates = AtomIO.subscribe(\n\t\t\t\ttoken,\n\t\t\t\t({ newValue }) => {\n\t\t\t\t\tsocket.emit(`serve:${token.key}`, newValue)\n\t\t\t\t},\n\t\t\t\t`expose-single:${socket.id}`,\n\t\t\t\tstore,\n\t\t\t)\n\t\t\tsocket.on(`unsub:${token.key}`, fillUnsubRequest)\n\t\t}\n\n\t\tsocket.on(`sub:${token.key}`, fillSubRequest)\n\n\t\treturn () => {\n\t\t\tsocket.off(`sub:${token.key}`, fillSubRequest)\n\t\t\tunsubscribeFromStateUpdates?.()\n\t\t}\n\t}\n}\n","export * from \"./json-interface\"\nimport type * as Json from \"./json\"\nexport { Json }\n\nexport const parseJson = <S extends Stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends Stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\n\nexport type Stringified<J extends Json.Serializable> = string & { __json: J }\n\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): Stringified<J> => JSON.stringify(json) as Stringified<J>\n\nexport type Empty = Record<string, never>\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = typeof JSON_TYPE_NAMES[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n","import type { Json } from \"anvl/json\"\nimport { parseJson } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\nconst subscribeToTokenCreation = <T>(\n\tfamily: AtomIO.AtomFamily<T> | AtomIO.SelectorFamily<T>,\n\tkey: string,\n\thandleTokenCreation: (token: AtomIO.StateToken<T>) => void,\n): (() => void) => {\n\tconst unsubscribe =\n\t\tfamily.type === `atom_family`\n\t\t\t? family.subject.subscribe(key, handleTokenCreation)\n\t\t\t: family.subject.subscribe(key, handleTokenCreation)\n\treturn unsubscribe\n}\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useExposeFamily = ({ socket, store }: ServerConfig) => {\n\treturn function exposeFamily<J extends Json.Serializable>(\n\t\tfamily: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>,\n\t\tindex: AtomIO.StateToken<Set<string>>,\n\t): () => void {\n\t\tconst unsubSingleCallbacksByKey = new Map<string, () => void>()\n\t\tconst unsubFamilyCallbacksByKey = new Map<string, () => void>()\n\n\t\tconst fillFamilyUnsubRequest = () => {\n\t\t\tunsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubFamilyCallbacksByKey.clear()\n\t\t\tsocket.off(`unsub:${family.key}`, fillFamilyUnsubRequest)\n\t\t}\n\n\t\tconst fillSingleUnsubRequest = (key: string) => {\n\t\t\tsocket.off(`unsub:${key}`, fillSingleUnsubRequest)\n\t\t\tconst unsub = unsubSingleCallbacksByKey.get(key)\n\t\t\tif (unsub) {\n\t\t\t\tunsub()\n\t\t\t\tunsubSingleCallbacksByKey.delete(key)\n\t\t\t}\n\t\t}\n\n\t\tconst fillSubRequest = (subKey?: AtomIO.Json.Serializable) => {\n\t\t\tif (subKey === undefined) {\n\t\t\t\tconst keys = AtomIO.getState(index, store)\n\t\t\t\tkeys.forEach((key) => {\n\t\t\t\t\tconst token = family(key)\n\t\t\t\t\tsocket.emit(\n\t\t\t\t\t\t`serve:${family.key}`,\n\t\t\t\t\t\tparseJson(token.family?.subKey || `null`),\n\t\t\t\t\t\tAtomIO.getState(token, store),\n\t\t\t\t\t)\n\t\t\t\t})\n\n\t\t\t\tconst unsubscribeFromTokenCreation = subscribeToTokenCreation(\n\t\t\t\t\tfamily,\n\t\t\t\t\t`expose-family:${socket.id}`,\n\t\t\t\t\t(token) => {\n\t\t\t\t\t\tconst unsub = AtomIO.subscribe(\n\t\t\t\t\t\t\ttoken,\n\t\t\t\t\t\t\t({ newValue }) => {\n\t\t\t\t\t\t\t\tsocket.emit(\n\t\t\t\t\t\t\t\t\t`serve:${family.key}`,\n\t\t\t\t\t\t\t\t\tparseJson(token.family?.subKey || `null`),\n\t\t\t\t\t\t\t\t\tnewValue,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t`expose-family:${family.key}:${socket.id}`,\n\t\t\t\t\t\t\tstore,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tunsubFamilyCallbacksByKey.set(token.key, unsub)\n\t\t\t\t\t},\n\t\t\t\t)\n\t\t\t\tunsubFamilyCallbacksByKey.set(family.key, unsubscribeFromTokenCreation)\n\n\t\t\t\tsocket.on(`unsub:${family.key}`, fillFamilyUnsubRequest)\n\t\t\t} else {\n\t\t\t\tconst token = family(subKey)\n\t\t\t\tsocket.emit(`serve:${token.key}`, AtomIO.getState(token, store))\n\t\t\t\tconst unsubscribe = AtomIO.subscribe(\n\t\t\t\t\ttoken,\n\t\t\t\t\t({ newValue }) => {\n\t\t\t\t\t\tsocket.emit(`serve:${token.key}`, newValue)\n\t\t\t\t\t},\n\t\t\t\t\t`expose-family:${family.key}:${socket.id}`,\n\t\t\t\t\tstore,\n\t\t\t\t)\n\t\t\t\tunsubSingleCallbacksByKey.set(token.key, unsubscribe)\n\t\t\t\tsocket.on(`unsub:${token.key}`, () => {\n\t\t\t\t\tfillSingleUnsubRequest(token.key)\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tsocket.on(`sub:${family.key}`, fillSubRequest)\n\n\t\treturn () => {\n\t\t\tsocket.off(`sub:${family.key}`, fillSubRequest)\n\t\t\tunsubFamilyCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubSingleCallbacksByKey.forEach((unsub) => unsub())\n\t\t\tunsubFamilyCallbacksByKey.clear()\n\t\t\tunsubSingleCallbacksByKey.clear()\n\t\t}\n\t}\n}\n","import * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \".\"\n\nexport const useReceiveTransaction = ({ socket, store }: ServerConfig) => {\n\treturn function receiveTransaction<ƒ extends AtomIO.ƒn>(\n\t\ttx: AtomIO.TransactionToken<ƒ>,\n\t): () => void {\n\t\tconst fillTransactionRequest = (update: AtomIO.TransactionUpdate<ƒ>) =>\n\t\t\tAtomIO.runTransaction<ƒ>(tx, store)(...update.params)\n\n\t\tsocket.on(`tx:${tx.key}`, fillTransactionRequest)\n\n\t\treturn () => socket.off(`tx:${tx.key}`, fillTransactionRequest)\n\t}\n}\n","import type { Json } from \"anvl/json\"\nimport * as AtomIO from \"atom.io\"\n\nimport type { ServerConfig } from \"..\"\n\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\nexport const useReceiveState = ({ socket, store }: ServerConfig) => {\n\treturn function receiveState<J extends Json.Serializable>(\n\t\ttoken: AtomIO.StateToken<J>,\n\t): () => void {\n\t\tconst publish = (newValue: J) => AtomIO.setState(token, newValue, store)\n\n\t\tconst fillPubUnclaim = () => {\n\t\t\tsocket.off(`pub:${token.key}`, publish)\n\t\t\tsocket.off(`unclaim:${token.key}`, fillPubUnclaim)\n\t\t}\n\t\tconst fillPubClaim = () => {\n\t\t\tsocket.on(`pub:${token.key}`, publish)\n\t\t\tsocket.on(`unclaim:${token.key}`, fillPubUnclaim)\n\t\t}\n\n\t\tsocket.on(`claim:${token.key}`, fillPubClaim)\n\n\t\treturn () => {\n\t\t\tsocket.off(`claim:${token.key}`, fillPubClaim)\n\t\t\tsocket.off(`pub:${token.key}`, publish)\n\t\t}\n\t}\n}\n"]}
|
|
@@ -10,8 +10,6 @@ declare const RealtimeProvider: React.FC<{
|
|
|
10
10
|
socket: Socket;
|
|
11
11
|
}>;
|
|
12
12
|
|
|
13
|
-
type ƒn = (...parameters: any[]) => any;
|
|
14
|
-
|
|
15
13
|
type primitive = boolean | number | string | null;
|
|
16
14
|
|
|
17
15
|
type Serializable = primitive | Readonly<{
|
|
@@ -26,14 +24,14 @@ declare function usePullFamilyMember<J extends Serializable>(family: AtomIO.Atom
|
|
|
26
24
|
|
|
27
25
|
declare function usePush<J extends Serializable>(token: AtomIO.StateToken<J>): void;
|
|
28
26
|
|
|
29
|
-
declare function useServerAction<ƒ extends
|
|
27
|
+
declare function useServerAction<ƒ extends AtomIO.ƒn>(token: AtomIO.TransactionToken<ƒ>): (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
|
|
30
28
|
|
|
31
29
|
type RealtimeHooks = {
|
|
32
30
|
usePull: <J extends Serializable>(token: AtomIO.StateToken<J>) => void;
|
|
33
31
|
usePullFamily: <J extends Serializable>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>) => void;
|
|
34
32
|
usePullFamilyMember: <J extends Serializable>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>, subKey: string) => void;
|
|
35
33
|
usePush: <J extends Serializable>(token: AtomIO.StateToken<J>) => void;
|
|
36
|
-
useServerAction: <ƒ extends
|
|
34
|
+
useServerAction: <ƒ extends AtomIO.ƒn>(token: AtomIO.TransactionToken<ƒ>) => (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
|
|
37
35
|
};
|
|
38
36
|
declare const realtimeHooks: RealtimeHooks;
|
|
39
37
|
|
|
@@ -10,8 +10,6 @@ declare const RealtimeProvider: React.FC<{
|
|
|
10
10
|
socket: Socket;
|
|
11
11
|
}>;
|
|
12
12
|
|
|
13
|
-
type ƒn = (...parameters: any[]) => any;
|
|
14
|
-
|
|
15
13
|
type primitive = boolean | number | string | null;
|
|
16
14
|
|
|
17
15
|
type Serializable = primitive | Readonly<{
|
|
@@ -26,14 +24,14 @@ declare function usePullFamilyMember<J extends Serializable>(family: AtomIO.Atom
|
|
|
26
24
|
|
|
27
25
|
declare function usePush<J extends Serializable>(token: AtomIO.StateToken<J>): void;
|
|
28
26
|
|
|
29
|
-
declare function useServerAction<ƒ extends
|
|
27
|
+
declare function useServerAction<ƒ extends AtomIO.ƒn>(token: AtomIO.TransactionToken<ƒ>): (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
|
|
30
28
|
|
|
31
29
|
type RealtimeHooks = {
|
|
32
30
|
usePull: <J extends Serializable>(token: AtomIO.StateToken<J>) => void;
|
|
33
31
|
usePullFamily: <J extends Serializable>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>) => void;
|
|
34
32
|
usePullFamilyMember: <J extends Serializable>(family: AtomIO.AtomFamily<J> | AtomIO.SelectorFamily<J>, subKey: string) => void;
|
|
35
33
|
usePush: <J extends Serializable>(token: AtomIO.StateToken<J>) => void;
|
|
36
|
-
useServerAction: <ƒ extends
|
|
34
|
+
useServerAction: <ƒ extends AtomIO.ƒn>(token: AtomIO.TransactionToken<ƒ>) => (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
|
|
37
35
|
};
|
|
38
36
|
declare const realtimeHooks: RealtimeHooks;
|
|
39
37
|
|