atom.io 0.19.4 → 0.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/data/dist/index.js +1 -1
  2. package/data/src/dict.ts +1 -1
  3. package/data/src/join.ts +1 -1
  4. package/data/src/struct-family.ts +1 -1
  5. package/data/src/struct.ts +5 -3
  6. package/dist/index.d.ts +1 -0
  7. package/internal/dist/index.cjs +137 -95
  8. package/internal/dist/index.d.ts +13 -9
  9. package/internal/dist/index.js +137 -95
  10. package/internal/src/atom/index.ts +1 -1
  11. package/internal/src/caching.ts +13 -9
  12. package/internal/src/families/create-atom-family.ts +1 -1
  13. package/internal/src/families/find-in-store.ts +2 -2
  14. package/internal/src/families/index.ts +1 -1
  15. package/internal/src/future.ts +52 -15
  16. package/internal/src/index.ts +2 -2
  17. package/internal/src/mutable/create-mutable-atom-family.ts +2 -3
  18. package/internal/src/mutable/create-mutable-atom.ts +3 -3
  19. package/internal/src/mutable/get-update-token.ts +1 -0
  20. package/internal/src/operation.ts +3 -3
  21. package/internal/src/selector/delete-selector.ts +1 -1
  22. package/internal/src/selector/register-selector.ts +1 -1
  23. package/internal/src/set-state/set-into-store.ts +7 -1
  24. package/internal/src/store/deposit.ts +1 -1
  25. package/internal/src/store/store.ts +2 -2
  26. package/internal/src/store/withdraw-new-family-member.ts +1 -1
  27. package/internal/src/store/withdraw.ts +2 -3
  28. package/internal/src/subscribe/subscribe-to-state.ts +1 -0
  29. package/internal/src/subscribe/subscribe-to-timeline.ts +1 -0
  30. package/internal/src/subscribe/subscribe-to-transaction.ts +2 -1
  31. package/internal/src/timeline/add-atom-to-timeline.ts +2 -2
  32. package/internal/src/timeline/create-timeline.ts +1 -1
  33. package/internal/src/transaction/act-upon-store.ts +1 -1
  34. package/internal/src/transaction/apply-transaction.ts +1 -1
  35. package/internal/src/transaction/build-transaction.ts +2 -2
  36. package/internal/src/transaction/create-transaction.ts +2 -2
  37. package/internal/src/transaction/index.ts +1 -1
  38. package/internal/src/transaction/is-root-store.ts +1 -1
  39. package/introspection/src/attach-atom-index.ts +1 -1
  40. package/introspection/src/attach-introspection-states.ts +2 -2
  41. package/introspection/src/attach-selector-index.ts +1 -1
  42. package/introspection/src/attach-timeline-family.ts +2 -2
  43. package/introspection/src/attach-timeline-index.ts +1 -1
  44. package/introspection/src/attach-transaction-index.ts +2 -2
  45. package/introspection/src/attach-transaction-logs.ts +2 -2
  46. package/json/dist/index.cjs +35 -33
  47. package/json/dist/index.d.ts +5 -5
  48. package/json/src/index.ts +2 -3
  49. package/json/src/select-json-family.ts +1 -1
  50. package/json/src/select-json.ts +1 -2
  51. package/package.json +15 -15
  52. package/react/src/use-tl.ts +1 -1
  53. package/react-devtools/dist/index.cjs +99 -99
  54. package/react-devtools/dist/index.d.ts +2 -2
  55. package/react-devtools/dist/index.js +77 -77
  56. package/react-devtools/src/AtomIODevtools.tsx +2 -2
  57. package/react-devtools/src/TransactionIndex.tsx +2 -2
  58. package/react-devtools/src/Updates.tsx +1 -1
  59. package/react-devtools/src/index.ts +1 -1
  60. package/realtime/src/realtime-continuity.ts +1 -1
  61. package/realtime-client/dist/index.js +1 -1
  62. package/realtime-client/src/pull-atom-family-member.ts +1 -1
  63. package/realtime-client/src/pull-atom.ts +1 -1
  64. package/realtime-client/src/pull-mutable-atom-family-member.ts +2 -2
  65. package/realtime-client/src/sync-continuity.ts +1 -1
  66. package/realtime-react/dist/index.js +1 -1
  67. package/realtime-react/src/use-realtime-service.ts +1 -0
  68. package/realtime-react/src/use-sync-continuity.ts +2 -1
  69. package/realtime-server/dist/index.cjs +98 -98
  70. package/realtime-server/dist/index.d.ts +14 -14
  71. package/realtime-server/dist/index.js +100 -100
  72. package/realtime-server/src/index.ts +5 -5
  73. package/realtime-server/src/ipc-sockets/parent-socket.ts +3 -3
  74. package/realtime-server/src/realtime-action-receiver.ts +1 -1
  75. package/realtime-server/src/realtime-continuity-synchronizer.ts +2 -3
  76. package/realtime-server/src/realtime-family-provider.ts +1 -1
  77. package/realtime-server/src/realtime-mutable-family-provider.ts +1 -1
  78. package/realtime-server/src/realtime-mutable-provider.ts +2 -2
  79. package/realtime-server/src/realtime-server-stores/realtime-continuity-store.ts +2 -2
  80. package/realtime-server/src/realtime-server-stores/server-room-external-actions.ts +1 -1
  81. package/realtime-server/src/realtime-server-stores/server-room-external-store.ts +1 -0
  82. package/realtime-server/src/realtime-state-provider.ts +1 -1
  83. package/realtime-server/src/realtime-state-synchronizer.ts +1 -1
  84. package/realtime-testing/dist/index.js +2 -2
  85. package/realtime-testing/src/setup-realtime-test.tsx +3 -2
  86. package/src/atom.ts +1 -1
  87. package/src/find-state.ts +1 -1
  88. package/src/index.ts +1 -0
  89. package/src/logger.ts +1 -0
  90. package/src/selector.ts +1 -1
  91. package/src/silo.ts +4 -4
  92. package/src/subscribe.ts +2 -2
  93. package/src/timeline.ts +1 -1
  94. package/src/transaction.ts +3 -3
  95. package/transceivers/set-rtx/src/set-rtx.ts +1 -1
  96. package/dist/{chunk-ATKDGVTV.js → chunk-2AIFLP2B.js} +0 -0
  97. package/dist/{chunk-CC7IF7QF.js → chunk-3V3VWQ7X.js} +6 -6
  98. /package/dist/{chunk-MSCJWACE.js → chunk-SMZRGPN6.js} +0 -0
@@ -1,5 +1,6 @@
1
1
  import * as React from "react"
2
2
  import type { Socket } from "socket.io-client"
3
+
3
4
  import { onMount } from "./on-mount"
4
5
  import { RealtimeContext } from "./realtime-context"
5
6
 
@@ -1,7 +1,8 @@
1
1
  import { StoreContext } from "atom.io/react"
2
2
  import * as React from "react"
3
- import { syncContinuity } from "../../realtime-client/src/sync-continuity"
3
+
4
4
  import type { ContinuityToken } from "../../realtime/src/realtime-continuity"
5
+ import { syncContinuity } from "../../realtime-client/src/sync-continuity"
5
6
  import { useRealtimeService } from "./use-realtime-service"
6
7
 
7
8
  export function useSyncContinuity(token: ContinuityToken): void {
@@ -344,6 +344,31 @@ var ParentSocket = class extends CustomSocket {
344
344
  this.relayServices.push(attachServices);
345
345
  }
346
346
  };
347
+ function realtimeActionReceiver({
348
+ socket,
349
+ store = internal.IMPLICIT.STORE
350
+ }) {
351
+ return function actionReceiver(tx) {
352
+ const fillTransactionRequest = (update) => {
353
+ const performanceKey = `tx-run:${tx.key}:${update.id}`;
354
+ const performanceKeyStart = `${performanceKey}:start`;
355
+ const performanceKeyEnd = `${performanceKey}:end`;
356
+ performance.mark(performanceKeyStart);
357
+ internal.actUponStore(tx, update.id, store)(...update.params);
358
+ performance.mark(performanceKeyEnd);
359
+ const metric = performance.measure(
360
+ performanceKey,
361
+ performanceKeyStart,
362
+ performanceKeyEnd
363
+ );
364
+ store == null ? void 0 : store.logger.info(`\u{1F680}`, `transaction`, tx.key, update.id, metric.duration);
365
+ };
366
+ socket.on(`tx-run:${tx.key}`, fillTransactionRequest);
367
+ return () => {
368
+ socket.off(`tx-run:${tx.key}`, fillTransactionRequest);
369
+ };
370
+ };
371
+ }
347
372
  function capitalize(string) {
348
373
  return string[0].toUpperCase() + string.slice(1);
349
374
  }
@@ -913,55 +938,6 @@ function realtimeContinuitySynchronizer({
913
938
  };
914
939
  };
915
940
  }
916
- function realtimeStateProvider({
917
- socket,
918
- store = internal.IMPLICIT.STORE
919
- }) {
920
- return function stateProvider(token) {
921
- let unsubscribeFromStateUpdates;
922
- const fillSubRequest = () => {
923
- socket.emit(`serve:${token.key}`, internal.getFromStore(token, store));
924
- unsubscribeFromStateUpdates = internal.subscribeToState(
925
- token,
926
- ({ newValue }) => {
927
- socket.emit(`serve:${token.key}`, newValue);
928
- },
929
- `expose-single:${socket.id}`,
930
- store
931
- );
932
- const fillUnsubRequest = () => {
933
- socket.off(`unsub:${token.key}`, fillUnsubRequest);
934
- if (unsubscribeFromStateUpdates) {
935
- unsubscribeFromStateUpdates();
936
- unsubscribeFromStateUpdates = void 0;
937
- }
938
- };
939
- socket.on(`unsub:${token.key}`, fillUnsubRequest);
940
- };
941
- socket.on(`sub:${token.key}`, fillSubRequest);
942
- return () => {
943
- socket.off(`sub:${token.key}`, fillSubRequest);
944
- if (unsubscribeFromStateUpdates) {
945
- unsubscribeFromStateUpdates();
946
- unsubscribeFromStateUpdates = void 0;
947
- }
948
- };
949
- };
950
- }
951
- function realtimeStateSynchronizer({
952
- socket,
953
- store = internal.IMPLICIT.STORE
954
- }) {
955
- return function stateSynchronizer(token) {
956
- const fillGetRequest = () => {
957
- socket.emit(`value:${token.key}`, internal.getFromStore(token, store));
958
- };
959
- socket.on(`get:${token.key}`, fillGetRequest);
960
- return () => {
961
- socket.off(`get:${token.key}`, fillGetRequest);
962
- };
963
- };
964
- }
965
941
  function realtimeAtomFamilyProvider({
966
942
  socket,
967
943
  store = internal.IMPLICIT.STORE
@@ -1008,38 +984,6 @@ function realtimeAtomFamilyProvider({
1008
984
  };
1009
985
  };
1010
986
  }
1011
- function realtimeMutableProvider({
1012
- socket,
1013
- store = internal.IMPLICIT.STORE
1014
- }) {
1015
- return function mutableProvider(token) {
1016
- let unsubscribeFromStateUpdates = null;
1017
- const jsonToken = internal.getJsonToken(token);
1018
- const trackerToken = internal.getUpdateToken(token);
1019
- const fillUnsubRequest = () => {
1020
- socket.off(`unsub:${token.key}`, fillUnsubRequest);
1021
- unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
1022
- unsubscribeFromStateUpdates = null;
1023
- };
1024
- const fillSubRequest = () => {
1025
- socket.emit(`init:${token.key}`, internal.getFromStore(jsonToken, store));
1026
- unsubscribeFromStateUpdates = internal.subscribeToState(
1027
- trackerToken,
1028
- ({ newValue }) => {
1029
- socket.emit(`next:${token.key}`, newValue);
1030
- },
1031
- `expose-single:${socket.id}`,
1032
- store
1033
- );
1034
- socket.on(`unsub:${token.key}`, fillUnsubRequest);
1035
- };
1036
- socket.on(`sub:${token.key}`, fillSubRequest);
1037
- return () => {
1038
- socket.off(`sub:${token.key}`, fillSubRequest);
1039
- unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
1040
- };
1041
- };
1042
- }
1043
987
  function realtimeMutableFamilyProvider({
1044
988
  socket,
1045
989
  store = internal.IMPLICIT.STORE
@@ -1088,6 +1032,73 @@ function realtimeMutableFamilyProvider({
1088
1032
  };
1089
1033
  };
1090
1034
  }
1035
+ function realtimeMutableProvider({
1036
+ socket,
1037
+ store = internal.IMPLICIT.STORE
1038
+ }) {
1039
+ return function mutableProvider(token) {
1040
+ let unsubscribeFromStateUpdates = null;
1041
+ const jsonToken = internal.getJsonToken(token);
1042
+ const trackerToken = internal.getUpdateToken(token);
1043
+ const fillUnsubRequest = () => {
1044
+ socket.off(`unsub:${token.key}`, fillUnsubRequest);
1045
+ unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
1046
+ unsubscribeFromStateUpdates = null;
1047
+ };
1048
+ const fillSubRequest = () => {
1049
+ socket.emit(`init:${token.key}`, internal.getFromStore(jsonToken, store));
1050
+ unsubscribeFromStateUpdates = internal.subscribeToState(
1051
+ trackerToken,
1052
+ ({ newValue }) => {
1053
+ socket.emit(`next:${token.key}`, newValue);
1054
+ },
1055
+ `expose-single:${socket.id}`,
1056
+ store
1057
+ );
1058
+ socket.on(`unsub:${token.key}`, fillUnsubRequest);
1059
+ };
1060
+ socket.on(`sub:${token.key}`, fillSubRequest);
1061
+ return () => {
1062
+ socket.off(`sub:${token.key}`, fillSubRequest);
1063
+ unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
1064
+ };
1065
+ };
1066
+ }
1067
+ function realtimeStateProvider({
1068
+ socket,
1069
+ store = internal.IMPLICIT.STORE
1070
+ }) {
1071
+ return function stateProvider(token) {
1072
+ let unsubscribeFromStateUpdates;
1073
+ const fillSubRequest = () => {
1074
+ socket.emit(`serve:${token.key}`, internal.getFromStore(token, store));
1075
+ unsubscribeFromStateUpdates = internal.subscribeToState(
1076
+ token,
1077
+ ({ newValue }) => {
1078
+ socket.emit(`serve:${token.key}`, newValue);
1079
+ },
1080
+ `expose-single:${socket.id}`,
1081
+ store
1082
+ );
1083
+ const fillUnsubRequest = () => {
1084
+ socket.off(`unsub:${token.key}`, fillUnsubRequest);
1085
+ if (unsubscribeFromStateUpdates) {
1086
+ unsubscribeFromStateUpdates();
1087
+ unsubscribeFromStateUpdates = void 0;
1088
+ }
1089
+ };
1090
+ socket.on(`unsub:${token.key}`, fillUnsubRequest);
1091
+ };
1092
+ socket.on(`sub:${token.key}`, fillSubRequest);
1093
+ return () => {
1094
+ socket.off(`sub:${token.key}`, fillSubRequest);
1095
+ if (unsubscribeFromStateUpdates) {
1096
+ unsubscribeFromStateUpdates();
1097
+ unsubscribeFromStateUpdates = void 0;
1098
+ }
1099
+ };
1100
+ };
1101
+ }
1091
1102
  function realtimeStateReceiver({
1092
1103
  socket,
1093
1104
  store = internal.IMPLICIT.STORE
@@ -1111,28 +1122,17 @@ function realtimeStateReceiver({
1111
1122
  };
1112
1123
  };
1113
1124
  }
1114
- function realtimeActionReceiver({
1125
+ function realtimeStateSynchronizer({
1115
1126
  socket,
1116
1127
  store = internal.IMPLICIT.STORE
1117
1128
  }) {
1118
- return function actionReceiver(tx) {
1119
- const fillTransactionRequest = (update) => {
1120
- const performanceKey = `tx-run:${tx.key}:${update.id}`;
1121
- const performanceKeyStart = `${performanceKey}:start`;
1122
- const performanceKeyEnd = `${performanceKey}:end`;
1123
- performance.mark(performanceKeyStart);
1124
- internal.actUponStore(tx, update.id, store)(...update.params);
1125
- performance.mark(performanceKeyEnd);
1126
- const metric = performance.measure(
1127
- performanceKey,
1128
- performanceKeyStart,
1129
- performanceKeyEnd
1130
- );
1131
- store == null ? void 0 : store.logger.info(`\u{1F680}`, `transaction`, tx.key, update.id, metric.duration);
1129
+ return function stateSynchronizer(token) {
1130
+ const fillGetRequest = () => {
1131
+ socket.emit(`value:${token.key}`, internal.getFromStore(token, store));
1132
1132
  };
1133
- socket.on(`tx-run:${tx.key}`, fillTransactionRequest);
1133
+ socket.on(`get:${token.key}`, fillGetRequest);
1134
1134
  return () => {
1135
- socket.off(`tx-run:${tx.key}`, fillTransactionRequest);
1135
+ socket.off(`get:${token.key}`, fillGetRequest);
1136
1136
  };
1137
1137
  };
1138
1138
  }
@@ -1,9 +1,9 @@
1
1
  import { Subject, Transceiver, Store } from 'atom.io/internal';
2
2
  import { Json, Stringified, JsonIO } from 'atom.io/json';
3
3
  import { ChildProcessWithoutNullStreams } from 'node:child_process';
4
- import { ContinuityToken, UserInRoomMeta } from 'atom.io/realtime';
5
4
  import * as AtomIO from 'atom.io';
6
5
  import { TransactionUpdateContent, TransactionUpdate, WritableToken } from 'atom.io';
6
+ import { ContinuityToken, UserInRoomMeta } from 'atom.io/realtime';
7
7
  import * as atom_io_data from 'atom.io/data';
8
8
  import { Loadable } from 'atom.io/data';
9
9
  import { SetRTX, SetRTXJson } from 'atom.io/transceivers/set-rtx';
@@ -81,9 +81,21 @@ declare class ParentSocket<I extends Events & {
81
81
  relay(attachServices: (socket: SubjectSocket<any, any>) => (() => void) | void): void;
82
82
  }
83
83
 
84
+ type ActionReceiver = ReturnType<typeof realtimeActionReceiver>;
85
+ declare function realtimeActionReceiver({ socket, store, }: ServerConfig): <F extends JsonIO>(tx: AtomIO.TransactionToken<F>) => () => void;
86
+
84
87
  type RealtimeContinuitySynchronizer = ReturnType<typeof realtimeContinuitySynchronizer>;
85
88
  declare function realtimeContinuitySynchronizer({ socket: initialSocket, store, }: ServerConfig): (continuity: ContinuityToken) => () => void;
86
89
 
90
+ type FamilyProvider = ReturnType<typeof realtimeAtomFamilyProvider>;
91
+ declare function realtimeAtomFamilyProvider({ socket, store, }: ServerConfig): <J extends Json.Serializable, K extends Json.Serializable>(family: AtomIO.RegularAtomFamilyToken<J, K>, index: AtomIO.ReadableToken<Iterable<K>>) => () => void;
92
+
93
+ type MutableFamilyProvider = ReturnType<typeof realtimeMutableFamilyProvider>;
94
+ declare function realtimeMutableFamilyProvider({ socket, store, }: ServerConfig): <T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable>(family: AtomIO.MutableAtomFamilyToken<T, J, K>, index: AtomIO.ReadableToken<Iterable<K>>) => () => void;
95
+
96
+ type MutableProvider = ReturnType<typeof realtimeMutableProvider>;
97
+ declare function realtimeMutableProvider({ socket, store, }: ServerConfig): <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable>(token: AtomIO.MutableAtomToken<Core, SerializableCore>) => () => void;
98
+
87
99
  declare const createRoomTX: AtomIO.TransactionToken<(roomId: string, script: string, options?: string[]) => Loadable<ChildSocket<any, any>>>;
88
100
  type CreateRoomIO = AtomIO.TransactionIO<typeof createRoomTX>;
89
101
  declare const joinRoomTX: AtomIO.TransactionToken<(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta>;
@@ -110,22 +122,10 @@ declare const usersOfSockets: atom_io_data.JoinToken<"user", "socket", "1:1", nu
110
122
  type StateProvider = ReturnType<typeof realtimeStateProvider>;
111
123
  declare function realtimeStateProvider({ socket, store, }: ServerConfig): <J extends Json.Serializable>(token: AtomIO.WritableToken<J>) => () => void;
112
124
 
113
- declare function realtimeStateSynchronizer({ socket, store, }: ServerConfig): <J extends Json.Serializable>(token: AtomIO.WritableToken<J>) => () => void;
114
-
115
- type FamilyProvider = ReturnType<typeof realtimeAtomFamilyProvider>;
116
- declare function realtimeAtomFamilyProvider({ socket, store, }: ServerConfig): <J extends Json.Serializable, K extends Json.Serializable>(family: AtomIO.RegularAtomFamilyToken<J, K>, index: AtomIO.ReadableToken<Iterable<K>>) => () => void;
117
-
118
- type MutableProvider = ReturnType<typeof realtimeMutableProvider>;
119
- declare function realtimeMutableProvider({ socket, store, }: ServerConfig): <Core extends Transceiver<Json.Serializable>, SerializableCore extends Json.Serializable>(token: AtomIO.MutableAtomToken<Core, SerializableCore>) => () => void;
120
-
121
- type MutableFamilyProvider = ReturnType<typeof realtimeMutableFamilyProvider>;
122
- declare function realtimeMutableFamilyProvider({ socket, store, }: ServerConfig): <T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable>(family: AtomIO.MutableAtomFamilyToken<T, J, K>, index: AtomIO.ReadableToken<Iterable<K>>) => () => void;
123
-
124
125
  type StateReceiver = ReturnType<typeof realtimeStateReceiver>;
125
126
  declare function realtimeStateReceiver({ socket, store, }: ServerConfig): <J extends Json.Serializable>(token: WritableToken<J>) => () => void;
126
127
 
127
- type ActionReceiver = ReturnType<typeof realtimeActionReceiver>;
128
- declare function realtimeActionReceiver({ socket, store, }: ServerConfig): <F extends JsonIO>(tx: AtomIO.TransactionToken<F>) => () => void;
128
+ declare function realtimeStateSynchronizer({ socket, store, }: ServerConfig): <J extends Json.Serializable>(token: AtomIO.WritableToken<J>) => () => void;
129
129
 
130
130
  type Socket = {
131
131
  id: string;
@@ -1,8 +1,8 @@
1
- import { findRelationsInStore } from '../../dist/chunk-MSCJWACE.js';
1
+ import { findRelationsInStore } from '../../dist/chunk-SMZRGPN6.js';
2
2
  import '../../dist/chunk-FTONNX2R.js';
3
3
  import { __spreadProps, __spreadValues } from '../../dist/chunk-F2X4B4VY.js';
4
4
  import { parseJson, stringifyJson } from 'atom.io/json';
5
- import { getUpdateToken, IMPLICIT, Subject, getFromStore, subscribeToState, findInStore, getJsonToken, isRootStore, subscribeToTransaction, actUponStore, setIntoStore } from 'atom.io/internal';
5
+ import { getUpdateToken, IMPLICIT, Subject, getFromStore, subscribeToState, findInStore, getJsonToken, actUponStore, isRootStore, subscribeToTransaction, setIntoStore } from 'atom.io/internal';
6
6
  import { SetRTX } from 'atom.io/transceivers/set-rtx';
7
7
  import * as AtomIO from 'atom.io';
8
8
  import { selectorFamily, atomFamily, atom } from 'atom.io';
@@ -306,6 +306,31 @@ var ParentSocket = class extends CustomSocket {
306
306
  this.relayServices.push(attachServices);
307
307
  }
308
308
  };
309
+ function realtimeActionReceiver({
310
+ socket,
311
+ store = IMPLICIT.STORE
312
+ }) {
313
+ return function actionReceiver(tx) {
314
+ const fillTransactionRequest = (update) => {
315
+ const performanceKey = `tx-run:${tx.key}:${update.id}`;
316
+ const performanceKeyStart = `${performanceKey}:start`;
317
+ const performanceKeyEnd = `${performanceKey}:end`;
318
+ performance.mark(performanceKeyStart);
319
+ actUponStore(tx, update.id, store)(...update.params);
320
+ performance.mark(performanceKeyEnd);
321
+ const metric = performance.measure(
322
+ performanceKey,
323
+ performanceKeyStart,
324
+ performanceKeyEnd
325
+ );
326
+ store == null ? void 0 : store.logger.info(`\u{1F680}`, `transaction`, tx.key, update.id, metric.duration);
327
+ };
328
+ socket.on(`tx-run:${tx.key}`, fillTransactionRequest);
329
+ return () => {
330
+ socket.off(`tx-run:${tx.key}`, fillTransactionRequest);
331
+ };
332
+ };
333
+ }
309
334
  selectorFamily({
310
335
  key: `perspectiveRedactor`,
311
336
  get: ({ userId, syncGroupKey }) => ({ get, find }) => {
@@ -743,55 +768,6 @@ function realtimeContinuitySynchronizer({
743
768
  };
744
769
  };
745
770
  }
746
- function realtimeStateProvider({
747
- socket,
748
- store = IMPLICIT.STORE
749
- }) {
750
- return function stateProvider(token) {
751
- let unsubscribeFromStateUpdates;
752
- const fillSubRequest = () => {
753
- socket.emit(`serve:${token.key}`, getFromStore(token, store));
754
- unsubscribeFromStateUpdates = subscribeToState(
755
- token,
756
- ({ newValue }) => {
757
- socket.emit(`serve:${token.key}`, newValue);
758
- },
759
- `expose-single:${socket.id}`,
760
- store
761
- );
762
- const fillUnsubRequest = () => {
763
- socket.off(`unsub:${token.key}`, fillUnsubRequest);
764
- if (unsubscribeFromStateUpdates) {
765
- unsubscribeFromStateUpdates();
766
- unsubscribeFromStateUpdates = void 0;
767
- }
768
- };
769
- socket.on(`unsub:${token.key}`, fillUnsubRequest);
770
- };
771
- socket.on(`sub:${token.key}`, fillSubRequest);
772
- return () => {
773
- socket.off(`sub:${token.key}`, fillSubRequest);
774
- if (unsubscribeFromStateUpdates) {
775
- unsubscribeFromStateUpdates();
776
- unsubscribeFromStateUpdates = void 0;
777
- }
778
- };
779
- };
780
- }
781
- function realtimeStateSynchronizer({
782
- socket,
783
- store = IMPLICIT.STORE
784
- }) {
785
- return function stateSynchronizer(token) {
786
- const fillGetRequest = () => {
787
- socket.emit(`value:${token.key}`, getFromStore(token, store));
788
- };
789
- socket.on(`get:${token.key}`, fillGetRequest);
790
- return () => {
791
- socket.off(`get:${token.key}`, fillGetRequest);
792
- };
793
- };
794
- }
795
771
  function realtimeAtomFamilyProvider({
796
772
  socket,
797
773
  store = IMPLICIT.STORE
@@ -838,38 +814,6 @@ function realtimeAtomFamilyProvider({
838
814
  };
839
815
  };
840
816
  }
841
- function realtimeMutableProvider({
842
- socket,
843
- store = IMPLICIT.STORE
844
- }) {
845
- return function mutableProvider(token) {
846
- let unsubscribeFromStateUpdates = null;
847
- const jsonToken = getJsonToken(token);
848
- const trackerToken = getUpdateToken(token);
849
- const fillUnsubRequest = () => {
850
- socket.off(`unsub:${token.key}`, fillUnsubRequest);
851
- unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
852
- unsubscribeFromStateUpdates = null;
853
- };
854
- const fillSubRequest = () => {
855
- socket.emit(`init:${token.key}`, getFromStore(jsonToken, store));
856
- unsubscribeFromStateUpdates = subscribeToState(
857
- trackerToken,
858
- ({ newValue }) => {
859
- socket.emit(`next:${token.key}`, newValue);
860
- },
861
- `expose-single:${socket.id}`,
862
- store
863
- );
864
- socket.on(`unsub:${token.key}`, fillUnsubRequest);
865
- };
866
- socket.on(`sub:${token.key}`, fillSubRequest);
867
- return () => {
868
- socket.off(`sub:${token.key}`, fillSubRequest);
869
- unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
870
- };
871
- };
872
- }
873
817
  function realtimeMutableFamilyProvider({
874
818
  socket,
875
819
  store = IMPLICIT.STORE
@@ -918,6 +862,73 @@ function realtimeMutableFamilyProvider({
918
862
  };
919
863
  };
920
864
  }
865
+ function realtimeMutableProvider({
866
+ socket,
867
+ store = IMPLICIT.STORE
868
+ }) {
869
+ return function mutableProvider(token) {
870
+ let unsubscribeFromStateUpdates = null;
871
+ const jsonToken = getJsonToken(token);
872
+ const trackerToken = getUpdateToken(token);
873
+ const fillUnsubRequest = () => {
874
+ socket.off(`unsub:${token.key}`, fillUnsubRequest);
875
+ unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
876
+ unsubscribeFromStateUpdates = null;
877
+ };
878
+ const fillSubRequest = () => {
879
+ socket.emit(`init:${token.key}`, getFromStore(jsonToken, store));
880
+ unsubscribeFromStateUpdates = subscribeToState(
881
+ trackerToken,
882
+ ({ newValue }) => {
883
+ socket.emit(`next:${token.key}`, newValue);
884
+ },
885
+ `expose-single:${socket.id}`,
886
+ store
887
+ );
888
+ socket.on(`unsub:${token.key}`, fillUnsubRequest);
889
+ };
890
+ socket.on(`sub:${token.key}`, fillSubRequest);
891
+ return () => {
892
+ socket.off(`sub:${token.key}`, fillSubRequest);
893
+ unsubscribeFromStateUpdates == null ? void 0 : unsubscribeFromStateUpdates();
894
+ };
895
+ };
896
+ }
897
+ function realtimeStateProvider({
898
+ socket,
899
+ store = IMPLICIT.STORE
900
+ }) {
901
+ return function stateProvider(token) {
902
+ let unsubscribeFromStateUpdates;
903
+ const fillSubRequest = () => {
904
+ socket.emit(`serve:${token.key}`, getFromStore(token, store));
905
+ unsubscribeFromStateUpdates = subscribeToState(
906
+ token,
907
+ ({ newValue }) => {
908
+ socket.emit(`serve:${token.key}`, newValue);
909
+ },
910
+ `expose-single:${socket.id}`,
911
+ store
912
+ );
913
+ const fillUnsubRequest = () => {
914
+ socket.off(`unsub:${token.key}`, fillUnsubRequest);
915
+ if (unsubscribeFromStateUpdates) {
916
+ unsubscribeFromStateUpdates();
917
+ unsubscribeFromStateUpdates = void 0;
918
+ }
919
+ };
920
+ socket.on(`unsub:${token.key}`, fillUnsubRequest);
921
+ };
922
+ socket.on(`sub:${token.key}`, fillSubRequest);
923
+ return () => {
924
+ socket.off(`sub:${token.key}`, fillSubRequest);
925
+ if (unsubscribeFromStateUpdates) {
926
+ unsubscribeFromStateUpdates();
927
+ unsubscribeFromStateUpdates = void 0;
928
+ }
929
+ };
930
+ };
931
+ }
921
932
  function realtimeStateReceiver({
922
933
  socket,
923
934
  store = IMPLICIT.STORE
@@ -941,28 +952,17 @@ function realtimeStateReceiver({
941
952
  };
942
953
  };
943
954
  }
944
- function realtimeActionReceiver({
955
+ function realtimeStateSynchronizer({
945
956
  socket,
946
957
  store = IMPLICIT.STORE
947
958
  }) {
948
- return function actionReceiver(tx) {
949
- const fillTransactionRequest = (update) => {
950
- const performanceKey = `tx-run:${tx.key}:${update.id}`;
951
- const performanceKeyStart = `${performanceKey}:start`;
952
- const performanceKeyEnd = `${performanceKey}:end`;
953
- performance.mark(performanceKeyStart);
954
- actUponStore(tx, update.id, store)(...update.params);
955
- performance.mark(performanceKeyEnd);
956
- const metric = performance.measure(
957
- performanceKey,
958
- performanceKeyStart,
959
- performanceKeyEnd
960
- );
961
- store == null ? void 0 : store.logger.info(`\u{1F680}`, `transaction`, tx.key, update.id, metric.duration);
959
+ return function stateSynchronizer(token) {
960
+ const fillGetRequest = () => {
961
+ socket.emit(`value:${token.key}`, getFromStore(token, store));
962
962
  };
963
- socket.on(`tx-run:${tx.key}`, fillTransactionRequest);
963
+ socket.on(`get:${token.key}`, fillGetRequest);
964
964
  return () => {
965
- socket.off(`tx-run:${tx.key}`, fillTransactionRequest);
965
+ socket.off(`get:${token.key}`, fillGetRequest);
966
966
  };
967
967
  };
968
968
  }
@@ -2,15 +2,15 @@ import type { Store } from "atom.io/internal"
2
2
  import type { Json } from "atom.io/json"
3
3
 
4
4
  export * from "./ipc-sockets"
5
+ export * from "./realtime-action-receiver"
5
6
  export * from "./realtime-continuity-synchronizer"
6
- export * from "./realtime-server-stores"
7
- export * from "./realtime-state-provider"
8
- export * from "./realtime-state-synchronizer"
9
7
  export * from "./realtime-family-provider"
10
- export * from "./realtime-mutable-provider"
11
8
  export * from "./realtime-mutable-family-provider"
9
+ export * from "./realtime-mutable-provider"
10
+ export * from "./realtime-server-stores"
11
+ export * from "./realtime-state-provider"
12
12
  export * from "./realtime-state-receiver"
13
- export * from "./realtime-action-receiver"
13
+ export * from "./realtime-state-synchronizer"
14
14
  // export * from "./realtime-action-synchronizer.txt"
15
15
 
16
16
  export type Socket = {
@@ -1,10 +1,10 @@
1
1
  import { IMPLICIT, Subject } from "atom.io/internal"
2
- import { parseJson, stringifyJson } from "atom.io/json"
3
2
  import type { Json } from "atom.io/json"
4
-
3
+ import { parseJson, stringifyJson } from "atom.io/json"
5
4
  import { SetRTX } from "atom.io/transceivers/set-rtx"
6
- import { CustomSocket } from "./custom-socket"
5
+
7
6
  import type { EventBuffer, Events } from "./custom-socket"
7
+ import { CustomSocket } from "./custom-socket"
8
8
 
9
9
  export class SubjectSocket<
10
10
  I extends Events,
@@ -1,5 +1,5 @@
1
1
  import type * as AtomIO from "atom.io"
2
- import { IMPLICIT, actUponStore } from "atom.io/internal"
2
+ import { actUponStore, IMPLICIT } from "atom.io/internal"
3
3
  import type { JsonIO } from "atom.io/json"
4
4
 
5
5
  import type { ServerConfig } from "."
@@ -1,10 +1,10 @@
1
1
  import type * as AtomIO from "atom.io"
2
2
  import {
3
- IMPLICIT,
4
3
  actUponStore,
5
4
  findInStore,
6
5
  getFromStore,
7
6
  getJsonToken,
7
+ IMPLICIT,
8
8
  isRootStore,
9
9
  subscribeToState,
10
10
  subscribeToTransaction,
@@ -12,10 +12,9 @@ import {
12
12
  import type { Json, JsonIO } from "atom.io/json"
13
13
  import type { ContinuityToken } from "atom.io/realtime"
14
14
 
15
+ import { findRelationsInStore } from "../../data/src/join"
15
16
  import type { ServerConfig, Socket } from "."
16
17
  import { socketAtoms, usersOfSockets } from "."
17
-
18
- import { findRelationsInStore } from "../../data/src/join"
19
18
  import {
20
19
  redactTransactionUpdateContent,
21
20
  userUnacknowledgedQueues,
@@ -1,8 +1,8 @@
1
1
  import type * as AtomIO from "atom.io"
2
2
  import {
3
- IMPLICIT,
4
3
  findInStore,
5
4
  getFromStore,
5
+ IMPLICIT,
6
6
  subscribeToState,
7
7
  } from "atom.io/internal"
8
8
  import { type Json, stringifyJson } from "atom.io/json"
@@ -1,11 +1,11 @@
1
1
  import type * as AtomIO from "atom.io"
2
2
  import type { Transceiver } from "atom.io/internal"
3
3
  import {
4
- IMPLICIT,
5
4
  findInStore,
6
5
  getFromStore,
7
6
  getJsonToken,
8
7
  getUpdateToken,
8
+ IMPLICIT,
9
9
  subscribeToState,
10
10
  } from "atom.io/internal"
11
11
  import type { Json } from "atom.io/json"
@@ -1,12 +1,12 @@
1
1
  import type * as AtomIO from "atom.io"
2
+ import type { Transceiver } from "atom.io/internal"
2
3
  import {
3
- IMPLICIT,
4
4
  getFromStore,
5
5
  getJsonToken,
6
6
  getUpdateToken,
7
+ IMPLICIT,
7
8
  subscribeToState,
8
9
  } from "atom.io/internal"
9
- import type { Transceiver } from "atom.io/internal"
10
10
  import type { Json } from "atom.io/json"
11
11
 
12
12
  import type { ServerConfig } from "."
@@ -1,6 +1,6 @@
1
- import { selectorFamily } from "atom.io"
2
1
  import type { TransactionUpdate } from "atom.io"
3
- import { IMPLICIT, getJsonToken, getUpdateToken } from "atom.io/internal"
2
+ import { selectorFamily } from "atom.io"
3
+ import { getJsonToken, getUpdateToken, IMPLICIT } from "atom.io/internal"
4
4
  import type { JsonIO } from "atom.io/json"
5
5
  import { SyncGroup } from "atom.io/realtime"
6
6
  // import { completeUpdateAtoms } from "atom.io/realtime-server"
@@ -1,5 +1,5 @@
1
1
  import * as AtomIO from "atom.io"
2
- import { type Loadable, editRelations, editRelationsInStore } from "atom.io/data"
2
+ import { editRelations, editRelationsInStore, type Loadable } from "atom.io/data"
3
3
  import type { UserInRoomMeta } from "atom.io/realtime"
4
4
  import { roomIndex, usersInRooms } from "atom.io/realtime"
5
5