atom.io 0.40.6 → 0.40.8
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/README.md +1 -1
- package/dist/data/index.d.ts +1 -1
- package/dist/data/index.js +1 -2
- package/dist/data/index.js.map +1 -1
- package/dist/employ-socket-D6wgByWh.js +12 -0
- package/dist/employ-socket-D6wgByWh.js.map +1 -0
- package/dist/eslint-plugin/index.js.map +1 -1
- package/dist/has-role-CMlaUlaf.js +1133 -0
- package/dist/has-role-CMlaUlaf.js.map +1 -0
- package/dist/internal/index.d.ts +248 -248
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +590 -1803
- package/dist/internal/index.js.map +1 -1
- package/dist/introspection/index.d.ts +1 -1
- package/dist/introspection/index.d.ts.map +1 -1
- package/dist/introspection/index.js +13 -32
- package/dist/introspection/index.js.map +1 -1
- package/dist/is-fn-DY1wZ-md.js +10 -0
- package/dist/is-fn-DY1wZ-md.js.map +1 -0
- package/dist/json/index.d.ts.map +1 -1
- package/dist/json/index.js.map +1 -1
- package/dist/main/index.d.ts +33 -33
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +3 -4
- package/dist/main/index.js.map +1 -1
- package/dist/mutex-store-CSvxY9i3.js +11 -0
- package/dist/mutex-store-CSvxY9i3.js.map +1 -0
- package/dist/react/index.d.ts +5 -5
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-devtools/index.d.ts.map +1 -1
- package/dist/react-devtools/index.js +9 -11
- package/dist/react-devtools/index.js.map +1 -1
- package/dist/realtime/index.d.ts +7 -15
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +4 -35
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime-client/index.d.ts +6 -9
- package/dist/realtime-client/index.d.ts.map +1 -1
- package/dist/realtime-client/index.js +96 -88
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-react/index.d.ts +17 -13
- package/dist/realtime-react/index.d.ts.map +1 -1
- package/dist/realtime-react/index.js +39 -50
- package/dist/realtime-react/index.js.map +1 -1
- package/dist/realtime-server/index.d.ts +83 -84
- package/dist/realtime-server/index.d.ts.map +1 -1
- package/dist/realtime-server/index.js +604 -543
- package/dist/realtime-server/index.js.map +1 -1
- package/dist/realtime-testing/index.d.ts +5 -4
- package/dist/realtime-testing/index.d.ts.map +1 -1
- package/dist/realtime-testing/index.js +35 -22
- package/dist/realtime-testing/index.js.map +1 -1
- package/dist/shared-room-store-BfW3nWif.js +31 -0
- package/dist/shared-room-store-BfW3nWif.js.map +1 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts +15 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts.map +1 -0
- package/dist/transceivers/set-rtx/index.d.ts.map +1 -1
- package/dist/transceivers/set-rtx/index.js +4 -8
- package/dist/transceivers/set-rtx/index.js.map +1 -1
- package/dist/web/index.d.ts +3 -3
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +4 -3
- package/dist/web/index.js.map +1 -1
- package/package.json +13 -13
- package/src/internal/atom/create-regular-atom.ts +5 -4
- package/src/internal/atom/dispose-atom.ts +7 -2
- package/src/internal/atom/has-role.ts +3 -3
- package/src/internal/caching.ts +4 -2
- package/src/internal/families/create-readonly-held-selector-family.ts +2 -1
- package/src/internal/families/create-readonly-pure-selector-family.ts +5 -2
- package/src/internal/families/create-regular-atom-family.ts +2 -1
- package/src/internal/families/create-writable-held-selector-family.ts +2 -1
- package/src/internal/families/create-writable-pure-selector-family.ts +5 -2
- package/src/internal/families/dispose-from-store.ts +4 -4
- package/src/internal/families/find-in-store.ts +10 -10
- package/src/internal/families/get-family-of-token.ts +2 -2
- package/src/internal/families/index.ts +1 -0
- package/src/internal/families/mint-in-store.ts +54 -19
- package/src/internal/families/seek-in-store.ts +1 -1
- package/src/internal/get-state/get-fallback.ts +2 -2
- package/src/internal/get-state/get-from-store.ts +5 -5
- package/src/internal/get-state/read-or-compute-value.ts +1 -1
- package/src/internal/get-state/reduce-reference.ts +8 -6
- package/src/internal/index.ts +2 -220
- package/src/internal/molecule.ts +1 -2
- package/src/internal/mutable/create-mutable-atom-family.ts +3 -2
- package/src/internal/mutable/create-mutable-atom.ts +4 -2
- package/src/internal/mutable/get-json-family.ts +1 -1
- package/src/internal/mutable/get-update-family.ts +1 -1
- package/src/internal/mutable/tracker-family.ts +2 -1
- package/src/internal/mutable/tracker.ts +71 -59
- package/src/internal/safe-compute.ts +1 -1
- package/src/internal/selector/create-readonly-held-selector.ts +2 -1
- package/src/internal/selector/create-readonly-pure-selector.ts +2 -1
- package/src/internal/selector/create-writable-held-selector.ts +2 -1
- package/src/internal/selector/create-writable-pure-selector.ts +2 -1
- package/src/internal/selector/dispose-selector.ts +3 -2
- package/src/internal/selector/register-selector.ts +8 -5
- package/src/internal/selector/trace-selector-atoms.ts +2 -1
- package/src/internal/set-state/dispatch-state-update.ts +3 -2
- package/src/internal/set-state/evict-downstream.ts +1 -1
- package/src/internal/set-state/operate-on-store.ts +16 -22
- package/src/internal/set-state/reset-atom-or-selector.ts +5 -3
- package/src/internal/set-state/reset-in-store.ts +5 -5
- package/src/internal/set-state/set-atom-or-selector.ts +2 -2
- package/src/internal/set-state/set-atom.ts +4 -2
- package/src/internal/set-state/set-into-store.ts +21 -39
- package/src/internal/set-state/set-selector.ts +3 -2
- package/src/internal/state-types.ts +228 -0
- package/src/internal/store/deposit.ts +4 -4
- package/src/internal/store/index.ts +0 -1
- package/src/internal/store/store.ts +9 -9
- package/src/internal/store/withdraw.ts +4 -4
- package/src/internal/subscribe/recall-state.ts +1 -1
- package/src/internal/subscribe/subscribe-to-root-atoms.ts +1 -12
- package/src/internal/subscribe/subscribe-to-state.ts +9 -0
- package/src/internal/subscribe/subscribe-to-transaction.ts +3 -2
- package/src/internal/transaction/build-transaction.ts +3 -2
- package/src/internal/transaction/index.ts +1 -23
- package/src/internal/transaction/is-root-store.ts +4 -1
- package/src/internal/transaction/transaction-meta-progress.ts +22 -0
- package/src/main/atom.ts +1 -2
- package/src/main/find-state.ts +5 -5
- package/src/main/get-state.ts +4 -4
- package/src/main/realm.ts +2 -2
- package/src/main/set-state.ts +10 -10
- package/src/react/parse-state-overloads.ts +3 -3
- package/src/react/use-i.ts +6 -4
- package/src/react/use-loadable.ts +4 -10
- package/src/react/use-o.ts +6 -4
- package/src/react-devtools/store.ts +6 -6
- package/src/realtime/index.ts +1 -0
- package/src/realtime/mutex-store.ts +11 -0
- package/src/realtime/realtime-continuity.ts +1 -5
- package/src/realtime-client/index.ts +0 -1
- package/src/realtime-client/pull-atom-family-member.ts +14 -17
- package/src/realtime-client/pull-atom.ts +1 -1
- package/src/realtime-client/pull-mutable-atom-family-member.ts +16 -12
- package/src/realtime-client/pull-selector-family-member.ts +8 -35
- package/src/realtime-client/pull-selector-roots.ts +90 -0
- package/src/realtime-client/pull-selector.ts +2 -27
- package/src/realtime-client/push-state.ts +33 -5
- package/src/realtime-client/realtime-client-stores/client-main-store.ts +2 -5
- package/src/realtime-react/index.ts +2 -2
- package/src/realtime-react/realtime-context.tsx +9 -5
- package/src/realtime-react/use-pull-atom-family-member.ts +2 -3
- package/src/realtime-react/use-pull-mutable-family-member.ts +2 -3
- package/src/realtime-react/use-pull-selector-family-member.ts +5 -6
- package/src/realtime-react/use-push.ts +7 -3
- package/src/realtime-react/use-realtime-service.ts +11 -11
- package/src/realtime-react/use-single-effect.ts +11 -14
- package/src/realtime-server/{realtime-server-stores/server-sync-store.ts → continuity/continuity-store.ts} +2 -27
- package/src/realtime-server/continuity/provide-continuity.ts +50 -0
- package/src/realtime-server/continuity/{subscribe-to-continuity-actions.ts → provide-outcomes.ts} +15 -13
- package/src/realtime-server/continuity/{subscribe-to-continuity-perpectives.ts → provide-perspectives.ts} +10 -8
- package/src/realtime-server/continuity/{prepare-to-send-initial-payload.ts → provide-startup-payloads.ts} +6 -4
- package/src/realtime-server/continuity/receive-action-requests.ts +68 -0
- package/src/realtime-server/continuity/track-acknowledgements.ts +46 -0
- package/src/realtime-server/employ-socket.ts +14 -0
- package/src/realtime-server/index.ts +3 -22
- package/src/realtime-server/ipc-sockets/child-socket.ts +125 -66
- package/src/realtime-server/ipc-sockets/custom-socket.ts +16 -14
- package/src/realtime-server/ipc-sockets/parent-socket.ts +98 -69
- package/src/realtime-server/realtime-family-provider.ts +78 -29
- package/src/realtime-server/realtime-mutable-family-provider.ts +80 -31
- package/src/realtime-server/realtime-mutable-provider.ts +30 -22
- package/src/realtime-server/realtime-server-stores/index.ts +0 -2
- package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +77 -36
- package/src/realtime-server/realtime-server-stores/server-user-store.ts +12 -1
- package/src/realtime-server/realtime-state-provider.ts +30 -29
- package/src/realtime-server/realtime-state-receiver.ts +62 -16
- package/src/realtime-server/server-config.ts +8 -0
- package/src/realtime-server/socket-interface.ts +14 -0
- package/src/realtime-testing/setup-realtime-test.tsx +70 -31
- package/src/web/index.ts +1 -1
- package/src/web/{persist-sync.ts → storage-sync.ts} +5 -2
- package/src/internal/store/mint-or-counterfeit.ts +0 -108
- package/src/realtime-client/server-action.ts +0 -23
- package/src/realtime-react/on-mount.ts +0 -5
- package/src/realtime-react/use-server-action.ts +0 -19
- package/src/realtime-server/continuity/prepare-to-serve-transaction-request.ts +0 -59
- package/src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts +0 -145
- package/src/realtime-server/continuity/prepare-to-track-client-acknowledgement.ts +0 -41
- package/src/realtime-server/realtime-action-receiver.ts +0 -40
- package/src/realtime-server/realtime-server-stores/server-room-external-actions.ts +0 -79
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Canonical, Json } from "atom.io/json";
|
|
1
|
+
import { Transceiver } from "atom.io/internal";
|
|
3
2
|
import * as AtomIO from "atom.io";
|
|
3
|
+
import { Canonical, Json } from "atom.io/json";
|
|
4
4
|
import * as React$1 from "react";
|
|
5
5
|
import { ContinuityToken } from "atom.io/realtime";
|
|
6
6
|
import { Socket } from "socket.io-client";
|
|
7
7
|
|
|
8
|
-
//#region src/realtime-react/on-mount.d.ts
|
|
9
|
-
declare function onMount(effect: () => (() => void) | undefined | void): void;
|
|
10
|
-
//#endregion
|
|
11
8
|
//#region src/realtime-react/realtime-context.d.ts
|
|
9
|
+
type RealtimeServiceCounter = {
|
|
10
|
+
consumerCount: number;
|
|
11
|
+
dispose: () => void;
|
|
12
|
+
};
|
|
12
13
|
type RealtimeReactStore = {
|
|
13
14
|
socket: Socket | null;
|
|
14
|
-
services: Map<string,
|
|
15
|
+
services: Map<string, RealtimeServiceCounter> | null;
|
|
15
16
|
};
|
|
16
17
|
declare const RealtimeContext: React$1.Context<RealtimeReactStore>;
|
|
17
18
|
declare const RealtimeProvider: React$1.FC<{
|
|
@@ -23,28 +24,31 @@ declare const RealtimeProvider: React$1.FC<{
|
|
|
23
24
|
declare function usePullAtom<J extends Json.Serializable>(token: AtomIO.RegularAtomToken<J>): J;
|
|
24
25
|
//#endregion
|
|
25
26
|
//#region src/realtime-react/use-pull-atom-family-member.d.ts
|
|
26
|
-
declare function usePullAtomFamilyMember<J extends Json.Serializable, K extends Canonical
|
|
27
|
+
declare function usePullAtomFamilyMember<J extends Json.Serializable, K extends Canonical>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: NoInfer<K>): J;
|
|
27
28
|
//#endregion
|
|
28
29
|
//#region src/realtime-react/use-pull-mutable-atom.d.ts
|
|
29
30
|
declare function usePullMutable<T extends Transceiver<any, any, any>>(token: AtomIO.MutableAtomToken<T>): T;
|
|
30
31
|
//#endregion
|
|
31
32
|
//#region src/realtime-react/use-pull-mutable-family-member.d.ts
|
|
32
|
-
declare function usePullMutableAtomFamilyMember<T extends Transceiver<any, any, any>, K extends Canonical
|
|
33
|
+
declare function usePullMutableAtomFamilyMember<T extends Transceiver<any, any, any>, K extends Canonical>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: NoInfer<K>): T;
|
|
33
34
|
//#endregion
|
|
34
35
|
//#region src/realtime-react/use-pull-selector.d.ts
|
|
35
36
|
declare function usePullSelector<J extends Json.Serializable>(token: AtomIO.SelectorToken<J>): J;
|
|
36
37
|
//#endregion
|
|
37
38
|
//#region src/realtime-react/use-pull-selector-family-member.d.ts
|
|
38
|
-
declare function usePullSelectorFamilyMember<T, K extends Canonical
|
|
39
|
+
declare function usePullSelectorFamilyMember<T, K extends Canonical>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: NoInfer<K>): T;
|
|
39
40
|
//#endregion
|
|
40
41
|
//#region src/realtime-react/use-push.d.ts
|
|
41
|
-
declare function usePush<J extends Json.Serializable>(token: AtomIO.WritableToken<J>): <New extends J>(next: New | ((old: J) => New)) => void;
|
|
42
|
+
declare function usePush<J extends Json.Serializable>(token: AtomIO.WritableToken<J>): (<New extends J>(next: New | ((old: J) => New)) => void) | null;
|
|
43
|
+
//#endregion
|
|
44
|
+
//#region src/realtime-react/use-realtime-service.d.ts
|
|
45
|
+
declare function useRealtimeService(key: string, create: (socket: Socket) => () => void): void;
|
|
42
46
|
//#endregion
|
|
43
|
-
//#region src/realtime-react/use-
|
|
44
|
-
declare function
|
|
47
|
+
//#region src/realtime-react/use-single-effect.d.ts
|
|
48
|
+
declare function useSingleEffect(effect: () => (() => void) | undefined | void, deps: unknown[]): void;
|
|
45
49
|
//#endregion
|
|
46
50
|
//#region src/realtime-react/use-sync-continuity.d.ts
|
|
47
51
|
declare function useSyncContinuity(token: ContinuityToken): void;
|
|
48
52
|
//#endregion
|
|
49
|
-
export { RealtimeContext, RealtimeProvider, RealtimeReactStore,
|
|
53
|
+
export { RealtimeContext, RealtimeProvider, RealtimeReactStore, RealtimeServiceCounter, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useRealtimeService, useSingleEffect, useSyncContinuity };
|
|
50
54
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../src/realtime-react/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["RealtimeContext: React.Context<RealtimeReactStore>","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":[],"mappings":";;;;;;;;KAKY,sBAAA;;;;KAKA,kBAAA;UACH;EANT,QAAY,EAOD,GAPC,CAAA,MAAA,EAOW,sBAPX,CAAA,GAAA,IAAA;AAKZ,CAAA;AAAY,cAKCA,eALD,EAKkB,OAAA,CAAM,OALxB,CAKgC,kBALhC,CAAA;AACH,cAUIC,gBAVJ,EAUsB,OAAA,CAAM,EAV5B,CAAA;UACc,EAUZ,OAAA,CAAM,SAVM;QAAZ,EAWF,MAXE,GAAA,IAAA;CAAA,CAAA;;;iBCJK,sBAAsB,IAAA,CAAK,qBACnC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCDa,kCACL,IAAA,CAAK,wBACL,mBACD,MAAA,CAAO,uBAAuB,GAAG,YAAY,QAAQ,KAAK;;;iBCJpD,yBAAyB,mCACjC,MAAA,CAAO,iBAAiB,KAC7B;;;iBCAa,yCACL,sCACA,wBACI,MAAA,CAAO,uBAAuB,GAAG,SAAS,QAAQ,KAAK;;;iBCLtD,0BAA0B,IAAA,CAAK,qBACvC,MAAA,CAAO,cAAc,KAC1B;;;iBCDa,yCAAyC,wBAC3C,MAAA,CAAO,oBAAoB,GAAG,SACtC,QAAQ,KACX;;;iBCHa,kBAAkB,IAAA,CAAK,qBAC/B,MAAA,CAAO,cAAc,mBACZ,SAAS,aAAa,MAAM;;;iBCL7B,kBAAA,+BAEE;;;iBCHF,eAAA;;;iBCEA,iBAAA,QAAyB"}
|
|
@@ -1,37 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isFn } from "../is-fn-DY1wZ-md.js";
|
|
2
|
+
import { findInStore } from "atom.io/internal";
|
|
2
3
|
import * as React$1 from "react";
|
|
3
4
|
import { jsx } from "react/jsx-runtime";
|
|
4
5
|
import { StoreContext, useI, useO } from "atom.io/react";
|
|
5
6
|
import * as RTC from "atom.io/realtime-client";
|
|
6
7
|
import { syncContinuity } from "atom.io/realtime-client";
|
|
8
|
+
import * as RT from "atom.io/realtime";
|
|
7
9
|
|
|
8
|
-
//#region src/realtime-react/use-single-effect.ts
|
|
9
|
-
const { NODE_ENV } = globalThis[`env`] ?? {};
|
|
10
|
-
const IN_DEV = NODE_ENV === `development`;
|
|
11
|
-
function noop() {}
|
|
12
|
-
function useSingleEffect(effect, deps) {
|
|
13
|
-
if (IN_DEV) {
|
|
14
|
-
const cleanup = React$1.useRef(noop);
|
|
15
|
-
React$1.useEffect(() => {
|
|
16
|
-
let dispose = cleanup.current;
|
|
17
|
-
if (dispose === noop) {
|
|
18
|
-
dispose = effect() ?? noop;
|
|
19
|
-
cleanup.current = dispose;
|
|
20
|
-
} else return () => {
|
|
21
|
-
dispose();
|
|
22
|
-
cleanup.current = noop;
|
|
23
|
-
};
|
|
24
|
-
}, deps);
|
|
25
|
-
} else React$1.useEffect(effect, deps);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
//#endregion
|
|
29
|
-
//#region src/realtime-react/on-mount.ts
|
|
30
|
-
function onMount(effect) {
|
|
31
|
-
useSingleEffect(effect, []);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
//#endregion
|
|
35
10
|
//#region src/realtime-react/realtime-context.tsx
|
|
36
11
|
const RealtimeContext = React$1.createContext({
|
|
37
12
|
socket: null,
|
|
@@ -58,28 +33,48 @@ const RealtimeProvider = ({ children, socket }) => {
|
|
|
58
33
|
});
|
|
59
34
|
};
|
|
60
35
|
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/realtime-react/use-single-effect.ts
|
|
38
|
+
function useSingleEffect(effect, deps) {
|
|
39
|
+
if (globalThis[`env`]?.NODE_ENV === `development`) {
|
|
40
|
+
const cleanupRef = React$1.useRef(false);
|
|
41
|
+
React$1.useEffect(() => {
|
|
42
|
+
let cleanupFn = cleanupRef.current;
|
|
43
|
+
if (cleanupFn === false) {
|
|
44
|
+
cleanupFn = effect() ?? true;
|
|
45
|
+
cleanupRef.current = cleanupFn;
|
|
46
|
+
} else return () => {
|
|
47
|
+
if (isFn(cleanupFn)) cleanupFn();
|
|
48
|
+
cleanupRef.current = false;
|
|
49
|
+
};
|
|
50
|
+
}, deps);
|
|
51
|
+
} else React$1.useEffect(effect, deps);
|
|
52
|
+
}
|
|
53
|
+
|
|
61
54
|
//#endregion
|
|
62
55
|
//#region src/realtime-react/use-realtime-service.ts
|
|
63
56
|
function useRealtimeService(key, create) {
|
|
64
57
|
const { socket, services } = React$1.useContext(RealtimeContext);
|
|
65
|
-
|
|
58
|
+
useSingleEffect(() => {
|
|
66
59
|
let service = services?.get(key);
|
|
67
|
-
if (service) service
|
|
68
|
-
else {
|
|
69
|
-
|
|
70
|
-
|
|
60
|
+
if (service) ++service.consumerCount;
|
|
61
|
+
else if (socket) {
|
|
62
|
+
service = {
|
|
63
|
+
consumerCount: 1,
|
|
64
|
+
dispose: create(socket)
|
|
65
|
+
};
|
|
71
66
|
services?.set(key, service);
|
|
72
67
|
}
|
|
73
68
|
return () => {
|
|
74
69
|
if (service) {
|
|
75
|
-
service
|
|
76
|
-
if (service
|
|
77
|
-
service
|
|
70
|
+
--service.consumerCount;
|
|
71
|
+
if (service.consumerCount === 0) {
|
|
72
|
+
service.dispose?.();
|
|
78
73
|
services?.delete(key);
|
|
79
74
|
}
|
|
80
75
|
}
|
|
81
76
|
};
|
|
82
|
-
});
|
|
77
|
+
}, [socket, key]);
|
|
83
78
|
}
|
|
84
79
|
|
|
85
80
|
//#endregion
|
|
@@ -95,7 +90,7 @@ function usePullAtom(token) {
|
|
|
95
90
|
function usePullAtomFamilyMember(family, subKey) {
|
|
96
91
|
const store = React$1.useContext(StoreContext);
|
|
97
92
|
const token = findInStore(store, family, subKey);
|
|
98
|
-
useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullAtomFamilyMember(store, socket,
|
|
93
|
+
useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullAtomFamilyMember(store, socket, family, subKey));
|
|
99
94
|
return useO(token);
|
|
100
95
|
}
|
|
101
96
|
|
|
@@ -112,7 +107,7 @@ function usePullMutable(token) {
|
|
|
112
107
|
function usePullMutableAtomFamilyMember(familyToken, key) {
|
|
113
108
|
const store = React$1.useContext(StoreContext);
|
|
114
109
|
const token = findInStore(store, familyToken, key);
|
|
115
|
-
useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullMutableAtomFamilyMember(store, socket,
|
|
110
|
+
useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullMutableAtomFamilyMember(store, socket, familyToken, key));
|
|
116
111
|
return useO(token);
|
|
117
112
|
}
|
|
118
113
|
|
|
@@ -129,7 +124,7 @@ function usePullSelector(token) {
|
|
|
129
124
|
function usePullSelectorFamilyMember(familyToken, key) {
|
|
130
125
|
const store = React$1.useContext(StoreContext);
|
|
131
126
|
const token = findInStore(store, familyToken, key);
|
|
132
|
-
useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullSelectorFamilyMember(store, socket,
|
|
127
|
+
useRealtimeService(`pull:${token.key}`, (socket) => RTC.pullSelectorFamilyMember(store, socket, familyToken, key));
|
|
133
128
|
return useO(token);
|
|
134
129
|
}
|
|
135
130
|
|
|
@@ -138,15 +133,9 @@ function usePullSelectorFamilyMember(familyToken, key) {
|
|
|
138
133
|
function usePush(token) {
|
|
139
134
|
const store = React$1.useContext(StoreContext);
|
|
140
135
|
useRealtimeService(`push:${token.key}`, (socket) => RTC.pushState(store, socket, token));
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
//#endregion
|
|
145
|
-
//#region src/realtime-react/use-server-action.ts
|
|
146
|
-
function useServerAction(token) {
|
|
147
|
-
const store = React$1.useContext(StoreContext);
|
|
148
|
-
useRealtimeService(`tx:${token.key}`, (socket) => RTC.serverAction(store, socket, token));
|
|
149
|
-
return actUponStore(store, token, arbitrary());
|
|
136
|
+
const mutex = useO(RT.mutexAtoms, token.key);
|
|
137
|
+
const setter = useI(token);
|
|
138
|
+
return mutex ? setter : null;
|
|
150
139
|
}
|
|
151
140
|
|
|
152
141
|
//#endregion
|
|
@@ -159,5 +148,5 @@ function useSyncContinuity(token) {
|
|
|
159
148
|
}
|
|
160
149
|
|
|
161
150
|
//#endregion
|
|
162
|
-
export { RealtimeContext, RealtimeProvider,
|
|
151
|
+
export { RealtimeContext, RealtimeProvider, usePullAtom, usePullAtomFamilyMember, usePullMutable, usePullMutableAtomFamilyMember, usePullSelector, usePullSelectorFamilyMember, usePush, useRealtimeService, useSingleEffect, useSyncContinuity };
|
|
163
152
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["React","RealtimeContext: React.Context<RealtimeReactStore>","React","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","React","React","React","React","React","React","React","React","React","React"],"sources":["../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/on-mount.ts","../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-server-action.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport * as React from \"react\"\n\n// @ts-expect-error this is a safe way to check a property on the global object\nconst { NODE_ENV } = globalThis[`env`] ?? {}\nconst IN_DEV = NODE_ENV === `development`\n\nfunction noop() {}\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tif (IN_DEV) {\n\t\tconst cleanup = React.useRef<() => void>(noop)\n\t\tReact.useEffect(() => {\n\t\t\tlet dispose = cleanup.current\n\t\t\tif (dispose === noop) {\n\t\t\t\tdispose = effect() ?? noop\n\t\t\t\tcleanup.current = dispose\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tdispose()\n\t\t\t\t\tcleanup.current = noop\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import { useSingleEffect } from \"./use-single-effect\"\n\nexport function onMount(effect: () => (() => void) | undefined | void): void {\n\tuseSingleEffect(effect, [])\n}\n","import { useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nexport type RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<\n\t\tstring,\n\t\t[consumerCount: number, dispose: (() => void) | undefined]\n\t> | null\n}\n\nexport const RealtimeContext: React.Context<RealtimeReactStore> =\n\tReact.createContext({\n\t\tsocket: null,\n\t\tservices: null,\n\t})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(new Map<string, [number, () => void]>()).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { onMount } from \"./on-mount\"\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => (() => void) | undefined,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tonMount(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\tservice[0]++\n\t\t} else {\n\t\t\tconst dispose = socket ? create(socket) : undefined\n\t\t\tservice = [1, dispose]\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\tservice[0]--\n\t\t\t\tif (service[0] === 0) {\n\t\t\t\t\tservice[1]?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n\tKey extends K,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: Key): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n\tKey extends K,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<\n\tT,\n\tK extends Canonical,\n\tKey extends K,\n>(familyToken: AtomIO.SelectorFamilyToken<T, K>, key: Key): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, token),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): <New extends J>(next: New | ((old: J) => New)) => void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\treturn useI(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Fn } from \"atom.io/internal\"\nimport { actUponStore, arbitrary } from \"atom.io/internal\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useServerAction<F extends Fn>(\n\ttoken: AtomIO.TransactionToken<F>,\n): (...parameters: Parameters<F>) => ReturnType<F> {\n\tconst store = React.useContext(StoreContext)\n\n\tuseRealtimeService(`tx:${token.key}`, (socket) =>\n\t\tRTC.serverAction(store, socket, token),\n\t)\n\treturn actUponStore(store, token, arbitrary())\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["RealtimeContext: React.Context<RealtimeReactStore>","React","RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}>","React","React","React","React","React","React","React","React","React","React"],"sources":["../../src/realtime-react/realtime-context.tsx","../../src/realtime-react/use-single-effect.ts","../../src/realtime-react/use-realtime-service.ts","../../src/realtime-react/use-pull-atom.ts","../../src/realtime-react/use-pull-atom-family-member.ts","../../src/realtime-react/use-pull-mutable-atom.ts","../../src/realtime-react/use-pull-mutable-family-member.ts","../../src/realtime-react/use-pull-selector.ts","../../src/realtime-react/use-pull-selector-family-member.ts","../../src/realtime-react/use-push.ts","../../src/realtime-react/use-sync-continuity.ts"],"sourcesContent":["import { useI } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nexport type RealtimeServiceCounter = {\n\tconsumerCount: number\n\tdispose: () => void\n}\n\nexport type RealtimeReactStore = {\n\tsocket: Socket | null\n\tservices: Map<string, RealtimeServiceCounter> | null\n}\n\nexport const RealtimeContext: React.Context<RealtimeReactStore> =\n\tReact.createContext({\n\t\tsocket: null,\n\t\tservices: null,\n\t})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket | null\n}> = ({ children, socket }) => {\n\tconst services = React.useRef(\n\t\tnew Map<string, RealtimeServiceCounter>(),\n\t).current\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsetMyId(socket?.id)\n\t\tsocket?.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket?.on(`disconnect`, () => {\n\t\t\tsetMyId(undefined)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket, services }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","/** biome-ignore-all lint/correctness/useHookAtTopLevel: intentional */\n\nimport { isFn } from \"atom.io/internal/is-fn\"\nimport * as React from \"react\"\n\nexport function useSingleEffect(\n\teffect: () => (() => void) | undefined | void,\n\tdeps: unknown[],\n): void {\n\tconst globalEnv = (globalThis as unknown as { env: any })[`env`]\n\tconst isInDev = globalEnv?.NODE_ENV === `development`\n\tif (isInDev) {\n\t\tconst cleanupRef = React.useRef<boolean | (() => void)>(false)\n\t\tReact.useEffect(() => {\n\t\t\tlet cleanupFn = cleanupRef.current\n\t\t\tif (cleanupFn === false) {\n\t\t\t\tcleanupFn = effect() ?? true\n\t\t\t\tcleanupRef.current = cleanupFn\n\t\t\t} else {\n\t\t\t\treturn () => {\n\t\t\t\t\tif (isFn(cleanupFn)) cleanupFn()\n\t\t\t\t\tcleanupRef.current = false\n\t\t\t\t}\n\t\t\t}\n\t\t}, deps)\n\t} else {\n\t\tReact.useEffect(effect, deps)\n\t}\n}\n","import * as React from \"react\"\nimport type { Socket } from \"socket.io-client\"\n\nimport { RealtimeContext } from \"./realtime-context\"\nimport { useSingleEffect } from \"./use-single-effect\"\n\nexport function useRealtimeService(\n\tkey: string,\n\tcreate: (socket: Socket) => () => void,\n): void {\n\tconst { socket, services } = React.useContext(RealtimeContext)\n\tuseSingleEffect(() => {\n\t\tlet service = services?.get(key)\n\t\tif (service) {\n\t\t\t++service.consumerCount\n\t\t} else if (socket) {\n\t\t\tconst dispose = create(socket)\n\t\t\tservice = { consumerCount: 1, dispose }\n\t\t\tservices?.set(key, service)\n\t\t}\n\t\treturn () => {\n\t\t\tif (service) {\n\t\t\t\t--service.consumerCount\n\t\t\t\tif (service.consumerCount === 0) {\n\t\t\t\t\tservice.dispose?.()\n\t\t\t\t\tservices?.delete(key)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}, [socket, key])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtom<J extends Json.Serializable>(\n\ttoken: AtomIO.RegularAtomToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullAtomFamilyMember<\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(family: AtomIO.RegularAtomFamilyToken<J, K>, subKey: NoInfer<K>): J {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, family, subKey)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullAtomFamilyMember(store, socket, family, subKey),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutable<T extends Transceiver<any, any, any>>(\n\ttoken: AtomIO.MutableAtomToken<T>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtom(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullMutableAtomFamilyMember<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(familyToken: AtomIO.MutableAtomFamilyToken<T, K>, key: NoInfer<K>): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullMutableAtomFamilyMember(store, socket, familyToken, key),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelector<J extends Json.Serializable>(\n\ttoken: AtomIO.SelectorToken<J>,\n): J {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelector(store, socket, token),\n\t)\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport { findInStore } from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\nimport { StoreContext, useO } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePullSelectorFamilyMember<T, K extends Canonical>(\n\tfamilyToken: AtomIO.SelectorFamilyToken<T, K>,\n\tkey: NoInfer<K>,\n): T {\n\tconst store = React.useContext(StoreContext)\n\tconst token = findInStore(store, familyToken, key)\n\tuseRealtimeService(`pull:${token.key}`, (socket) =>\n\t\tRTC.pullSelectorFamilyMember(store, socket, familyToken, key),\n\t)\n\n\treturn useO(token)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext, useI, useO } from \"atom.io/react\"\nimport * as RT from \"atom.io/realtime\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.WritableToken<J>,\n): (<New extends J>(next: New | ((old: J) => New)) => void) | null {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`push:${token.key}`, (socket) =>\n\t\tRTC.pushState(store, socket, token),\n\t)\n\tconst mutex = useO(RT.mutexAtoms, token.key)\n\tconst setter = useI(token)\n\n\treturn mutex ? setter : null\n}\n","import { StoreContext } from \"atom.io/react\"\nimport type { ContinuityToken } from \"atom.io/realtime\"\nimport { syncContinuity } from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { useRealtimeService } from \"./use-realtime-service\"\n\nexport function useSyncContinuity(token: ContinuityToken): void {\n\tconst store = React.useContext(StoreContext)\n\tuseRealtimeService(`tx-sync:${token.key}`, (socket) => {\n\t\treturn syncContinuity(store, socket, token)\n\t})\n}\n"],"mappings":"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"}
|
|
@@ -1,28 +1,40 @@
|
|
|
1
|
+
import { UserInRoomMeta } from "../shared-room-store-D2o4ZLjC.js";
|
|
1
2
|
import { RootStore, Subject, Transceiver } from "atom.io/internal";
|
|
2
|
-
import { Canonical, Json, JsonIO, stringified } from "atom.io/json";
|
|
3
3
|
import * as AtomIO from "atom.io";
|
|
4
|
-
import { Hierarchy, JoinToken,
|
|
4
|
+
import { Hierarchy, JoinToken, MutableAtomToken, PureSelectorFamilyToken, RegularAtomFamilyToken, TransactionIO, TransactionToken, WritableToken } from "atom.io";
|
|
5
|
+
import { Canonical, Json, stringified } from "atom.io/json";
|
|
5
6
|
import { SetRTX } from "atom.io/transceivers/set-rtx";
|
|
6
|
-
import { ContinuityToken
|
|
7
|
+
import { ContinuityToken } from "atom.io/realtime";
|
|
7
8
|
import { ChildProcessWithoutNullStreams } from "node:child_process";
|
|
9
|
+
import { Readable, Writable } from "node:stream";
|
|
8
10
|
|
|
9
|
-
//#region src/realtime-server/continuity/
|
|
10
|
-
type
|
|
11
|
-
declare function
|
|
12
|
-
socket
|
|
11
|
+
//#region src/realtime-server/continuity/provide-continuity.d.ts
|
|
12
|
+
type ProvideContinuity = (continuity: ContinuityToken, userKey: UserKey) => () => void;
|
|
13
|
+
declare function prepareToProvideContinuity({
|
|
14
|
+
socket,
|
|
13
15
|
store
|
|
14
|
-
}: ServerConfig):
|
|
16
|
+
}: ServerConfig): ProvideContinuity;
|
|
17
|
+
//#endregion
|
|
18
|
+
//#region src/realtime-server/socket-interface.d.ts
|
|
19
|
+
type Socket = {
|
|
20
|
+
id: string | undefined;
|
|
21
|
+
on: (event: string, listener: (...args: Json.Serializable[]) => void) => void;
|
|
22
|
+
onAny: (listener: (event: string, ...args: Json.Serializable[]) => void) => void;
|
|
23
|
+
off: (event: string, listener: (...args: Json.Serializable[]) => void) => void;
|
|
24
|
+
offAny: (listener: (event: string, ...args: Json.Serializable[]) => void) => void;
|
|
25
|
+
emit: (event: string, ...args: Json.Serializable[]) => void;
|
|
26
|
+
};
|
|
15
27
|
//#endregion
|
|
16
28
|
//#region src/realtime-server/ipc-sockets/custom-socket.d.ts
|
|
17
29
|
type Events = Json.Object<string, Json.Serializable[]>;
|
|
18
|
-
type
|
|
19
|
-
interface EventBuffer<
|
|
20
|
-
toString():
|
|
30
|
+
type EventPayload<receiveRelay extends Events, K extends string & keyof receiveRelay = string & keyof receiveRelay> = [string, ...receiveRelay[K]];
|
|
31
|
+
interface EventBuffer<E extends Events, K extends string & keyof E = string & keyof E> extends Buffer {
|
|
32
|
+
toString(): stringified<EventPayload<E, K>>;
|
|
21
33
|
}
|
|
22
|
-
declare class CustomSocket<I extends Events, O extends Events> implements Socket {
|
|
34
|
+
declare abstract class CustomSocket<I extends Events, O extends Events> implements Socket {
|
|
23
35
|
protected listeners: Map<keyof O, Set<(...args: Json.Array) => void>>;
|
|
24
36
|
protected globalListeners: Set<(event: string, ...args: Json.Array) => void>;
|
|
25
|
-
protected handleEvent<
|
|
37
|
+
protected handleEvent<K extends string & keyof I>(...args: EventPayload<I, K>): void;
|
|
26
38
|
id: string;
|
|
27
39
|
emit: <Event extends keyof I>(event: Event, ...args: I[Event]) => CustomSocket<I, O>;
|
|
28
40
|
constructor(emit: <Event extends keyof I>(event: Event, ...args: I[Event]) => CustomSocket<I, O>);
|
|
@@ -33,55 +45,85 @@ declare class CustomSocket<I extends Events, O extends Events> implements Socket
|
|
|
33
45
|
}
|
|
34
46
|
//#endregion
|
|
35
47
|
//#region src/realtime-server/ipc-sockets/child-socket.d.ts
|
|
36
|
-
|
|
48
|
+
type ChildProcess = {
|
|
49
|
+
pid?: number | undefined;
|
|
50
|
+
stdin: Writable;
|
|
51
|
+
stdout: Readable;
|
|
52
|
+
stderr: Readable;
|
|
53
|
+
};
|
|
54
|
+
type StderrLog = [`e` | `i` | `w`, ...Json.Array];
|
|
55
|
+
declare class ChildSocket<I extends Events, O extends Events, P extends ChildProcess = ChildProcess> extends CustomSocket<I, O> {
|
|
37
56
|
protected incompleteData: string;
|
|
38
57
|
protected unprocessedEvents: string[];
|
|
39
58
|
protected incompleteLog: string;
|
|
40
59
|
protected unprocessedLogs: string[];
|
|
41
60
|
id: string;
|
|
42
|
-
|
|
61
|
+
proc: P;
|
|
43
62
|
key: string;
|
|
44
63
|
logger: Pick<Console, `error` | `info` | `warn`>;
|
|
45
|
-
protected handleLog(
|
|
46
|
-
constructor(
|
|
64
|
+
protected handleLog(log: StderrLog): void;
|
|
65
|
+
constructor(proc: P, key: string, logger?: Pick<Console, `error` | `info` | `warn`>);
|
|
47
66
|
}
|
|
48
67
|
//#endregion
|
|
68
|
+
//#region src/realtime-server/realtime-server-stores/server-user-store.d.ts
|
|
69
|
+
type SocketKey = `socket::${string}`;
|
|
70
|
+
type UserKey = `user::${string}`;
|
|
71
|
+
type RoomKey = `room::${string}`;
|
|
72
|
+
type SocketSystemHierarchy = Hierarchy<[{
|
|
73
|
+
above: `root`;
|
|
74
|
+
below: [UserKey, SocketKey, RoomKey];
|
|
75
|
+
}]>;
|
|
76
|
+
declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
|
|
77
|
+
declare const socketIndex: MutableAtomToken<SetRTX<SocketKey>>;
|
|
78
|
+
declare const userIndex: MutableAtomToken<SetRTX<UserKey>>;
|
|
79
|
+
declare const usersOfSockets: JoinToken<`user`, UserKey, `socket`, SocketKey, `1:1`>;
|
|
80
|
+
declare const userMutualSituationalAwarenessIndexes: PureSelectorFamilyToken<UserKey[], UserKey>;
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/realtime-server/realtime-server-stores/server-room-external-store.d.ts
|
|
83
|
+
declare const ROOMS: Map<string, ChildSocket<any, any, ChildProcessWithoutNullStreams>>;
|
|
84
|
+
declare function spawnRoom(roomId: string, script: string, options: string[]): Promise<ChildSocket<any, any>>;
|
|
85
|
+
declare const joinRoomTX: TransactionToken<(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta>;
|
|
86
|
+
type JoinRoomIO = TransactionIO<typeof joinRoomTX>;
|
|
87
|
+
declare const leaveRoomTX: TransactionToken<(roomId: string, userId: string) => void>;
|
|
88
|
+
type LeaveRoomIO = TransactionIO<typeof leaveRoomTX>;
|
|
89
|
+
declare const destroyRoomTX: TransactionToken<(roomKey: RoomKey) => void>;
|
|
90
|
+
//#endregion
|
|
49
91
|
//#region src/realtime-server/ipc-sockets/parent-socket.d.ts
|
|
50
92
|
declare class SubjectSocket<I extends Events, O extends Events> extends CustomSocket<I, O> {
|
|
51
|
-
in: Subject<
|
|
52
|
-
out: Subject<
|
|
93
|
+
in: Subject<EventPayload<I>>;
|
|
94
|
+
out: Subject<EventPayload<O>>;
|
|
53
95
|
id: string;
|
|
54
96
|
disposalFunctions: (() => void)[];
|
|
55
97
|
constructor(id: string);
|
|
56
98
|
dispose(): void;
|
|
57
99
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
100
|
+
type ParentProcess = {
|
|
101
|
+
pid?: number | undefined;
|
|
102
|
+
stdin: Readable;
|
|
103
|
+
stdout: Writable;
|
|
104
|
+
stderr: Writable;
|
|
105
|
+
exit: (code?: number) => void;
|
|
106
|
+
};
|
|
107
|
+
declare class ParentSocket<I extends Events & { [id in string as `relay::${id}`]: [string, ...Json.Array[]] }, O extends Events & { [id in string as `user::${id}`]: [string, ...Json.Array[]] } & {
|
|
108
|
+
"user-joins": [key: UserKey];
|
|
109
|
+
"user-leaves": [key: UserKey];
|
|
110
|
+
}, P extends ParentProcess = ParentProcess> extends CustomSocket<I, O> {
|
|
62
111
|
protected incompleteData: string;
|
|
63
112
|
protected unprocessedEvents: string[];
|
|
64
113
|
protected relays: Map<string, SubjectSocket<any, any>>;
|
|
65
|
-
protected relayServices: ((socket: SubjectSocket<any, any
|
|
66
|
-
|
|
114
|
+
protected relayServices: ((socket: SubjectSocket<any, any>, userKey: UserKey) => (() => void) | void)[];
|
|
115
|
+
proc: P;
|
|
67
116
|
id: string;
|
|
68
|
-
protected log(...args:
|
|
117
|
+
protected log(...args: StderrLog): void;
|
|
69
118
|
logger: {
|
|
70
|
-
info: (...args:
|
|
71
|
-
warn: (...args:
|
|
72
|
-
error: (...args:
|
|
119
|
+
info: (...args: Json.Array) => void;
|
|
120
|
+
warn: (...args: Json.Array) => void;
|
|
121
|
+
error: (...args: Json.Array) => void;
|
|
73
122
|
};
|
|
74
|
-
constructor();
|
|
75
|
-
|
|
123
|
+
constructor(proc: P);
|
|
124
|
+
receiveRelay(attachServices: (socket: SubjectSocket<any, any>, userKey: UserKey) => (() => void) | void): void;
|
|
76
125
|
}
|
|
77
126
|
//#endregion
|
|
78
|
-
//#region src/realtime-server/realtime-action-receiver.d.ts
|
|
79
|
-
type ActionReceiver = ReturnType<typeof realtimeActionReceiver>;
|
|
80
|
-
declare function realtimeActionReceiver({
|
|
81
|
-
socket,
|
|
82
|
-
store
|
|
83
|
-
}: ServerConfig): <F extends JsonIO>(tx: TransactionToken<F>) => () => void;
|
|
84
|
-
//#endregion
|
|
85
127
|
//#region src/realtime-server/realtime-family-provider.d.ts
|
|
86
128
|
type FamilyProvider = ReturnType<typeof realtimeAtomFamilyProvider>;
|
|
87
129
|
declare function realtimeAtomFamilyProvider({
|
|
@@ -103,41 +145,6 @@ declare function realtimeMutableProvider({
|
|
|
103
145
|
store
|
|
104
146
|
}: ServerConfig): <Core extends Transceiver<any, Json.Serializable, Json.Serializable>>(token: AtomIO.MutableAtomToken<Core>) => () => void;
|
|
105
147
|
//#endregion
|
|
106
|
-
//#region src/realtime-server/realtime-server-stores/server-user-store.d.ts
|
|
107
|
-
type SocketKey = `socket::${string}`;
|
|
108
|
-
type UserKey = `user::${string}`;
|
|
109
|
-
type RoomKey = `room::${string}`;
|
|
110
|
-
type SocketSystemHierarchy = Hierarchy<[{
|
|
111
|
-
above: `root`;
|
|
112
|
-
below: [UserKey, SocketKey, RoomKey];
|
|
113
|
-
}]>;
|
|
114
|
-
declare const socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>;
|
|
115
|
-
declare const socketIndex: MutableAtomToken<SetRTX<SocketKey>>;
|
|
116
|
-
declare const userIndex: MutableAtomToken<SetRTX<UserKey>>;
|
|
117
|
-
declare const usersOfSockets: JoinToken<`user`, UserKey, `socket`, SocketKey, `1:1`>;
|
|
118
|
-
//#endregion
|
|
119
|
-
//#region src/realtime-server/realtime-server-stores/server-room-external-actions.d.ts
|
|
120
|
-
declare const createRoomTX: AtomIO.TransactionToken<(roomKey: RoomKey, script: string, options?: string[]) => Loadable<ChildSocket<any, any>>>;
|
|
121
|
-
type CreateRoomIO = AtomIO.TransactionIO<typeof createRoomTX>;
|
|
122
|
-
declare const joinRoomTX: AtomIO.TransactionToken<(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta>;
|
|
123
|
-
type JoinRoomIO = AtomIO.TransactionIO<typeof joinRoomTX>;
|
|
124
|
-
declare const leaveRoomTX: AtomIO.TransactionToken<(roomId: string, userId: string) => void>;
|
|
125
|
-
type LeaveRoomIO = AtomIO.TransactionIO<typeof leaveRoomTX>;
|
|
126
|
-
declare const destroyRoomTX: AtomIO.TransactionToken<(roomKey: RoomKey) => void>;
|
|
127
|
-
//#endregion
|
|
128
|
-
//#region src/realtime-server/realtime-server-stores/server-room-external-store.d.ts
|
|
129
|
-
type RoomArguments = [script: string, options: string[]] | [script: string];
|
|
130
|
-
declare const roomArgumentsAtoms: RegularAtomFamilyToken<RoomArguments, string>;
|
|
131
|
-
declare const roomSelectors: ReadonlyPureSelectorFamilyToken<Loadable<ChildSocket<any, any>>, string>;
|
|
132
|
-
//#endregion
|
|
133
|
-
//#region src/realtime-server/realtime-server-stores/server-sync-store.d.ts
|
|
134
|
-
declare function redactTransactionUpdateContent(visibleStateKeys: string[], updates: TransactionSubEvent[]): TransactionSubEvent[];
|
|
135
|
-
declare const redactorAtoms: RegularAtomFamilyToken<{
|
|
136
|
-
occlude: (updates: TransactionSubEvent[]) => TransactionSubEvent[];
|
|
137
|
-
}, UserKey>;
|
|
138
|
-
type ContinuitySyncTransactionUpdate = Pick<TransactionOutcomeEvent<any>, `epoch` | `id` | `output` | `subEvents` | `token`>;
|
|
139
|
-
declare const userUnacknowledgedQueues: RegularAtomFamilyToken<ContinuitySyncTransactionUpdate[], UserKey>;
|
|
140
|
-
//#endregion
|
|
141
148
|
//#region src/realtime-server/realtime-state-provider.d.ts
|
|
142
149
|
type StateProvider = ReturnType<typeof realtimeStateProvider>;
|
|
143
150
|
declare function realtimeStateProvider({
|
|
@@ -150,21 +157,13 @@ type StateReceiver = ReturnType<typeof realtimeStateReceiver>;
|
|
|
150
157
|
declare function realtimeStateReceiver({
|
|
151
158
|
socket,
|
|
152
159
|
store
|
|
153
|
-
}: ServerConfig): <
|
|
160
|
+
}: ServerConfig): <S extends Json.Serializable, C extends S>(clientToken: WritableToken<C>, serverToken?: WritableToken<S>) => () => void;
|
|
154
161
|
//#endregion
|
|
155
|
-
//#region src/realtime-server/
|
|
156
|
-
type Socket = {
|
|
157
|
-
id: string | undefined;
|
|
158
|
-
on: (event: string, listener: (...args: Json.Serializable[]) => void) => void;
|
|
159
|
-
onAny: (listener: (event: string, ...args: Json.Serializable[]) => void) => void;
|
|
160
|
-
off: (event: string, listener: (...args: Json.Serializable[]) => void) => void;
|
|
161
|
-
offAny: (listener: (event: string, ...args: Json.Serializable[]) => void) => void;
|
|
162
|
-
emit: (event: string, ...args: Json.Serializable[]) => void;
|
|
163
|
-
};
|
|
162
|
+
//#region src/realtime-server/server-config.d.ts
|
|
164
163
|
type ServerConfig = {
|
|
165
164
|
socket: Socket;
|
|
166
165
|
store?: RootStore;
|
|
167
166
|
};
|
|
168
167
|
//#endregion
|
|
169
|
-
export {
|
|
168
|
+
export { ChildProcess, ChildSocket, CustomSocket, EventBuffer, EventPayload, Events, FamilyProvider, JoinRoomIO, LeaveRoomIO, MutableFamilyProvider, MutableProvider, ParentProcess, ParentSocket, ProvideContinuity, ROOMS, RoomKey, ServerConfig, Socket, SocketKey, SocketSystemHierarchy, StateProvider, StateReceiver, StderrLog, SubjectSocket, UserKey, destroyRoomTX, joinRoomTX, leaveRoomTX, prepareToProvideContinuity, realtimeAtomFamilyProvider, realtimeMutableFamilyProvider, realtimeMutableProvider, realtimeStateProvider, realtimeStateReceiver, socketAtoms, socketIndex, spawnRoom, userIndex, userMutualSituationalAwarenessIndexes, usersOfSockets };
|
|
170
169
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketIndex: MutableAtomToken<SetRTX<SocketKey>>","userIndex: MutableAtomToken<SetRTX<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\n>","
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["socketAtoms: RegularAtomFamilyToken<Socket | null, SocketKey>","socketIndex: MutableAtomToken<SetRTX<SocketKey>>","userIndex: MutableAtomToken<SetRTX<UserKey>>","usersOfSockets: JoinToken<\n\t`user`,\n\tUserKey,\n\t`socket`,\n\tSocketKey,\n\t`1:1`\n>","userMutualSituationalAwarenessIndexes: PureSelectorFamilyToken<\n\tUserKey[],\n\tUserKey\n>","ROOMS: Map<\n\tstring,\n\tChildSocket<any, any, ChildProcessWithoutNullStreams>\n>","joinRoomTX: TransactionToken<\n\t(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta\n>","leaveRoomTX: TransactionToken<\n\t(roomId: string, userId: string) => void\n>","destroyRoomTX: TransactionToken<(roomKey: RoomKey) => void>"],"sources":["../../src/realtime-server/continuity/provide-continuity.ts","../../src/realtime-server/socket-interface.ts","../../src/realtime-server/ipc-sockets/custom-socket.ts","../../src/realtime-server/ipc-sockets/child-socket.ts","../../src/realtime-server/realtime-server-stores/server-user-store.ts","../../src/realtime-server/realtime-server-stores/server-room-external-store.ts","../../src/realtime-server/ipc-sockets/parent-socket.ts","../../src/realtime-server/realtime-family-provider.ts","../../src/realtime-server/realtime-mutable-family-provider.ts","../../src/realtime-server/realtime-mutable-provider.ts","../../src/realtime-server/realtime-state-provider.ts","../../src/realtime-server/realtime-state-receiver.ts","../../src/realtime-server/server-config.ts"],"sourcesContent":[],"mappings":"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"}
|