atom.io 0.14.3 → 0.14.5
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/data/dist/index.cjs +47 -1416
- package/data/dist/index.cjs.map +1 -1
- package/data/dist/index.d.cts +8 -134
- package/data/dist/index.d.ts +8 -134
- package/data/dist/index.js +4 -6
- package/data/dist/index.js.map +1 -1
- package/dist/chunk-NYTGCPHB.js +261 -0
- package/dist/chunk-NYTGCPHB.js.map +1 -0
- package/dist/chunk-PZLG2HP3.js +36 -0
- package/dist/chunk-PZLG2HP3.js.map +1 -0
- package/dist/chunk-XACXFU3B.js +46 -0
- package/dist/chunk-XACXFU3B.js.map +1 -0
- package/dist/index.cjs +55 -2330
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +152 -1
- package/dist/index.js.map +1 -1
- package/internal/dist/index.cjs +30 -159
- package/internal/dist/index.cjs.map +1 -1
- package/internal/dist/index.d.cts +8 -211
- package/internal/dist/index.d.ts +8 -211
- package/internal/dist/index.js +2027 -1
- package/internal/dist/index.js.map +1 -1
- package/introspection/dist/index.cjs +45 -1565
- package/introspection/dist/index.cjs.map +1 -1
- package/introspection/dist/index.d.cts +2 -129
- package/introspection/dist/index.d.ts +2 -129
- package/introspection/dist/index.js +298 -2
- package/introspection/dist/index.js.map +1 -1
- package/json/dist/index.cjs +5 -1502
- package/json/dist/index.cjs.map +1 -1
- package/json/dist/index.d.cts +5 -131
- package/json/dist/index.d.ts +5 -131
- package/json/dist/index.js +37 -1
- package/json/dist/index.js.map +1 -1
- package/package.json +1 -2
- package/react/dist/index.cjs +30 -1571
- package/react/dist/index.cjs.map +1 -1
- package/react/dist/index.d.cts +8 -136
- package/react/dist/index.d.ts +8 -136
- package/react/dist/index.js +62 -2
- package/react/dist/index.js.map +1 -1
- package/react/src/store-hooks.ts +18 -20
- package/react-devtools/dist/index.cjs +135 -2153
- package/react-devtools/dist/index.cjs.map +1 -1
- package/react-devtools/dist/index.d.cts +20 -146
- package/react-devtools/dist/index.d.ts +20 -146
- package/react-devtools/dist/index.js +5 -3
- package/react-devtools/dist/index.js.map +1 -1
- package/realtime-client/dist/index.cjs +34 -1529
- package/realtime-client/dist/index.cjs.map +1 -1
- package/realtime-client/dist/index.d.cts +11 -138
- package/realtime-client/dist/index.d.ts +11 -138
- package/realtime-client/dist/index.js +165 -2
- package/realtime-client/dist/index.js.map +1 -1
- package/realtime-react/dist/index.cjs +35 -1727
- package/realtime-react/dist/index.cjs.map +1 -1
- package/realtime-react/dist/index.d.cts +7 -35
- package/realtime-react/dist/index.d.ts +7 -35
- package/realtime-react/dist/index.js +66 -4
- package/realtime-react/dist/index.js.map +1 -1
- package/realtime-server/dist/index.cjs +57 -1548
- package/realtime-server/dist/index.cjs.map +1 -1
- package/realtime-server/dist/index.d.cts +15 -153
- package/realtime-server/dist/index.d.ts +15 -153
- package/realtime-server/dist/index.js +21 -27
- package/realtime-server/dist/index.js.map +1 -1
- package/realtime-testing/dist/index.cjs +15 -2376
- package/realtime-testing/dist/index.cjs.map +1 -1
- package/realtime-testing/dist/index.d.cts +3 -489
- package/realtime-testing/dist/index.d.ts +3 -489
- package/realtime-testing/dist/index.js +10 -9
- package/realtime-testing/dist/index.js.map +1 -1
- package/transceivers/set-rtx/dist/index.cjs +9 -31
- package/transceivers/set-rtx/dist/index.cjs.map +1 -1
- package/transceivers/set-rtx/dist/index.d.cts +7 -7
- package/transceivers/set-rtx/dist/index.d.ts +7 -7
- package/transceivers/set-rtx/dist/index.js +3 -2
- package/transceivers/set-rtx/dist/index.js.map +1 -1
- package/dist/chunk-C4YZZNRH.js +0 -67
- package/dist/chunk-C4YZZNRH.js.map +0 -1
- package/dist/chunk-CWKKQKVQ.js +0 -68
- package/dist/chunk-CWKKQKVQ.js.map +0 -1
- package/dist/chunk-GMN5KH6A.js +0 -309
- package/dist/chunk-GMN5KH6A.js.map +0 -1
- package/dist/chunk-N7ADBQJG.js +0 -176
- package/dist/chunk-N7ADBQJG.js.map +0 -1
- package/dist/chunk-PURABO5G.js +0 -2581
- package/dist/chunk-PURABO5G.js.map +0 -1
- package/dist/index.d.cts +0 -493
- package/dist/index.d.ts +0 -493
- package/dist/metafile-cjs.json +0 -1
- package/dist/metafile-esm.json +0 -1
|
@@ -1,5 +1,10 @@
|
|
|
1
|
+
import * as AtomIO from 'atom.io';
|
|
2
|
+
import { FamilyMetadata, ƒn, TransactionUpdate, MutableAtomToken, AtomToken, StateToken, TimelineUpdate, StateUpdate, AtomFamily, ReadonlySelectorFamily, SelectorFamily, ReadonlySelectorToken, SelectorToken, TransactionToken, TimelineToken, AtomIOLogger, Logger } from 'atom.io';
|
|
1
3
|
import { Socket } from 'socket.io-client';
|
|
2
4
|
|
|
5
|
+
declare const myIdState__INTERNAL: AtomIO.AtomToken<string | null>;
|
|
6
|
+
declare const myIdState: AtomIO.ReadonlySelectorToken<string | null>;
|
|
7
|
+
|
|
3
8
|
declare class Subject<T> {
|
|
4
9
|
Subscriber: (value: T) => void;
|
|
5
10
|
subscribers: Map<string, this[`Subscriber`]>;
|
|
@@ -247,148 +252,16 @@ type Atom<T> = {
|
|
|
247
252
|
cleanup?: () => void;
|
|
248
253
|
};
|
|
249
254
|
|
|
250
|
-
|
|
251
|
-
key: string;
|
|
252
|
-
type: `atom_family`;
|
|
253
|
-
subject: Subject<AtomToken<T>>;
|
|
254
|
-
mutable?: boolean;
|
|
255
|
-
};
|
|
256
|
-
|
|
257
|
-
declare const LoggerIconDictionary: {
|
|
258
|
-
readonly "\u231B": "Timeline event fully captured";
|
|
259
|
-
readonly "\u23E9": "Timeline redo";
|
|
260
|
-
readonly "\u23EA": "Timeline undo";
|
|
261
|
-
readonly "\u23ED\uFE0F": "Transaction redo";
|
|
262
|
-
readonly "\u23EE\uFE0F": "Transaction undo";
|
|
263
|
-
readonly "\u23F3": "Timeline event partially captured";
|
|
264
|
-
readonly "\u23F9\uFE0F": "Time-travel complete";
|
|
265
|
-
readonly "\uD83D\uDC81": "Notice";
|
|
266
|
-
readonly "\uD83D\uDD04": "Realtime transaction synchronized";
|
|
267
|
-
readonly "\u2705": "Realtime transaction success";
|
|
268
|
-
readonly "\u2728": "Computation complete";
|
|
269
|
-
readonly "\u274C": "Conflict prevents attempted action";
|
|
270
|
-
readonly "\u2B55": "Operation start";
|
|
271
|
-
readonly "\uD83D\uDC1E": "Possible bug in AtomIO";
|
|
272
|
-
readonly "\uD83D\uDC40": "Subscription added";
|
|
273
|
-
readonly "\uD83D\uDC6A": "Family member added";
|
|
274
|
-
readonly "\uD83D\uDCC1": "Stow update";
|
|
275
|
-
readonly "\uD83D\uDCC3": "Copy mutable";
|
|
276
|
-
readonly "\uD83D\uDCD6": "Read state";
|
|
277
|
-
readonly "\uD83D\uDCDD": "Write state";
|
|
278
|
-
readonly "\uD83D\uDCE2": "Notify subscribers";
|
|
279
|
-
readonly "\uD83D\uDD0C": "Register dependency";
|
|
280
|
-
readonly "\uD83D\uDD0D": "Discover root";
|
|
281
|
-
readonly "\uD83D\uDD25": "Delete state";
|
|
282
|
-
readonly "\uD83D\uDD27": "Create mutable atom";
|
|
283
|
-
readonly "\uD83D\uDD28": "Create immutable atom";
|
|
284
|
-
readonly "\uD83D\uDD34": "Operation complete";
|
|
285
|
-
readonly "\uD83D\uDDD1": "Evict cached value";
|
|
286
|
-
readonly "\uD83D\uDCA5": "Caught";
|
|
287
|
-
readonly "\uD83D\uDE48": "Subscription canceled";
|
|
288
|
-
readonly "\uD83D\uDEC4": "Apply transaction";
|
|
289
|
-
readonly "\uD83D\uDEE0\uFE0F": "Install atom into store";
|
|
290
|
-
readonly "\uD83D\uDEEB": "Begin transaction";
|
|
291
|
-
readonly "\uD83D\uDEEC": "Complete transaction";
|
|
292
|
-
readonly "\uD83E\uDDEE": "Computing selector";
|
|
293
|
-
readonly "\uD83E\uDDF9": "Prepare to evict";
|
|
294
|
-
readonly "\uD83E\uDE82": "Abort transaction";
|
|
295
|
-
};
|
|
296
|
-
type LoggerIcon = keyof typeof LoggerIconDictionary;
|
|
297
|
-
declare const LOG_LEVELS: readonly ["info", "warn", "error"];
|
|
298
|
-
type LogLevel = (typeof LOG_LEVELS)[number];
|
|
299
|
-
type LogFn = (icon: LoggerIcon, tokenType: `atom` | `readonly_selector` | `selector` | `state` | `timeline` | `transaction` | `unknown`, tokenKey: string, message: string, ...rest: unknown[]) => void;
|
|
300
|
-
type LogFilter = (...params: Parameters<LogFn>) => boolean;
|
|
301
|
-
type Logger = Record<LogLevel, LogFn>;
|
|
302
|
-
declare class AtomIOLogger implements Logger {
|
|
303
|
-
logLevel: `error` | `info` | `warn` | null;
|
|
304
|
-
private readonly filter?;
|
|
305
|
-
private readonly logger;
|
|
306
|
-
constructor(logLevel: `error` | `info` | `warn` | null, filter?: LogFilter | undefined, logger?: Logger);
|
|
307
|
-
error: LogFn;
|
|
308
|
-
info: LogFn;
|
|
309
|
-
warn: LogFn;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
type TransactionToken<_> = {
|
|
313
|
-
key: string;
|
|
314
|
-
type: `transaction`;
|
|
315
|
-
__brand?: _;
|
|
316
|
-
};
|
|
317
|
-
type TransactionUpdate<ƒ extends ƒn> = {
|
|
318
|
-
key: string;
|
|
319
|
-
updates: (KeyedStateUpdate<unknown> | TransactionUpdate<ƒn>)[];
|
|
320
|
-
params: Parameters<ƒ>;
|
|
321
|
-
output: ReturnType<ƒ>;
|
|
322
|
-
};
|
|
323
|
-
|
|
324
|
-
type SelectorFamily<T, K extends Serializable = Serializable> = ((key: K) => SelectorToken<T>) & {
|
|
325
|
-
key: string;
|
|
326
|
-
type: `selector_family`;
|
|
327
|
-
subject: Subject<SelectorToken<T>>;
|
|
328
|
-
};
|
|
329
|
-
type ReadonlySelectorFamily<T, K extends Serializable = Serializable> = ((key: K) => ReadonlySelectorToken<T>) & {
|
|
330
|
-
key: string;
|
|
331
|
-
type: `readonly_selector_family`;
|
|
332
|
-
subject: Subject<ReadonlySelectorToken<T>>;
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
type StateUpdate<T> = {
|
|
336
|
-
newValue: T;
|
|
337
|
-
oldValue: T;
|
|
338
|
-
};
|
|
339
|
-
type KeyedStateUpdate<T> = StateUpdate<T> & {
|
|
340
|
-
key: string;
|
|
341
|
-
family?: FamilyMetadata;
|
|
342
|
-
};
|
|
343
|
-
|
|
344
|
-
type TimelineToken = {
|
|
345
|
-
key: string;
|
|
346
|
-
type: `timeline`;
|
|
347
|
-
};
|
|
348
|
-
type TimelineUpdate = TimelineAtomUpdate | TimelineSelectorUpdate | TimelineTransactionUpdate;
|
|
349
|
-
|
|
350
|
-
type ƒn = (...parameters: any[]) => any;
|
|
351
|
-
type AtomToken<_> = {
|
|
352
|
-
key: string;
|
|
353
|
-
type: `atom`;
|
|
354
|
-
family?: FamilyMetadata;
|
|
355
|
-
__brand?: _;
|
|
356
|
-
};
|
|
357
|
-
interface MutableAtomToken<T extends Transceiver<any>, J extends Serializable> extends AtomToken<T> {
|
|
358
|
-
__asJSON?: J;
|
|
359
|
-
__update?: T extends Transceiver<infer Update> ? Update : never;
|
|
360
|
-
}
|
|
361
|
-
type SelectorToken<_> = {
|
|
362
|
-
key: string;
|
|
363
|
-
type: `selector`;
|
|
364
|
-
family?: FamilyMetadata;
|
|
365
|
-
__brand?: _;
|
|
366
|
-
};
|
|
367
|
-
type StateToken<T> = AtomToken<T> | SelectorToken<T>;
|
|
368
|
-
type ReadonlySelectorToken<_> = {
|
|
369
|
-
key: string;
|
|
370
|
-
type: `readonly_selector`;
|
|
371
|
-
family?: FamilyMetadata;
|
|
372
|
-
__brand?: _;
|
|
373
|
-
};
|
|
374
|
-
type FamilyMetadata = {
|
|
375
|
-
key: string;
|
|
376
|
-
subKey: string;
|
|
377
|
-
};
|
|
378
|
-
|
|
379
|
-
declare const myIdState__INTERNAL: AtomToken<string | null>;
|
|
380
|
-
declare const myIdState: ReadonlySelectorToken<string | null>;
|
|
381
|
-
|
|
382
|
-
declare function pullState<J extends Serializable>(token: StateToken<J>, socket: Socket, store: Store): () => void;
|
|
255
|
+
declare function pullState<J extends Serializable>(token: AtomIO.StateToken<J>, socket: Socket, store: Store): () => void;
|
|
383
256
|
|
|
384
|
-
declare function pullFamilyMember<J extends Serializable>(token: AtomToken<J>, socket: Socket, store: Store): () => void;
|
|
257
|
+
declare function pullFamilyMember<J extends Serializable>(token: AtomIO.AtomToken<J>, socket: Socket, store: Store): () => void;
|
|
385
258
|
|
|
386
|
-
declare function pullMutableState<T extends Transceiver<Serializable>, J extends Serializable>(token: MutableAtomToken<T, J>, socket: Socket, store: Store): () => void;
|
|
259
|
+
declare function pullMutableState<T extends Transceiver<Serializable>, J extends Serializable>(token: AtomIO.MutableAtomToken<T, J>, socket: Socket, store: Store): () => void;
|
|
387
260
|
|
|
388
|
-
declare function pullMutableFamilyMember<T extends Transceiver<Serializable>, J extends Serializable>(token: MutableAtomToken<T, J>, socket: Socket, store: Store): () => void;
|
|
261
|
+
declare function pullMutableFamilyMember<T extends Transceiver<Serializable>, J extends Serializable>(token: AtomIO.MutableAtomToken<T, J>, socket: Socket, store: Store): () => void;
|
|
389
262
|
|
|
390
|
-
declare function pushState<J extends Serializable>(token: StateToken<J>, socket: Socket, subscriptionKey: string, store: Store): () => void;
|
|
263
|
+
declare function pushState<J extends Serializable>(token: AtomIO.StateToken<J>, socket: Socket, subscriptionKey: string, store: Store): () => void;
|
|
391
264
|
|
|
392
|
-
declare function synchronizeTransactionResults(token: TransactionToken<any>, socket: Socket, store: Store): () => void;
|
|
265
|
+
declare function synchronizeTransactionResults(token: AtomIO.TransactionToken<any>, socket: Socket, store: Store): () => void;
|
|
393
266
|
|
|
394
267
|
export { myIdState, myIdState__INTERNAL, pullFamilyMember, pullMutableFamilyMember, pullMutableState, pullState, pushState, synchronizeTransactionResults };
|
|
@@ -1,4 +1,167 @@
|
|
|
1
|
-
|
|
2
|
-
import '
|
|
1
|
+
import '../../dist/chunk-PZLG2HP3.js';
|
|
2
|
+
import * as AtomIO from 'atom.io';
|
|
3
|
+
import { parseJson } from 'atom.io/json';
|
|
4
|
+
import * as Internal from 'atom.io/internal';
|
|
5
|
+
import { getJsonToken, getUpdateToken } from 'atom.io/internal';
|
|
6
|
+
|
|
7
|
+
var myIdState__INTERNAL = AtomIO.atom({
|
|
8
|
+
key: `myId__INTERNAL`,
|
|
9
|
+
default: null
|
|
10
|
+
});
|
|
11
|
+
var myIdState = AtomIO.selector({
|
|
12
|
+
key: `myId`,
|
|
13
|
+
get: ({ get }) => get(myIdState__INTERNAL)
|
|
14
|
+
});
|
|
15
|
+
function pullState(token, socket, store) {
|
|
16
|
+
socket.on(`serve:${token.key}`, (data) => {
|
|
17
|
+
AtomIO.setState(token, data, store);
|
|
18
|
+
});
|
|
19
|
+
socket.emit(`sub:${token.key}`);
|
|
20
|
+
return () => {
|
|
21
|
+
socket.off(`serve:${token.key}`);
|
|
22
|
+
socket.emit(`unsub:${token.key}`);
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function pullFamilyMember(token, socket, store) {
|
|
26
|
+
if (!(`family` in token)) {
|
|
27
|
+
console.error(`Token is not a family member:`, token);
|
|
28
|
+
return () => {
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const { key: familyKey, subKey: serializedSubKey } = token.family;
|
|
32
|
+
const subKey = parseJson(serializedSubKey);
|
|
33
|
+
socket == null ? void 0 : socket.on(`serve:${token.key}`, (data) => {
|
|
34
|
+
AtomIO.setState(token, data, store);
|
|
35
|
+
});
|
|
36
|
+
socket == null ? void 0 : socket.emit(`sub:${familyKey}`, subKey);
|
|
37
|
+
return () => {
|
|
38
|
+
socket == null ? void 0 : socket.off(`serve:${token.key}`);
|
|
39
|
+
socket == null ? void 0 : socket.emit(`unsub:${token.key}`);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function pullMutableState(token, socket, store) {
|
|
43
|
+
const jsonToken = getJsonToken(token);
|
|
44
|
+
const updateToken = getUpdateToken(token);
|
|
45
|
+
socket.on(`init:${token.key}`, (data) => {
|
|
46
|
+
AtomIO.setState(jsonToken, data, store);
|
|
47
|
+
});
|
|
48
|
+
socket.on(
|
|
49
|
+
`next:${token.key}`,
|
|
50
|
+
(data) => {
|
|
51
|
+
AtomIO.setState(updateToken, data, store);
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
socket.emit(`sub:${token.key}`);
|
|
55
|
+
return () => {
|
|
56
|
+
socket.off(`init:${token.key}`);
|
|
57
|
+
socket.off(`next:${token.key}`);
|
|
58
|
+
socket.emit(`unsub:${token.key}`);
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function pullMutableFamilyMember(token, socket, store) {
|
|
62
|
+
if (!(`family` in token)) {
|
|
63
|
+
console.error(`Token is not a family member:`, token);
|
|
64
|
+
return () => {
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const { key: familyKey, subKey: serializedSubKey } = token.family;
|
|
68
|
+
const subKey = parseJson(serializedSubKey);
|
|
69
|
+
socket == null ? void 0 : socket.on(`init:${token.key}`, (data) => {
|
|
70
|
+
const jsonToken = getJsonToken(token);
|
|
71
|
+
AtomIO.setState(jsonToken, data, store);
|
|
72
|
+
});
|
|
73
|
+
socket == null ? void 0 : socket.on(
|
|
74
|
+
`next:${token.key}`,
|
|
75
|
+
(data) => {
|
|
76
|
+
const trackerToken = getUpdateToken(token);
|
|
77
|
+
AtomIO.setState(trackerToken, data, store);
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
socket == null ? void 0 : socket.emit(`sub:${familyKey}`, subKey);
|
|
81
|
+
return () => {
|
|
82
|
+
socket == null ? void 0 : socket.off(`serve:${token.key}`);
|
|
83
|
+
socket == null ? void 0 : socket.emit(`unsub:${token.key}`);
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
function pushState(token, socket, subscriptionKey, store) {
|
|
87
|
+
socket.emit(`claim:${token.key}`);
|
|
88
|
+
Internal.subscribeToState(
|
|
89
|
+
token,
|
|
90
|
+
({ newValue }) => {
|
|
91
|
+
socket.emit(`pub:${token.key}`, newValue);
|
|
92
|
+
},
|
|
93
|
+
subscriptionKey,
|
|
94
|
+
store
|
|
95
|
+
);
|
|
96
|
+
return () => {
|
|
97
|
+
socket.off(`pub:${token.key}`);
|
|
98
|
+
socket.emit(`unclaim:${token.key}`);
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
var TX_SUBS = /* @__PURE__ */ new Map();
|
|
102
|
+
function synchronizeTransactionResults(token, socket, store) {
|
|
103
|
+
var _a;
|
|
104
|
+
const count = (_a = TX_SUBS.get(token.key)) != null ? _a : 0;
|
|
105
|
+
TX_SUBS.set(token.key, count + 1);
|
|
106
|
+
const unsubscribe = count === 0 ? Internal.subscribeToTransaction(
|
|
107
|
+
token,
|
|
108
|
+
(clientUpdate) => {
|
|
109
|
+
const transactionId = Math.random().toString(36).slice(2);
|
|
110
|
+
const clientResult = JSON.stringify(clientUpdate);
|
|
111
|
+
const topic = `tx:sync:${transactionId}`;
|
|
112
|
+
const sync = (serverUpdate) => {
|
|
113
|
+
store.logger.info(
|
|
114
|
+
`\u{1F504}`,
|
|
115
|
+
`transaction`,
|
|
116
|
+
token.key,
|
|
117
|
+
`syncing client and server`
|
|
118
|
+
);
|
|
119
|
+
socket.off(topic, sync);
|
|
120
|
+
const serverResult = JSON.stringify(serverUpdate);
|
|
121
|
+
if (clientResult !== serverResult) {
|
|
122
|
+
store.logger.error(
|
|
123
|
+
`\u274C`,
|
|
124
|
+
`transaction`,
|
|
125
|
+
token.key,
|
|
126
|
+
`results do not match between client and server`
|
|
127
|
+
);
|
|
128
|
+
store.logger.error(
|
|
129
|
+
`\u274C`,
|
|
130
|
+
`transaction`,
|
|
131
|
+
token.key,
|
|
132
|
+
`client:`,
|
|
133
|
+
clientResult
|
|
134
|
+
);
|
|
135
|
+
store.logger.error(
|
|
136
|
+
`\u274C`,
|
|
137
|
+
`transaction`,
|
|
138
|
+
token.key,
|
|
139
|
+
`server:`,
|
|
140
|
+
serverResult
|
|
141
|
+
);
|
|
142
|
+
} else {
|
|
143
|
+
store.logger.info(
|
|
144
|
+
`\u2705`,
|
|
145
|
+
`transaction`,
|
|
146
|
+
token.key,
|
|
147
|
+
`results match between client and server`
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
socket.on(topic, sync);
|
|
152
|
+
socket.emit(`tx:${token.key}`, clientUpdate, transactionId);
|
|
153
|
+
},
|
|
154
|
+
`use-server-action`,
|
|
155
|
+
store
|
|
156
|
+
) : () => null;
|
|
157
|
+
return () => {
|
|
158
|
+
var _a2;
|
|
159
|
+
const newCount = (_a2 = TX_SUBS.get(token.key)) != null ? _a2 : 0;
|
|
160
|
+
TX_SUBS.set(token.key, newCount - 1);
|
|
161
|
+
unsubscribe();
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export { myIdState, myIdState__INTERNAL, pullFamilyMember, pullMutableFamilyMember, pullMutableState, pullState, pushState, synchronizeTransactionResults };
|
|
3
166
|
//# sourceMappingURL=out.js.map
|
|
4
167
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"sources":["../src/realtime-state.ts","../src/use-pull.ts","../src/use-pull-family-member.ts","../src/use-pull-mutable.ts","../src/use-pull-mutable-family-member.ts","../src/use-push.ts","../src/use-server-action.ts"],"names":["AtomIO","getJsonToken","getUpdateToken","parseJson","Internal","_a"],"mappings":"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","sourcesContent":["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 { Store } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullState<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n\tsocket: Socket,\n\tstore: Store,\n): () => void {\n\tsocket.on(`serve:${token.key}`, (data) => {\n\t\tAtomIO.setState(token, data, store)\n\t})\n\tsocket.emit(`sub:${token.key}`)\n\treturn () => {\n\t\tsocket.off(`serve:${token.key}`)\n\t\tsocket.emit(`unsub:${token.key}`)\n\t}\n}\n","import * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport { parseJson } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullFamilyMember<J extends Json.Serializable>(\n\ttoken: AtomIO.AtomToken<J>,\n\tsocket: Socket,\n\tstore: Store,\n): () => void {\n\tif (!(`family` in token)) {\n\t\tconsole.error(`Token is not a family member:`, token)\n\t\treturn () => {}\n\t}\n\tconst { key: familyKey, subKey: serializedSubKey } = token.family\n\tconst subKey = parseJson(serializedSubKey)\n\tsocket?.on(`serve:${token.key}`, (data: J) => {\n\t\tAtomIO.setState(token, data, store)\n\t})\n\tsocket?.emit(`sub:${familyKey}`, subKey)\n\treturn () => {\n\t\tsocket?.off(`serve:${token.key}`)\n\t\tsocket?.emit(`unsub:${token.key}`)\n\t}\n}\n","import * as AtomIO from \"atom.io\"\nimport type { Store, Transceiver } from \"atom.io/internal\"\nimport { getJsonToken, getUpdateToken } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullMutableState<\n\tT extends Transceiver<Json.Serializable>,\n\tJ extends Json.Serializable,\n>(\n\ttoken: AtomIO.MutableAtomToken<T, J>,\n\tsocket: Socket,\n\tstore: Store,\n): () => void {\n\tconst jsonToken = getJsonToken(token)\n\tconst updateToken = getUpdateToken(token)\n\tsocket.on(`init:${token.key}`, (data: J) => {\n\t\tAtomIO.setState(jsonToken, data, store)\n\t})\n\tsocket.on(\n\t\t`next:${token.key}`,\n\t\t(data: T extends Transceiver<infer Update> ? Update : never) => {\n\t\t\tAtomIO.setState(updateToken, data, store)\n\t\t},\n\t)\n\tsocket.emit(`sub:${token.key}`)\n\treturn () => {\n\t\tsocket.off(`init:${token.key}`)\n\t\tsocket.off(`next:${token.key}`)\n\t\tsocket.emit(`unsub:${token.key}`)\n\t}\n}\n","import * as AtomIO from \"atom.io\"\nimport { getJsonToken, getUpdateToken } from \"atom.io/internal\"\nimport type { Store, Transceiver } from \"atom.io/internal\"\nimport { parseJson } from \"atom.io/json\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pullMutableFamilyMember<\n\tT extends Transceiver<Json.Serializable>,\n\tJ extends Json.Serializable,\n>(\n\ttoken: AtomIO.MutableAtomToken<T, J>,\n\tsocket: Socket,\n\tstore: Store,\n): () => void {\n\tif (!(`family` in token)) {\n\t\tconsole.error(`Token is not a family member:`, token)\n\t\treturn () => {}\n\t}\n\tconst { key: familyKey, subKey: serializedSubKey } = token.family\n\tconst subKey = parseJson(serializedSubKey)\n\tsocket?.on(`init:${token.key}`, (data: J) => {\n\t\tconst jsonToken = getJsonToken(token)\n\t\tAtomIO.setState(jsonToken, data, store)\n\t})\n\tsocket?.on(\n\t\t`next:${token.key}`,\n\t\t(data: T extends Transceiver<infer Signal> ? Signal : never) => {\n\t\t\tconst trackerToken = getUpdateToken(token)\n\t\t\tAtomIO.setState(trackerToken, data, store)\n\t\t},\n\t)\n\tsocket?.emit(`sub:${familyKey}`, subKey)\n\treturn () => {\n\t\tsocket?.off(`serve:${token.key}`)\n\t\tsocket?.emit(`unsub:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport * as Internal from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { Socket } from \"socket.io-client\"\n\nexport function pushState<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n\tsocket: Socket,\n\tsubscriptionKey: string,\n\tstore: Internal.Store,\n): () => void {\n\tsocket.emit(`claim:${token.key}`)\n\tInternal.subscribeToState(\n\t\ttoken,\n\t\t({ newValue }) => {\n\t\t\tsocket.emit(`pub:${token.key}`, newValue)\n\t\t},\n\t\tsubscriptionKey,\n\t\tstore,\n\t)\n\treturn () => {\n\t\tsocket.off(`pub:${token.key}`)\n\t\tsocket.emit(`unclaim:${token.key}`)\n\t}\n}\n","import type * as AtomIO from \"atom.io\"\nimport * as Internal from \"atom.io/internal\"\nimport type { Socket } from \"socket.io-client\"\n\nconst TX_SUBS = new Map<string, number>()\nexport function synchronizeTransactionResults(\n\ttoken: AtomIO.TransactionToken<any>,\n\tsocket: Socket,\n\tstore: Internal.Store,\n): () => void {\n\tconst count = TX_SUBS.get(token.key) ?? 0\n\tTX_SUBS.set(token.key, count + 1)\n\tconst unsubscribe =\n\t\tcount === 0\n\t\t\t? Internal.subscribeToTransaction(\n\t\t\t\t\ttoken,\n\t\t\t\t\t(clientUpdate) => {\n\t\t\t\t\t\tconst transactionId = Math.random().toString(36).slice(2)\n\t\t\t\t\t\tconst clientResult = JSON.stringify(clientUpdate)\n\t\t\t\t\t\tconst topic = `tx:sync:${transactionId}`\n\t\t\t\t\t\tconst sync = (serverUpdate: typeof clientUpdate) => {\n\t\t\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t\t\t`🔄`,\n\t\t\t\t\t\t\t\t`transaction`,\n\t\t\t\t\t\t\t\ttoken.key,\n\t\t\t\t\t\t\t\t`syncing client and server`,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\tsocket.off(topic, sync)\n\t\t\t\t\t\t\tconst serverResult = JSON.stringify(serverUpdate)\n\t\t\t\t\t\t\tif (clientResult !== serverResult) {\n\t\t\t\t\t\t\t\tstore.logger.error(\n\t\t\t\t\t\t\t\t\t`❌`,\n\t\t\t\t\t\t\t\t\t`transaction`,\n\t\t\t\t\t\t\t\t\ttoken.key,\n\t\t\t\t\t\t\t\t\t`results do not match between client and server`,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tstore.logger.error(\n\t\t\t\t\t\t\t\t\t`❌`,\n\t\t\t\t\t\t\t\t\t`transaction`,\n\t\t\t\t\t\t\t\t\ttoken.key,\n\t\t\t\t\t\t\t\t\t`client:`,\n\t\t\t\t\t\t\t\t\tclientResult,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tstore.logger.error(\n\t\t\t\t\t\t\t\t\t`❌`,\n\t\t\t\t\t\t\t\t\t`transaction`,\n\t\t\t\t\t\t\t\t\ttoken.key,\n\t\t\t\t\t\t\t\t\t`server:`,\n\t\t\t\t\t\t\t\t\tserverResult,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t\t\t\t`✅`,\n\t\t\t\t\t\t\t\t\t`transaction`,\n\t\t\t\t\t\t\t\t\ttoken.key,\n\t\t\t\t\t\t\t\t\t`results match between client and server`,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsocket.on(topic, sync)\n\t\t\t\t\t\tsocket.emit(`tx:${token.key}`, clientUpdate, transactionId)\n\t\t\t\t\t},\n\t\t\t\t\t`use-server-action`,\n\t\t\t\t\tstore,\n\t\t\t )\n\t\t\t: () => null\n\treturn () => {\n\t\tconst newCount = TX_SUBS.get(token.key) ?? 0\n\t\tTX_SUBS.set(token.key, newCount - 1)\n\t\tunsubscribe()\n\t}\n}\n"]}
|