atom.io 0.14.8 → 0.15.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.
- package/README.md +5 -0
- package/data/dist/index.cjs +216 -218
- package/data/dist/index.cjs.map +1 -1
- package/data/dist/index.d.ts +30 -11
- package/data/dist/index.js +218 -221
- package/data/dist/index.js.map +1 -1
- package/data/src/join.ts +337 -296
- package/data/src/struct-family.ts +2 -2
- package/data/src/struct.ts +2 -2
- package/dist/chunk-S7R5MU6A.js +137 -0
- package/dist/chunk-S7R5MU6A.js.map +1 -0
- package/dist/index.cjs +3 -20
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -8
- package/dist/index.js +1 -151
- package/dist/index.js.map +1 -1
- package/internal/dist/index.cjs +278 -201
- package/internal/dist/index.cjs.map +1 -1
- package/internal/dist/index.d.ts +43 -36
- package/internal/dist/index.js +224 -194
- package/internal/dist/index.js.map +1 -1
- package/internal/src/atom/create-atom.ts +5 -86
- package/internal/src/atom/create-regular-atom.ts +92 -0
- package/internal/src/atom/index.ts +16 -0
- package/internal/src/atom/is-default.ts +0 -5
- package/internal/src/caching.ts +14 -16
- package/internal/src/families/create-atom-family.ts +20 -46
- package/internal/src/families/create-readonly-selector-family.ts +4 -1
- package/internal/src/families/create-regular-atom-family.ts +72 -0
- package/internal/src/families/create-selector-family.ts +2 -0
- package/internal/src/families/index.ts +1 -0
- package/internal/src/mutable/create-mutable-atom-family.ts +2 -2
- package/internal/src/mutable/create-mutable-atom.ts +8 -3
- package/internal/src/mutable/get-update-family.ts +1 -1
- package/internal/src/mutable/is-mutable.ts +3 -30
- package/internal/src/mutable/tracker-family.ts +2 -2
- package/internal/src/mutable/tracker.ts +5 -5
- package/internal/src/operation.ts +14 -18
- package/internal/src/selector/create-read-write-selector.ts +2 -3
- package/internal/src/selector/create-selector.ts +1 -1
- package/internal/src/selector/register-selector.ts +9 -14
- package/internal/src/set-state/evict-downstream.ts +3 -5
- package/internal/src/set-state/set-atom.ts +14 -17
- package/internal/src/store/store.ts +23 -19
- package/internal/src/store/withdraw.ts +32 -70
- package/internal/src/subscribe/subscribe-to-root-atoms.ts +5 -3
- package/internal/src/subscribe/subscribe-to-state.ts +5 -3
- package/internal/src/transaction/apply-transaction.ts +20 -2
- package/internal/src/transaction/build-transaction.ts +19 -11
- package/internal/src/transaction/create-transaction.ts +6 -11
- package/internal/src/transaction/index.ts +2 -3
- package/introspection/dist/index.cjs +6 -6
- package/introspection/dist/index.cjs.map +1 -1
- package/introspection/dist/index.d.ts +3 -3
- package/introspection/dist/index.js +7 -7
- package/introspection/dist/index.js.map +1 -1
- package/introspection/src/attach-atom-index.ts +7 -2
- package/introspection/src/attach-selector-index.ts +7 -2
- package/introspection/src/attach-timeline-family.ts +5 -2
- package/introspection/src/attach-timeline-index.ts +2 -2
- package/introspection/src/attach-transaction-index.ts +2 -2
- package/introspection/src/attach-transaction-logs.ts +2 -2
- package/package.json +10 -8
- package/react-devtools/dist/index.d.ts +17 -11
- package/realtime-client/dist/index.cjs +3 -0
- package/realtime-client/dist/index.cjs.map +1 -1
- package/realtime-client/dist/index.d.ts +3 -3
- package/realtime-client/dist/index.js +3 -0
- package/realtime-client/dist/index.js.map +1 -1
- package/realtime-client/src/index.ts +6 -6
- package/realtime-client/src/{use-pull-family-member.ts → pull-family-member.ts} +1 -1
- package/realtime-client/src/{use-pull-mutable-family-member.ts → pull-mutable-family-member.ts} +1 -1
- package/realtime-client/src/{use-pull-mutable.ts → pull-mutable.ts} +1 -1
- package/realtime-client/src/{use-server-action.ts → server-action.ts} +3 -0
- package/realtime-react/dist/index.cjs +31 -17
- package/realtime-react/dist/index.cjs.map +1 -1
- package/realtime-react/dist/index.d.ts +3 -3
- package/realtime-react/dist/index.js +31 -17
- package/realtime-react/dist/index.js.map +1 -1
- package/realtime-react/src/realtime-context.tsx +2 -3
- package/realtime-react/src/use-pull-family-member.ts +6 -2
- package/realtime-react/src/use-pull-mutable-family-member.ts +5 -4
- package/realtime-react/src/use-pull-mutable.ts +6 -2
- package/realtime-react/src/use-pull.ts +5 -1
- package/realtime-react/src/use-push.ts +5 -4
- package/realtime-react/src/use-server-action.ts +5 -4
- package/src/atom.ts +8 -17
- package/src/selector.ts +3 -1
- package/src/set-state.ts +1 -3
- package/src/silo.ts +2 -14
- package/src/transaction.ts +17 -6
- package/transceivers/set-rtx/dist/index.cjs +2 -1
- package/transceivers/set-rtx/dist/index.cjs.map +1 -1
- package/transceivers/set-rtx/dist/index.js +2 -1
- package/transceivers/set-rtx/dist/index.js.map +1 -1
- package/transceivers/set-rtx/src/set-rtx.ts +2 -1
- package/internal/src/transaction/redo-transaction.ts +0 -27
- package/internal/src/transaction/undo-transaction.ts +0 -27
- /package/realtime-client/src/{use-pull.ts → pull.ts} +0 -0
- /package/realtime-client/src/{use-push.ts → push.ts} +0 -0
|
@@ -101,6 +101,9 @@ function pushState(token, socket, subscriptionKey, store) {
|
|
|
101
101
|
var TX_SUBS = /* @__PURE__ */ new Map();
|
|
102
102
|
function synchronizeTransactionResults(token, socket, store) {
|
|
103
103
|
var _a;
|
|
104
|
+
if (!socket) {
|
|
105
|
+
return () => null;
|
|
106
|
+
}
|
|
104
107
|
const count = (_a = TX_SUBS.get(token.key)) != null ? _a : 0;
|
|
105
108
|
TX_SUBS.set(token.key, count + 1);
|
|
106
109
|
const unsubscribe = count === 0 ? Internal.subscribeToTransaction(
|
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
1
|
+
{"version":3,"sources":["../src/realtime-state.ts","../src/pull.ts","../src/pull-family-member.ts","../src/pull-mutable.ts","../src/pull-mutable-family-member.ts","../src/push.ts","../src/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.StateToken<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<any>,\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<any>,\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\tif (!socket) {\n\t\treturn () => null\n\t}\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"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from "./realtime-state"
|
|
2
|
-
export * from "./
|
|
3
|
-
export * from "./
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
6
|
-
export * from "./
|
|
7
|
-
export * from "./
|
|
2
|
+
export * from "./pull"
|
|
3
|
+
export * from "./pull-family-member"
|
|
4
|
+
export * from "./pull-mutable"
|
|
5
|
+
export * from "./pull-mutable-family-member"
|
|
6
|
+
export * from "./push"
|
|
7
|
+
export * from "./server-action"
|
|
@@ -5,7 +5,7 @@ import { parseJson } from "atom.io/json"
|
|
|
5
5
|
import type { Socket } from "socket.io-client"
|
|
6
6
|
|
|
7
7
|
export function pullFamilyMember<J extends Json.Serializable>(
|
|
8
|
-
token: AtomIO.
|
|
8
|
+
token: AtomIO.StateToken<J>,
|
|
9
9
|
socket: Socket,
|
|
10
10
|
store: Store,
|
|
11
11
|
): () => void {
|
package/realtime-client/src/{use-pull-mutable-family-member.ts → pull-mutable-family-member.ts}
RENAMED
|
@@ -6,7 +6,7 @@ import type { Json } from "atom.io/json"
|
|
|
6
6
|
import type { Socket } from "socket.io-client"
|
|
7
7
|
|
|
8
8
|
export function pullMutableFamilyMember<
|
|
9
|
-
T extends Transceiver<
|
|
9
|
+
T extends Transceiver<any>,
|
|
10
10
|
J extends Json.Serializable,
|
|
11
11
|
>(
|
|
12
12
|
token: AtomIO.MutableAtomToken<T, J>,
|
|
@@ -5,7 +5,7 @@ import type { Json } from "atom.io/json"
|
|
|
5
5
|
import type { Socket } from "socket.io-client"
|
|
6
6
|
|
|
7
7
|
export function pullMutableState<
|
|
8
|
-
T extends Transceiver<
|
|
8
|
+
T extends Transceiver<any>,
|
|
9
9
|
J extends Json.Serializable,
|
|
10
10
|
>(
|
|
11
11
|
token: AtomIO.MutableAtomToken<T, J>,
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
var react = require('atom.io/react');
|
|
4
4
|
var RTC = require('atom.io/realtime-client');
|
|
5
5
|
var React6 = require('react');
|
|
6
|
-
var socket_ioClient = require('socket.io-client');
|
|
7
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
8
7
|
var AtomIO = require('atom.io');
|
|
9
8
|
|
|
@@ -31,7 +30,7 @@ var AtomIO__namespace = /*#__PURE__*/_interopNamespace(AtomIO);
|
|
|
31
30
|
|
|
32
31
|
// realtime-react/src/realtime-context.tsx
|
|
33
32
|
var RealtimeContext = React6__namespace.createContext({
|
|
34
|
-
socket:
|
|
33
|
+
socket: null
|
|
35
34
|
});
|
|
36
35
|
var RealtimeProvider = ({ children, socket }) => {
|
|
37
36
|
const setMyId = react.useI(RTC__namespace.myIdState__INTERNAL);
|
|
@@ -48,42 +47,57 @@ var RealtimeProvider = ({ children, socket }) => {
|
|
|
48
47
|
function usePull(token) {
|
|
49
48
|
const { socket } = React6__namespace.useContext(RealtimeContext);
|
|
50
49
|
const store = React6__namespace.useContext(react.StoreContext);
|
|
51
|
-
React6__namespace.useEffect(() =>
|
|
50
|
+
React6__namespace.useEffect(() => {
|
|
51
|
+
if (socket) {
|
|
52
|
+
return RTC__namespace.pullState(token, socket, store);
|
|
53
|
+
}
|
|
54
|
+
}, [token.key, socket]);
|
|
52
55
|
}
|
|
53
56
|
function usePullFamilyMember(token) {
|
|
54
57
|
const { socket } = React6__namespace.useContext(RealtimeContext);
|
|
55
58
|
const store = React6__namespace.useContext(react.StoreContext);
|
|
56
|
-
React6__namespace.useEffect(() =>
|
|
59
|
+
React6__namespace.useEffect(() => {
|
|
60
|
+
if (socket) {
|
|
61
|
+
return RTC__namespace.pullFamilyMember(token, socket, store);
|
|
62
|
+
}
|
|
63
|
+
}, [token.key, socket]);
|
|
57
64
|
}
|
|
58
65
|
function usePullMutable(token) {
|
|
59
66
|
const { socket } = React6__namespace.useContext(RealtimeContext);
|
|
60
67
|
const store = React6__namespace.useContext(react.StoreContext);
|
|
61
|
-
React6__namespace.useEffect(() =>
|
|
68
|
+
React6__namespace.useEffect(() => {
|
|
69
|
+
if (socket) {
|
|
70
|
+
return RTC__namespace.pullMutableState(token, socket, store);
|
|
71
|
+
}
|
|
72
|
+
}, [token.key, socket]);
|
|
62
73
|
}
|
|
63
74
|
function usePullMutableFamilyMember(token) {
|
|
64
75
|
const { socket } = React6__namespace.useContext(RealtimeContext);
|
|
65
76
|
const store = React6__namespace.useContext(react.StoreContext);
|
|
66
|
-
React6__namespace.useEffect(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
77
|
+
React6__namespace.useEffect(() => {
|
|
78
|
+
if (socket) {
|
|
79
|
+
return RTC__namespace.pullMutableFamilyMember(token, socket, store);
|
|
80
|
+
}
|
|
81
|
+
}, [token.key, socket]);
|
|
70
82
|
}
|
|
71
83
|
function usePush(token) {
|
|
72
84
|
const { socket } = React6__namespace.useContext(RealtimeContext);
|
|
73
85
|
const store = React6__namespace.useContext(react.StoreContext);
|
|
74
86
|
const id = React6__namespace.useId();
|
|
75
|
-
React6__namespace.useEffect(
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
87
|
+
React6__namespace.useEffect(() => {
|
|
88
|
+
if (socket) {
|
|
89
|
+
return RTC__namespace.pushState(token, socket, `use-push:${id}`, store);
|
|
90
|
+
}
|
|
91
|
+
}, [token.key, socket]);
|
|
79
92
|
}
|
|
80
93
|
function useServerAction(token) {
|
|
81
94
|
const store = React6__namespace.useContext(react.StoreContext);
|
|
82
95
|
const { socket } = React6__namespace.useContext(RealtimeContext);
|
|
83
|
-
React6__namespace.useEffect(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
96
|
+
React6__namespace.useEffect(() => {
|
|
97
|
+
if (socket) {
|
|
98
|
+
return RTC__namespace.synchronizeTransactionResults(token, socket, store);
|
|
99
|
+
}
|
|
100
|
+
}, [token.key, socket]);
|
|
87
101
|
return AtomIO__namespace.runTransaction(token, store);
|
|
88
102
|
}
|
|
89
103
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/realtime-context.tsx","../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":["RTC","React","StoreContext"],"mappings":";AAAA,SAAS,YAAY;AACrB,YAAY,SAAS;AACrB,YAAY,WAAW;
|
|
1
|
+
{"version":3,"sources":["../src/realtime-context.tsx","../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":["RTC","React","StoreContext"],"mappings":"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","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 const RealtimeContext = React.createContext<{ socket: Socket | null }>({\n\tsocket: null,\n})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket\n}> = ({ children, socket }) => {\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsocket.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket.on(`disconnect`, () => {\n\t\t\tsetMyId(null)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePull<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pullState(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullFamilyMember<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pullFamilyMember(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullMutable<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(token: AtomIO.MutableAtomToken<T, J>): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pullMutableState(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullMutableFamilyMember<\n\tT extends Transceiver<Json.Serializable>,\n\tJ extends Json.Serializable,\n>(token: AtomIO.MutableAtomToken<T, J>): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pullMutableFamilyMember(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tconst id = React.useId()\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pushState(token, socket, `use-push:${id}`, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import * as AtomIO from \"atom.io\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function useServerAction<ƒ extends AtomIO.ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.synchronizeTransactionResults(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n\treturn AtomIO.runTransaction(token, store)\n}\n"]}
|
|
@@ -5,7 +5,7 @@ import { Json } from 'atom.io/json';
|
|
|
5
5
|
import { Transceiver } from 'atom.io/internal';
|
|
6
6
|
|
|
7
7
|
declare const RealtimeContext: React.Context<{
|
|
8
|
-
socket: Socket;
|
|
8
|
+
socket: Socket | null;
|
|
9
9
|
}>;
|
|
10
10
|
declare const RealtimeProvider: React.FC<{
|
|
11
11
|
children: React.ReactNode;
|
|
@@ -14,9 +14,9 @@ declare const RealtimeProvider: React.FC<{
|
|
|
14
14
|
|
|
15
15
|
declare function usePull<J extends Json.Serializable>(token: AtomIO.StateToken<J>): void;
|
|
16
16
|
|
|
17
|
-
declare function usePullFamilyMember<J extends Json.Serializable>(token: AtomIO.
|
|
17
|
+
declare function usePullFamilyMember<J extends Json.Serializable>(token: AtomIO.StateToken<J>): void;
|
|
18
18
|
|
|
19
|
-
declare function usePullMutable<T extends Transceiver<
|
|
19
|
+
declare function usePullMutable<T extends Transceiver<any>, J extends Json.Serializable>(token: AtomIO.MutableAtomToken<T, J>): void;
|
|
20
20
|
|
|
21
21
|
declare function usePullMutableFamilyMember<T extends Transceiver<Json.Serializable>, J extends Json.Serializable>(token: AtomIO.MutableAtomToken<T, J>): void;
|
|
22
22
|
|
|
@@ -2,12 +2,11 @@ import '../../dist/chunk-PZLG2HP3.js';
|
|
|
2
2
|
import { useI, StoreContext } from 'atom.io/react';
|
|
3
3
|
import * as RTC from 'atom.io/realtime-client';
|
|
4
4
|
import * as React6 from 'react';
|
|
5
|
-
import { io } from 'socket.io-client';
|
|
6
5
|
import { jsx } from 'react/jsx-runtime';
|
|
7
6
|
import * as AtomIO from 'atom.io';
|
|
8
7
|
|
|
9
8
|
var RealtimeContext = React6.createContext({
|
|
10
|
-
socket:
|
|
9
|
+
socket: null
|
|
11
10
|
});
|
|
12
11
|
var RealtimeProvider = ({ children, socket }) => {
|
|
13
12
|
const setMyId = useI(RTC.myIdState__INTERNAL);
|
|
@@ -24,42 +23,57 @@ var RealtimeProvider = ({ children, socket }) => {
|
|
|
24
23
|
function usePull(token) {
|
|
25
24
|
const { socket } = React6.useContext(RealtimeContext);
|
|
26
25
|
const store = React6.useContext(StoreContext);
|
|
27
|
-
React6.useEffect(() =>
|
|
26
|
+
React6.useEffect(() => {
|
|
27
|
+
if (socket) {
|
|
28
|
+
return RTC.pullState(token, socket, store);
|
|
29
|
+
}
|
|
30
|
+
}, [token.key, socket]);
|
|
28
31
|
}
|
|
29
32
|
function usePullFamilyMember(token) {
|
|
30
33
|
const { socket } = React6.useContext(RealtimeContext);
|
|
31
34
|
const store = React6.useContext(StoreContext);
|
|
32
|
-
React6.useEffect(() =>
|
|
35
|
+
React6.useEffect(() => {
|
|
36
|
+
if (socket) {
|
|
37
|
+
return RTC.pullFamilyMember(token, socket, store);
|
|
38
|
+
}
|
|
39
|
+
}, [token.key, socket]);
|
|
33
40
|
}
|
|
34
41
|
function usePullMutable(token) {
|
|
35
42
|
const { socket } = React6.useContext(RealtimeContext);
|
|
36
43
|
const store = React6.useContext(StoreContext);
|
|
37
|
-
React6.useEffect(() =>
|
|
44
|
+
React6.useEffect(() => {
|
|
45
|
+
if (socket) {
|
|
46
|
+
return RTC.pullMutableState(token, socket, store);
|
|
47
|
+
}
|
|
48
|
+
}, [token.key, socket]);
|
|
38
49
|
}
|
|
39
50
|
function usePullMutableFamilyMember(token) {
|
|
40
51
|
const { socket } = React6.useContext(RealtimeContext);
|
|
41
52
|
const store = React6.useContext(StoreContext);
|
|
42
|
-
React6.useEffect(
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
53
|
+
React6.useEffect(() => {
|
|
54
|
+
if (socket) {
|
|
55
|
+
return RTC.pullMutableFamilyMember(token, socket, store);
|
|
56
|
+
}
|
|
57
|
+
}, [token.key, socket]);
|
|
46
58
|
}
|
|
47
59
|
function usePush(token) {
|
|
48
60
|
const { socket } = React6.useContext(RealtimeContext);
|
|
49
61
|
const store = React6.useContext(StoreContext);
|
|
50
62
|
const id = React6.useId();
|
|
51
|
-
React6.useEffect(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
63
|
+
React6.useEffect(() => {
|
|
64
|
+
if (socket) {
|
|
65
|
+
return RTC.pushState(token, socket, `use-push:${id}`, store);
|
|
66
|
+
}
|
|
67
|
+
}, [token.key, socket]);
|
|
55
68
|
}
|
|
56
69
|
function useServerAction(token) {
|
|
57
70
|
const store = React6.useContext(StoreContext);
|
|
58
71
|
const { socket } = React6.useContext(RealtimeContext);
|
|
59
|
-
React6.useEffect(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
72
|
+
React6.useEffect(() => {
|
|
73
|
+
if (socket) {
|
|
74
|
+
return RTC.synchronizeTransactionResults(token, socket, store);
|
|
75
|
+
}
|
|
76
|
+
}, [token.key, socket]);
|
|
63
77
|
return AtomIO.runTransaction(token, store);
|
|
64
78
|
}
|
|
65
79
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/realtime-context.tsx","../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":["RTC","React","StoreContext"],"mappings":";;;AAAA,SAAS,YAAY;AACrB,YAAY,SAAS;AACrB,YAAY,WAAW;
|
|
1
|
+
{"version":3,"sources":["../src/realtime-context.tsx","../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":["RTC","React","StoreContext"],"mappings":"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","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 const RealtimeContext = React.createContext<{ socket: Socket | null }>({\n\tsocket: null,\n})\n\nexport const RealtimeProvider: React.FC<{\n\tchildren: React.ReactNode\n\tsocket: Socket\n}> = ({ children, socket }) => {\n\tconst setMyId = useI(RTC.myIdState__INTERNAL)\n\tReact.useEffect(() => {\n\t\tsocket.on(`connect`, () => {\n\t\t\tsetMyId(socket.id)\n\t\t})\n\t\tsocket.on(`disconnect`, () => {\n\t\t\tsetMyId(null)\n\t\t})\n\t}, [socket, setMyId])\n\treturn (\n\t\t<RealtimeContext.Provider value={{ socket }}>\n\t\t\t{children}\n\t\t</RealtimeContext.Provider>\n\t)\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePull<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pullState(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullFamilyMember<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pullFamilyMember(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullMutable<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(token: AtomIO.MutableAtomToken<T, J>): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pullMutableState(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePullMutableFamilyMember<\n\tT extends Transceiver<Json.Serializable>,\n\tJ extends Json.Serializable,\n>(token: AtomIO.MutableAtomToken<T, J>): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pullMutableFamilyMember(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function usePush<J extends Json.Serializable>(\n\ttoken: AtomIO.StateToken<J>,\n): void {\n\tconst { socket } = React.useContext(RealtimeContext)\n\tconst store = React.useContext(StoreContext)\n\tconst id = React.useId()\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.pushState(token, socket, `use-push:${id}`, store)\n\t\t}\n\t}, [token.key, socket])\n}\n","import * as AtomIO from \"atom.io\"\nimport { StoreContext } from \"atom.io/react\"\nimport * as RTC from \"atom.io/realtime-client\"\nimport * as React from \"react\"\n\nimport { RealtimeContext } from \"./realtime-context\"\n\nexport function useServerAction<ƒ extends AtomIO.ƒn>(\n\ttoken: AtomIO.TransactionToken<ƒ>,\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\tconst store = React.useContext(StoreContext)\n\tconst { socket } = React.useContext(RealtimeContext)\n\tReact.useEffect(() => {\n\t\tif (socket) {\n\t\t\treturn RTC.synchronizeTransactionResults(token, socket, store)\n\t\t}\n\t}, [token.key, socket])\n\treturn AtomIO.runTransaction(token, store)\n}\n"]}
|
|
@@ -2,10 +2,9 @@ import { useI } from "atom.io/react"
|
|
|
2
2
|
import * as RTC from "atom.io/realtime-client"
|
|
3
3
|
import * as React from "react"
|
|
4
4
|
import type { Socket } from "socket.io-client"
|
|
5
|
-
import { io } from "socket.io-client"
|
|
6
5
|
|
|
7
|
-
export const RealtimeContext = React.createContext<{ socket: Socket }>({
|
|
8
|
-
socket:
|
|
6
|
+
export const RealtimeContext = React.createContext<{ socket: Socket | null }>({
|
|
7
|
+
socket: null,
|
|
9
8
|
})
|
|
10
9
|
|
|
11
10
|
export const RealtimeProvider: React.FC<{
|
|
@@ -7,9 +7,13 @@ import * as React from "react"
|
|
|
7
7
|
import { RealtimeContext } from "./realtime-context"
|
|
8
8
|
|
|
9
9
|
export function usePullFamilyMember<J extends Json.Serializable>(
|
|
10
|
-
token: AtomIO.
|
|
10
|
+
token: AtomIO.StateToken<J>,
|
|
11
11
|
): void {
|
|
12
12
|
const { socket } = React.useContext(RealtimeContext)
|
|
13
13
|
const store = React.useContext(StoreContext)
|
|
14
|
-
React.useEffect(() =>
|
|
14
|
+
React.useEffect(() => {
|
|
15
|
+
if (socket) {
|
|
16
|
+
return RTC.pullFamilyMember(token, socket, store)
|
|
17
|
+
}
|
|
18
|
+
}, [token.key, socket])
|
|
15
19
|
}
|
|
@@ -13,8 +13,9 @@ export function usePullMutableFamilyMember<
|
|
|
13
13
|
>(token: AtomIO.MutableAtomToken<T, J>): void {
|
|
14
14
|
const { socket } = React.useContext(RealtimeContext)
|
|
15
15
|
const store = React.useContext(StoreContext)
|
|
16
|
-
React.useEffect(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
React.useEffect(() => {
|
|
17
|
+
if (socket) {
|
|
18
|
+
return RTC.pullMutableFamilyMember(token, socket, store)
|
|
19
|
+
}
|
|
20
|
+
}, [token.key, socket])
|
|
20
21
|
}
|
|
@@ -8,10 +8,14 @@ import * as React from "react"
|
|
|
8
8
|
import { RealtimeContext } from "./realtime-context"
|
|
9
9
|
|
|
10
10
|
export function usePullMutable<
|
|
11
|
-
T extends Transceiver<
|
|
11
|
+
T extends Transceiver<any>,
|
|
12
12
|
J extends Json.Serializable,
|
|
13
13
|
>(token: AtomIO.MutableAtomToken<T, J>): void {
|
|
14
14
|
const { socket } = React.useContext(RealtimeContext)
|
|
15
15
|
const store = React.useContext(StoreContext)
|
|
16
|
-
React.useEffect(() =>
|
|
16
|
+
React.useEffect(() => {
|
|
17
|
+
if (socket) {
|
|
18
|
+
return RTC.pullMutableState(token, socket, store)
|
|
19
|
+
}
|
|
20
|
+
}, [token.key, socket])
|
|
17
21
|
}
|
|
@@ -11,5 +11,9 @@ export function usePull<J extends Json.Serializable>(
|
|
|
11
11
|
): void {
|
|
12
12
|
const { socket } = React.useContext(RealtimeContext)
|
|
13
13
|
const store = React.useContext(StoreContext)
|
|
14
|
-
React.useEffect(() =>
|
|
14
|
+
React.useEffect(() => {
|
|
15
|
+
if (socket) {
|
|
16
|
+
return RTC.pullState(token, socket, store)
|
|
17
|
+
}
|
|
18
|
+
}, [token.key, socket])
|
|
15
19
|
}
|
|
@@ -12,8 +12,9 @@ export function usePush<J extends Json.Serializable>(
|
|
|
12
12
|
const { socket } = React.useContext(RealtimeContext)
|
|
13
13
|
const store = React.useContext(StoreContext)
|
|
14
14
|
const id = React.useId()
|
|
15
|
-
React.useEffect(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
React.useEffect(() => {
|
|
16
|
+
if (socket) {
|
|
17
|
+
return RTC.pushState(token, socket, `use-push:${id}`, store)
|
|
18
|
+
}
|
|
19
|
+
}, [token.key, socket])
|
|
19
20
|
}
|
|
@@ -10,9 +10,10 @@ export function useServerAction<ƒ extends AtomIO.ƒn>(
|
|
|
10
10
|
): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {
|
|
11
11
|
const store = React.useContext(StoreContext)
|
|
12
12
|
const { socket } = React.useContext(RealtimeContext)
|
|
13
|
-
React.useEffect(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
React.useEffect(() => {
|
|
14
|
+
if (socket) {
|
|
15
|
+
return RTC.synchronizeTransactionResults(token, socket, store)
|
|
16
|
+
}
|
|
17
|
+
}, [token.key, socket])
|
|
17
18
|
return AtomIO.runTransaction(token, store)
|
|
18
19
|
}
|
package/src/atom.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import type { Subject, Transceiver } from "atom.io/internal"
|
|
2
|
-
import {
|
|
3
|
-
IMPLICIT,
|
|
4
|
-
createAtom,
|
|
5
|
-
createAtomFamily,
|
|
6
|
-
createMutableAtom,
|
|
7
|
-
createMutableAtomFamily,
|
|
8
|
-
} from "atom.io/internal"
|
|
1
|
+
import type { Store, Subject, Transceiver } from "atom.io/internal"
|
|
2
|
+
import { IMPLICIT, createAtom, createAtomFamily } from "atom.io/internal"
|
|
9
3
|
import type { Json, JsonInterface } from "atom.io/json"
|
|
10
4
|
|
|
11
5
|
import type { AtomToken, MutableAtomToken } from "."
|
|
@@ -35,13 +29,10 @@ export function atom<T extends Transceiver<any>, J extends Json.Serializable>(
|
|
|
35
29
|
options: MutableAtomOptions<T, J>,
|
|
36
30
|
): MutableAtomToken<T, J>
|
|
37
31
|
export function atom<T>(options: AtomOptions<T>): AtomToken<T>
|
|
38
|
-
export function atom
|
|
32
|
+
export function atom(
|
|
39
33
|
options: AtomOptions<any> | MutableAtomOptions<any, any>,
|
|
40
34
|
): AtomToken<any> {
|
|
41
|
-
|
|
42
|
-
return createMutableAtom(options, IMPLICIT.STORE)
|
|
43
|
-
}
|
|
44
|
-
return createAtom<T>(options, undefined, IMPLICIT.STORE)
|
|
35
|
+
return createAtom(options, undefined, IMPLICIT.STORE)
|
|
45
36
|
}
|
|
46
37
|
|
|
47
38
|
export type AtomFamilyOptions<T, K extends Json.Serializable> = {
|
|
@@ -57,7 +48,9 @@ export type AtomFamily<T, K extends Json.Serializable = Json.Serializable> = ((
|
|
|
57
48
|
type: `atom_family`
|
|
58
49
|
subject: Subject<AtomToken<T>>
|
|
59
50
|
mutable?: boolean
|
|
51
|
+
install: (store: Store) => void
|
|
60
52
|
}
|
|
53
|
+
|
|
61
54
|
// biome-ignore format: intersection
|
|
62
55
|
export type MutableAtomFamilyOptions<
|
|
63
56
|
T extends Transceiver<any>,
|
|
@@ -81,6 +74,7 @@ export type MutableAtomFamily<
|
|
|
81
74
|
type: `atom_family`
|
|
82
75
|
subject: Subject<MutableAtomToken<Core, SerializableCore>>
|
|
83
76
|
mutable: true
|
|
77
|
+
install: (store: Store) => void
|
|
84
78
|
}
|
|
85
79
|
|
|
86
80
|
export function atomFamily<
|
|
@@ -94,8 +88,5 @@ export function atomFamily<T, K extends Json.Serializable>(
|
|
|
94
88
|
export function atomFamily<T, K extends Json.Serializable>(
|
|
95
89
|
options: AtomFamilyOptions<T, K> | MutableAtomFamilyOptions<any, any, any>,
|
|
96
90
|
): AtomFamily<T, K> | MutableAtomFamily<any, any, any> {
|
|
97
|
-
|
|
98
|
-
return createMutableAtomFamily(options, IMPLICIT.STORE)
|
|
99
|
-
}
|
|
100
|
-
return createAtomFamily<T, K>(options, IMPLICIT.STORE)
|
|
91
|
+
return createAtomFamily(options, IMPLICIT.STORE)
|
|
101
92
|
}
|
package/src/selector.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Subject } from "atom.io/internal"
|
|
1
|
+
import type { Store, Subject } from "atom.io/internal"
|
|
2
2
|
import { IMPLICIT, createSelector, createSelectorFamily } from "atom.io/internal"
|
|
3
3
|
import type { Json } from "atom.io/json"
|
|
4
4
|
|
|
@@ -42,6 +42,7 @@ export type SelectorFamily<
|
|
|
42
42
|
key: string
|
|
43
43
|
type: `selector_family`
|
|
44
44
|
subject: Subject<SelectorToken<T>>
|
|
45
|
+
install: (store: Store) => void
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
export type ReadonlySelectorFamily<
|
|
@@ -51,6 +52,7 @@ export type ReadonlySelectorFamily<
|
|
|
51
52
|
key: string
|
|
52
53
|
type: `readonly_selector_family`
|
|
53
54
|
subject: Subject<ReadonlySelectorToken<T>>
|
|
55
|
+
install: (store: Store) => void
|
|
54
56
|
}
|
|
55
57
|
|
|
56
58
|
export function selectorFamily<T, K extends Json.Serializable>(
|
package/src/set-state.ts
CHANGED
|
@@ -11,9 +11,7 @@ export function setState<T, New extends T>(
|
|
|
11
11
|
if (rejection) {
|
|
12
12
|
return
|
|
13
13
|
}
|
|
14
|
-
const state =
|
|
15
|
-
Internal.withdraw(token, store) ??
|
|
16
|
-
Internal.withdrawNewFamilyMember(token, store)
|
|
14
|
+
const state = Internal.withdraw(token, store)
|
|
17
15
|
if (state === undefined) {
|
|
18
16
|
throw new Internal.NotFoundError(token, store)
|
|
19
17
|
}
|
package/src/silo.ts
CHANGED
|
@@ -2,8 +2,6 @@ import {
|
|
|
2
2
|
Store,
|
|
3
3
|
createAtom,
|
|
4
4
|
createAtomFamily,
|
|
5
|
-
createMutableAtom,
|
|
6
|
-
createMutableAtomFamily,
|
|
7
5
|
createSelector,
|
|
8
6
|
createSelectorFamily,
|
|
9
7
|
createTimeline,
|
|
@@ -33,18 +31,8 @@ export class Silo {
|
|
|
33
31
|
public constructor(name: string, fromStore: Store | null = null) {
|
|
34
32
|
const s = new Store(name, fromStore)
|
|
35
33
|
this.store = s
|
|
36
|
-
this.atom = (options) =>
|
|
37
|
-
|
|
38
|
-
return createMutableAtom(options, s)
|
|
39
|
-
}
|
|
40
|
-
return createAtom(options, undefined, s)
|
|
41
|
-
}
|
|
42
|
-
this.atomFamily = (options) => {
|
|
43
|
-
if (`mutable` in options) {
|
|
44
|
-
return createMutableAtomFamily(options, s) as any
|
|
45
|
-
}
|
|
46
|
-
return createAtomFamily(options, s)
|
|
47
|
-
}
|
|
34
|
+
this.atom = (options) => createAtom(options, undefined, s)
|
|
35
|
+
this.atomFamily = (options) => createAtomFamily(options, s)
|
|
48
36
|
this.selector = (options) => createSelector(options, undefined, s) as any
|
|
49
37
|
this.selectorFamily = (options) => createSelectorFamily(options, s) as any
|
|
50
38
|
this.transaction = (options) => createTransaction(options, s)
|