atom.io 0.17.0 → 0.18.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/data/dist/index.cjs +62 -40
- package/data/dist/index.cjs.map +1 -1
- package/data/dist/index.d.ts +8 -2
- package/data/dist/index.js +64 -42
- package/data/dist/index.js.map +1 -1
- package/data/src/dict.ts +8 -4
- package/data/src/join.ts +74 -33
- package/data/src/struct-family.ts +18 -17
- package/dist/chunk-IZHOMSXA.js +331 -0
- package/dist/chunk-IZHOMSXA.js.map +1 -0
- package/dist/chunk-JDUNWJFB.js +18 -0
- package/dist/chunk-JDUNWJFB.js.map +1 -0
- package/dist/index.cjs +4 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +66 -51
- package/dist/index.js +5 -11
- package/dist/index.js.map +1 -1
- package/internal/dist/index.cjs +187 -58
- package/internal/dist/index.cjs.map +1 -1
- package/internal/dist/index.d.ts +95 -71
- package/internal/dist/index.js +179 -53
- package/internal/dist/index.js.map +1 -1
- package/internal/src/arbitrary.ts +3 -0
- package/internal/src/atom/delete-atom.ts +7 -6
- package/internal/src/caching.ts +6 -4
- package/internal/src/families/find-in-store.ts +16 -0
- package/internal/src/get-environment-data.ts +4 -7
- package/internal/src/index.ts +6 -5
- package/internal/src/ingest-updates/ingest-atom-update.ts +6 -2
- package/internal/src/ingest-updates/ingest-transaction-update.ts +0 -1
- package/internal/src/selector/create-standalone-selector.ts +0 -2
- package/internal/src/set-state/copy-mutable-if-needed.ts +5 -0
- package/internal/src/set-state/emit-update.ts +25 -11
- package/internal/src/set-state/set-atom.ts +15 -18
- package/internal/src/store/store.ts +14 -2
- package/internal/src/store/withdraw.ts +72 -2
- package/internal/src/subscribe/subscribe-to-timeline.ts +2 -2
- package/internal/src/subscribe/subscribe-to-transaction.ts +2 -2
- package/internal/src/timeline/create-timeline.ts +12 -1
- package/internal/src/transaction/act-upon-store.ts +19 -0
- package/internal/src/transaction/apply-transaction.ts +6 -1
- package/internal/src/transaction/assign-transaction-to-continuity.ts +18 -0
- package/internal/src/transaction/build-transaction.ts +7 -6
- package/internal/src/transaction/create-transaction.ts +1 -1
- package/internal/src/transaction/get-epoch-number.ts +40 -0
- package/internal/src/transaction/index.ts +10 -1
- package/internal/src/transaction/set-epoch-number.ts +30 -0
- package/introspection/dist/index.cjs.map +1 -1
- package/introspection/dist/index.d.ts +3 -3
- package/introspection/dist/index.js.map +1 -1
- package/introspection/src/attach-introspection-states.ts +6 -2
- package/introspection/src/attach-timeline-family.ts +5 -2
- package/introspection/src/attach-transaction-logs.ts +2 -2
- package/json/dist/index.d.ts +3 -1
- package/json/src/index.ts +4 -0
- package/package.json +241 -230
- package/react/dist/index.cjs.map +1 -1
- package/react/dist/index.d.ts +1 -1
- package/react/dist/index.js.map +1 -1
- package/react/src/use-json.ts +1 -1
- package/react-devtools/dist/index.cjs +131 -134
- package/react-devtools/dist/index.cjs.map +1 -1
- package/react-devtools/dist/index.css +2 -2
- package/react-devtools/dist/index.css.map +1 -1
- package/react-devtools/dist/index.d.ts +3 -3
- package/react-devtools/dist/index.js +91 -108
- package/react-devtools/dist/index.js.map +1 -1
- package/react-devtools/src/StateEditor.tsx +4 -4
- package/react-devtools/src/StateIndex.tsx +1 -4
- package/react-devtools/src/TimelineIndex.tsx +3 -3
- package/react-devtools/src/TransactionIndex.tsx +9 -8
- package/react-devtools/src/index.ts +2 -2
- package/realtime/dist/index.cjs +120 -0
- package/realtime/dist/index.cjs.map +1 -0
- package/realtime/dist/index.d.ts +146 -0
- package/realtime/dist/index.js +111 -0
- package/realtime/dist/index.js.map +1 -0
- package/realtime/package.json +16 -0
- package/realtime/src/index.ts +2 -0
- package/realtime/src/realtime-continuity.ts +162 -0
- package/realtime/src/shared-room-store.ts +48 -0
- package/realtime-client/dist/index.cjs +424 -170
- package/realtime-client/dist/index.cjs.map +1 -1
- package/realtime-client/dist/index.d.ts +15 -11
- package/realtime-client/dist/index.js +96 -177
- package/realtime-client/dist/index.js.map +1 -1
- package/realtime-client/src/index.ts +8 -7
- package/realtime-client/src/{pull-family-member.ts → pull-atom-family-member.ts} +2 -2
- package/realtime-client/src/{pull-state.ts → pull-atom.ts} +2 -2
- package/realtime-client/src/{pull-mutable-family-member.ts → pull-mutable-atom-family-member.ts} +6 -6
- package/realtime-client/src/{pull-mutable.ts → pull-mutable-atom.ts} +1 -1
- package/realtime-client/src/pull-selector-family-member.ts +42 -0
- package/realtime-client/src/pull-selector.ts +38 -0
- package/realtime-client/src/realtime-client-stores/client-main-store.ts +12 -2
- package/realtime-client/src/realtime-client-stores/client-sync-store.ts +7 -7
- package/realtime-client/src/sync-continuity.ts +368 -0
- package/realtime-react/dist/index.cjs +367 -27
- package/realtime-react/dist/index.cjs.map +1 -1
- package/realtime-react/dist/index.d.ts +24 -8
- package/realtime-react/dist/index.js +38 -22
- package/realtime-react/dist/index.js.map +1 -1
- package/realtime-react/src/index.ts +6 -5
- package/realtime-react/src/use-pull-atom-family-member.ts +21 -0
- package/realtime-react/src/{use-sync.ts → use-pull-atom.ts} +4 -4
- package/realtime-react/src/{use-pull-mutable.ts → use-pull-mutable-atom.ts} +4 -3
- package/realtime-react/src/use-pull-mutable-family-member.ts +9 -4
- package/realtime-react/src/use-pull-selector-family-member.ts +21 -0
- package/realtime-react/src/{use-pull.ts → use-pull-selector.ts} +7 -5
- package/realtime-react/src/use-push.ts +3 -2
- package/realtime-react/src/use-server-action.ts +3 -2
- package/realtime-react/src/use-sync-continuity.ts +12 -0
- package/realtime-server/dist/index.cjs +769 -371
- package/realtime-server/dist/index.cjs.map +1 -1
- package/realtime-server/dist/index.d.ts +130 -60
- package/realtime-server/dist/index.js +753 -361
- package/realtime-server/dist/index.js.map +1 -1
- package/realtime-server/src/index.ts +17 -3
- package/realtime-server/src/ipc-sockets/child-socket.ts +135 -0
- package/realtime-server/src/ipc-sockets/custom-socket.ts +90 -0
- package/realtime-server/src/ipc-sockets/index.ts +3 -0
- package/realtime-server/src/ipc-sockets/parent-socket.ts +185 -0
- package/realtime-server/src/realtime-action-receiver.ts +8 -5
- package/realtime-server/src/realtime-continuity-synchronizer.ts +376 -0
- package/realtime-server/src/realtime-family-provider.ts +30 -71
- package/realtime-server/src/realtime-mutable-family-provider.ts +24 -86
- package/realtime-server/src/realtime-server-stores/index.ts +4 -1
- package/realtime-server/src/realtime-server-stores/realtime-continuity-store.ts +109 -0
- package/realtime-server/src/realtime-server-stores/server-room-external-actions.ts +64 -0
- package/realtime-server/src/realtime-server-stores/server-room-external-store.ts +42 -0
- package/realtime-server/src/realtime-server-stores/server-sync-store.ts +51 -98
- package/realtime-server/src/realtime-server-stores/server-user-store.ts +14 -29
- package/realtime-server/src/realtime-state-receiver.ts +0 -1
- package/realtime-testing/dist/index.cjs +34 -32
- package/realtime-testing/dist/index.cjs.map +1 -1
- package/realtime-testing/dist/index.d.ts +1 -0
- package/realtime-testing/dist/index.js +33 -31
- package/realtime-testing/dist/index.js.map +1 -1
- package/realtime-testing/src/setup-realtime-test.tsx +44 -32
- package/src/atom.ts +49 -31
- package/src/logger.ts +14 -5
- package/src/selector.ts +44 -25
- package/src/subscribe.ts +2 -1
- package/src/timeline.ts +4 -4
- package/src/transaction.ts +13 -17
- package/src/validators.ts +15 -9
- package/dist/chunk-H4Q5FTPZ.js +0 -11
- package/dist/chunk-H4Q5FTPZ.js.map +0 -1
- package/internal/src/set-state/copy-mutable-in-transaction.ts +0 -19
- package/realtime-client/src/sync-server-action.ts +0 -170
- package/realtime-client/src/sync-state.ts +0 -19
- package/realtime-react/src/use-pull-family-member.ts +0 -16
- package/realtime-react/src/use-sync-server-action.ts +0 -16
- package/realtime-server/src/realtime-action-synchronizer.ts +0 -152
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// __unstable__/web-effects/src/storage.ts
|
|
2
|
+
var persistAtom = (storage) => ({ stringify, parse }) => (key) => ({ setSelf, onSet }) => {
|
|
3
|
+
const savedValue = storage.getItem(key);
|
|
4
|
+
if (savedValue != null)
|
|
5
|
+
setSelf(parse(savedValue));
|
|
6
|
+
onSet(({ newValue }) => {
|
|
7
|
+
if (newValue == null) {
|
|
8
|
+
storage.removeItem(key);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
storage.setItem(key, stringify(newValue));
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
var lazyLocalStorageEffect = persistAtom(localStorage)(JSON);
|
|
15
|
+
|
|
16
|
+
export { lazyLocalStorageEffect };
|
|
17
|
+
//# sourceMappingURL=out.js.map
|
|
18
|
+
//# sourceMappingURL=chunk-JDUNWJFB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../__unstable__/web-effects/src/storage.ts"],"names":[],"mappings":";AAQO,IAAM,cACZ,CAAI,YACJ,CAAC,EAAE,WAAW,MAAM,MACpB,CAAC,QACD,CAAC,EAAE,SAAS,MAAM,MAAM;AACvB,QAAM,aAAa,QAAQ,QAAQ,GAAG;AAEtC,MAAI,cAAc;AAAM,YAAQ,MAAM,UAAU,CAAC;AAEjD,QAAM,CAAC,EAAE,SAAS,MAAM;AACvB,QAAI,YAAY,MAAM;AACrB,cAAQ,WAAW,GAAG;AACtB;AAAA,IACD;AACA,YAAQ,QAAQ,KAAK,UAAU,QAAQ,CAAC;AAAA,EACzC,CAAC;AACF;AAEM,IAAM,yBAEQ,YAAY,YAAY,EAAE,IAAI","sourcesContent":["import type { AtomEffect } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nexport type StringInterface<T> = {\n\tstringify: (t: T) => string\n\tparse: (s: string) => T\n}\n\nexport const persistAtom =\n\t<T>(storage: Storage) =>\n\t({ stringify, parse }: StringInterface<T>) =>\n\t(key: string): AtomEffect<T> =>\n\t({ setSelf, onSet }) => {\n\t\tconst savedValue = storage.getItem(key)\n\n\t\tif (savedValue != null) setSelf(parse(savedValue))\n\n\t\tonSet(({ newValue }) => {\n\t\t\tif (newValue == null) {\n\t\t\t\tstorage.removeItem(key)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tstorage.setItem(key, stringify(newValue))\n\t\t})\n\t}\n\nexport const lazyLocalStorageEffect: <J extends Json.Serializable>(\n\tkey: string,\n) => AtomEffect<J> = persistAtom(localStorage)(JSON)\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -118,7 +118,7 @@ var Silo = class {
|
|
|
118
118
|
this.redo = (token) => Internal.timeTravel(`redo`, token, s);
|
|
119
119
|
}
|
|
120
120
|
};
|
|
121
|
-
function subscribe(token, handleUpdate, key =
|
|
121
|
+
function subscribe(token, handleUpdate, key = Internal.arbitrary(), store = Internal.IMPLICIT.STORE) {
|
|
122
122
|
switch (token.type) {
|
|
123
123
|
case `atom`:
|
|
124
124
|
case `mutable_atom`:
|
|
@@ -143,15 +143,9 @@ var undo = (timeline2) => {
|
|
|
143
143
|
function transaction(options) {
|
|
144
144
|
return Internal.createTransaction(options, Internal.IMPLICIT.STORE);
|
|
145
145
|
}
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return tx.run(parameters, id);
|
|
150
|
-
}
|
|
151
|
-
throw new Error(
|
|
152
|
-
`Cannot run transaction "${token.key}": transaction not found in store "${store.config.name}".`
|
|
153
|
-
);
|
|
154
|
-
};
|
|
146
|
+
function runTransaction(token, id = Internal.arbitrary()) {
|
|
147
|
+
return Internal.actUponStore(token, id, Internal.IMPLICIT.STORE);
|
|
148
|
+
}
|
|
155
149
|
|
|
156
150
|
// src/validators.ts
|
|
157
151
|
function isToken(knownToken, unknownToken) {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/atom.ts","../src/dispose.ts","../src/find-state.ts","../src/get-state.ts","../src/logger.ts","../src/selector.ts","../src/set-state.ts","../src/silo.ts","../src/subscribe.ts","../src/timeline.ts","../src/transaction.ts","../src/validators.ts"],"names":["IMPLICIT","Internal","createAtomFamily","createSelectorFamily","createStandaloneAtom","createStandaloneSelector","getFromStore","setIntoStore","createTimeline","timeTravel","timeline","createTransaction"],"mappings":"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","sourcesContent":["import type { Store, Subject, Transceiver } from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tcreateAtomFamily,\n\tcreateStandaloneAtom,\n} from \"atom.io/internal\"\nimport type { Json, JsonInterface } from \"atom.io/json\"\n\nimport type { AtomToken, MutableAtomToken, RegularAtomToken } from \".\"\n\nexport type Effectors<T> = {\n\tsetSelf: <V extends T>(next: V | ((oldValue: T) => V)) => void\n\tonSet: (callback: (options: { newValue: T; oldValue: T }) => void) => void\n}\n\nexport type AtomEffect<T> = (tools: Effectors<T>) => (() => void) | void\n\nexport type RegularAtomOptions<T> = {\n\tkey: string\n\tdefault: T | (() => T)\n\teffects?: AtomEffect<T>[]\n}\n// biome-ignore format: complex intersection\nexport type MutableAtomOptions<T extends Transceiver<any>, J extends Json.Serializable> = \n\t& JsonInterface<T, J>\n\t& Omit<RegularAtomOptions<T>, `default`> \n\t& { \n\t\t\tdefault: ()\t=> T\n\t\t\tmutable: true\n\t\t}\n\nexport function atom<T extends Transceiver<any>, J extends Json.Serializable>(\n\toptions: MutableAtomOptions<T, J>,\n): MutableAtomToken<T, J>\nexport function atom<T>(options: RegularAtomOptions<T>): RegularAtomToken<T>\nexport function atom(\n\toptions: MutableAtomOptions<any, any> | RegularAtomOptions<any>,\n): AtomToken<any> {\n\treturn createStandaloneAtom(options, IMPLICIT.STORE)\n}\n\nexport type RegularAtomFamilyOptions<T, K extends Json.Serializable> = {\n\tkey: string\n\tdefault: T | ((key: K) => T)\n\teffects?: (key: K) => AtomEffect<T>[]\n}\n\nexport type RegularAtomFamily<\n\tT,\n\tK extends Json.Serializable = Json.Serializable,\n> = ((key: K) => RegularAtomToken<T>) & {\n\tkey: string\n\ttype: `atom_family`\n\tsubject: Subject<RegularAtomToken<T>>\n\tinstall: (store: Store) => void\n\t__T?: T\n\t__K?: K\n}\nexport type RegularAtomFamilyToken<T, K extends Json.Serializable> = {\n\tkey: string\n\ttype: `atom_family`\n\t__T?: T\n\t__K?: K\n}\n\n// biome-ignore format: intersection\nexport type MutableAtomFamilyOptions<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n> = \n\t& JsonInterface<T, J>\n\t& { \n\t\tkey: string\n\t\tdefault: (key: K) => T\n\t\teffects?: (key: K) => AtomEffect<T>[]\n\t\tmutable: true,\n\t}\n\n// biome-ignore format: intersection\nexport type MutableAtomFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n> = \n\t& JsonInterface<T, J>\n\t& ((key: K) => MutableAtomToken<T, J>) \n\t& {\n\t\t\tkey: string\n\t\t\ttype: `mutable_atom_family`\n\t\t\tsubject: Subject<MutableAtomToken<T, J>>\n\t\t\tinstall: (store: Store) => void\n\t\t\t__T?: T\n\t\t\t__J?: J\n\t\t\t__K?: K\n\t\t}\nexport type MutableAtomFamilyToken<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n> = {\n\tkey: string\n\ttype: `mutable_atom_family`\n\t__T?: T\n\t__J?: J\n\t__K?: K\n}\n\nexport type AtomFamily<T, K extends Json.Serializable = Json.Serializable> =\n\t| MutableAtomFamily<T extends Transceiver<any> ? T : never, any, K>\n\t| RegularAtomFamily<T, K>\nexport type AtomFamilyToken<T, K extends Json.Serializable = Json.Serializable> =\n\t| MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, any, K>\n\t| RegularAtomFamilyToken<T, K>\n\nexport function atomFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n>(options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamily<T, J, K>\nexport function atomFamily<T, K extends Json.Serializable>(\n\toptions: RegularAtomFamilyOptions<T, K>,\n): RegularAtomFamily<T, K>\nexport function atomFamily<T, K extends Json.Serializable>(\n\toptions:\n\t\t| MutableAtomFamilyOptions<any, any, any>\n\t\t| RegularAtomFamilyOptions<T, K>,\n): MutableAtomFamily<any, any, any> | RegularAtomFamily<T, K> {\n\treturn createAtomFamily(options, IMPLICIT.STORE)\n}\n","import * as Internal from \"atom.io/internal\"\n\nimport type { ReadableToken } from \".\"\n\nexport function dispose(\n\ttoken: ReadableToken<any>,\n\tstore: Internal.Store = Internal.IMPLICIT.STORE,\n): void {\n\tswitch (token.type) {\n\t\tcase `atom`:\n\t\t\tInternal.deleteAtom(token, store)\n\t\t\tbreak\n\t\tcase `selector`:\n\t\tcase `readonly_selector`:\n\t\t\tInternal.deleteSelector(token, store)\n\t\t\tbreak\n\t}\n}\n","import type {\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tWritableFamilyToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { IMPLICIT, findInStore } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport function findState<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n\tKey extends K,\n>(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: RegularAtomFamilyToken<T, K>,\n\tkey: Key,\n): RegularAtomToken<T>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: WritableSelectorFamilyToken<T, K>,\n\tkey: Key,\n): WritableSelectorToken<T>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: ReadonlySelectorFamilyToken<T, K>,\n\tkey: Key,\n): ReadonlySelectorToken<T>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: WritableFamilyToken<T, K>,\n\tkey: Key,\n): WritableToken<T>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: ReadableFamilyToken<T, K>,\n\tkey: Key,\n): ReadableToken<T>\n\nexport function findState(\n\ttoken: ReadableFamilyToken<any, any>,\n\tkey: Json.Serializable,\n): ReadableToken<any> {\n\tconst state = findInStore(token, key, IMPLICIT.STORE)\n\treturn state\n}\n","import * as Internal from \"atom.io/internal\"\n\nimport type { ReadableToken } from \".\"\n\nexport function getState<T>(token: ReadableToken<T>): T {\n\treturn Internal.getFromStore(token, Internal.IMPLICIT.STORE)\n}\n","const LoggerIconDictionary = {\n\t\"⌛\": `Timeline event fully captured`,\n\t\"⏩\": `Timeline redo`,\n\t\"⏪\": `Timeline undo`,\n\t\"⏭️\": `Transaction redo`,\n\t\"⏮️\": `Transaction undo`,\n\t\"⏳\": `Timeline event partially captured`,\n\t\"⏹️\": `Time-travel complete`,\n\t\"💁\": `Notice`,\n\t\"🔄\": `Realtime transaction synchronized`,\n\t\"✅\": `Realtime transaction success`,\n\t\"✨\": `Computation complete`,\n\t\"❌\": `Conflict prevents attempted action`,\n\t\"⭕\": `Operation start`,\n\t\"🐞\": `Possible bug in AtomIO`,\n\t\"👀\": `Subscription added`,\n\t\"👪\": `Family member added`,\n\t\"📁\": `Stow update`,\n\t\"📃\": `Copy mutable`,\n\t\"📖\": `Read state`,\n\t\"📝\": `Write state`,\n\t\"📢\": `Notify subscribers`,\n\t\"🔌\": `Register dependency`,\n\t\"🔍\": `Discover root`,\n\t\"🔥\": `Delete state`,\n\t\"🔧\": `Create mutable atom`,\n\t\"🔨\": `Create immutable atom`,\n\t\"🔴\": `Operation complete`,\n\t\"🗑\": `Evict cached value`,\n\t\"💥\": `Caught`,\n\t\"🙈\": `Subscription canceled`,\n\t\"🛄\": `Apply transaction`,\n\t\"🛠️\": `Install atom into store`,\n\t\"🛫\": `Begin transaction`,\n\t\"🛬\": `Complete transaction`,\n\t\"🧮\": `Computing selector`,\n\t\"🧹\": `Prepare to evict`,\n\t\"🪂\": `Abort transaction`,\n\t\"🚀\": `Performance measure`,\n} as const\nexport type LoggerIcon = keyof typeof LoggerIconDictionary\nexport type TokenDenomination =\n\t| `atom`\n\t| `mutable_atom`\n\t| `readonly_selector`\n\t| `realtime_sync_group`\n\t| `selector`\n\t| `state`\n\t| `timeline`\n\t| `transaction`\n\t| `unknown`\n\nexport const LOG_LEVELS = [`info`, `warn`, `error`] as const\nexport type LogLevel = (typeof LOG_LEVELS)[number]\n\nexport type LogFn = (\n\ticon: LoggerIcon,\n\tdenomination: TokenDenomination,\n\ttokenKey: string,\n\tmessage: string,\n\t...rest: unknown[]\n) => void\nexport type LogFilter = (...params: Parameters<LogFn>) => boolean\n\nexport type Logger = Record<LogLevel, LogFn>\n\nexport const simpleLog =\n\t(logLevel: keyof Logger): LogFn =>\n\t(icon, denomination, tokenKey, message, ...rest) => {\n\t\tconsole[logLevel](\n\t\t\t`${icon} ${denomination} \"${tokenKey}\" ${message}`,\n\t\t\t...rest,\n\t\t)\n\t}\nexport const simpleLogger: Logger = {\n\terror: simpleLog(`error`),\n\tinfo: simpleLog(`info`),\n\twarn: simpleLog(`warn`),\n}\n\nexport class AtomIOLogger implements Logger {\n\tpublic constructor(\n\t\tpublic logLevel: `error` | `info` | `warn` | null,\n\t\tprivate readonly filter?: LogFilter,\n\t\tprivate readonly logger: Logger = simpleLogger,\n\t) {}\n\n\tpublic error: LogFn = (...args) => {\n\t\tif ((this.filter?.(...args) ?? true) && this.logLevel !== null) {\n\t\t\tthis.logger.error(...args)\n\t\t}\n\t}\n\tpublic info: LogFn = (...args) => {\n\t\tif ((this.filter?.(...args) ?? true) && this.logLevel === `info`) {\n\t\t\tthis.logger.info(...args)\n\t\t}\n\t}\n\tpublic warn: LogFn = (...args) => {\n\t\tif (\n\t\t\t(this.filter?.(...args) ?? true) &&\n\t\t\tthis.logLevel !== `error` &&\n\t\t\tthis.logLevel !== null\n\t\t) {\n\t\t\tthis.logger.warn(...args)\n\t\t}\n\t}\n}\n","import type { Store, Subject } from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tcreateSelectorFamily,\n\tcreateStandaloneSelector,\n} from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { ReadonlySelectorToken, WritableSelectorToken } from \".\"\nimport type { Read, Write } from \"./transaction\"\n\nexport type WritableSelectorOptions<T> = {\n\tkey: string\n\tget: Read<() => T>\n\tset: Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorOptions<T> = {\n\tkey: string\n\tget: Read<() => T>\n}\n\nexport function selector<T>(\n\toptions: WritableSelectorOptions<T>,\n): WritableSelectorToken<T>\nexport function selector<T>(\n\toptions: ReadonlySelectorOptions<T>,\n): ReadonlySelectorToken<T>\nexport function selector<T>(\n\toptions: ReadonlySelectorOptions<T> | WritableSelectorOptions<T>,\n): ReadonlySelectorToken<T> | WritableSelectorToken<T> {\n\treturn createStandaloneSelector(options, IMPLICIT.STORE)\n}\n\nexport type WritableSelectorFamilyOptions<T, K extends Json.Serializable> = {\n\tkey: string\n\tget: (key: K) => Read<() => T>\n\tset: (key: K) => Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorFamilyOptions<T, K extends Json.Serializable> = {\n\tkey: string\n\tget: (key: K) => Read<() => T>\n}\n\nexport type WritableSelectorFamily<\n\tT,\n\tK extends Json.Serializable = Json.Serializable,\n> = ((key: K) => WritableSelectorToken<T>) & {\n\tkey: string\n\ttype: `selector_family`\n\tsubject: Subject<WritableSelectorToken<T>>\n\tinstall: (store: Store) => void\n\t__T?: T\n\t__K?: K\n}\nexport type WritableSelectorFamilyToken<T, K extends Json.Serializable> = {\n\tkey: string\n\ttype: `selector_family`\n\t__T?: T\n\t__K?: K\n}\n\nexport type ReadonlySelectorFamily<\n\tT,\n\tK extends Json.Serializable = Json.Serializable,\n> = ((key: K) => ReadonlySelectorToken<T>) & {\n\tkey: string\n\ttype: `readonly_selector_family`\n\tsubject: Subject<ReadonlySelectorToken<T>>\n\tinstall: (store: Store) => void\n\t__T?: T\n\t__K?: K\n}\nexport type ReadonlySelectorFamilyToken<T, K extends Json.Serializable> = {\n\tkey: string\n\ttype: `readonly_selector_family`\n\t__T?: T\n\t__K?: K\n}\n\nexport type SelectorFamily<T, K extends Json.Serializable> =\n\t| ReadonlySelectorFamily<T, K>\n\t| WritableSelectorFamily<T, K>\nexport type SelectorFamilyToken<T, K extends Json.Serializable> =\n\t| ReadonlySelectorFamilyToken<T, K>\n\t| WritableSelectorFamilyToken<T, K>\n\nexport function selectorFamily<T, K extends Json.Serializable>(\n\toptions: WritableSelectorFamilyOptions<T, K>,\n): WritableSelectorFamily<T, K>\nexport function selectorFamily<T, K extends Json.Serializable>(\n\toptions: ReadonlySelectorFamilyOptions<T, K>,\n): ReadonlySelectorFamily<T, K>\nexport function selectorFamily<T, K extends Json.Serializable>(\n\toptions:\n\t\t| ReadonlySelectorFamilyOptions<T, K>\n\t\t| WritableSelectorFamilyOptions<T, K>,\n): ReadonlySelectorFamily<T, K> | WritableSelectorFamily<T, K> {\n\treturn createSelectorFamily(options, IMPLICIT.STORE)\n}\n","import * as Internal from \"atom.io/internal\"\n\nimport type { WritableToken } from \".\"\n\nexport function setState<T, New extends T>(\n\ttoken: WritableToken<T>,\n\tvalue: New | ((oldValue: T) => New),\n): void {\n\tInternal.setIntoStore(token, value, Internal.IMPLICIT.STORE)\n}\n","import type { Transceiver } from \"atom.io/internal\"\nimport {\n\tStore,\n\tcreateAtomFamily,\n\tcreateSelectorFamily,\n\tcreateStandaloneAtom,\n\tcreateStandaloneSelector,\n\tcreateTimeline,\n\tcreateTransaction,\n\tgetFromStore,\n\tsetIntoStore,\n\ttimeTravel,\n} from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nimport type {\n\tAtomToken,\n\tMutableAtomFamily,\n\tMutableAtomFamilyOptions,\n\tMutableAtomOptions,\n\tMutableAtomToken,\n\tRegularAtomFamily,\n\tRegularAtomFamilyOptions,\n\tRegularAtomOptions,\n\tRegularAtomToken,\n\tgetState,\n\tredo,\n\tsetState,\n\ttimeline,\n\tundo,\n} from \".\"\nimport { subscribe } from \".\"\nimport type { atom, atomFamily } from \"./atom\"\nimport type { selector, selectorFamily } from \"./selector\"\nimport type { transaction } from \"./transaction\"\n\nexport class Silo {\n\tpublic store: Store\n\tpublic atom: typeof atom\n\tpublic atomFamily: typeof atomFamily\n\tpublic selector: typeof selector\n\tpublic selectorFamily: typeof selectorFamily\n\tpublic transaction: typeof transaction\n\tpublic timeline: typeof timeline\n\tpublic getState: typeof getState\n\tpublic setState: typeof setState\n\tpublic subscribe: typeof subscribe\n\tpublic undo: typeof undo\n\tpublic redo: typeof redo\n\tpublic constructor(name: string, fromStore: Store | null = null) {\n\t\tconst s = new Store(name, fromStore)\n\t\tfunction _atom<T>(options: RegularAtomOptions<T>): RegularAtomToken<T>\n\t\tfunction _atom<T extends Transceiver<any>, J extends Json.Serializable>(\n\t\t\toptions: MutableAtomOptions<T, J>,\n\t\t): MutableAtomToken<T, J>\n\t\tfunction _atom<T>(\n\t\t\toptions: MutableAtomOptions<any, any> | RegularAtomOptions<T>,\n\t\t): AtomToken<T> {\n\t\t\treturn createStandaloneAtom(options, s)\n\t\t}\n\t\tfunction _atomFamily<\n\t\t\tT extends Transceiver<any>,\n\t\t\tJ extends Json.Serializable,\n\t\t\tK extends Json.Serializable,\n\t\t>(options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamily<T, J, K>\n\t\tfunction _atomFamily<T, K extends Json.Serializable>(\n\t\t\toptions: RegularAtomFamilyOptions<T, K>,\n\t\t): RegularAtomFamily<T, K>\n\t\tfunction _atomFamily<T, K extends Json.Serializable>(\n\t\t\toptions:\n\t\t\t\t| MutableAtomFamilyOptions<any, any, any>\n\t\t\t\t| RegularAtomFamilyOptions<T, K>,\n\t\t): MutableAtomFamily<any, any, any> | RegularAtomFamily<T, K> {\n\t\t\treturn createAtomFamily(options, s)\n\t\t}\n\t\tthis.store = s\n\t\tthis.atom = _atom\n\t\tthis.atomFamily = _atomFamily\n\t\tthis.selector = (options) => createStandaloneSelector(options, s) as any\n\t\tthis.selectorFamily = (options) => createSelectorFamily(options, s) as any\n\t\tthis.transaction = (options) => createTransaction(options, s)\n\t\tthis.timeline = (options) => createTimeline(options, s)\n\t\tthis.getState = (token) => getFromStore(token, s)\n\t\tthis.setState = (token, newValue) => setIntoStore(token, newValue, s)\n\t\tthis.subscribe = (token, handler, key) => subscribe(token, handler, key, s)\n\t\tthis.undo = (token) => timeTravel(`undo`, token, s)\n\t\tthis.redo = (token) => timeTravel(`redo`, token, s)\n\t}\n}\n","import type { Store } from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tsubscribeToState,\n\tsubscribeToTimeline,\n\tsubscribeToTransaction,\n} from \"atom.io/internal\"\n\nimport type {\n\tFamilyMetadata,\n\tReadableToken,\n\tTimelineManageable,\n\tTimelineToken,\n\tTimelineUpdate,\n\tTransactionToken,\n\tTransactionUpdate,\n\tƒn,\n} from \".\"\n\nexport type StateUpdate<T> = { newValue: T; oldValue: T }\nexport type KeyedStateUpdate<T> = StateUpdate<T> & {\n\tkey: string\n\tfamily?: FamilyMetadata\n}\nexport type UpdateHandler<T> = (update: StateUpdate<T>) => void\n\nexport type TransactionUpdateHandler<ƒ extends ƒn> = (\n\tdata: TransactionUpdate<ƒ>,\n) => void\n\nexport function subscribe<T>(\n\ttoken: ReadableToken<T>,\n\thandleUpdate: UpdateHandler<T>,\n\tkey?: string,\n\tstore?: Store,\n): () => void\nexport function subscribe<ƒ extends ƒn>(\n\ttoken: TransactionToken<ƒ>,\n\thandleUpdate: TransactionUpdateHandler<ƒ>,\n\tkey?: string,\n\tstore?: Store,\n): () => void\nexport function subscribe<M extends TimelineManageable>(\n\ttoken: TimelineToken<M>,\n\thandleUpdate: (update: TimelineUpdate<M> | `redo` | `undo`) => void,\n\tkey?: string,\n\tstore?: Store,\n): () => void\nexport function subscribe(\n\ttoken: ReadableToken<any> | TimelineToken<any> | TransactionToken<any>,\n\thandleUpdate: (update: any) => void,\n\tkey: string = Math.random().toString(36).slice(2),\n\tstore = IMPLICIT.STORE,\n): () => void {\n\tswitch (token.type) {\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\tcase `readonly_selector`:\n\t\tcase `selector`:\n\t\t\treturn subscribeToState(token, handleUpdate, key, store)\n\t\tcase `transaction`:\n\t\t\treturn subscribeToTransaction(token, handleUpdate, key, store)\n\t\tcase `timeline`:\n\t\t\treturn subscribeToTimeline(token, handleUpdate, key, store)\n\t}\n}\n","import type {\n\tTimeline,\n\tTimelineAtomUpdate,\n\tTimelineSelectorUpdate,\n\tTimelineTransactionUpdate,\n} from \"atom.io/internal\"\nimport { IMPLICIT, createTimeline, timeTravel } from \"atom.io/internal\"\n\nimport type { AtomFamily, AtomToken } from \".\"\n\nexport type TimelineManageable = AtomFamily<any, any> | AtomToken<any>\n\nexport type TimelineToken<_> = {\n\tkey: string\n\ttype: `timeline`\n\t__brand?: _\n}\n\nexport type TimelineOptions<ManagedAtom extends TimelineManageable> = {\n\tkey: string\n\tatoms: ManagedAtom[]\n\tshouldCapture?: (\n\t\tupdate: TimelineUpdate<ManagedAtom>,\n\t\ttimeline: Timeline<TimelineManageable>,\n\t) => boolean\n}\n\nexport type TimelineUpdate<ManagedAtom extends TimelineManageable> =\n\t| TimelineAtomUpdate<ManagedAtom>\n\t| TimelineSelectorUpdate<ManagedAtom>\n\t| TimelineTransactionUpdate\n\nexport const timeline = <ManagedAtom extends TimelineManageable>(\n\toptions: TimelineOptions<ManagedAtom>,\n): TimelineToken<ManagedAtom> => {\n\treturn createTimeline(options, IMPLICIT.STORE)\n}\n\nexport const redo = (timeline: TimelineToken<any>): void => {\n\ttimeTravel(`redo`, timeline, IMPLICIT.STORE)\n}\n\nexport const undo = (timeline: TimelineToken<any>): void => {\n\ttimeTravel(`undo`, timeline, IMPLICIT.STORE)\n}\n","import type { EnvironmentData, Store } from \"atom.io/internal\"\nimport { IMPLICIT, createTransaction, withdraw } from \"atom.io/internal\"\n\nimport type {\n\tKeyedStateUpdate,\n\tReadonlySelectorToken,\n\tWritableToken,\n\tfindState,\n\tƒn,\n} from \".\"\n\nexport type TransactionToken<F> = {\n\tkey: string\n\ttype: `transaction`\n\t__F?: F\n}\n\nexport type TransactionUpdateContent =\n\t| KeyedStateUpdate<unknown>\n\t| TransactionUpdate<ƒn>\n\nexport type TransactionUpdate<ƒ extends ƒn> = {\n\tkey: string\n\tid: string\n\tepoch: number\n\tupdates: TransactionUpdateContent[]\n\tparams: Parameters<ƒ>\n\toutput: ReturnType<ƒ>\n}\n\nexport type Transactors = Readonly<{\n\tget: <S>(state: ReadonlySelectorToken<S> | WritableToken<S>) => S\n\tset: <S, New extends S>(\n\t\tstate: WritableToken<S>,\n\t\tnewValue: New | ((oldValue: S) => New),\n\t) => void\n\tfind: typeof findState\n}>\nexport type TransactorsWithRunAndEnv = Readonly<{\n\tget: <S>(state: ReadonlySelectorToken<S> | WritableToken<S>) => S\n\tset: <S, New extends S>(\n\t\tstate: WritableToken<S>,\n\t\tnewValue: New | ((oldValue: S) => New),\n\t) => void\n\tfind: typeof findState\n\trun: typeof runTransaction\n\tenv: () => EnvironmentData\n}>\nexport type ReadonlyTransactors = Pick<Transactors, `find` | `get`>\n\nexport type Read<ƒ extends ƒn> = (\n\ttransactors: ReadonlyTransactors,\n\t...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type Write<ƒ extends ƒn> = (\n\ttransactors: Transactors,\n\t...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type Transact<ƒ extends ƒn> = (\n\ttransactors: TransactorsWithRunAndEnv,\n\t...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type TransactionOptions<ƒ extends ƒn> = {\n\tkey: string\n\tdo: Transact<ƒ>\n}\n\nexport type TransactionIO<Token extends TransactionToken<any>> =\n\tToken extends TransactionToken<infer ƒ> ? ƒ : never\n\nexport function transaction<ƒ extends ƒn>(\n\toptions: TransactionOptions<ƒ>,\n): TransactionToken<ƒ> {\n\treturn createTransaction(options, IMPLICIT.STORE)\n}\n\nexport const runTransaction =\n\t<ƒ extends ƒn>(\n\t\ttoken: TransactionToken<ƒ>,\n\t\tid?: string,\n\t\tstore: Store = IMPLICIT.STORE,\n\t) =>\n\t(...parameters: Parameters<ƒ>): ReturnType<ƒ> => {\n\t\tconst tx = withdraw(token, store)\n\t\tif (tx) {\n\t\t\treturn tx.run(parameters, id)\n\t\t}\n\t\tthrow new Error(\n\t\t\t`Cannot run transaction \"${token.key}\": transaction not found in store \"${store.config.name}\".`,\n\t\t)\n\t}\n","import type {\n\tMutableAtomFamily,\n\tMutableAtomToken,\n\tReadableFamily,\n\tReadableToken,\n\tReadonlySelectorFamily,\n\tReadonlySelectorToken,\n\tRegularAtomFamily,\n\tRegularAtomToken,\n\tWritableFamily,\n\tWritableSelectorFamily,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\n\nexport type TokenType<\n\tComparison extends ReadableFamily<any, any> | ReadableToken<any>,\n> = Comparison extends ReadableToken<infer RepresentedValue>\n\t? RepresentedValue\n\t: Comparison extends ReadableFamily<infer RepresentedValue, any>\n\t ? RepresentedValue\n\t : never\n\nexport function isToken<KnownToken extends RegularAtomToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is RegularAtomToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends MutableAtomToken<any, any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is MutableAtomToken<TokenType<KnownToken>, any>\nexport function isToken<KnownToken extends WritableSelectorToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is WritableSelectorToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends ReadonlySelectorToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadonlySelectorToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends WritableToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is WritableToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends ReadableToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadableToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends ReadableToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadableToken<TokenType<KnownToken>> {\n\treturn knownToken.key === unknownToken.key\n}\n\nexport function belongsTo<Family extends RegularAtomFamily<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is RegularAtomToken<TokenType<Family>>\nexport function belongsTo<Family extends MutableAtomFamily<any, any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is MutableAtomToken<TokenType<Family>, any>\nexport function belongsTo<Family extends WritableSelectorFamily<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is WritableSelectorToken<TokenType<Family>>\nexport function belongsTo<Family extends ReadonlySelectorFamily<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadonlySelectorToken<TokenType<Family>>\nexport function belongsTo<Family extends WritableFamily<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is WritableToken<TokenType<Family>>\nexport function belongsTo<Family extends ReadableFamily<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadableToken<TokenType<Family>>\nexport function belongsTo<Family extends ReadableFamily<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadableToken<TokenType<Family>> {\n\treturn family.key === unknownToken.family?.key\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/atom.ts","../src/dispose.ts","../src/find-state.ts","../src/get-state.ts","../src/logger.ts","../src/selector.ts","../src/set-state.ts","../src/silo.ts","../src/subscribe.ts","../src/timeline.ts","../src/transaction.ts","../src/validators.ts"],"names":["IMPLICIT","Internal","createAtomFamily","createSelectorFamily","createStandaloneAtom","createStandaloneSelector","getFromStore","setIntoStore","createTimeline","timeTravel","timeline","arbitrary","createTransaction"],"mappings":"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","sourcesContent":["import type { Store, Subject, Transceiver } from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tcreateAtomFamily,\n\tcreateStandaloneAtom,\n} from \"atom.io/internal\"\nimport type { Json, JsonInterface } from \"atom.io/json\"\n\nimport type { AtomToken, MutableAtomToken, RegularAtomToken } from \".\"\n\nexport type Effectors<T> = {\n\tsetSelf: <V extends T>(next: V | ((oldValue: T) => V)) => void\n\tonSet: (callback: (options: { newValue: T; oldValue: T }) => void) => void\n}\n\nexport type AtomEffect<T> = (tools: Effectors<T>) => (() => void) | void\n\nexport type RegularAtomOptions<T> = {\n\tkey: string\n\tdefault: T | (() => T)\n\teffects?: AtomEffect<T>[]\n}\n// biome-ignore format: complex intersection\nexport type MutableAtomOptions<T extends Transceiver<any>, J extends Json.Serializable> = \n\t& JsonInterface<T, J>\n\t& Omit<RegularAtomOptions<T>, `default`> \n\t& { \n\t\t\tdefault: ()\t=> T\n\t\t\tmutable: true\n\t\t}\n\nexport function atom<T extends Transceiver<any>, J extends Json.Serializable>(\n\toptions: MutableAtomOptions<T, J>,\n): MutableAtomToken<T, J>\nexport function atom<T>(options: RegularAtomOptions<T>): RegularAtomToken<T>\nexport function atom(\n\toptions: MutableAtomOptions<any, any> | RegularAtomOptions<any>,\n): AtomToken<any> {\n\treturn createStandaloneAtom(options, IMPLICIT.STORE)\n}\n\nexport type RegularAtomFamilyOptions<T, K extends Json.Serializable> = {\n\tkey: string\n\tdefault: T | ((key: K) => T)\n\teffects?: (key: K) => AtomEffect<T>[]\n}\n\nexport type RegularAtomFamilyToken<T, K extends Json.Serializable> = {\n\tkey: string\n\ttype: `atom_family`\n\t__T?: T\n\t__K?: K\n}\n// biome-ignore format: intersection\nexport type RegularAtomFamilyTokenWithCall<\n\tT,\n\tK extends Json.Serializable,\n> = \n\t& RegularAtomFamilyToken<T, K>\n\t& {\n\t\t/** @deprecated Prefer the `findState`, `findInStore`, or `find` functions. */\n\t\t(key: K): RegularAtomToken<T>\n\t}\n// biome-ignore format: intersection\nexport type RegularAtomFamily<T, K extends Json.Serializable> = \n\t& RegularAtomFamilyToken<T, K>\n\t& {\n\t\t(key: K): RegularAtomToken<T>\n\t\tsubject: Subject<RegularAtomToken<T>>\n\t\tinstall: (store: Store) => void\n\t}\n\n// biome-ignore format: intersection\nexport type MutableAtomFamilyOptions<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n> = \n\t& JsonInterface<T, J>\n\t& { \n\t\tkey: string\n\t\tdefault: (key: K) => T\n\t\teffects?: (key: K) => AtomEffect<T>[]\n\t\tmutable: true,\n\t}\n\nexport type MutableAtomFamilyToken<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n> = {\n\tkey: string\n\ttype: `mutable_atom_family`\n\t__T?: T\n\t__J?: J\n\t__K?: K\n}\n// biome-ignore format: intersection\nexport type MutableAtomFamilyTokenWithCall<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n> = \n\t& MutableAtomFamilyToken<T, J, K>\n\t& {\n\t\t/** @deprecated Prefer the `findState`, `findInStore`, or `find` functions. */\n\t\t(key: K): MutableAtomToken<T, J>\n\t}\n// biome-ignore format: intersection\nexport type MutableAtomFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n> = \n\t& JsonInterface<T, J>\n\t& MutableAtomFamilyToken<T, J, K>\n\t& {\n\t\t\t(key: K): MutableAtomToken<T, J>\n\t\t\tsubject: Subject<MutableAtomToken<T, J>>\n\t\t\tinstall: (store: Store) => void\n\t\t}\n\nexport type AtomFamily<T, K extends Json.Serializable = Json.Serializable> =\n\t| MutableAtomFamily<T extends Transceiver<any> ? T : never, any, K>\n\t| RegularAtomFamily<T, K>\nexport type AtomFamilyToken<T, K extends Json.Serializable = Json.Serializable> =\n\t| MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, any, K>\n\t| RegularAtomFamilyToken<T, K>\n\nexport function atomFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n>(\n\toptions: MutableAtomFamilyOptions<T, J, K>,\n): MutableAtomFamilyTokenWithCall<T, J, K>\nexport function atomFamily<T, K extends Json.Serializable>(\n\toptions: RegularAtomFamilyOptions<T, K>,\n): RegularAtomFamilyTokenWithCall<T, K>\nexport function atomFamily<T, K extends Json.Serializable>(\n\toptions:\n\t\t| MutableAtomFamilyOptions<any, any, any>\n\t\t| RegularAtomFamilyOptions<T, K>,\n):\n\t| MutableAtomFamilyTokenWithCall<any, any, any>\n\t| RegularAtomFamilyTokenWithCall<T, K> {\n\treturn createAtomFamily(options, IMPLICIT.STORE)\n}\n","import * as Internal from \"atom.io/internal\"\n\nimport type { ReadableToken } from \".\"\n\nexport function dispose(\n\ttoken: ReadableToken<any>,\n\tstore: Internal.Store = Internal.IMPLICIT.STORE,\n): void {\n\tswitch (token.type) {\n\t\tcase `atom`:\n\t\t\tInternal.deleteAtom(token, store)\n\t\t\tbreak\n\t\tcase `selector`:\n\t\tcase `readonly_selector`:\n\t\t\tInternal.deleteSelector(token, store)\n\t\t\tbreak\n\t}\n}\n","import type {\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tWritableFamilyToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Transceiver } from \"atom.io/internal\"\nimport { IMPLICIT, findInStore } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport function findState<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Json.Serializable,\n\tKey extends K,\n>(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: RegularAtomFamilyToken<T, K>,\n\tkey: Key,\n): RegularAtomToken<T>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: WritableSelectorFamilyToken<T, K>,\n\tkey: Key,\n): WritableSelectorToken<T>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: ReadonlySelectorFamilyToken<T, K>,\n\tkey: Key,\n): ReadonlySelectorToken<T>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: WritableFamilyToken<T, K>,\n\tkey: Key,\n): WritableToken<T>\n\nexport function findState<T, K extends Json.Serializable, Key extends K>(\n\ttoken: ReadableFamilyToken<T, K>,\n\tkey: Key,\n): ReadableToken<T>\n\nexport function findState(\n\ttoken: ReadableFamilyToken<any, any>,\n\tkey: Json.Serializable,\n): ReadableToken<any> {\n\tconst state = findInStore(token, key, IMPLICIT.STORE)\n\treturn state\n}\n","import * as Internal from \"atom.io/internal\"\n\nimport type { ReadableToken } from \".\"\n\nexport function getState<T>(token: ReadableToken<T>): T {\n\treturn Internal.getFromStore(token, Internal.IMPLICIT.STORE)\n}\n","const LoggerIconDictionary = {\n\t\"⌛\": `Timeline event fully captured`,\n\t\"⏩\": `Timeline redo`,\n\t\"⏪\": `Timeline undo`,\n\t\"⏭️\": `Transaction redo`,\n\t\"⏮️\": `Transaction undo`,\n\t\"⏳\": `Timeline event partially captured`,\n\t\"⏹️\": `Time-travel complete`,\n\t\"✅\": `Realtime transaction success`,\n\t\"✨\": `Computation complete`,\n\t\"❌\": `Conflict prevents attempted action`,\n\t\"⭕\": `Operation start`,\n\t\"🐞\": `Possible bug in AtomIO`,\n\t\"👀\": `Subscription added`,\n\t\"👋\": `Greeting`,\n\t\"👍\": `Realtime acknowledgment`,\n\t\"👪\": `Family member added`,\n\t\"💁\": `Notice`,\n\t\"💥\": `Caught`,\n\t\"📁\": `Stow update`,\n\t\"📃\": `Copy mutable`,\n\t\"📖\": `Read state`,\n\t\"📝\": `Write state`,\n\t\"📢\": `Notify subscribers`,\n\t\"🔄\": `Realtime transaction synchronized`,\n\t\"🔌\": `Register dependency`,\n\t\"🔍\": `Discover root`,\n\t\"🔥\": `Delete state`,\n\t\"🔧\": `Create mutable atom`,\n\t\"🔨\": `Create immutable atom`,\n\t\"🔴\": `Operation complete`,\n\t\"🗑\": `Evict cached value`,\n\t\"🙈\": `Subscription canceled`,\n\t\"🚀\": `Performance measure`,\n\t\"🛄\": `Apply transaction`,\n\t\"🛠️\": `Install atom into store`,\n\t\"🛫\": `Begin transaction`,\n\t\"🛬\": `Complete transaction`,\n\t\"🧮\": `Computing selector`,\n\t\"🧹\": `Prepare to evict`,\n\t\"🪂\": `Abort transaction`,\n\t\"🤞\": `Realtime optimistic update enqueued`,\n\t\"👈\": `Realtime confirmed update enqueued`,\n\t\"🧑⚖️\": `Realtime update beginning reconciliation`,\n\t\"🛎️\": `Realtime transaction received`,\n\t\"🔭\": `Determining realtime perspective`,\n\t\"🖌\": `Redacting realtime update`,\n\t\"👁\": `Determining perspective`,\n} as const\nexport type LoggerIcon = keyof typeof LoggerIconDictionary\nexport type TokenDenomination =\n\t| `atom`\n\t| `continuity`\n\t| `mutable_atom`\n\t| `readonly_selector`\n\t| `selector`\n\t| `state`\n\t| `timeline`\n\t| `transaction`\n\t| `unknown`\n\nexport const LOG_LEVELS = [`info`, `warn`, `error`] as const\nexport type LogLevel = (typeof LOG_LEVELS)[number]\n\nexport type LogFn = (\n\ticon: LoggerIcon,\n\tdenomination: TokenDenomination,\n\ttokenKey: string,\n\tmessage: string,\n\t...rest: unknown[]\n) => void\nexport type LogFilter = (...params: Parameters<LogFn>) => boolean\n\nexport type Logger = Record<LogLevel, LogFn>\n\nexport const simpleLog =\n\t(logLevel: keyof Logger): LogFn =>\n\t(icon, denomination, tokenKey, message, ...rest) => {\n\t\tconsole[logLevel](\n\t\t\t`${icon} ${denomination} \"${tokenKey}\" ${message}`,\n\t\t\t...rest,\n\t\t)\n\t}\nexport const simpleLogger: Logger = {\n\terror: simpleLog(`error`),\n\tinfo: simpleLog(`info`),\n\twarn: simpleLog(`warn`),\n}\n\nexport class AtomIOLogger implements Logger {\n\tpublic constructor(\n\t\tpublic logLevel: `error` | `info` | `warn` | null,\n\t\tprivate readonly filter?: LogFilter,\n\t\tprivate readonly logger: Logger = simpleLogger,\n\t) {}\n\n\tpublic error: LogFn = (...args) => {\n\t\tif ((this.filter?.(...args) ?? true) && this.logLevel !== null) {\n\t\t\tthis.logger.error(...args)\n\t\t}\n\t}\n\tpublic info: LogFn = (...args) => {\n\t\tif ((this.filter?.(...args) ?? true) && this.logLevel === `info`) {\n\t\t\tthis.logger.info(...args)\n\t\t}\n\t}\n\tpublic warn: LogFn = (...args) => {\n\t\tif (\n\t\t\t(this.filter?.(...args) ?? true) &&\n\t\t\tthis.logLevel !== `error` &&\n\t\t\tthis.logLevel !== null\n\t\t) {\n\t\t\tthis.logger.warn(...args)\n\t\t}\n\t}\n}\n","import type { Store, Subject } from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tcreateSelectorFamily,\n\tcreateStandaloneSelector,\n} from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { ReadonlySelectorToken, WritableSelectorToken } from \".\"\nimport type { Read, Write } from \"./transaction\"\n\nexport type WritableSelectorOptions<T> = {\n\tkey: string\n\tget: Read<() => T>\n\tset: Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorOptions<T> = {\n\tkey: string\n\tget: Read<() => T>\n}\n\nexport function selector<T>(\n\toptions: WritableSelectorOptions<T>,\n): WritableSelectorToken<T>\nexport function selector<T>(\n\toptions: ReadonlySelectorOptions<T>,\n): ReadonlySelectorToken<T>\nexport function selector<T>(\n\toptions: ReadonlySelectorOptions<T> | WritableSelectorOptions<T>,\n): ReadonlySelectorToken<T> | WritableSelectorToken<T> {\n\treturn createStandaloneSelector(options, IMPLICIT.STORE)\n}\n\nexport type WritableSelectorFamilyOptions<T, K extends Json.Serializable> = {\n\tkey: string\n\tget: (key: K) => Read<() => T>\n\tset: (key: K) => Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorFamilyOptions<T, K extends Json.Serializable> = {\n\tkey: string\n\tget: (key: K) => Read<() => T>\n}\n\nexport type WritableSelectorFamilyToken<T, K extends Json.Serializable> = {\n\tkey: string\n\ttype: `selector_family`\n\t__T?: T\n\t__K?: K\n}\n// biome-ignore format: intersection\nexport type WritableSelectorFamilyTokenWithCall<\n\tT,\n\tK extends Json.Serializable,\n> = \n\t& WritableSelectorFamilyToken<T, K>\n\t& {\n\t\t/** @deprecated Prefer the `findState`, `findInStore`, or `find` functions. */\n\t\t(key: K): WritableSelectorToken<T>\n\t}\n// biome-ignore format: intersection\nexport type WritableSelectorFamily<T, K extends Json.Serializable> = \n\t& WritableSelectorFamilyToken<T, K> \n\t& {\n\t\t(key: K): WritableSelectorToken<T>\n\t\tsubject: Subject<WritableSelectorToken<T>>\n\t\tinstall: (store: Store) => void\n\t}\n\nexport type ReadonlySelectorFamilyToken<T, K extends Json.Serializable> = {\n\tkey: string\n\ttype: `readonly_selector_family`\n\t__T?: T\n\t__K?: K\n}\n// biome-ignore format: intersection\nexport type ReadonlySelectorFamilyTokenWithCall<\n\tT,\n\tK extends Json.Serializable,\n> = \n\t& ReadonlySelectorFamilyToken<T, K>\n\t& {\n\t\t/** @deprecated Prefer the `findState`, `findInStore`, or `find` functions. */\n\t\t(key: K): ReadonlySelectorToken<T>\n\t}\n// biome-ignore format: intersection\nexport type ReadonlySelectorFamily<T, K extends Json.Serializable> = \n\t& ((key: K) => ReadonlySelectorToken<T>)\n\t& {\n\t\tkey: string\n\t\ttype: `readonly_selector_family`\n\t\tsubject: Subject<ReadonlySelectorToken<T>>\n\t\tinstall: (store: Store) => void\n\t\t__T?: T\n\t\t__K?: K\n\t}\n\nexport type SelectorFamily<T, K extends Json.Serializable> =\n\t| ReadonlySelectorFamily<T, K>\n\t| WritableSelectorFamily<T, K>\nexport type SelectorFamilyToken<T, K extends Json.Serializable> =\n\t| ReadonlySelectorFamilyToken<T, K>\n\t| WritableSelectorFamilyToken<T, K>\n\nexport function selectorFamily<T, K extends Json.Serializable>(\n\toptions: WritableSelectorFamilyOptions<T, K>,\n): WritableSelectorFamilyTokenWithCall<T, K>\nexport function selectorFamily<T, K extends Json.Serializable>(\n\toptions: ReadonlySelectorFamilyOptions<T, K>,\n): ReadonlySelectorFamilyTokenWithCall<T, K>\nexport function selectorFamily<T, K extends Json.Serializable>(\n\toptions:\n\t\t| ReadonlySelectorFamilyOptions<T, K>\n\t\t| WritableSelectorFamilyOptions<T, K>,\n):\n\t| ReadonlySelectorFamilyTokenWithCall<T, K>\n\t| WritableSelectorFamilyTokenWithCall<T, K> {\n\treturn createSelectorFamily(options, IMPLICIT.STORE)\n}\n","import * as Internal from \"atom.io/internal\"\n\nimport type { WritableToken } from \".\"\n\nexport function setState<T, New extends T>(\n\ttoken: WritableToken<T>,\n\tvalue: New | ((oldValue: T) => New),\n): void {\n\tInternal.setIntoStore(token, value, Internal.IMPLICIT.STORE)\n}\n","import type { Transceiver } from \"atom.io/internal\"\nimport {\n\tStore,\n\tcreateAtomFamily,\n\tcreateSelectorFamily,\n\tcreateStandaloneAtom,\n\tcreateStandaloneSelector,\n\tcreateTimeline,\n\tcreateTransaction,\n\tgetFromStore,\n\tsetIntoStore,\n\ttimeTravel,\n} from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nimport type {\n\tAtomToken,\n\tMutableAtomFamily,\n\tMutableAtomFamilyOptions,\n\tMutableAtomOptions,\n\tMutableAtomToken,\n\tRegularAtomFamily,\n\tRegularAtomFamilyOptions,\n\tRegularAtomOptions,\n\tRegularAtomToken,\n\tgetState,\n\tredo,\n\tsetState,\n\ttimeline,\n\tundo,\n} from \".\"\nimport { subscribe } from \".\"\nimport type { atom, atomFamily } from \"./atom\"\nimport type { selector, selectorFamily } from \"./selector\"\nimport type { transaction } from \"./transaction\"\n\nexport class Silo {\n\tpublic store: Store\n\tpublic atom: typeof atom\n\tpublic atomFamily: typeof atomFamily\n\tpublic selector: typeof selector\n\tpublic selectorFamily: typeof selectorFamily\n\tpublic transaction: typeof transaction\n\tpublic timeline: typeof timeline\n\tpublic getState: typeof getState\n\tpublic setState: typeof setState\n\tpublic subscribe: typeof subscribe\n\tpublic undo: typeof undo\n\tpublic redo: typeof redo\n\tpublic constructor(name: string, fromStore: Store | null = null) {\n\t\tconst s = new Store(name, fromStore)\n\t\tfunction _atom<T>(options: RegularAtomOptions<T>): RegularAtomToken<T>\n\t\tfunction _atom<T extends Transceiver<any>, J extends Json.Serializable>(\n\t\t\toptions: MutableAtomOptions<T, J>,\n\t\t): MutableAtomToken<T, J>\n\t\tfunction _atom<T>(\n\t\t\toptions: MutableAtomOptions<any, any> | RegularAtomOptions<T>,\n\t\t): AtomToken<T> {\n\t\t\treturn createStandaloneAtom(options, s)\n\t\t}\n\t\tfunction _atomFamily<\n\t\t\tT extends Transceiver<any>,\n\t\t\tJ extends Json.Serializable,\n\t\t\tK extends Json.Serializable,\n\t\t>(options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamily<T, J, K>\n\t\tfunction _atomFamily<T, K extends Json.Serializable>(\n\t\t\toptions: RegularAtomFamilyOptions<T, K>,\n\t\t): RegularAtomFamily<T, K>\n\t\tfunction _atomFamily<T, K extends Json.Serializable>(\n\t\t\toptions:\n\t\t\t\t| MutableAtomFamilyOptions<any, any, any>\n\t\t\t\t| RegularAtomFamilyOptions<T, K>,\n\t\t): MutableAtomFamily<any, any, any> | RegularAtomFamily<T, K> {\n\t\t\treturn createAtomFamily(options, s)\n\t\t}\n\t\tthis.store = s\n\t\tthis.atom = _atom\n\t\tthis.atomFamily = _atomFamily\n\t\tthis.selector = (options) => createStandaloneSelector(options, s) as any\n\t\tthis.selectorFamily = (options) => createSelectorFamily(options, s) as any\n\t\tthis.transaction = (options) => createTransaction(options, s)\n\t\tthis.timeline = (options) => createTimeline(options, s)\n\t\tthis.getState = (token) => getFromStore(token, s)\n\t\tthis.setState = (token, newValue) => setIntoStore(token, newValue, s)\n\t\tthis.subscribe = (token, handler, key) => subscribe(token, handler, key, s)\n\t\tthis.undo = (token) => timeTravel(`undo`, token, s)\n\t\tthis.redo = (token) => timeTravel(`redo`, token, s)\n\t}\n}\n","import type { Store } from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tarbitrary,\n\tsubscribeToState,\n\tsubscribeToTimeline,\n\tsubscribeToTransaction,\n} from \"atom.io/internal\"\n\nimport type {\n\tFamilyMetadata,\n\tReadableToken,\n\tTimelineManageable,\n\tTimelineToken,\n\tTimelineUpdate,\n\tTransactionToken,\n\tTransactionUpdate,\n\tƒn,\n} from \".\"\n\nexport type StateUpdate<T> = { newValue: T; oldValue: T }\nexport type KeyedStateUpdate<T> = StateUpdate<T> & {\n\tkey: string\n\tfamily?: FamilyMetadata\n}\nexport type UpdateHandler<T> = (update: StateUpdate<T>) => void\n\nexport type TransactionUpdateHandler<ƒ extends ƒn> = (\n\tdata: TransactionUpdate<ƒ>,\n) => void\n\nexport function subscribe<T>(\n\ttoken: ReadableToken<T>,\n\thandleUpdate: UpdateHandler<T>,\n\tkey?: string,\n\tstore?: Store,\n): () => void\nexport function subscribe<ƒ extends ƒn>(\n\ttoken: TransactionToken<ƒ>,\n\thandleUpdate: TransactionUpdateHandler<ƒ>,\n\tkey?: string,\n\tstore?: Store,\n): () => void\nexport function subscribe<M extends TimelineManageable>(\n\ttoken: TimelineToken<M>,\n\thandleUpdate: (update: TimelineUpdate<M> | `redo` | `undo`) => void,\n\tkey?: string,\n\tstore?: Store,\n): () => void\nexport function subscribe(\n\ttoken: ReadableToken<any> | TimelineToken<any> | TransactionToken<any>,\n\thandleUpdate: (update: any) => void,\n\tkey: string = arbitrary(),\n\tstore = IMPLICIT.STORE,\n): () => void {\n\tswitch (token.type) {\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\tcase `readonly_selector`:\n\t\tcase `selector`:\n\t\t\treturn subscribeToState(token, handleUpdate, key, store)\n\t\tcase `transaction`:\n\t\t\treturn subscribeToTransaction(token, handleUpdate, key, store)\n\t\tcase `timeline`:\n\t\t\treturn subscribeToTimeline(token, handleUpdate, key, store)\n\t}\n}\n","import type {\n\tTimeline,\n\tTimelineAtomUpdate,\n\tTimelineSelectorUpdate,\n\tTimelineTransactionUpdate,\n} from \"atom.io/internal\"\nimport { IMPLICIT, createTimeline, timeTravel } from \"atom.io/internal\"\n\nimport type { AtomFamilyToken, AtomToken } from \".\"\n\nexport type TimelineManageable = AtomFamilyToken<any, any> | AtomToken<any>\n\nexport type TimelineToken<M> = {\n\tkey: string\n\ttype: `timeline`\n\t__M?: M\n}\n\nexport type TimelineOptions<ManagedAtom extends TimelineManageable> = {\n\tkey: string\n\tatoms: ManagedAtom[]\n\tshouldCapture?: (\n\t\tupdate: TimelineUpdate<ManagedAtom>,\n\t\ttimeline: Timeline<TimelineManageable>,\n\t) => boolean\n}\n\nexport type TimelineUpdate<ManagedAtom extends TimelineManageable> =\n\t| TimelineAtomUpdate<ManagedAtom>\n\t| TimelineSelectorUpdate<ManagedAtom>\n\t| TimelineTransactionUpdate\n\nexport const timeline = <ManagedAtom extends TimelineManageable>(\n\toptions: TimelineOptions<ManagedAtom>,\n): TimelineToken<ManagedAtom> => {\n\treturn createTimeline(options, IMPLICIT.STORE)\n}\n\nexport const redo = (timeline: TimelineToken<any>): void => {\n\ttimeTravel(`redo`, timeline, IMPLICIT.STORE)\n}\n\nexport const undo = (timeline: TimelineToken<any>): void => {\n\ttimeTravel(`undo`, timeline, IMPLICIT.STORE)\n}\n","import type { EnvironmentData } from \"atom.io/internal\"\nimport {\n\tIMPLICIT,\n\tactUponStore,\n\tarbitrary,\n\tcreateTransaction,\n} from \"atom.io/internal\"\n\nimport type {\n\tKeyedStateUpdate,\n\tReadonlySelectorToken,\n\tWritableToken,\n\tfindState,\n\tƒn,\n} from \".\"\n\nexport type TransactionToken<F> = {\n\tkey: string\n\ttype: `transaction`\n\t__F?: F\n}\n\nexport type TransactionUpdateContent =\n\t| KeyedStateUpdate<unknown>\n\t| TransactionUpdate<ƒn>\n\nexport type TransactionUpdate<ƒ extends ƒn> = {\n\tkey: string\n\tid: string\n\tepoch: number\n\tupdates: TransactionUpdateContent[]\n\tparams: Parameters<ƒ>\n\toutput: ReturnType<ƒ>\n}\n\nexport type Transactors = Readonly<{\n\tget: <S>(state: ReadonlySelectorToken<S> | WritableToken<S>) => S\n\tset: <S, New extends S>(\n\t\tstate: WritableToken<S>,\n\t\tnewValue: New | ((oldValue: S) => New),\n\t) => void\n\tfind: typeof findState\n}>\nexport type TransactorsWithRunAndEnv = Readonly<{\n\tget: <S>(state: ReadonlySelectorToken<S> | WritableToken<S>) => S\n\tset: <S, New extends S>(\n\t\tstate: WritableToken<S>,\n\t\tnewValue: New | ((oldValue: S) => New),\n\t) => void\n\tfind: typeof findState\n\trun: typeof runTransaction\n\tenv: () => EnvironmentData\n}>\nexport type ReadonlyTransactors = Pick<Transactors, `find` | `get`>\n\nexport type Read<ƒ extends ƒn> = (\n\ttransactors: ReadonlyTransactors,\n\t...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type Write<ƒ extends ƒn> = (\n\ttransactors: Transactors,\n\t...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type Transact<ƒ extends ƒn> = (\n\ttransactors: TransactorsWithRunAndEnv,\n\t...parameters: Parameters<ƒ>\n) => ReturnType<ƒ>\n\nexport type TransactionOptions<ƒ extends ƒn> = {\n\tkey: string\n\tdo: Transact<ƒ>\n}\n\nexport type TransactionIO<Token extends TransactionToken<any>> =\n\tToken extends TransactionToken<infer ƒ> ? ƒ : never\n\nexport function transaction<ƒ extends ƒn>(\n\toptions: TransactionOptions<ƒ>,\n): TransactionToken<ƒ> {\n\treturn createTransaction(options, IMPLICIT.STORE)\n}\n\nexport function runTransaction<ƒ extends ƒn>(\n\ttoken: TransactionToken<ƒ>,\n\tid = arbitrary(),\n): (...parameters: Parameters<ƒ>) => ReturnType<ƒ> {\n\treturn actUponStore(token, id, IMPLICIT.STORE)\n}\n","import type {\n\tMutableAtomFamily,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamily,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamily,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamily,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tWritableFamily,\n\tWritableFamilyToken,\n\tWritableSelectorFamily,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\n\nexport type TokenType<\n\tComparison extends ReadableFamilyToken<any, any> | ReadableToken<any>,\n> = Comparison extends ReadableToken<infer RepresentedValue>\n\t? RepresentedValue\n\t: Comparison extends ReadableFamilyToken<infer RepresentedValue, any>\n\t ? RepresentedValue\n\t : never\n\nexport function isToken<KnownToken extends RegularAtomToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is RegularAtomToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends MutableAtomToken<any, any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is MutableAtomToken<TokenType<KnownToken>, any>\nexport function isToken<KnownToken extends WritableSelectorToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is WritableSelectorToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends ReadonlySelectorToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadonlySelectorToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends WritableToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is WritableToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends ReadableToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadableToken<TokenType<KnownToken>>\nexport function isToken<KnownToken extends ReadableToken<any>>(\n\tknownToken: KnownToken,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadableToken<TokenType<KnownToken>> {\n\treturn knownToken.key === unknownToken.key\n}\n\nexport function belongsTo<Family extends RegularAtomFamilyToken<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is RegularAtomToken<TokenType<Family>>\nexport function belongsTo<Family extends MutableAtomFamilyToken<any, any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is MutableAtomToken<TokenType<Family>, any>\nexport function belongsTo<Family extends WritableSelectorFamilyToken<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is WritableSelectorToken<TokenType<Family>>\nexport function belongsTo<Family extends ReadonlySelectorFamilyToken<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadonlySelectorToken<TokenType<Family>>\nexport function belongsTo<Family extends WritableFamilyToken<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is WritableToken<TokenType<Family>>\nexport function belongsTo<Family extends ReadableFamilyToken<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadableToken<TokenType<Family>>\nexport function belongsTo<Family extends ReadableFamilyToken<any, any>>(\n\tfamily: Family,\n\tunknownToken: ReadableToken<any>,\n): unknownToken is ReadableToken<TokenType<Family>> {\n\treturn family.key === unknownToken.family?.key\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Internal from 'atom.io/internal';
|
|
2
2
|
import { Transceiver, Subject, Store, EnvironmentData, Timeline, TimelineAtomUpdate, TimelineSelectorUpdate, TimelineTransactionUpdate } from 'atom.io/internal';
|
|
3
3
|
import { Json, JsonInterface } from 'atom.io/json';
|
|
4
|
-
import { MutableAtomFamilyToken as MutableAtomFamilyToken$1, MutableAtomToken as MutableAtomToken$1, RegularAtomFamilyToken as RegularAtomFamilyToken$1, RegularAtomToken as RegularAtomToken$1, WritableSelectorFamilyToken as WritableSelectorFamilyToken$1, WritableSelectorToken as WritableSelectorToken$1, ReadonlySelectorFamilyToken as ReadonlySelectorFamilyToken$1, ReadonlySelectorToken as ReadonlySelectorToken$1, WritableFamilyToken as WritableFamilyToken$1, WritableToken as WritableToken$1, ReadableFamilyToken as ReadableFamilyToken$1, ReadableToken as ReadableToken$1
|
|
4
|
+
import { MutableAtomFamilyToken as MutableAtomFamilyToken$1, MutableAtomToken as MutableAtomToken$1, RegularAtomFamilyToken as RegularAtomFamilyToken$1, RegularAtomToken as RegularAtomToken$1, WritableSelectorFamilyToken as WritableSelectorFamilyToken$1, WritableSelectorToken as WritableSelectorToken$1, ReadonlySelectorFamilyToken as ReadonlySelectorFamilyToken$1, ReadonlySelectorToken as ReadonlySelectorToken$1, WritableFamilyToken as WritableFamilyToken$1, WritableToken as WritableToken$1, ReadableFamilyToken as ReadableFamilyToken$1, ReadableToken as ReadableToken$1 } from 'atom.io';
|
|
5
5
|
|
|
6
6
|
type Effectors<T> = {
|
|
7
7
|
setSelf: <V extends T>(next: V | ((oldValue: T) => V)) => void;
|
|
@@ -27,35 +27,27 @@ type RegularAtomFamilyOptions<T, K extends Json.Serializable> = {
|
|
|
27
27
|
default: T | ((key: K) => T);
|
|
28
28
|
effects?: (key: K) => AtomEffect<T>[];
|
|
29
29
|
};
|
|
30
|
-
type RegularAtomFamily<T, K extends Json.Serializable = Json.Serializable> = ((key: K) => RegularAtomToken<T>) & {
|
|
31
|
-
key: string;
|
|
32
|
-
type: `atom_family`;
|
|
33
|
-
subject: Subject<RegularAtomToken<T>>;
|
|
34
|
-
install: (store: Store) => void;
|
|
35
|
-
__T?: T;
|
|
36
|
-
__K?: K;
|
|
37
|
-
};
|
|
38
30
|
type RegularAtomFamilyToken<T, K extends Json.Serializable> = {
|
|
39
31
|
key: string;
|
|
40
32
|
type: `atom_family`;
|
|
41
33
|
__T?: T;
|
|
42
34
|
__K?: K;
|
|
43
35
|
};
|
|
36
|
+
type RegularAtomFamilyTokenWithCall<T, K extends Json.Serializable> = RegularAtomFamilyToken<T, K> & {
|
|
37
|
+
/** @deprecated Prefer the `findState`, `findInStore`, or `find` functions. */
|
|
38
|
+
(key: K): RegularAtomToken<T>;
|
|
39
|
+
};
|
|
40
|
+
type RegularAtomFamily<T, K extends Json.Serializable> = RegularAtomFamilyToken<T, K> & {
|
|
41
|
+
(key: K): RegularAtomToken<T>;
|
|
42
|
+
subject: Subject<RegularAtomToken<T>>;
|
|
43
|
+
install: (store: Store) => void;
|
|
44
|
+
};
|
|
44
45
|
type MutableAtomFamilyOptions<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable> = JsonInterface<T, J> & {
|
|
45
46
|
key: string;
|
|
46
47
|
default: (key: K) => T;
|
|
47
48
|
effects?: (key: K) => AtomEffect<T>[];
|
|
48
49
|
mutable: true;
|
|
49
50
|
};
|
|
50
|
-
type MutableAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable> = JsonInterface<T, J> & ((key: K) => MutableAtomToken<T, J>) & {
|
|
51
|
-
key: string;
|
|
52
|
-
type: `mutable_atom_family`;
|
|
53
|
-
subject: Subject<MutableAtomToken<T, J>>;
|
|
54
|
-
install: (store: Store) => void;
|
|
55
|
-
__T?: T;
|
|
56
|
-
__J?: J;
|
|
57
|
-
__K?: K;
|
|
58
|
-
};
|
|
59
51
|
type MutableAtomFamilyToken<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable> = {
|
|
60
52
|
key: string;
|
|
61
53
|
type: `mutable_atom_family`;
|
|
@@ -63,10 +55,19 @@ type MutableAtomFamilyToken<T extends Transceiver<any>, J extends Json.Serializa
|
|
|
63
55
|
__J?: J;
|
|
64
56
|
__K?: K;
|
|
65
57
|
};
|
|
58
|
+
type MutableAtomFamilyTokenWithCall<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable> = MutableAtomFamilyToken<T, J, K> & {
|
|
59
|
+
/** @deprecated Prefer the `findState`, `findInStore`, or `find` functions. */
|
|
60
|
+
(key: K): MutableAtomToken<T, J>;
|
|
61
|
+
};
|
|
62
|
+
type MutableAtomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable> = JsonInterface<T, J> & MutableAtomFamilyToken<T, J, K> & {
|
|
63
|
+
(key: K): MutableAtomToken<T, J>;
|
|
64
|
+
subject: Subject<MutableAtomToken<T, J>>;
|
|
65
|
+
install: (store: Store) => void;
|
|
66
|
+
};
|
|
66
67
|
type AtomFamily<T, K extends Json.Serializable = Json.Serializable> = MutableAtomFamily<T extends Transceiver<any> ? T : never, any, K> | RegularAtomFamily<T, K>;
|
|
67
68
|
type AtomFamilyToken<T, K extends Json.Serializable = Json.Serializable> = MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, any, K> | RegularAtomFamilyToken<T, K>;
|
|
68
|
-
declare function atomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable>(options: MutableAtomFamilyOptions<T, J, K>):
|
|
69
|
-
declare function atomFamily<T, K extends Json.Serializable>(options: RegularAtomFamilyOptions<T, K>):
|
|
69
|
+
declare function atomFamily<T extends Transceiver<any>, J extends Json.Serializable, K extends Json.Serializable>(options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamilyTokenWithCall<T, J, K>;
|
|
70
|
+
declare function atomFamily<T, K extends Json.Serializable>(options: RegularAtomFamilyOptions<T, K>): RegularAtomFamilyTokenWithCall<T, K>;
|
|
70
71
|
|
|
71
72
|
type TransactionToken<F> = {
|
|
72
73
|
key: string;
|
|
@@ -104,7 +105,7 @@ type TransactionOptions<ƒ extends ƒn> = {
|
|
|
104
105
|
};
|
|
105
106
|
type TransactionIO<Token extends TransactionToken<any>> = Token extends TransactionToken<infer ƒ> ? ƒ : never;
|
|
106
107
|
declare function transaction<ƒ extends ƒn>(options: TransactionOptions<ƒ>): TransactionToken<ƒ>;
|
|
107
|
-
declare
|
|
108
|
+
declare function runTransaction<ƒ extends ƒn>(token: TransactionToken<ƒ>, id?: string): (...parameters: Parameters<ƒ>) => ReturnType<ƒ>;
|
|
108
109
|
|
|
109
110
|
type WritableSelectorOptions<T> = {
|
|
110
111
|
key: string;
|
|
@@ -126,38 +127,43 @@ type ReadonlySelectorFamilyOptions<T, K extends Json.Serializable> = {
|
|
|
126
127
|
key: string;
|
|
127
128
|
get: (key: K) => Read<() => T>;
|
|
128
129
|
};
|
|
129
|
-
type WritableSelectorFamily<T, K extends Json.Serializable = Json.Serializable> = ((key: K) => WritableSelectorToken<T>) & {
|
|
130
|
-
key: string;
|
|
131
|
-
type: `selector_family`;
|
|
132
|
-
subject: Subject<WritableSelectorToken<T>>;
|
|
133
|
-
install: (store: Store) => void;
|
|
134
|
-
__T?: T;
|
|
135
|
-
__K?: K;
|
|
136
|
-
};
|
|
137
130
|
type WritableSelectorFamilyToken<T, K extends Json.Serializable> = {
|
|
138
131
|
key: string;
|
|
139
132
|
type: `selector_family`;
|
|
140
133
|
__T?: T;
|
|
141
134
|
__K?: K;
|
|
142
135
|
};
|
|
143
|
-
type
|
|
136
|
+
type WritableSelectorFamilyTokenWithCall<T, K extends Json.Serializable> = WritableSelectorFamilyToken<T, K> & {
|
|
137
|
+
/** @deprecated Prefer the `findState`, `findInStore`, or `find` functions. */
|
|
138
|
+
(key: K): WritableSelectorToken<T>;
|
|
139
|
+
};
|
|
140
|
+
type WritableSelectorFamily<T, K extends Json.Serializable> = WritableSelectorFamilyToken<T, K> & {
|
|
141
|
+
(key: K): WritableSelectorToken<T>;
|
|
142
|
+
subject: Subject<WritableSelectorToken<T>>;
|
|
143
|
+
install: (store: Store) => void;
|
|
144
|
+
};
|
|
145
|
+
type ReadonlySelectorFamilyToken<T, K extends Json.Serializable> = {
|
|
144
146
|
key: string;
|
|
145
147
|
type: `readonly_selector_family`;
|
|
146
|
-
subject: Subject<ReadonlySelectorToken<T>>;
|
|
147
|
-
install: (store: Store) => void;
|
|
148
148
|
__T?: T;
|
|
149
149
|
__K?: K;
|
|
150
150
|
};
|
|
151
|
-
type
|
|
151
|
+
type ReadonlySelectorFamilyTokenWithCall<T, K extends Json.Serializable> = ReadonlySelectorFamilyToken<T, K> & {
|
|
152
|
+
/** @deprecated Prefer the `findState`, `findInStore`, or `find` functions. */
|
|
153
|
+
(key: K): ReadonlySelectorToken<T>;
|
|
154
|
+
};
|
|
155
|
+
type ReadonlySelectorFamily<T, K extends Json.Serializable> = ((key: K) => ReadonlySelectorToken<T>) & {
|
|
152
156
|
key: string;
|
|
153
157
|
type: `readonly_selector_family`;
|
|
158
|
+
subject: Subject<ReadonlySelectorToken<T>>;
|
|
159
|
+
install: (store: Store) => void;
|
|
154
160
|
__T?: T;
|
|
155
161
|
__K?: K;
|
|
156
162
|
};
|
|
157
163
|
type SelectorFamily<T, K extends Json.Serializable> = ReadonlySelectorFamily<T, K> | WritableSelectorFamily<T, K>;
|
|
158
164
|
type SelectorFamilyToken<T, K extends Json.Serializable> = ReadonlySelectorFamilyToken<T, K> | WritableSelectorFamilyToken<T, K>;
|
|
159
|
-
declare function selectorFamily<T, K extends Json.Serializable>(options: WritableSelectorFamilyOptions<T, K>):
|
|
160
|
-
declare function selectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>):
|
|
165
|
+
declare function selectorFamily<T, K extends Json.Serializable>(options: WritableSelectorFamilyOptions<T, K>): WritableSelectorFamilyTokenWithCall<T, K>;
|
|
166
|
+
declare function selectorFamily<T, K extends Json.Serializable>(options: ReadonlySelectorFamilyOptions<T, K>): ReadonlySelectorFamilyTokenWithCall<T, K>;
|
|
161
167
|
|
|
162
168
|
declare function dispose(token: ReadableToken<any>, store?: Internal.Store): void;
|
|
163
169
|
|
|
@@ -178,20 +184,23 @@ declare const LoggerIconDictionary: {
|
|
|
178
184
|
readonly "\u23EE\uFE0F": "Transaction undo";
|
|
179
185
|
readonly "\u23F3": "Timeline event partially captured";
|
|
180
186
|
readonly "\u23F9\uFE0F": "Time-travel complete";
|
|
181
|
-
readonly "\uD83D\uDC81": "Notice";
|
|
182
|
-
readonly "\uD83D\uDD04": "Realtime transaction synchronized";
|
|
183
187
|
readonly "\u2705": "Realtime transaction success";
|
|
184
188
|
readonly "\u2728": "Computation complete";
|
|
185
189
|
readonly "\u274C": "Conflict prevents attempted action";
|
|
186
190
|
readonly "\u2B55": "Operation start";
|
|
187
191
|
readonly "\uD83D\uDC1E": "Possible bug in AtomIO";
|
|
188
192
|
readonly "\uD83D\uDC40": "Subscription added";
|
|
193
|
+
readonly "\uD83D\uDC4B": "Greeting";
|
|
194
|
+
readonly "\uD83D\uDC4D": "Realtime acknowledgment";
|
|
189
195
|
readonly "\uD83D\uDC6A": "Family member added";
|
|
196
|
+
readonly "\uD83D\uDC81": "Notice";
|
|
197
|
+
readonly "\uD83D\uDCA5": "Caught";
|
|
190
198
|
readonly "\uD83D\uDCC1": "Stow update";
|
|
191
199
|
readonly "\uD83D\uDCC3": "Copy mutable";
|
|
192
200
|
readonly "\uD83D\uDCD6": "Read state";
|
|
193
201
|
readonly "\uD83D\uDCDD": "Write state";
|
|
194
202
|
readonly "\uD83D\uDCE2": "Notify subscribers";
|
|
203
|
+
readonly "\uD83D\uDD04": "Realtime transaction synchronized";
|
|
195
204
|
readonly "\uD83D\uDD0C": "Register dependency";
|
|
196
205
|
readonly "\uD83D\uDD0D": "Discover root";
|
|
197
206
|
readonly "\uD83D\uDD25": "Delete state";
|
|
@@ -199,8 +208,8 @@ declare const LoggerIconDictionary: {
|
|
|
199
208
|
readonly "\uD83D\uDD28": "Create immutable atom";
|
|
200
209
|
readonly "\uD83D\uDD34": "Operation complete";
|
|
201
210
|
readonly "\uD83D\uDDD1": "Evict cached value";
|
|
202
|
-
readonly "\uD83D\uDCA5": "Caught";
|
|
203
211
|
readonly "\uD83D\uDE48": "Subscription canceled";
|
|
212
|
+
readonly "\uD83D\uDE80": "Performance measure";
|
|
204
213
|
readonly "\uD83D\uDEC4": "Apply transaction";
|
|
205
214
|
readonly "\uD83D\uDEE0\uFE0F": "Install atom into store";
|
|
206
215
|
readonly "\uD83D\uDEEB": "Begin transaction";
|
|
@@ -208,10 +217,16 @@ declare const LoggerIconDictionary: {
|
|
|
208
217
|
readonly "\uD83E\uDDEE": "Computing selector";
|
|
209
218
|
readonly "\uD83E\uDDF9": "Prepare to evict";
|
|
210
219
|
readonly "\uD83E\uDE82": "Abort transaction";
|
|
211
|
-
readonly "\
|
|
220
|
+
readonly "\uD83E\uDD1E": "Realtime optimistic update enqueued";
|
|
221
|
+
readonly "\uD83D\uDC48": "Realtime confirmed update enqueued";
|
|
222
|
+
readonly "\uD83E\uDDD1\u200D\u2696\uFE0F": "Realtime update beginning reconciliation";
|
|
223
|
+
readonly "\uD83D\uDECE\uFE0F": "Realtime transaction received";
|
|
224
|
+
readonly "\uD83D\uDD2D": "Determining realtime perspective";
|
|
225
|
+
readonly "\uD83D\uDD8C": "Redacting realtime update";
|
|
226
|
+
readonly "\uD83D\uDC41": "Determining perspective";
|
|
212
227
|
};
|
|
213
228
|
type LoggerIcon = keyof typeof LoggerIconDictionary;
|
|
214
|
-
type TokenDenomination = `atom` | `
|
|
229
|
+
type TokenDenomination = `atom` | `continuity` | `mutable_atom` | `readonly_selector` | `selector` | `state` | `timeline` | `transaction` | `unknown`;
|
|
215
230
|
declare const LOG_LEVELS: readonly ["info", "warn", "error"];
|
|
216
231
|
type LogLevel = (typeof LOG_LEVELS)[number];
|
|
217
232
|
type LogFn = (icon: LoggerIcon, denomination: TokenDenomination, tokenKey: string, message: string, ...rest: unknown[]) => void;
|
|
@@ -261,11 +276,11 @@ declare function subscribe<T>(token: ReadableToken<T>, handleUpdate: UpdateHandl
|
|
|
261
276
|
declare function subscribe<ƒ extends ƒn>(token: TransactionToken<ƒ>, handleUpdate: TransactionUpdateHandler<ƒ>, key?: string, store?: Store): () => void;
|
|
262
277
|
declare function subscribe<M extends TimelineManageable>(token: TimelineToken<M>, handleUpdate: (update: TimelineUpdate<M> | `redo` | `undo`) => void, key?: string, store?: Store): () => void;
|
|
263
278
|
|
|
264
|
-
type TimelineManageable =
|
|
265
|
-
type TimelineToken<
|
|
279
|
+
type TimelineManageable = AtomFamilyToken<any, any> | AtomToken<any>;
|
|
280
|
+
type TimelineToken<M> = {
|
|
266
281
|
key: string;
|
|
267
282
|
type: `timeline`;
|
|
268
|
-
|
|
283
|
+
__M?: M;
|
|
269
284
|
};
|
|
270
285
|
type TimelineOptions<ManagedAtom extends TimelineManageable> = {
|
|
271
286
|
key: string;
|
|
@@ -277,19 +292,19 @@ declare const timeline: <ManagedAtom extends TimelineManageable>(options: Timeli
|
|
|
277
292
|
declare const redo: (timeline: TimelineToken<any>) => void;
|
|
278
293
|
declare const undo: (timeline: TimelineToken<any>) => void;
|
|
279
294
|
|
|
280
|
-
type TokenType<Comparison extends
|
|
295
|
+
type TokenType<Comparison extends ReadableFamilyToken$1<any, any> | ReadableToken$1<any>> = Comparison extends ReadableToken$1<infer RepresentedValue> ? RepresentedValue : Comparison extends ReadableFamilyToken$1<infer RepresentedValue, any> ? RepresentedValue : never;
|
|
281
296
|
declare function isToken<KnownToken extends RegularAtomToken$1<any>>(knownToken: KnownToken, unknownToken: ReadableToken$1<any>): unknownToken is RegularAtomToken$1<TokenType<KnownToken>>;
|
|
282
297
|
declare function isToken<KnownToken extends MutableAtomToken$1<any, any>>(knownToken: KnownToken, unknownToken: ReadableToken$1<any>): unknownToken is MutableAtomToken$1<TokenType<KnownToken>, any>;
|
|
283
298
|
declare function isToken<KnownToken extends WritableSelectorToken$1<any>>(knownToken: KnownToken, unknownToken: ReadableToken$1<any>): unknownToken is WritableSelectorToken$1<TokenType<KnownToken>>;
|
|
284
299
|
declare function isToken<KnownToken extends ReadonlySelectorToken$1<any>>(knownToken: KnownToken, unknownToken: ReadableToken$1<any>): unknownToken is ReadonlySelectorToken$1<TokenType<KnownToken>>;
|
|
285
300
|
declare function isToken<KnownToken extends WritableToken$1<any>>(knownToken: KnownToken, unknownToken: ReadableToken$1<any>): unknownToken is WritableToken$1<TokenType<KnownToken>>;
|
|
286
301
|
declare function isToken<KnownToken extends ReadableToken$1<any>>(knownToken: KnownToken, unknownToken: ReadableToken$1<any>): unknownToken is ReadableToken$1<TokenType<KnownToken>>;
|
|
287
|
-
declare function belongsTo<Family extends
|
|
288
|
-
declare function belongsTo<Family extends
|
|
289
|
-
declare function belongsTo<Family extends
|
|
290
|
-
declare function belongsTo<Family extends
|
|
291
|
-
declare function belongsTo<Family extends
|
|
292
|
-
declare function belongsTo<Family extends
|
|
302
|
+
declare function belongsTo<Family extends RegularAtomFamilyToken$1<any, any>>(family: Family, unknownToken: ReadableToken$1<any>): unknownToken is RegularAtomToken$1<TokenType<Family>>;
|
|
303
|
+
declare function belongsTo<Family extends MutableAtomFamilyToken$1<any, any, any>>(family: Family, unknownToken: ReadableToken$1<any>): unknownToken is MutableAtomToken$1<TokenType<Family>, any>;
|
|
304
|
+
declare function belongsTo<Family extends WritableSelectorFamilyToken$1<any, any>>(family: Family, unknownToken: ReadableToken$1<any>): unknownToken is WritableSelectorToken$1<TokenType<Family>>;
|
|
305
|
+
declare function belongsTo<Family extends ReadonlySelectorFamilyToken$1<any, any>>(family: Family, unknownToken: ReadableToken$1<any>): unknownToken is ReadonlySelectorToken$1<TokenType<Family>>;
|
|
306
|
+
declare function belongsTo<Family extends WritableFamilyToken$1<any, any>>(family: Family, unknownToken: ReadableToken$1<any>): unknownToken is WritableToken$1<TokenType<Family>>;
|
|
307
|
+
declare function belongsTo<Family extends ReadableFamilyToken$1<any, any>>(family: Family, unknownToken: ReadableToken$1<any>): unknownToken is ReadableToken$1<TokenType<Family>>;
|
|
293
308
|
|
|
294
309
|
type ƒn = (...parameters: any[]) => any;
|
|
295
310
|
type RegularAtomToken<T> = {
|
|
@@ -330,4 +345,4 @@ type FamilyMetadata = {
|
|
|
330
345
|
subKey: string;
|
|
331
346
|
};
|
|
332
347
|
|
|
333
|
-
export { type AtomEffect, type AtomFamily, type AtomFamilyToken, AtomIOLogger, type AtomToken, type Effectors, type FamilyMetadata, type KeyedStateUpdate, LOG_LEVELS, type LogFilter, type LogFn, type LogLevel, type Logger, type LoggerIcon, type MutableAtomFamily, type MutableAtomFamilyOptions, type MutableAtomFamilyToken, type MutableAtomOptions, type MutableAtomToken, type Read, type ReadableFamily, type ReadableFamilyToken, type ReadableToken, type ReadonlySelectorFamily, type ReadonlySelectorFamilyOptions, type ReadonlySelectorFamilyToken, type ReadonlySelectorOptions, type ReadonlySelectorToken, type ReadonlyTransactors, type RegularAtomFamily, type RegularAtomFamilyOptions, type RegularAtomFamilyToken, type RegularAtomOptions, type RegularAtomToken, type SelectorFamily, type SelectorFamilyToken, type SelectorToken, Silo, type StateUpdate, type TimelineManageable, type TimelineOptions, type TimelineToken, type TimelineUpdate, type TokenDenomination, type TokenType, type Transact, type TransactionIO, type TransactionOptions, type TransactionToken, type TransactionUpdate, type TransactionUpdateContent, type TransactionUpdateHandler, type Transactors, type TransactorsWithRunAndEnv, type UpdateHandler, type WritableFamily, type WritableFamilyToken, type WritableSelectorFamily, type WritableSelectorFamilyOptions, type WritableSelectorFamilyToken, type WritableSelectorOptions, type WritableSelectorToken, type WritableToken, type Write, atom, atomFamily, belongsTo, dispose, findState, getState, isToken, redo, runTransaction, selector, selectorFamily, setState, simpleLog, simpleLogger, subscribe, timeline, transaction, undo, type ƒn };
|
|
348
|
+
export { type AtomEffect, type AtomFamily, type AtomFamilyToken, AtomIOLogger, type AtomToken, type Effectors, type FamilyMetadata, type KeyedStateUpdate, LOG_LEVELS, type LogFilter, type LogFn, type LogLevel, type Logger, type LoggerIcon, type MutableAtomFamily, type MutableAtomFamilyOptions, type MutableAtomFamilyToken, type MutableAtomFamilyTokenWithCall, type MutableAtomOptions, type MutableAtomToken, type Read, type ReadableFamily, type ReadableFamilyToken, type ReadableToken, type ReadonlySelectorFamily, type ReadonlySelectorFamilyOptions, type ReadonlySelectorFamilyToken, type ReadonlySelectorFamilyTokenWithCall, type ReadonlySelectorOptions, type ReadonlySelectorToken, type ReadonlyTransactors, type RegularAtomFamily, type RegularAtomFamilyOptions, type RegularAtomFamilyToken, type RegularAtomFamilyTokenWithCall, type RegularAtomOptions, type RegularAtomToken, type SelectorFamily, type SelectorFamilyToken, type SelectorToken, Silo, type StateUpdate, type TimelineManageable, type TimelineOptions, type TimelineToken, type TimelineUpdate, type TokenDenomination, type TokenType, type Transact, type TransactionIO, type TransactionOptions, type TransactionToken, type TransactionUpdate, type TransactionUpdateContent, type TransactionUpdateHandler, type Transactors, type TransactorsWithRunAndEnv, type UpdateHandler, type WritableFamily, type WritableFamilyToken, type WritableSelectorFamily, type WritableSelectorFamilyOptions, type WritableSelectorFamilyToken, type WritableSelectorFamilyTokenWithCall, type WritableSelectorOptions, type WritableSelectorToken, type WritableToken, type Write, atom, atomFamily, belongsTo, dispose, findState, getState, isToken, redo, runTransaction, selector, selectorFamily, setState, simpleLog, simpleLogger, subscribe, timeline, transaction, undo, type ƒn };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import './chunk-PZLG2HP3.js';
|
|
2
2
|
import * as Internal from 'atom.io/internal';
|
|
3
|
-
import { createStandaloneAtom, IMPLICIT, createAtomFamily, findInStore, createStandaloneSelector, createSelectorFamily, Store, createTransaction, createTimeline, getFromStore, setIntoStore, timeTravel, subscribeToTimeline, subscribeToTransaction, subscribeToState,
|
|
3
|
+
import { createStandaloneAtom, IMPLICIT, createAtomFamily, findInStore, createStandaloneSelector, createSelectorFamily, Store, createTransaction, createTimeline, getFromStore, setIntoStore, timeTravel, subscribeToTimeline, subscribeToTransaction, subscribeToState, arbitrary, actUponStore } from 'atom.io/internal';
|
|
4
4
|
|
|
5
5
|
function atom(options) {
|
|
6
6
|
return createStandaloneAtom(options, IMPLICIT.STORE);
|
|
@@ -97,7 +97,7 @@ var Silo = class {
|
|
|
97
97
|
this.redo = (token) => timeTravel(`redo`, token, s);
|
|
98
98
|
}
|
|
99
99
|
};
|
|
100
|
-
function subscribe(token, handleUpdate, key =
|
|
100
|
+
function subscribe(token, handleUpdate, key = arbitrary(), store = IMPLICIT.STORE) {
|
|
101
101
|
switch (token.type) {
|
|
102
102
|
case `atom`:
|
|
103
103
|
case `mutable_atom`:
|
|
@@ -122,15 +122,9 @@ var undo = (timeline2) => {
|
|
|
122
122
|
function transaction(options) {
|
|
123
123
|
return createTransaction(options, IMPLICIT.STORE);
|
|
124
124
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
return tx.run(parameters, id);
|
|
129
|
-
}
|
|
130
|
-
throw new Error(
|
|
131
|
-
`Cannot run transaction "${token.key}": transaction not found in store "${store.config.name}".`
|
|
132
|
-
);
|
|
133
|
-
};
|
|
125
|
+
function runTransaction(token, id = arbitrary()) {
|
|
126
|
+
return actUponStore(token, id, IMPLICIT.STORE);
|
|
127
|
+
}
|
|
134
128
|
|
|
135
129
|
// src/validators.ts
|
|
136
130
|
function isToken(knownToken, unknownToken) {
|