atom.io 0.40.5 → 0.40.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/data/index.d.ts +1 -1
- package/dist/employ-socket-D6wgByWh.js +12 -0
- package/dist/employ-socket-D6wgByWh.js.map +1 -0
- package/dist/has-role-hv4-hJMw.js +1149 -0
- package/dist/has-role-hv4-hJMw.js.map +1 -0
- package/dist/internal/index.d.ts +248 -248
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +570 -1712
- package/dist/internal/index.js.map +1 -1
- package/dist/introspection/index.d.ts +1 -1
- package/dist/is-fn-DY1wZ-md.js +10 -0
- package/dist/is-fn-DY1wZ-md.js.map +1 -0
- package/dist/main/index.d.ts +33 -33
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js +2 -2
- package/dist/main/index.js.map +1 -1
- package/dist/mutex-store-CSvxY9i3.js +11 -0
- package/dist/mutex-store-CSvxY9i3.js.map +1 -0
- package/dist/react/index.d.ts +5 -21
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js.map +1 -1
- package/dist/react-devtools/index.js +7 -7
- package/dist/react-devtools/index.js.map +1 -1
- package/dist/realtime/index.d.ts +7 -15
- package/dist/realtime/index.d.ts.map +1 -1
- package/dist/realtime/index.js +3 -33
- package/dist/realtime/index.js.map +1 -1
- package/dist/realtime-client/index.d.ts +5 -5
- package/dist/realtime-client/index.d.ts.map +1 -1
- package/dist/realtime-client/index.js +92 -69
- package/dist/realtime-client/index.js.map +1 -1
- package/dist/realtime-react/index.d.ts +17 -10
- package/dist/realtime-react/index.d.ts.map +1 -1
- package/dist/realtime-react/index.js +41 -41
- package/dist/realtime-react/index.js.map +1 -1
- package/dist/realtime-server/index.d.ts +60 -53
- package/dist/realtime-server/index.d.ts.map +1 -1
- package/dist/realtime-server/index.js +592 -485
- package/dist/realtime-server/index.js.map +1 -1
- package/dist/realtime-testing/index.d.ts +1 -2
- package/dist/realtime-testing/index.d.ts.map +1 -1
- package/dist/realtime-testing/index.js +25 -18
- package/dist/realtime-testing/index.js.map +1 -1
- package/dist/shared-room-store-COGGKqes.js +32 -0
- package/dist/shared-room-store-COGGKqes.js.map +1 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts +15 -0
- package/dist/shared-room-store-D2o4ZLjC.d.ts.map +1 -0
- package/dist/web/index.d.ts +3 -3
- package/dist/web/index.d.ts.map +1 -1
- package/dist/web/index.js +4 -3
- package/dist/web/index.js.map +1 -1
- package/package.json +12 -12
- package/src/internal/atom/create-regular-atom.ts +5 -4
- package/src/internal/atom/dispose-atom.ts +7 -2
- package/src/internal/atom/has-role.ts +3 -3
- package/src/internal/caching.ts +4 -2
- package/src/internal/families/create-readonly-held-selector-family.ts +2 -1
- package/src/internal/families/create-readonly-pure-selector-family.ts +5 -2
- package/src/internal/families/create-regular-atom-family.ts +2 -1
- package/src/internal/families/create-writable-held-selector-family.ts +2 -1
- package/src/internal/families/create-writable-pure-selector-family.ts +5 -2
- package/src/internal/families/dispose-from-store.ts +4 -4
- package/src/internal/families/find-in-store.ts +10 -10
- package/src/internal/families/get-family-of-token.ts +2 -2
- package/src/internal/families/index.ts +1 -0
- package/src/internal/families/mint-in-store.ts +54 -19
- package/src/internal/families/seek-in-store.ts +1 -1
- package/src/internal/get-state/get-fallback.ts +2 -2
- package/src/internal/get-state/get-from-store.ts +5 -5
- package/src/internal/get-state/read-or-compute-value.ts +1 -1
- package/src/internal/get-state/reduce-reference.ts +8 -6
- package/src/internal/index.ts +2 -220
- package/src/internal/molecule.ts +1 -2
- package/src/internal/mutable/create-mutable-atom-family.ts +3 -2
- package/src/internal/mutable/create-mutable-atom.ts +4 -2
- package/src/internal/mutable/get-json-family.ts +1 -1
- package/src/internal/mutable/get-update-family.ts +1 -1
- package/src/internal/mutable/tracker-family.ts +2 -1
- package/src/internal/mutable/tracker.ts +5 -8
- package/src/internal/safe-compute.ts +1 -1
- package/src/internal/selector/create-readonly-held-selector.ts +2 -1
- package/src/internal/selector/create-readonly-pure-selector.ts +2 -1
- package/src/internal/selector/create-writable-held-selector.ts +2 -1
- package/src/internal/selector/create-writable-pure-selector.ts +2 -1
- package/src/internal/selector/dispose-selector.ts +3 -2
- package/src/internal/selector/register-selector.ts +8 -5
- package/src/internal/selector/trace-selector-atoms.ts +2 -1
- package/src/internal/set-state/dispatch-state-update.ts +3 -2
- package/src/internal/set-state/evict-downstream.ts +1 -1
- package/src/internal/set-state/operate-on-store.ts +16 -22
- package/src/internal/set-state/reset-atom-or-selector.ts +5 -3
- package/src/internal/set-state/reset-in-store.ts +5 -5
- package/src/internal/set-state/set-atom-or-selector.ts +2 -2
- package/src/internal/set-state/set-atom.ts +4 -2
- package/src/internal/set-state/set-into-store.ts +21 -39
- package/src/internal/set-state/set-selector.ts +3 -2
- package/src/internal/state-types.ts +228 -0
- package/src/internal/store/deposit.ts +4 -4
- package/src/internal/store/index.ts +0 -1
- package/src/internal/store/store.ts +9 -9
- package/src/internal/store/withdraw.ts +4 -4
- package/src/internal/subscribe/recall-state.ts +1 -1
- package/src/internal/subscribe/subscribe-to-root-atoms.ts +1 -12
- package/src/internal/subscribe/subscribe-to-transaction.ts +3 -2
- package/src/internal/transaction/build-transaction.ts +3 -2
- package/src/internal/transaction/index.ts +1 -23
- package/src/internal/transaction/is-root-store.ts +4 -1
- package/src/internal/transaction/transaction-meta-progress.ts +22 -0
- package/src/main/atom.ts +1 -2
- package/src/main/find-state.ts +5 -5
- package/src/main/get-state.ts +4 -4
- package/src/main/realm.ts +2 -2
- package/src/main/set-state.ts +10 -10
- package/src/react/parse-state-overloads.ts +3 -3
- package/src/react/use-i.ts +6 -4
- package/src/react/use-loadable.ts +4 -30
- package/src/react/use-o.ts +6 -4
- package/src/react-devtools/store.ts +6 -6
- package/src/realtime/index.ts +1 -0
- package/src/realtime/mutex-store.ts +11 -0
- package/src/realtime/realtime-continuity.ts +1 -5
- package/src/realtime-client/pull-atom-family-member.ts +14 -17
- package/src/realtime-client/pull-atom.ts +1 -1
- package/src/realtime-client/pull-mutable-atom-family-member.ts +16 -12
- package/src/realtime-client/pull-selector-family-member.ts +8 -35
- package/src/realtime-client/pull-selector-roots.ts +90 -0
- package/src/realtime-client/pull-selector.ts +2 -27
- package/src/realtime-client/push-state.ts +33 -5
- package/src/realtime-client/realtime-client-stores/client-main-store.ts +2 -5
- package/src/realtime-react/index.ts +2 -1
- package/src/realtime-react/realtime-context.tsx +9 -5
- package/src/realtime-react/use-pull-atom-family-member.ts +2 -3
- package/src/realtime-react/use-pull-mutable-family-member.ts +2 -3
- package/src/realtime-react/use-pull-selector-family-member.ts +5 -6
- package/src/realtime-react/use-push.ts +7 -3
- package/src/realtime-react/use-realtime-service.ts +11 -11
- package/src/realtime-react/use-single-effect.ts +11 -14
- package/src/realtime-server/{realtime-server-stores/server-sync-store.ts → continuity/continuity-store.ts} +1 -1
- package/src/realtime-server/continuity/prepare-to-sync-realtime-continuity.ts +1 -1
- package/src/realtime-server/continuity/prepare-to-track-client-acknowledgement.ts +3 -5
- package/src/realtime-server/continuity/subscribe-to-continuity-actions.ts +1 -1
- package/src/realtime-server/employ-socket.ts +14 -0
- package/src/realtime-server/index.ts +2 -20
- package/src/realtime-server/ipc-sockets/child-socket.ts +125 -66
- package/src/realtime-server/ipc-sockets/custom-socket.ts +16 -14
- package/src/realtime-server/ipc-sockets/parent-socket.ts +81 -58
- package/src/realtime-server/realtime-family-provider.ts +78 -29
- package/src/realtime-server/realtime-mutable-family-provider.ts +80 -31
- package/src/realtime-server/realtime-mutable-provider.ts +30 -22
- package/src/realtime-server/realtime-server-stores/index.ts +0 -2
- package/src/realtime-server/realtime-server-stores/server-room-external-store.ts +77 -36
- package/src/realtime-server/realtime-server-stores/server-user-store.ts +12 -1
- package/src/realtime-server/realtime-state-provider.ts +30 -29
- package/src/realtime-server/realtime-state-receiver.ts +62 -16
- package/src/realtime-server/server-config.ts +9 -0
- package/src/realtime-server/socket-interface.ts +14 -0
- package/src/realtime-testing/setup-realtime-test.tsx +56 -23
- package/src/web/index.ts +1 -1
- package/src/web/{persist-sync.ts → storage-sync.ts} +5 -2
- package/src/internal/store/mint-or-counterfeit.ts +0 -108
- package/src/realtime-react/on-mount.ts +0 -5
- package/src/realtime-server/realtime-server-stores/server-room-external-actions.ts +0 -79
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"has-role-hv4-hJMw.js","names":["superResolve: ((value: T) => void) | undefined","superReject: ((reason?: any) => void) | undefined","withdrawn: AtomIOInternalResource | undefined","target: Store | null","val: E | T","def: E | T","MUST_CREATE: unique symbol","DO_NOT_CREATE: unique symbol","stateToken: ReadableToken<T, KK, E> & { counterfeit: true }","token: ReadableToken<T, KK, E>","stateToken: ReadableToken<T, KK, E>","existingToken: ReadableToken<T, K, E> | undefined","brandNewToken: ReadableToken<T, K, E> | undefined","family: ReadableFamily<T, K, E> | undefined","subKey: K | undefined","token: ReadableToken<T, K, E>","subType: `readable` | `writable`","stateCreationEvent: StateCreationEvent<any>","state: ReadableState<any, any> | undefined","stateCreationEvent: StateCreationEvent<any> & TimelineEvent<any>","update: StateUpdate<T>","atomUpdate: AtomUpdateEvent<any>","def: E | T","protoUpdate: ProtoUpdate<E | T>","RESET_STATE: unique symbol","oldValue: T","newValue: T","constant: T","protoUpdate: ProtoUpdate<T>","OWN_OP: unique symbol","JOIN_OP: unique symbol","existingToken: WritableToken<T, K, E> | undefined","brandNewToken: WritableToken<T, K, E> | undefined","token: WritableToken<T, K, E>","family: WritableFamily<T, K, E> | undefined","key: K | null","value: Setter<TT> | TT | typeof RESET_STATE","target: Store & { operation: OpenOperation }","protoUpdate: ProtoUpdate<E | T>","unsubscribe","updateHandler: UpdateHandler<E | T>","familyMetaData: FamilyMetadata | undefined","mutableAtom","newAtom: RegularAtom<T, E>","cleanupFunctions: (() => void)[]"],"sources":["../src/internal/lineage.ts","../src/internal/set-state/become.ts","../src/internal/future.ts","../src/internal/subject.ts","../src/internal/store/deposit.ts","../src/internal/transaction/is-root-store.ts","../src/internal/not-found-error.ts","../src/internal/store/withdraw.ts","../src/internal/get-state/get-fallback.ts","../src/internal/safe-compute.ts","../src/internal/get-state/read-or-compute-value.ts","../src/internal/families/get-family-of-token.ts","../src/internal/families/mint-in-store.ts","../src/internal/get-state/reduce-reference.ts","../src/internal/get-state/get-from-store.ts","../src/internal/families/seek-in-store.ts","../src/internal/operation.ts","../src/internal/set-state/dispatch-state-update.ts","../src/internal/set-state/set-atom.ts","../src/internal/set-state/reset-atom-or-selector.ts","../src/internal/set-state/set-into-store.ts","../src/internal/set-state/reset-in-store.ts","../src/internal/set-state/set-selector.ts","../src/internal/set-state/set-atom-or-selector.ts","../src/internal/set-state/operate-on-store.ts","../src/internal/keys.ts","../src/internal/selector/get-selector-dependency-keys.ts","../src/internal/selector/trace-selector-atoms.ts","../src/internal/subscribe/recall-state.ts","../src/internal/subscribe/subscribe-to-root-atoms.ts","../src/internal/subscribe/subscribe-to-state.ts","../src/internal/subscribe/subscribe-to-timeline.ts","../src/internal/mutable/tracker.ts","../src/internal/mutable/transceiver.ts","../src/internal/caching.ts","../src/internal/set-state/evict-downstream.ts","../src/internal/atom/create-regular-atom.ts","../src/internal/atom/has-role.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-redundant-type-constituents */\nexport interface Lineage {\n\tparent: typeof this | null\n\tchild: typeof this | null\n}\n\nexport function newest<T extends Lineage>(\n\tscion: T,\n): Exclude<T[`child`], null> | T {\n\twhile (scion.child !== null) {\n\t\tscion = scion.child\n\t}\n\treturn scion\n}\n\nexport function eldest<T extends Lineage>(\n\tscion: T,\n): Exclude<T[`parent`], T[`child`] | null> {\n\twhile (scion.parent !== null) {\n\t\tscion = scion.parent\n\t}\n\treturn scion as Exclude<T[`parent`], T[`child`] | null>\n}\n","import { isFn } from \"../is-fn\"\n\nexport function become<T>(\n\tnextVersionOfThing: T | ((prev: T) => T),\n\toriginalThing: T,\n): T {\n\tif (isFn(nextVersionOfThing)) {\n\t\treturn nextVersionOfThing(originalThing)\n\t}\n\treturn nextVersionOfThing\n}\n","/**\n * A Promise whose incoming value can be hot swapped.\n * @internal\n * @private\n * @typeParam T The type of the value that the promise will resolve to.\n *\n * @remarks\n * Can be constructed like a Promise, or from an existing Promise.\n */\nexport class Future<T> extends Promise<T> {\n\tprivate fate: Promise<T> | undefined\n\tprivate resolve: (value: T) => void\n\tprivate reject: (reason?: any) => void\n\n\tpublic done = false\n\n\tpublic constructor(\n\t\texecutor:\n\t\t\t| Promise<T>\n\t\t\t| ((resolve: (value: T) => void, reject: (reason?: any) => void) => void),\n\t) {\n\t\tlet superResolve: ((value: T) => void) | undefined\n\t\tlet superReject: ((reason?: any) => void) | undefined\n\t\tsuper((resolve, reject) => {\n\t\t\tsuperResolve = resolve\n\t\t\tsuperReject = reject\n\t\t})\n\t\tthis.resolve = superResolve as (value: T) => void\n\t\tthis.reject = superReject as (reason?: any) => void\n\t\tthis.use(executor instanceof Promise ? executor : new Promise(executor))\n\t}\n\n\tprivate pass(promise: Promise<T>, value: T) {\n\t\tif (promise === this.fate) {\n\t\t\tthis.resolve(value)\n\t\t\tthis.done = true\n\t\t}\n\t}\n\tprivate fail(promise: Promise<T>, reason: any) {\n\t\tif (promise === this.fate) {\n\t\t\tthis.reject(reason)\n\t\t\tthis.done = true\n\t\t}\n\t}\n\n\tpublic use(value: Promise<T> | T): void {\n\t\tif (this === value) {\n\t\t\treturn\n\t\t}\n\t\tif (value instanceof Promise) {\n\t\t\tconst promise = value\n\t\t\tthis.fate = promise\n\t\t\tpromise.then(\n\t\t\t\t(resolved) => {\n\t\t\t\t\tthis.pass(promise, resolved)\n\t\t\t\t},\n\t\t\t\t(reason) => {\n\t\t\t\t\tthis.fail(promise, reason)\n\t\t\t\t},\n\t\t\t)\n\t\t} else {\n\t\t\tthis.resolve(value)\n\t\t\tthis.fate = undefined\n\t\t}\n\t}\n}\n","export class Subject<T> {\n\tpublic Subscriber!: (value: T) => void\n\n\tpublic subscribers: Map<string, this[`Subscriber`]> = new Map()\n\n\tpublic subscribe(key: string, subscriber: this[`Subscriber`]): () => void {\n\t\tthis.subscribers.set(key, subscriber)\n\t\tconst unsubscribe = () => {\n\t\t\tthis.unsubscribe(key)\n\t\t}\n\t\treturn unsubscribe\n\t}\n\n\tprivate unsubscribe(key: string) {\n\t\tthis.subscribers.delete(key)\n\t}\n\n\tpublic next(value: T): void {\n\t\tconst subscribers = this.subscribers.values()\n\t\tfor (const subscriber of subscribers) {\n\t\t\tsubscriber(value)\n\t\t}\n\t}\n}\n\nexport class StatefulSubject<T> extends Subject<T> {\n\tpublic state: T\n\n\tpublic constructor(initialState: T) {\n\t\tsuper()\n\t\tthis.state = initialState\n\t}\n\n\tpublic next(value: T): void {\n\t\tthis.state = value\n\t\tsuper.next(value)\n\t}\n}\n","import type {\n\tAtomFamilyToken,\n\tAtomIOToken,\n\tAtomToken,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlyPureSelectorFamilyToken,\n\tReadonlyPureSelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorFamilyToken,\n\tSelectorToken,\n\tTimelineManageable,\n\tTimelineToken,\n\tTransactionToken,\n\tWritableFamilyToken,\n\tWritablePureSelectorFamilyToken,\n\tWritablePureSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport type { Transceiver } from \"../mutable\"\nimport type {\n\tAtom,\n\tAtomFamily,\n\tAtomIOInternalResource,\n\tMutableAtom,\n\tMutableAtomFamily,\n\tReadableFamily,\n\tReadableState,\n\tReadonlyPureSelector,\n\tReadonlyPureSelectorFamily,\n\tRegularAtom,\n\tRegularAtomFamily,\n\tSelector,\n\tSelectorFamily,\n\tWritableFamily,\n\tWritablePureSelector,\n\tWritablePureSelectorFamily,\n\tWritableState,\n} from \"../state-types\"\nimport type { Timeline } from \"../timeline\"\nimport type { Transaction } from \"../transaction\"\nimport type { Fn } from \"../utility-types\"\n\nexport function deposit<T, E>(\n\tstate: RegularAtom<T, E>,\n): RegularAtomToken<T, Canonical, E>\nexport function deposit<T extends Transceiver<any, any, any>>(\n\tstate: MutableAtom<T>,\n): MutableAtomToken<T>\nexport function deposit<T, E>(state: Atom<T, E>): AtomToken<T, Canonical, E>\nexport function deposit<T, E>(\n\tstate: WritablePureSelector<T, E>,\n): WritablePureSelectorToken<T, any, E>\nexport function deposit<T, E>(\n\tstate: ReadonlyPureSelector<T, E>,\n): ReadonlyPureSelectorToken<T, any, E>\nexport function deposit<T, E>(state: Selector<T, E>): SelectorToken<T, any, E>\nexport function deposit<T, E>(\n\tstate: WritableState<T, E>,\n): WritableToken<T, any, E>\nexport function deposit<T, E>(\n\tstate: ReadableState<T, E>,\n): ReadableToken<T, any, E>\n\nexport function deposit<T, K extends Canonical, E>(\n\tstate: RegularAtomFamily<T, K, E>,\n): RegularAtomFamilyToken<T, K, E>\nexport function deposit<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(state: MutableAtomFamily<T, K>): MutableAtomFamilyToken<T, K>\nexport function deposit<T, E>(\n\tstate: AtomFamily<T, any, E>,\n): AtomFamilyToken<T, any, E>\nexport function deposit<T, E>(\n\tstate: WritablePureSelectorFamily<T, any, E>,\n): WritablePureSelectorFamilyToken<T, any, E>\nexport function deposit<T, E>(\n\tstate: ReadonlyPureSelectorFamily<T, any, E>,\n): ReadonlyPureSelectorFamilyToken<T, any, E>\nexport function deposit<T, E>(\n\tstate: SelectorFamily<T, any, E>,\n): SelectorFamilyToken<T, any, E>\nexport function deposit<T, E>(\n\tstate: WritableFamily<T, any, E>,\n): WritableFamilyToken<T, any, E>\nexport function deposit<T, E>(\n\tstate: ReadableFamily<T, any, E>,\n): ReadableFamilyToken<T, any, E>\n\nexport function deposit<T extends Fn>(state: Transaction<T>): TransactionToken<T>\nexport function deposit<M extends TimelineManageable>(\n\tstate: Timeline<M>,\n): TimelineToken<M>\n\nexport function deposit(resource: AtomIOInternalResource): AtomIOToken\n\nexport function deposit(state: AtomIOInternalResource): AtomIOToken {\n\tconst token = {\n\t\tkey: state.key,\n\t\ttype: state.type,\n\t} as any\n\tif (`family` in state) {\n\t\ttoken.family = state.family\n\t}\n\treturn token\n}\n","import type { MapOverlay } from \"../overlays/map-overlay\"\nimport type { Store } from \"../store\"\nimport type { Fn } from \"../utility-types\"\nimport type {\n\tTransactionEpoch,\n\tTransactionProgress,\n} from \"./transaction-meta-progress\"\n\nexport interface RootStore extends Store {\n\ttransactionMeta: TransactionEpoch\n\tparent: null\n\tchild: ChildStore | null\n}\nexport interface ChildStore extends Store {\n\ttransactionMeta: TransactionProgress<Fn>\n\tparent: ChildStore | RootStore\n\tchild: ChildStore | null\n\tvalueMap: MapOverlay<string, any>\n}\n\nexport function isRootStore(store: Store): store is RootStore {\n\treturn `epoch` in store.transactionMeta\n}\n\nexport function isChildStore(store: Store): store is ChildStore {\n\treturn `phase` in store.transactionMeta\n}\n","import { type AtomIOToken, PRETTY_TOKEN_TYPES } from \"atom.io\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport type { Store } from \"./store\"\n\nexport class NotFoundError extends Error {\n\tpublic constructor(token: AtomIOToken, store: Store) {\n\t\tsuper(\n\t\t\t`${PRETTY_TOKEN_TYPES[token.type]} ${stringifyJson(token.key)} not found in store \"${\n\t\t\t\tstore.config.name\n\t\t\t}\".`,\n\t\t)\n\t}\n}\n","import type {\n\tAtomFamilyToken,\n\tAtomIOToken,\n\tAtomToken,\n\tHeldSelectorFamilyToken,\n\tHeldSelectorToken,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tPureSelectorFamilyToken,\n\tPureSelectorToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlyHeldSelectorFamilyToken,\n\tReadonlyHeldSelectorToken,\n\tReadonlyPureSelectorFamilyToken,\n\tReadonlyPureSelectorToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorFamilyToken,\n\tSelectorToken,\n\tTimelineManageable,\n\tTimelineToken,\n\tTransactionToken,\n\tWritableFamilyToken,\n\tWritableHeldSelectorFamilyToken,\n\tWritableHeldSelectorToken,\n\tWritablePureSelectorFamilyToken,\n\tWritablePureSelectorToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport type { Transceiver } from \"../mutable\"\nimport { NotFoundError } from \"../not-found-error\"\nimport type {\n\tAtom,\n\tAtomFamily,\n\tAtomIOInternalResource,\n\tHeldSelector,\n\tHeldSelectorFamily,\n\tMutableAtom,\n\tMutableAtomFamily,\n\tPureSelector,\n\tPureSelectorFamily,\n\tReadableFamily,\n\tReadableState,\n\tReadonlyHeldSelector,\n\tReadonlyHeldSelectorFamily,\n\tReadonlyPureSelector,\n\tReadonlyPureSelectorFamily,\n\tReadonlySelector,\n\tReadonlySelectorFamily,\n\tRegularAtom,\n\tRegularAtomFamily,\n\tSelector,\n\tSelectorFamily,\n\tWritableFamily,\n\tWritableHeldSelector,\n\tWritableHeldSelectorFamily,\n\tWritablePureSelector,\n\tWritablePureSelectorFamily,\n\tWritableSelector,\n\tWritableSelectorFamily,\n\tWritableState,\n} from \"../state-types\"\nimport type { Timeline } from \"../timeline\"\nimport type { Transaction } from \"../transaction\"\nimport type { Fn } from \"../utility-types\"\nimport type { Store } from \"./store\"\n\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: RegularAtomToken<T, any, E>,\n): RegularAtom<T, E>\nexport function withdraw<T extends Transceiver<any, any, any>>(\n\tstore: Store,\n\ttoken: MutableAtomToken<T, any>,\n): MutableAtom<T>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: AtomToken<T, any, E>,\n): Atom<T, E>\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: WritableHeldSelectorToken<T>,\n): WritableHeldSelector<T>\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: ReadonlyHeldSelectorToken<T>,\n): ReadonlyHeldSelector<T>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: WritablePureSelectorToken<T, any, E>,\n): WritablePureSelector<T, E>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: ReadonlyPureSelectorToken<T, any, E>,\n): ReadonlyPureSelector<T, E>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: ReadonlySelectorToken<T, any, E>,\n): ReadonlySelector<T, E>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: WritableSelectorToken<T, any, E>,\n): WritableSelector<T, E>\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: HeldSelectorToken<T>,\n): HeldSelector<T>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: PureSelectorToken<T, any, E>,\n): PureSelector<T, E>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: SelectorToken<T, any, E>,\n): Selector<T, E>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: WritableToken<T, any, E>,\n): WritableState<T, E>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: ReadableToken<T, any, E>,\n): ReadableState<T, E>\n\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: RegularAtomFamilyToken<T, K, E>,\n): RegularAtomFamily<T, K, E>\nexport function withdraw<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(store: Store, token: MutableAtomFamilyToken<T, K>): MutableAtomFamily<T, K>\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: AtomFamilyToken<T, K, E>,\n): AtomFamily<T, K, E>\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: ReadonlyHeldSelectorFamilyToken<T, K>,\n): ReadonlyHeldSelectorFamily<T, K>\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: WritableHeldSelectorFamilyToken<T, K>,\n): WritableHeldSelectorFamily<T, K>\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: ReadonlyPureSelectorFamilyToken<T, K, E>,\n): ReadonlyPureSelectorFamily<T, K, E>\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: WritablePureSelectorFamilyToken<T, K, E>,\n): WritablePureSelectorFamily<T, K, E>\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: ReadonlySelectorFamilyToken<T, K, E>,\n): ReadonlySelectorFamily<T, K, E>\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: WritableSelectorFamilyToken<T, K, E>,\n): WritableSelectorFamily<T, K, E>\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: HeldSelectorFamilyToken<T, K>,\n): HeldSelectorFamily<T, K>\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: PureSelectorFamilyToken<T, K, E>,\n): PureSelectorFamily<T, K, E>\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: SelectorFamilyToken<T, K, E>,\n): SelectorFamily<T, K, E>\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: WritableFamilyToken<T, K, E>,\n): WritableFamily<T, K, E>\nexport function withdraw<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<T, K, E>,\n): ReadableFamily<T, K, E>\n\nexport function withdraw<T extends Fn>(\n\tstore: Store,\n\ttoken: TransactionToken<T>,\n): Transaction<T extends Fn ? T : never>\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: TimelineToken<T>,\n): Timeline<T extends TimelineManageable ? T : never>\n\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: WritableToken<T, any, E>,\n): WritableState<T, E>\nexport function withdraw<T, E>(\n\tstore: Store,\n\ttoken: ReadableToken<T, any, E>,\n): ReadableState<T, E>\n\nexport function withdraw(\n\tstore: Store,\n\ttoken: AtomIOToken,\n): AtomIOInternalResource\n\nexport function withdraw(\n\tstore: Store,\n\ttoken: AtomIOToken,\n): AtomIOInternalResource {\n\tlet withdrawn: AtomIOInternalResource | undefined\n\tlet target: Store | null = store\n\twhile (target !== null) {\n\t\tswitch (token.type) {\n\t\t\tcase `atom`:\n\t\t\tcase `mutable_atom`:\n\t\t\t\twithdrawn = target.atoms.get(token.key)\n\t\t\t\tbreak\n\t\t\tcase `writable_pure_selector`:\n\t\t\tcase `writable_held_selector`:\n\t\t\t\twithdrawn = target.writableSelectors.get(token.key)\n\t\t\t\tbreak\n\t\t\tcase `readonly_pure_selector`:\n\t\t\tcase `readonly_held_selector`:\n\t\t\t\twithdrawn = target.readonlySelectors.get(token.key)\n\t\t\t\tbreak\n\t\t\tcase `atom_family`:\n\t\t\tcase `mutable_atom_family`:\n\t\t\tcase `writable_pure_selector_family`:\n\t\t\tcase `readonly_pure_selector_family`:\n\t\t\tcase `writable_held_selector_family`:\n\t\t\tcase `readonly_held_selector_family`:\n\t\t\t\twithdrawn = target.families.get(token.key)\n\t\t\t\tbreak\n\t\t\tcase `timeline`:\n\t\t\t\twithdrawn = target.timelines.get(token.key)\n\t\t\t\tbreak\n\t\t\tcase `transaction`:\n\t\t\t\twithdrawn = target.transactions.get(token.key)\n\t\t\t\tbreak\n\t\t}\n\t\tif (withdrawn) {\n\t\t\treturn withdrawn\n\t\t}\n\t\ttarget = target.child\n\t}\n\tthrow new NotFoundError(token, store)\n}\n","import type { ReadableToken, ViewOf } from \"atom.io\"\nimport { type Canonical, stringifyJson } from \"atom.io/json\"\n\nimport type { ReadableFamily } from \"../state-types\"\nimport type { Store } from \"../store\"\n\nexport function getFallback<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: ReadableToken<T, K, E>,\n\tfamily: ReadableFamily<T, K, E>,\n\tsubKey: NoInfer<K>,\n): ViewOf<E | T> {\n\tconst disposal = store.disposalTraces.buffer.find(\n\t\t(item) => item?.key === stringifyJson(subKey),\n\t)\n\tstore.logger.error(\n\t\t`❌`,\n\t\ttoken.type,\n\t\ttoken.key,\n\t\t`gets a fallback value because key`,\n\t\tsubKey,\n\t\t`is not allocated`,\n\t\tdisposal\n\t\t\t? `This key was previously disposed:\\n${disposal.trace}`\n\t\t\t: `(no previous disposal trace found)`,\n\t)\n\tswitch (family.type) {\n\t\tcase `mutable_atom_family`: {\n\t\t\tif (store.defaults.has(family.key)) {\n\t\t\t\treturn store.defaults.get(family.key)\n\t\t\t}\n\t\t\tconst defaultValue = new family.class()\n\t\t\tstore.defaults.set(family.key, defaultValue)\n\t\t\treturn defaultValue.READONLY_VIEW\n\t\t}\n\t\tcase `atom_family`: {\n\t\t\tif (store.defaults.has(family.key)) {\n\t\t\t\treturn store.defaults.get(family.key)\n\t\t\t}\n\t\t\tconst def = family.default as (key: K) => T\n\t\t\tconst defaultValue = def(subKey)\n\t\t\tstore.defaults.set(family.key, defaultValue)\n\t\t\treturn defaultValue as ViewOf<T>\n\t\t}\n\t\tcase `readonly_pure_selector_family`:\n\t\tcase `writable_pure_selector_family`:\n\t\tcase `readonly_held_selector_family`:\n\t\tcase `writable_held_selector_family`: {\n\t\t\tif (store.defaults.has(family.key)) {\n\t\t\t\treturn store.defaults.get(family.key)\n\t\t\t}\n\t\t\tconst defaultValue = family.default(subKey)\n\t\t\tstore.defaults.set(family.key, defaultValue)\n\t\t\treturn defaultValue as ViewOf<T>\n\t\t}\n\t}\n}\n","import { writeToCache } from \"./caching\"\nimport { isFn } from \"./is-fn\"\nimport type { PureSelector, RegularAtom } from \"./state-types\"\nimport type { Store } from \"./store\"\n\nexport function safeCompute<T, E>(\n\ttarget: Store,\n\tstate: PureSelector<T, E> | RegularAtom<T, E>,\n): E | T {\n\tconst { type, key, catch: canCatch } = state\n\tswitch (type) {\n\t\tcase `readonly_pure_selector`:\n\t\tcase `writable_pure_selector`: {\n\t\t\tlet val: E | T\n\t\t\ttarget.logger.info(`🧮`, type, key, `computing value`)\n\t\t\ttry {\n\t\t\t\tval = state.getFrom(target)\n\t\t\t\tif (val instanceof Promise) {\n\t\t\t\t\treturn (val as Promise<E & T>).catch((thrown) => {\n\t\t\t\t\t\ttarget.logger.error(`💥`, type, key, `rejected:`, thrown)\n\t\t\t\t\t\tif (canCatch) {\n\t\t\t\t\t\t\tfor (const Class of canCatch) {\n\t\t\t\t\t\t\t\tif (thrown instanceof Class) {\n\t\t\t\t\t\t\t\t\treturn thrown\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\tthrow thrown\n\t\t\t\t\t}) as E | T\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\ttarget.logger.error(`💥`, type, key, `rejected:`, e)\n\t\t\t\tif (canCatch) {\n\t\t\t\t\tfor (const Class of canCatch) {\n\t\t\t\t\t\tif (e instanceof Class) {\n\t\t\t\t\t\t\treturn writeToCache(target, state, e)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthrow e\n\t\t\t}\n\t\t\tconst cachedValue = writeToCache(target, state, val)\n\t\t\treturn cachedValue\n\t\t}\n\t\tcase `atom`: {\n\t\t\tlet def: E | T\n\t\t\tif (isFn(state.default)) {\n\t\t\t\ttry {\n\t\t\t\t\tdef = state.default()\n\t\t\t\t\tif (def instanceof Promise) {\n\t\t\t\t\t\tdef = (def as Promise<T> & T).catch<E | T>((thrown) => {\n\t\t\t\t\t\t\ttarget.logger.error(`💥`, type, key, `rejected:`, thrown)\n\t\t\t\t\t\t\tif (canCatch) {\n\t\t\t\t\t\t\t\tfor (const Class of canCatch) {\n\t\t\t\t\t\t\t\t\tif (thrown instanceof Class) {\n\t\t\t\t\t\t\t\t\t\treturn thrown\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthrow thrown\n\t\t\t\t\t\t}) as E | T\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\ttarget.logger.error(`💥`, type, key, `rejected:`, e)\n\t\t\t\t\tif (canCatch) {\n\t\t\t\t\t\tfor (const Class of canCatch) {\n\t\t\t\t\t\t\tif (e instanceof Class) {\n\t\t\t\t\t\t\t\tdef = writeToCache(target, state, e)\n\t\t\t\t\t\t\t\ttarget.logger.info(\n\t\t\t\t\t\t\t\t\t`✨`,\n\t\t\t\t\t\t\t\t\tstate.type,\n\t\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\t\t`computed default`,\n\t\t\t\t\t\t\t\t\tdef,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\treturn def\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthrow e\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdef = state.default\n\t\t\t\ttarget.logger.info(`✨`, state.type, key, `using static default`, def)\n\t\t\t}\n\t\t\tconst cachedValue = writeToCache(target, state, def)\n\t\t\treturn cachedValue\n\t\t}\n\t}\n}\n","import type { ViewOf } from \"atom.io\"\n\nimport { readFromCache, writeToCache } from \"../caching\"\nimport { safeCompute } from \"../safe-compute\"\nimport type { ReadableState } from \"../state-types\"\nimport type { Store } from \"../store\"\n\nexport function readOrComputeValue<T, E>(\n\ttarget: Store,\n\tstate: ReadableState<T, E>,\n\tmut?: undefined,\n): ViewOf<E | T>\nexport function readOrComputeValue<T, E>(\n\ttarget: Store,\n\tstate: ReadableState<T, E>,\n\tmut: `mut`,\n): E | T\nexport function readOrComputeValue<T, E>(\n\ttarget: Store,\n\tstate: ReadableState<T, E>,\n\tmut: `mut` | undefined,\n): E | T {\n\tif (target.valueMap.has(state.key)) {\n\t\treturn readFromCache(target, state, mut)\n\t}\n\ttarget.logger.info(`❔`, state.type, state.key, `value not found in cache`)\n\tconst { key } = state\n\tswitch (state.type) {\n\t\tcase `readonly_held_selector`:\n\t\tcase `writable_held_selector`:\n\t\t\ttarget.logger.info(`🧮`, state.type, key, `computing value`)\n\t\t\treturn state.getFrom(target)\n\t\tcase `writable_pure_selector`:\n\t\tcase `readonly_pure_selector`:\n\t\tcase `atom`:\n\t\t\treturn safeCompute(target, state)\n\t\tcase `mutable_atom`: {\n\t\t\tconst instance = new state.class()\n\t\t\ttarget.logger.info(`✨`, state.type, key, `created new instance`, instance)\n\t\t\tconst cachedValue = writeToCache(target, state, instance)\n\t\t\treturn cachedValue\n\t\t}\n\t}\n}\n","import type {\n\tMutableAtomToken,\n\tReadableToken,\n\tReadonlyPureSelectorToken,\n\tRegularAtomToken,\n\tWritablePureSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport type { Transceiver } from \"../mutable\"\nimport type {\n\tMutableAtomFamily,\n\tReadableFamily,\n\tReadonlyPureSelectorFamily,\n\tRegularAtomFamily,\n\tWritableFamily,\n\tWritablePureSelectorFamily,\n} from \"../state-types\"\nimport { type Store, withdraw } from \"../store\"\n\nexport function getFamilyOfToken<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n>(store: Store, token: MutableAtomToken<T, K>): MutableAtomFamily<T, K>\n\nexport function getFamilyOfToken<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: RegularAtomToken<T, K, E>,\n): RegularAtomFamily<T, K, E>\n\nexport function getFamilyOfToken<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: WritablePureSelectorToken<T, K, E>,\n): WritablePureSelectorFamily<T, K, E>\n\nexport function getFamilyOfToken<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: ReadonlyPureSelectorToken<T, K, E>,\n): ReadonlyPureSelectorFamily<T, K, E>\n\nexport function getFamilyOfToken<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: WritableToken<T, K, E>,\n): WritableFamily<T, K, E>\n\nexport function getFamilyOfToken<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: ReadableToken<T, K, E>,\n): ReadableFamily<T, K, E>\n\nexport function getFamilyOfToken(\n\tstore: Store,\n\ttoken: ReadableToken<any, any, any>,\n): ReadableFamily<any, any, any> {\n\treturn withdraw(store, {\n\t\t// biome-ignore lint/style/noNonNullAssertion: family is required\n\t\tkey: token.family!.key,\n\t\ttype: `${token.type}_family`,\n\t})\n}\n","import type { ReadableToken, WritableToken } from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport type { ReadableFamily } from \"../state-types\"\nimport type { Store } from \"../store\"\n\nexport const FAMILY_MEMBER_TOKEN_TYPES = {\n\tatom_family: `atom`,\n\tmolecule_family: `molecule`,\n\tmutable_atom_family: `mutable_atom`,\n\treadonly_held_selector_family: `readonly_held_selector`,\n\treadonly_pure_selector_family: `readonly_pure_selector`,\n\twritable_held_selector_family: `writable_held_selector`,\n\twritable_pure_selector_family: `writable_pure_selector`,\n} as const\n\nexport const MUST_CREATE: unique symbol = Symbol(`MUST_CREATE`)\nexport const DO_NOT_CREATE: unique symbol = Symbol(`DO_NOT_CREATE`)\n\nexport function mintInStore<T, K extends Canonical, KK extends K, E>(\n\tmustCreate: typeof DO_NOT_CREATE | typeof MUST_CREATE,\n\tstore: Store,\n\tfamily: ReadableFamily<T, K, E>,\n\tkey: KK,\n): WritableToken<T, KK, E>\nexport function mintInStore<T, K extends Canonical, KK extends K, E>(\n\tmustCreate: typeof DO_NOT_CREATE | typeof MUST_CREATE,\n\tstore: Store,\n\tfamily: ReadableFamily<T, K, E>,\n\tkey: KK,\n): ReadableToken<T, KK, E>\nexport function mintInStore<T, K extends Canonical, KK extends K, E>(\n\tmustCreate: typeof DO_NOT_CREATE | typeof MUST_CREATE,\n\tstore: Store,\n\tfamily: ReadableFamily<T, K, E>,\n\tkey: KK,\n): ReadableToken<T, KK, E> {\n\tconst stringKey = stringifyJson(key)\n\tconst molecule = store.molecules.get(stringKey)\n\n\tconst cannotCreate = !molecule && store.config.lifespan === `immortal`\n\n\tif (cannotCreate) {\n\t\tconst { type: familyType, key: familyKey } = family\n\t\tstore.logger.warn(\n\t\t\t`💣`,\n\t\t\t`key`,\n\t\t\tstringKey,\n\t\t\t`was used to mint a counterfeit token for`,\n\t\t\tfamilyType,\n\t\t\t`\"${familyKey}\"`,\n\t\t)\n\t\tconst fullKey = `${familyKey}(${stringKey})`\n\t\tconst type = FAMILY_MEMBER_TOKEN_TYPES[familyType]\n\t\tconst stateToken: ReadableToken<T, KK, E> & { counterfeit: true } = {\n\t\t\tcounterfeit: true,\n\t\t\tkey: fullKey,\n\t\t\ttype,\n\t\t\tfamily: {\n\t\t\t\tkey: familyKey,\n\t\t\t\tsubKey: stringKey,\n\t\t\t},\n\t\t}\n\n\t\treturn stateToken\n\t}\n\n\tlet token: ReadableToken<T, KK, E>\n\tif (mustCreate === MUST_CREATE) {\n\t\tstore.logger.info(\n\t\t\t`👪`,\n\t\t\tfamily.type,\n\t\t\tfamily.key,\n\t\t\t`adds member`,\n\t\t\ttypeof key === `string` ? `\\`${key}\\`` : key,\n\t\t)\n\t\ttoken = family.create(key)\n\t\tif (molecule) {\n\t\t\tstore.moleculeData.set(stringKey, family.key)\n\t\t}\n\t} else {\n\t\tconst { type: familyType, key: familyKey } = family\n\t\tconst fullKey = `${familyKey}(${stringKey})`\n\t\tconst type = FAMILY_MEMBER_TOKEN_TYPES[familyType]\n\t\tconst stateToken: ReadableToken<T, KK, E> = {\n\t\t\tkey: fullKey,\n\t\t\ttype,\n\t\t\tfamily: {\n\t\t\t\tkey: familyKey,\n\t\t\t\tsubKey: stringKey,\n\t\t\t},\n\t\t}\n\n\t\treturn stateToken\n\t}\n\n\treturn token\n}\n","import type {\n\tReadableFamilyToken,\n\tReadableToken,\n\tStateCreationEvent,\n} from \"atom.io\"\nimport { type Canonical, parseJson } from \"atom.io/json\"\n\nimport { seekInStore } from \"../families\"\nimport { getFamilyOfToken } from \"../families/get-family-of-token\"\nimport { mintInStore, MUST_CREATE } from \"../families/mint-in-store\"\nimport { newest } from \"../lineage\"\nimport type { ReadableFamily } from \"../state-types\"\nimport type { Store } from \"../store\"\nimport { withdraw } from \"../store\"\nimport type { Subject } from \"../subject\"\nimport { isChildStore, isRootStore } from \"../transaction\"\n\nexport function reduceReference<T, K extends Canonical, E>(\n\tstore: Store,\n\t...params:\n\t\t| [token: ReadableFamilyToken<T, K, E>, key: NoInfer<K>]\n\t\t| [token: ReadableToken<T, K, E>]\n): {\n\ttoken: ReadableToken<T, K, E>\n\tfamily: ReadableFamily<T, K, E> | undefined\n\tsubKey: NoInfer<K> | undefined\n\tisNew: boolean\n} {\n\tlet existingToken: ReadableToken<T, K, E> | undefined\n\tlet brandNewToken: ReadableToken<T, K, E> | undefined\n\tlet family: ReadableFamily<T, K, E> | undefined\n\tlet subKey: K | undefined\n\tlet token: ReadableToken<T, K, E>\n\tif (params.length === 1) {\n\t\ttoken = params[0]\n\t\tif (`family` in token) {\n\t\t\tconst familyToken = getFamilyOfToken(store, token)\n\t\t\tfamily = withdraw(store, familyToken) as ReadableFamily<T, K, E>\n\t\t\tsubKey = parseJson(token.family.subKey)\n\t\t\texistingToken = seekInStore(store, familyToken, subKey)\n\t\t\tif (`counterfeit` in token) {\n\t\t\t\treturn {\n\t\t\t\t\ttoken,\n\t\t\t\t\tfamily,\n\t\t\t\t\tsubKey,\n\t\t\t\t\tisNew: false,\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!existingToken) {\n\t\t\t\tbrandNewToken = mintInStore(MUST_CREATE, store, familyToken, subKey)\n\t\t\t\ttoken = brandNewToken\n\t\t\t} else {\n\t\t\t\ttoken = existingToken\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfamily = withdraw(store, params[0])\n\t\tsubKey = params[1]\n\t\texistingToken = seekInStore(store, family, subKey)\n\t\tif (!existingToken) {\n\t\t\tbrandNewToken = mintInStore(MUST_CREATE, store, family, subKey)\n\t\t\ttoken = brandNewToken\n\t\t} else {\n\t\t\ttoken = existingToken\n\t\t}\n\t}\n\n\tconst isCounterfeit = `counterfeit` in token\n\tconst isNewlyCreated = Boolean(brandNewToken) && isCounterfeit === false\n\tif (isNewlyCreated && family) {\n\t\tlet subType: `readable` | `writable`\n\t\tswitch (token.type) {\n\t\t\tcase `readonly_pure_selector`:\n\t\t\tcase `readonly_held_selector`:\n\t\t\t\tsubType = `readable`\n\t\t\t\tbreak\n\t\t\tcase `atom`:\n\t\t\tcase `mutable_atom`:\n\t\t\tcase `writable_pure_selector`:\n\t\t\tcase `writable_held_selector`:\n\t\t\t\tsubType = `writable`\n\t\t\t\tbreak\n\t\t}\n\t\tconst stateCreationEvent: StateCreationEvent<any> = {\n\t\t\ttype: `state_creation`,\n\t\t\tsubType,\n\t\t\ttoken,\n\t\t\ttimestamp: Date.now(),\n\t\t}\n\t\tconst familySubject = family.subject as Subject<StateCreationEvent<any>>\n\t\tfamilySubject.next(stateCreationEvent)\n\t\tconst target = newest(store)\n\t\tif (token.family) {\n\t\t\tif (isRootStore(target)) {\n\t\t\t\tswitch (token.type) {\n\t\t\t\t\tcase `atom`:\n\t\t\t\t\tcase `mutable_atom`:\n\t\t\t\t\t\tstore.on.atomCreation.next(token)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase `writable_pure_selector`:\n\t\t\t\t\tcase `readonly_pure_selector`:\n\t\t\t\t\tcase `writable_held_selector`:\n\t\t\t\t\tcase `readonly_held_selector`:\n\t\t\t\t\t\tstore.on.selectorCreation.next(token)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tisChildStore(target) &&\n\t\t\t\ttarget.on.transactionApplying.state === null\n\t\t\t) {\n\t\t\t\ttarget.transactionMeta.update.subEvents.push(stateCreationEvent)\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\ttoken,\n\t\tfamily,\n\t\tsubKey,\n\t\tisNew: Boolean(brandNewToken),\n\t}\n}\n","import type { ReadableFamilyToken, ReadableToken, ViewOf } from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport { type Store, withdraw } from \"../store\"\nimport { getFallback } from \"./get-fallback\"\nimport { readOrComputeValue } from \"./read-or-compute-value\"\nimport { reduceReference } from \"./reduce-reference\"\n\nexport function getFromStore<T>(store: Store, token: ReadableToken<T>): T\n\nexport function getFromStore<T, E>(\n\tstore: Store,\n\ttoken: ReadableToken<T, any, E>,\n): E | T\n\nexport function getFromStore<T, K extends Canonical, E>(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<T, K, E>,\n\tkey: NoInfer<K>,\n): ViewOf<E | T>\n\nexport function getFromStore<T, K extends Canonical, E>(\n\tstore: Store,\n\t...params:\n\t\t| [token: ReadableFamilyToken<T, K, E>, key: NoInfer<K>]\n\t\t| [token: ReadableToken<T, any, E>]\n): ViewOf<E | T>\n\nexport function getFromStore<T, K extends Canonical, E>(\n\tstore: Store,\n\t...params:\n\t\t| [token: ReadableFamilyToken<T, K, E>, key: NoInfer<K>]\n\t\t| [token: ReadableToken<T, any, E>]\n): ViewOf<E | T> {\n\tconst { token, family, subKey } = reduceReference(store, ...params)\n\n\tif (`counterfeit` in token && family && subKey) {\n\t\treturn getFallback(store, token, family, subKey)\n\t}\n\tconst state = withdraw(store, token)\n\n\treturn readOrComputeValue(store, state)\n}\n","import type {\n\tAtomFamilyToken,\n\tAtomToken,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlyPureSelectorFamilyToken,\n\tReadonlyPureSelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorFamilyToken,\n\tSelectorToken,\n\tWritableFamilyToken,\n\tWritablePureSelectorFamilyToken,\n\tWritablePureSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport { newest } from \"../lineage\"\nimport type { Transceiver } from \"../mutable\"\nimport type { ReadableState } from \"../state-types\"\nimport { deposit, type Store } from \"../store\"\n\nexport function seekInStore<\n\tT extends Transceiver<any, any, any>,\n\tK extends Canonical,\n\tKey extends K,\n>(\n\tstore: Store,\n\ttoken: MutableAtomFamilyToken<T, K>,\n\tkey: Key,\n): MutableAtomToken<T, Key> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\ttoken: RegularAtomFamilyToken<T, K, E>,\n\tkey: Key,\n): RegularAtomToken<T, Key, E> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\ttoken: AtomFamilyToken<T, K, E>,\n\tkey: Key,\n): AtomToken<T, Key, E> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\ttoken: WritablePureSelectorFamilyToken<T, K, E>,\n\tkey: Key,\n): WritablePureSelectorToken<T, Key, E> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\ttoken: ReadonlyPureSelectorFamilyToken<T, K, E>,\n\tkey: Key,\n): ReadonlyPureSelectorToken<T, Key, E> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\ttoken: SelectorFamilyToken<T, K, E>,\n\tkey: Key,\n): SelectorToken<T, Key, E> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\ttoken: WritableFamilyToken<T, K, E>,\n\tkey: Key,\n): WritableToken<T, Key, E> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K, E>(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<T, K, E>,\n\tkey: Key,\n): ReadableToken<T, Key, E> | undefined\n\nexport function seekInStore(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<any, any, any>,\n\tkey: Canonical,\n): ReadableToken<any, any, any> | undefined {\n\tconst subKey = stringifyJson(key)\n\tconst fullKey = `${token.key}(${subKey})`\n\tconst target = newest(store)\n\tlet state: ReadableState<any, any> | undefined\n\tswitch (token.type) {\n\t\tcase `atom_family`:\n\t\tcase `mutable_atom_family`:\n\t\t\tstate = target.atoms.get(fullKey)\n\t\t\tbreak\n\t\tcase `writable_held_selector_family`:\n\t\tcase `writable_pure_selector_family`:\n\t\t\tstate = target.writableSelectors.get(fullKey)\n\t\t\tbreak\n\t\tcase `readonly_held_selector_family`:\n\t\tcase `readonly_pure_selector_family`:\n\t\t\tstate = target.readonlySelectors.get(fullKey)\n\t\t\tbreak\n\t}\n\tif (state) {\n\t\treturn deposit(state)\n\t}\n\treturn state\n}\n","import type { AtomUpdateEvent, ReadableToken, StateCreationEvent } from \"atom.io\"\n\nimport type { Store } from \"./store\"\nimport { isChildStore } from \"./transaction/is-root-store\"\n\nexport type OperationProgress =\n\t| OpenOperation<any>\n\t| {\n\t\t\topen: false\n\t }\nexport type OpenOperation<\n\tR extends ReadableToken<any, any> = ReadableToken<any, any>,\n> = {\n\topen: true\n\ttoken: R\n\tdone: Set<string>\n\tprev: Map<string, any>\n\ttimestamp: number\n\tsubEvents: (AtomUpdateEvent<any> | StateCreationEvent<any>)[]\n}\n\nexport function openOperation(\n\tstore: Store,\n\ttoken: ReadableToken<any, any, any>,\n): number | (Store & { operation: OpenOperation }) {\n\tif (store.operation.open) {\n\t\tconst rejectionTime = performance.now()\n\t\tstore.logger.info(\n\t\t\t`🚫`,\n\t\t\ttoken.type,\n\t\t\ttoken.key,\n\t\t\t`deferring setState at T-${rejectionTime} until setState for \"${store.operation.token.key}\" is done`,\n\t\t)\n\t\treturn rejectionTime\n\t}\n\tstore.operation = {\n\t\topen: true,\n\t\tdone: new Set(),\n\t\tprev: new Map(),\n\t\ttimestamp: Date.now(),\n\t\ttoken,\n\t\tsubEvents: [],\n\t}\n\tstore.logger.info(\n\t\t`⭕`,\n\t\ttoken.type,\n\t\ttoken.key,\n\t\t`operation start in store \"${store.config.name}\"${\n\t\t\tisChildStore(store)\n\t\t\t\t? ` ${store.transactionMeta.phase} \"${store.transactionMeta.update.token.key}\"`\n\t\t\t\t: ``\n\t\t}`,\n\t)\n\treturn store as Store & { operation: OpenOperation }\n}\n\nexport function closeOperation(store: Store): void {\n\tif (store.operation.open) {\n\t\tstore.logger.info(\n\t\t\t`🔴`,\n\t\t\tstore.operation.token.type,\n\t\t\tstore.operation.token.key,\n\t\t\t`operation done in store \"${store.config.name}\"`,\n\t\t)\n\t}\n\tstore.operation = { open: false }\n\tstore.on.operationClose.next(store.operation)\n}\n\nexport const isDone = (store: Store, key: string): boolean => {\n\tif (!store.operation.open) {\n\t\tstore.logger.error(\n\t\t\t`🐞`,\n\t\t\t`unknown`,\n\t\t\tkey,\n\t\t\t`isDone called outside of an operation. This is probably a bug in AtomIO.`,\n\t\t)\n\t\treturn true\n\t}\n\treturn store.operation.done.has(key)\n}\nexport const markDone = (store: Store, key: string): void => {\n\tif (!store.operation.open) {\n\t\tstore.logger.error(\n\t\t\t`🐞`,\n\t\t\t`unknown`,\n\t\t\tkey,\n\t\t\t`markDone called outside of an operation. This is probably a bug in AtomIO.`,\n\t\t)\n\t\treturn\n\t}\n\tstore.operation.done.add(key)\n}\n","import type {\n\tAtomUpdateEvent,\n\tStateCreationEvent,\n\tStateUpdate,\n\tTimelineEvent,\n} from \"atom.io\"\n\nimport { hasRole } from \"../atom\"\nimport { readOrComputeValue } from \"../get-state\"\nimport { newest } from \"../lineage\"\nimport type { Transceiver } from \"../mutable\"\nimport { isTransceiver } from \"../mutable\"\nimport type { OpenOperation } from \"../operation\"\nimport type { MutableAtom, WritableFamily, WritableState } from \"../state-types\"\nimport { deposit, type Store } from \"../store\"\nimport type { Subject } from \"../subject\"\nimport { isChildStore, isRootStore } from \"../transaction\"\nimport { evictDownstreamFromAtom } from \"./evict-downstream\"\nimport type { ProtoUpdate } from \"./operate-on-store\"\n\nexport function dispatchOrDeferStateUpdate<T, E>(\n\ttarget: Store & { operation: OpenOperation<any> },\n\tstate: WritableState<T, E>,\n\t{ oldValue, newValue }: ProtoUpdate<E | T>,\n\tstateIsNewlyCreated: boolean,\n\tfamily?: WritableFamily<T, any, E>,\n): void {\n\tconst token = deposit(state)\n\tif (stateIsNewlyCreated && family) {\n\t\tstate.subject.next({ newValue })\n\t\tconst stateCreationEvent: StateCreationEvent<any> & TimelineEvent<any> = {\n\t\t\tcheckpoint: true,\n\t\t\ttype: `state_creation`,\n\t\t\tsubType: `writable`,\n\t\t\ttoken,\n\t\t\ttimestamp: Date.now(),\n\t\t\tvalue: newValue,\n\t\t}\n\t\ttarget.operation.subEvents.push(stateCreationEvent)\n\t\tconst familySubject = family.subject as Subject<StateCreationEvent<any>>\n\t\tfamilySubject.next(stateCreationEvent)\n\t\tconst innerTarget = newest(target)\n\t\tif (token.family) {\n\t\t\tif (isRootStore(innerTarget)) {\n\t\t\t\tswitch (token.type) {\n\t\t\t\t\tcase `atom`:\n\t\t\t\t\tcase `mutable_atom`:\n\t\t\t\t\t\ttarget.on.atomCreation.next(token)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tcase `writable_pure_selector`:\n\t\t\t\t\tcase `writable_held_selector`:\n\t\t\t\t\t\ttarget.on.selectorCreation.next(token)\n\t\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tisChildStore(innerTarget) &&\n\t\t\t\tinnerTarget.on.transactionApplying.state === null\n\t\t\t) {\n\t\t\t\tinnerTarget.transactionMeta.update.subEvents.push(stateCreationEvent)\n\t\t\t}\n\t\t}\n\t\treturn /* bailing early here to avoid redundant update */\n\t}\n\tconst { key, subject, type } = state\n\n\tconst update: StateUpdate<T> = {\n\t\toldValue: isTransceiver(oldValue) ? oldValue.READONLY_VIEW : oldValue,\n\t\tnewValue: isTransceiver(newValue) ? newValue.READONLY_VIEW : newValue,\n\t}\n\n\tif (isRootStore(target)) {\n\t\tswitch (type) {\n\t\t\tcase `mutable_atom`:\n\t\t\t\ttarget.logger.info(\n\t\t\t\t\t`📢`,\n\t\t\t\t\ttype,\n\t\t\t\t\tkey,\n\t\t\t\t\t`is now (`,\n\t\t\t\t\tnewValue,\n\t\t\t\t\t`) subscribers:`,\n\t\t\t\t\tsubject.subscribers.keys(),\n\t\t\t\t)\n\t\t\t\tbreak\n\t\t\tcase `atom`:\n\t\t\tcase `writable_pure_selector`:\n\t\t\tcase `writable_held_selector`:\n\t\t\t\ttarget.logger.info(\n\t\t\t\t\t`📢`,\n\t\t\t\t\ttype,\n\t\t\t\t\tkey,\n\t\t\t\t\t`went (`,\n\t\t\t\t\toldValue,\n\t\t\t\t\t`->`,\n\t\t\t\t\tnewValue,\n\t\t\t\t\t`) subscribers:`,\n\t\t\t\t\tsubject.subscribers.keys(),\n\t\t\t\t)\n\t\t}\n\t\tsubject.next(update)\n\t}\n\n\tif (isChildStore(target) && (type === `mutable_atom` || type === `atom`)) {\n\t\tif (target.on.transactionApplying.state === null) {\n\t\t\tif (isTransceiver(newValue)) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst { timestamp } = target.operation\n\t\t\tconst atomUpdate: AtomUpdateEvent<any> = {\n\t\t\t\ttype: `atom_update`,\n\t\t\t\ttoken,\n\t\t\t\ttimestamp,\n\t\t\t\tupdate,\n\t\t\t}\n\t\t\ttarget.transactionMeta.update.subEvents.push(atomUpdate)\n\t\t\ttarget.logger.info(\n\t\t\t\t`📁`,\n\t\t\t\t`atom`,\n\t\t\t\tkey,\n\t\t\t\t`stowed (`,\n\t\t\t\toldValue,\n\t\t\t\t`->`,\n\t\t\t\tnewValue,\n\t\t\t\t`)`,\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t\tif (hasRole(state, `tracker:signal`)) {\n\t\t\tconst keyOfMutable = key.slice(1)\n\t\t\tconst mutable = target.atoms.get(keyOfMutable) as MutableAtom<\n\t\t\t\tTransceiver<unknown, any, any>\n\t\t\t>\n\t\t\tconst transceiver = readOrComputeValue<Transceiver<any, any, any>, never>(\n\t\t\t\ttarget,\n\t\t\t\tmutable,\n\t\t\t\t`mut`,\n\t\t\t)\n\t\t\tconst accepted = transceiver.do(update.newValue) === null\n\t\t\tif (accepted === true) {\n\t\t\t\tevictDownstreamFromAtom(target, mutable)\n\t\t\t}\n\t\t}\n\t}\n}\n","import { writeToCache } from \"../caching\"\nimport { readOrComputeValue } from \"../get-state/read-or-compute-value\"\nimport type { OpenOperation } from \"../operation\"\nimport { markDone } from \"../operation\"\nimport type { Atom } from \"../state-types\"\nimport type { Store } from \"../store\"\nimport { become } from \"./become\"\nimport { evictDownstreamFromAtom } from \"./evict-downstream\"\nimport type { ProtoUpdate } from \"./operate-on-store\"\n\nexport const setAtom = <T>(\n\ttarget: Store & { operation: OpenOperation<any> },\n\tatom: Atom<T, any>,\n\tnext: NoInfer<T> | ((oldValue: T) => NoInfer<T>),\n): ProtoUpdate<T> => {\n\tconst oldValue = readOrComputeValue(target, atom, `mut`)\n\tlet newValue = become(next, oldValue)\n\ttarget.logger.info(`⭐`, `atom`, atom.key, `setting value`, newValue)\n\tnewValue = writeToCache(target, atom, newValue)\n\tmarkDone(target, atom.key)\n\tevictDownstreamFromAtom(target, atom)\n\treturn { oldValue, newValue }\n}\n","import { isFn } from \"../is-fn\"\nimport type { OpenOperation } from \"../operation\"\nimport { safeCompute } from \"../safe-compute\"\nimport { traceRootSelectorAtoms } from \"../selector\"\nimport type { Atom, WritableState } from \"../state-types\"\nimport type { Store } from \"../store\"\nimport { dispatchOrDeferStateUpdate } from \"./dispatch-state-update\"\nimport type { ProtoUpdate } from \"./operate-on-store\"\nimport { setAtom } from \"./set-atom\"\n\nfunction resetAtom<T, E>(\n\ttarget: Store & { operation: OpenOperation },\n\tatom: Atom<T, E>,\n): ProtoUpdate<E | T> {\n\tswitch (atom.type) {\n\t\tcase `mutable_atom`:\n\t\t\treturn setAtom(target, atom, new atom.class())\n\t\tcase `atom`: {\n\t\t\tlet def: E | T\n\t\t\tif (isFn(atom.default)) def = safeCompute(target, atom)\n\t\t\telse def = atom.default\n\t\t\treturn setAtom<E | T>(target, atom, def)\n\t\t}\n\t}\n}\n\nexport function resetAtomOrSelector<T, E>(\n\ttarget: Store & { operation: OpenOperation },\n\tstate: WritableState<T, E>,\n): ProtoUpdate<E | T> {\n\tlet protoUpdate: ProtoUpdate<E | T>\n\tswitch (state.type) {\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\t\tprotoUpdate = resetAtom(target, state)\n\t\t\tbreak\n\t\tcase `writable_held_selector`:\n\t\t\t{\n\t\t\t\tconst atoms = traceRootSelectorAtoms(target, state.key)\n\t\t\t\tfor (const atom of atoms.values()) {\n\t\t\t\t\tconst rootProtoUpdate = resetAtom(target, atom)\n\t\t\t\t\tdispatchOrDeferStateUpdate(target, state, rootProtoUpdate, false)\n\t\t\t\t}\n\t\t\t\tconst value = state.getFrom(target)\n\t\t\t\tprotoUpdate = { oldValue: value, newValue: value }\n\t\t\t}\n\t\t\tbreak\n\t\tcase `writable_pure_selector`:\n\t\t\t{\n\t\t\t\tconst oldValue = safeCompute(target, state)\n\t\t\t\tconst atoms = traceRootSelectorAtoms(target, state.key)\n\t\t\t\tfor (const atom of atoms.values()) {\n\t\t\t\t\tconst rootProtoUpdate = resetAtom(target, atom)\n\t\t\t\t\tdispatchOrDeferStateUpdate(target, state, rootProtoUpdate, false)\n\t\t\t\t}\n\t\t\t\tconst newValue = safeCompute(target, state)\n\t\t\t\tprotoUpdate = { oldValue, newValue }\n\t\t\t}\n\t\t\tbreak\n\t}\n\n\treturn protoUpdate\n}\n","import type { Setter, WritableFamilyToken, WritableToken } from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport type { Store } from \"../store\"\nimport { operateOnStore, OWN_OP } from \"./operate-on-store\"\nimport type { RESET_STATE } from \"./reset-in-store\"\n\nexport function setIntoStore<T, TT extends T>(\n\tstore: Store,\n\ttoken: WritableToken<T, any, any>,\n\tvalue: Setter<TT> | TT | typeof RESET_STATE,\n): void\n\nexport function setIntoStore<T, TT extends T, K extends Canonical>(\n\tstore: Store,\n\ttoken: WritableFamilyToken<T, K, any>,\n\tkey: NoInfer<K>,\n\tvalue: Setter<TT> | TT | typeof RESET_STATE,\n): void\n\nexport function setIntoStore<T, TT extends T, K extends Canonical>(\n\tstore: Store,\n\t...params:\n\t\t| [\n\t\t\t\ttoken: WritableFamilyToken<T, K, any>,\n\t\t\t\tkey: NoInfer<K>,\n\t\t\t\tvalue: Setter<TT> | TT | typeof RESET_STATE,\n\t\t ]\n\t\t| [\n\t\t\t\ttoken: WritableToken<T, any, any>,\n\t\t\t\tvalue: Setter<TT> | TT | typeof RESET_STATE,\n\t\t ]\n): void\n\nexport function setIntoStore<T, TT extends T, K extends Canonical>(\n\tstore: Store,\n\t...params:\n\t\t| [\n\t\t\t\ttoken: WritableFamilyToken<T, K, any>,\n\t\t\t\tkey: NoInfer<K>,\n\t\t\t\tvalue: Setter<TT> | TT | typeof RESET_STATE,\n\t\t ]\n\t\t| [\n\t\t\t\ttoken: WritableToken<T, any, any>,\n\t\t\t\tvalue: Setter<TT> | TT | typeof RESET_STATE,\n\t\t ]\n): void {\n\toperateOnStore(OWN_OP, store, ...params)\n}\n","import type { WritableFamilyToken, WritableToken } from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport type { Store } from \"../store\"\nimport { setIntoStore } from \"./set-into-store\"\n\nexport const RESET_STATE: unique symbol = Symbol(`RESET`)\n\nexport function resetInStore(\n\tstore: Store,\n\ttoken: WritableToken<any, any, any>,\n): void\n\nexport function resetInStore<K extends Canonical>(\n\tstore: Store,\n\ttoken: WritableFamilyToken<any, K, any>,\n\tkey: NoInfer<K>,\n): void\n\nexport function resetInStore<T, K extends Canonical>(\n\tstore: Store,\n\t...params:\n\t\t| [token: WritableFamilyToken<T, K, any>, key: NoInfer<K>]\n\t\t| [token: WritableToken<T, any, any>]\n): void\n\nexport function resetInStore<T, K extends Canonical>(\n\tstore: Store,\n\t...params:\n\t\t| [token: WritableFamilyToken<T, K, any>, key: NoInfer<K>]\n\t\t| [token: WritableToken<T, any, any>]\n): void {\n\tconst subParams = [...params, RESET_STATE] as const\n\tsetIntoStore(store, ...subParams)\n}\n","import { writeToCache } from \"../caching\"\nimport { readOrComputeValue } from \"../get-state\"\nimport { markDone, type OpenOperation } from \"../operation\"\nimport type { WritableSelector } from \"../state-types\"\nimport type { Store } from \"../store\"\nimport { become } from \"./become\"\nimport type { ProtoUpdate } from \"./operate-on-store\"\n\nexport function setSelector<T>(\n\ttarget: Store & { operation: OpenOperation<any> },\n\tselector: WritableSelector<T, any>,\n\tnext: NoInfer<T> | ((oldValue: T) => NoInfer<T>),\n): ProtoUpdate<T> {\n\tlet oldValue: T\n\tlet newValue: T\n\tlet constant: T\n\n\tconst { type, key } = selector\n\n\tswitch (selector.type) {\n\t\tcase `writable_pure_selector`:\n\t\t\toldValue = readOrComputeValue(target, selector, `mut`)\n\t\t\tnewValue = become(next, oldValue)\n\t\t\tnewValue = writeToCache(target, selector, newValue)\n\t\t\tbreak\n\t\tcase `writable_held_selector`:\n\t\t\tconstant = selector.const\n\t\t\tbecome(next, constant)\n\t\t\toldValue = constant\n\t\t\tnewValue = constant\n\t}\n\n\ttarget.logger.info(`⭐`, type, key, `setting to`, newValue)\n\tmarkDone(target, key)\n\tselector.setSelf(newValue)\n\treturn { oldValue, newValue }\n}\n","import type { OpenOperation } from \"../operation\"\nimport type { WritableState } from \"../state-types\"\nimport type { Store } from \"../store\"\nimport type { ProtoUpdate } from \"./operate-on-store\"\nimport { setAtom } from \"./set-atom\"\nimport { setSelector } from \"./set-selector\"\n\nexport const setAtomOrSelector = <T>(\n\ttarget: Store & { operation: OpenOperation },\n\tstate: WritableState<T, any>,\n\tvalue: NoInfer<T> | ((oldValue: T) => NoInfer<T>),\n): ProtoUpdate<T> => {\n\tlet protoUpdate: ProtoUpdate<T>\n\tswitch (state.type) {\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\t\tprotoUpdate = setAtom(target, state, value)\n\t\t\tbreak\n\t\tcase `writable_pure_selector`:\n\t\tcase `writable_held_selector`:\n\t\t\tprotoUpdate = setSelector(target, state, value)\n\t\t\tbreak\n\t}\n\n\treturn protoUpdate\n}\n","import type { Setter, WritableFamilyToken, WritableToken } from \"atom.io\"\nimport { type Canonical, parseJson } from \"atom.io/json\"\n\nimport { seekInStore } from \"../families\"\nimport { getFamilyOfToken } from \"../families/get-family-of-token\"\nimport { mintInStore, MUST_CREATE } from \"../families/mint-in-store\"\nimport type { OpenOperation } from \"../operation\"\nimport { closeOperation, openOperation } from \"../operation\"\nimport type { WritableFamily } from \"../state-types\"\nimport { type Store, withdraw } from \"../store\"\nimport { dispatchOrDeferStateUpdate } from \"./dispatch-state-update\"\nimport { resetAtomOrSelector } from \"./reset-atom-or-selector\"\nimport { RESET_STATE } from \"./reset-in-store\"\nimport { setAtomOrSelector } from \"./set-atom-or-selector\"\n\nexport type ProtoUpdate<T> = { oldValue: T; newValue: T }\n\nexport const OWN_OP: unique symbol = Symbol(`OWN_OP`)\nexport const JOIN_OP: unique symbol = Symbol(`JOIN_OP`)\n\nexport function operateOnStore<T, TT extends T, K extends Canonical, E>(\n\topMode: typeof JOIN_OP | typeof OWN_OP,\n\tstore: Store,\n\t...params:\n\t\t| [\n\t\t\t\ttoken: WritableFamilyToken<T, K, E>,\n\t\t\t\tkey: NoInfer<K>,\n\t\t\t\tvalue: Setter<TT> | TT | typeof RESET_STATE,\n\t\t ]\n\t\t| [\n\t\t\t\ttoken: WritableToken<T, any, E>,\n\t\t\t\tvalue: Setter<TT> | TT | typeof RESET_STATE,\n\t\t ]\n): void {\n\tlet existingToken: WritableToken<T, K, E> | undefined\n\tlet brandNewToken: WritableToken<T, K, E> | undefined\n\tlet token: WritableToken<T, K, E>\n\tlet family: WritableFamily<T, K, E> | undefined\n\tlet key: K | null\n\tlet value: Setter<TT> | TT | typeof RESET_STATE\n\tif (params.length === 2) {\n\t\ttoken = params[0]\n\t\tvalue = params[1]\n\t\tif (`family` in token) {\n\t\t\tfamily = getFamilyOfToken(store, token)\n\t\t\tkey = parseJson(token.family.subKey)\n\t\t\texistingToken = seekInStore(store, family, key)\n\t\t\tif (!existingToken) {\n\t\t\t\ttoken = brandNewToken = mintInStore(MUST_CREATE, store, family, key)\n\t\t\t} else {\n\t\t\t\ttoken = existingToken\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfamily = withdraw(store, params[0])\n\t\tkey = params[1]\n\t\tvalue = params[2]\n\t\texistingToken = seekInStore(store, family, key)\n\t\tif (!existingToken) {\n\t\t\ttoken = brandNewToken = mintInStore(MUST_CREATE, store, family, key)\n\t\t} else {\n\t\t\ttoken = existingToken\n\t\t}\n\t}\n\n\tconst action = value === RESET_STATE ? `reset` : `set`\n\n\tlet target: Store & { operation: OpenOperation }\n\n\tif (opMode === OWN_OP) {\n\t\tconst result = openOperation(store, token)\n\t\tconst rejected = typeof result === `number`\n\t\tif (rejected) {\n\t\t\tconst rejectionTime = result\n\t\t\tconst unsubscribe = store.on.operationClose.subscribe(\n\t\t\t\t`waiting to ${action} \"${token.key}\" at T-${rejectionTime}`,\n\t\t\t\tfunction waitUntilOperationCloseToSetState() {\n\t\t\t\t\tunsubscribe()\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`🟢`,\n\t\t\t\t\t\ttoken.type,\n\t\t\t\t\t\ttoken.key,\n\t\t\t\t\t\t`resuming deferred`,\n\t\t\t\t\t\taction,\n\t\t\t\t\t\t`from T-${rejectionTime}`,\n\t\t\t\t\t)\n\t\t\t\t\toperateOnStore(opMode, store, token, value)\n\t\t\t\t},\n\t\t\t)\n\t\t\treturn\n\t\t}\n\t\ttarget = result\n\t} else {\n\t\ttarget = store as Store & { operation: OpenOperation }\n\t}\n\n\tif (`counterfeit` in token && `family` in token) {\n\t\tconst subKey = token.family.subKey\n\t\tconst disposal = store.disposalTraces.buffer.find(\n\t\t\t(item) => item?.key === subKey,\n\t\t)\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\ttoken.type,\n\t\t\ttoken.key,\n\t\t\t`could not be`,\n\t\t\taction,\n\t\t\t`because key`,\n\t\t\tsubKey,\n\t\t\t`is not allocated.`,\n\t\t\tdisposal\n\t\t\t\t? `this key was previously disposed:${disposal.trace}`\n\t\t\t\t: `(no previous disposal trace found)`,\n\t\t)\n\t\treturn\n\t}\n\n\tconst state = withdraw(target, token)\n\tlet protoUpdate: ProtoUpdate<E | T>\n\tif (value === RESET_STATE) {\n\t\tprotoUpdate = resetAtomOrSelector(target, state)\n\t} else {\n\t\tprotoUpdate = setAtomOrSelector(target, state, value)\n\t}\n\n\tconst isNewlyCreated = Boolean(brandNewToken)\n\tdispatchOrDeferStateUpdate(target, state, protoUpdate, isNewlyCreated, family)\n\n\tif (opMode === OWN_OP) {\n\t\tcloseOperation(target)\n\t}\n}\n","import { newest } from \"./lineage\"\nimport type { Store } from \"./store\"\n\nexport type AtomKey<T> = string & { __atomKey?: never; __brand?: T }\nexport type SelectorKey<T> = string & { __selectorKey?: never; __brand?: T }\nexport type ReadonlySelectorKey<T> = string & {\n\t__readonlySelectorKey?: never\n\t__brand?: T\n}\n\nexport const isAtomKey = (store: Store, key: string): key is AtomKey<unknown> =>\n\tnewest(store).atoms.has(key)\nexport const isSelectorKey = (\n\tstore: Store,\n\tkey: string,\n): key is SelectorKey<unknown> => newest(store).writableSelectors.has(key)\nexport const isReadonlySelectorKey = (\n\tstore: Store,\n\tkey: string,\n): key is ReadonlySelectorKey<unknown> =>\n\tnewest(store).readonlySelectors.has(key)\n\nexport type StateKey<T> = AtomKey<T> | ReadonlySelectorKey<T> | SelectorKey<T>\nexport const isStateKey = (\n\tstore: Store,\n\tkey: string,\n): key is StateKey<unknown> =>\n\tisAtomKey(store, key) ||\n\tisSelectorKey(store, key) ||\n\tisReadonlySelectorKey(store, key)\n","import type { AtomKey, ReadonlySelectorKey, SelectorKey } from \"../keys\"\nimport { isStateKey } from \"../keys\"\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\n\nexport function getSelectorDependencyKeys(\n\tstore: Store,\n\tkey: string,\n): (AtomKey<unknown> | ReadonlySelectorKey<unknown> | SelectorKey<unknown>)[] {\n\tconst sources = newest(store)\n\t\t.selectorGraph.getRelationEntries({ downstreamSelectorKey: key })\n\t\t.filter(([_, { source }]) => source !== key)\n\t\t.map(([_, { source }]) => source)\n\t\t.filter((source) => isStateKey(store, source))\n\treturn sources\n}\n","import { isAtomKey } from \"../keys\"\nimport type { Atom } from \"../state-types\"\nimport type { Store } from \"../store\"\nimport { getSelectorDependencyKeys } from \"./get-selector-dependency-keys\"\n\nexport function traceRootSelectorAtoms(\n\tstore: Store,\n\tselectorKey: string,\n\tcovered: Set<string> = new Set<string>(),\n): Map<string, Atom<any, any>> {\n\tconst dependencies = getSelectorDependencyKeys(store, selectorKey)\n\n\tconst roots = new Map<string, Atom<unknown, unknown>>()\n\n\twhile (dependencies.length > 0) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: just checked length ^^^\n\t\tconst dependencyKey = dependencies.pop()!\n\t\tif (covered.has(dependencyKey)) {\n\t\t\tcontinue\n\t\t}\n\t\tcovered.add(dependencyKey)\n\t\tif (isAtomKey(store, dependencyKey)) {\n\t\t\tconst atom = store.atoms.get(dependencyKey) as Atom<unknown, unknown>\n\t\t\troots.set(atom.key, atom)\n\t\t} else {\n\t\t\tdependencies.push(...getSelectorDependencyKeys(store, dependencyKey))\n\t\t}\n\t}\n\treturn roots\n}\n","import { newest } from \"../lineage\"\nimport type { ReadableState } from \"../state-types\"\nimport type { Store } from \"../store\"\n\nexport const recallState = <T, E>(\n\tstore: Store,\n\tstate: ReadableState<T, E>,\n): T => {\n\tconst target = newest(store)\n\tif (target.operation.open) {\n\t\treturn target.operation.prev.get(state.key)\n\t}\n\treturn target.valueMap.get(state.key)\n}\n","import { readOrComputeValue } from \"../get-state/read-or-compute-value\"\nimport type { Atom, Selector } from \"../state-types\"\nimport type { Store } from \"../store\"\nimport { recallState } from \"./recall-state\"\n\nexport const subscribeToRootDependency = (\n\ttarget: Store,\n\tselector: Selector<any, any>,\n\tatom: Atom<any, any>,\n): (() => void) => {\n\treturn atom.subject.subscribe(\n\t\t`${selector.type}:${selector.key}`,\n\t\t(atomChange) => {\n\t\t\ttarget.logger.info(\n\t\t\t\t`📢`,\n\t\t\t\tselector.type,\n\t\t\t\tselector.key,\n\t\t\t\t`root`,\n\t\t\t\tatom.key,\n\t\t\t\t`went`,\n\t\t\t\tatomChange.oldValue,\n\t\t\t\t`->`,\n\t\t\t\tatomChange.newValue,\n\t\t\t)\n\t\t\tconst oldValue = recallState(target, selector)\n\t\t\tconst newValue = readOrComputeValue(target, selector)\n\t\t\ttarget.logger.info(\n\t\t\t\t`✨`,\n\t\t\t\tselector.type,\n\t\t\t\tselector.key,\n\t\t\t\t`went`,\n\t\t\t\toldValue,\n\t\t\t\t`->`,\n\t\t\t\tnewValue,\n\t\t\t)\n\t\t\tselector.subject.next({ newValue, oldValue })\n\t\t},\n\t)\n}\n","import type { ReadableToken, StateUpdate, UpdateHandler } from \"atom.io\"\n\nimport { readOrComputeValue } from \"../get-state\"\nimport { reduceReference } from \"../get-state/reduce-reference\"\nimport { traceRootSelectorAtoms } from \"../selector\"\nimport type { Store } from \"../store\"\nimport { withdraw } from \"../store\"\nimport { subscribeToRootDependency } from \"./subscribe-to-root-atoms\"\n\nexport function subscribeToState<T, E>(\n\tstore: Store,\n\ttoken: ReadableToken<T, any, E>,\n\tkey: string,\n\thandleUpdate: UpdateHandler<E | T>,\n): () => void {\n\tfunction safelyHandleUpdate(update: StateUpdate<any>): void {\n\t\tif (store.operation.open) {\n\t\t\tconst unsubscribe = store.on.operationClose.subscribe(\n\t\t\t\t`state subscription ${key}`,\n\t\t\t\t() => {\n\t\t\t\t\tunsubscribe()\n\t\t\t\t\thandleUpdate(update)\n\t\t\t\t},\n\t\t\t)\n\t\t} else {\n\t\t\thandleUpdate(update)\n\t\t}\n\t}\n\treduceReference(store, token)\n\tconst state = withdraw(store, token)\n\tstore.logger.info(`👀`, state.type, state.key, `Adding subscription \"${key}\"`)\n\tconst isSelector =\n\t\tstate.type === `writable_pure_selector` ||\n\t\tstate.type === `readonly_pure_selector`\n\tconst rootSubs = new Map<string, () => void>()\n\tlet updateHandler: UpdateHandler<E | T> = safelyHandleUpdate\n\tif (isSelector) {\n\t\treadOrComputeValue(store, state)\n\t\tfor (const [atomKey, atom] of traceRootSelectorAtoms(store, state.key)) {\n\t\t\trootSubs.set(atomKey, subscribeToRootDependency(store, state, atom))\n\t\t}\n\t\tupdateHandler = function updateRootsBeforeHandlingUpdate(update) {\n\t\t\tconst dependencies = traceRootSelectorAtoms(store, state.key)\n\t\t\tfor (const [previousRootKey, unsub] of rootSubs) {\n\t\t\t\tconst currentRoot = dependencies.get(previousRootKey)\n\t\t\t\tif (currentRoot) {\n\t\t\t\t\tdependencies.delete(previousRootKey)\n\t\t\t\t} else {\n\t\t\t\t\tunsub()\n\t\t\t\t\trootSubs.delete(previousRootKey)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const [atomKey, atom] of dependencies) {\n\t\t\t\trootSubs.set(atomKey, subscribeToRootDependency(store, state, atom))\n\t\t\t}\n\t\t\tsafelyHandleUpdate(update)\n\t\t}\n\t}\n\tconst mainUnsubFunction = state.subject.subscribe(key, updateHandler)\n\tconst unsubscribe = () => {\n\t\tstore.logger.info(\n\t\t\t`🙈`,\n\t\t\tstate.type,\n\t\t\tstate.key,\n\t\t\t`Removing subscription \"${key}\"`,\n\t\t)\n\t\tmainUnsubFunction()\n\t\tfor (const unsubFromDependency of rootSubs.values()) {\n\t\t\tunsubFromDependency()\n\t\t}\n\t}\n\n\treturn unsubscribe\n}\n","import type { TimelineEvent, TimelineManageable, TimelineToken } from \"atom.io\"\n\nimport type { Store } from \"../store/store\"\nimport { withdraw } from \"../store/withdraw\"\n\nexport const subscribeToTimeline = <ManagedAtom extends TimelineManageable>(\n\tstore: Store,\n\ttoken: TimelineToken<ManagedAtom>,\n\tkey: string,\n\thandleUpdate: (update: TimelineEvent<any> | `redo` | `undo`) => void,\n): (() => void) => {\n\tconst tl = withdraw(store, token)\n\tstore.logger.info(`👀`, `timeline`, token.key, `Adding subscription \"${key}\"`)\n\tconst unsubscribe = tl.subject.subscribe(key, handleUpdate)\n\treturn () => {\n\t\tstore.logger.info(\n\t\t\t`🙈`,\n\t\t\t`timeline`,\n\t\t\ttoken.key,\n\t\t\t`Removing subscription \"${key}\" from timeline`,\n\t\t)\n\t\tunsubscribe()\n\t}\n}\n","import type { FamilyMetadata, MutableAtomToken, RegularAtomToken } from \"atom.io\"\n\nimport { createRegularAtom } from \"../atom\"\nimport { getFromStore } from \"../get-state\"\nimport { newest } from \"../lineage\"\nimport { setIntoStore } from \"../set-state\"\nimport type { Store } from \"../store\"\nimport { subscribeToState, subscribeToTimeline } from \"../subscribe\"\nimport { isChildStore } from \"../transaction/is-root-store\"\nimport type { SignalFrom, Transceiver } from \"./transceiver\"\n\n/**\n * @internal Give the tracker a transceiver state and a store, and it will\n * subscribe to the transceiver's inner value. When the inner value changes,\n * the tracker will update its own state to reflect the change.\n */\nexport class Tracker<T extends Transceiver<any, any, any>> {\n\tprivate initializeSignalAtom(\n\t\tmutableState: MutableAtomToken<T>,\n\t\tstore: Store,\n\t): RegularAtomToken<SignalFrom<T> | null> {\n\t\tconst latestSignalStateKey = `*${mutableState.key}`\n\t\tstore.atoms.delete(latestSignalStateKey)\n\t\tstore.valueMap.delete(latestSignalStateKey)\n\t\tconst familyMetaData: FamilyMetadata | undefined = mutableState.family\n\t\t\t? {\n\t\t\t\t\tkey: `*${mutableState.family.key}`,\n\t\t\t\t\tsubKey: mutableState.family.subKey,\n\t\t\t\t}\n\t\t\t: undefined\n\t\tconst latestSignalState = createRegularAtom<\n\t\t\tSignalFrom<T> | null,\n\t\t\tany,\n\t\t\tnever\n\t\t>(\n\t\t\tstore,\n\t\t\t{\n\t\t\t\tkey: latestSignalStateKey,\n\t\t\t\tdefault: null,\n\t\t\t},\n\t\t\tfamilyMetaData,\n\t\t\t[`tracker:signal`],\n\t\t)\n\t\tif (store.parent?.valueMap.has(latestSignalStateKey)) {\n\t\t\tconst parentValue = store.parent.valueMap.get(latestSignalStateKey)\n\t\t\tstore.valueMap.set(latestSignalStateKey, parentValue)\n\t\t}\n\n\t\treturn latestSignalState\n\t}\n\n\tprivate unsubscribeFromInnerValue!: () => void\n\tprivate unsubscribeFromState!: () => void\n\tprivate captureSignalsFromCore(\n\t\tmutableState: MutableAtomToken<T, any>,\n\t\tlatestSignalState: RegularAtomToken<SignalFrom<T> | null>,\n\t\ttarget: Store,\n\t): void {\n\t\tconst stateKey = mutableState.key\n\t\tconst storeName = target.config.name\n\t\tconst storeStatus = isChildStore(target)\n\t\t\t? target.transactionMeta.update.token.key\n\t\t\t: `main`\n\t\tconst subscriptionKey = `tracker:${storeName}:${storeStatus}:${stateKey}`\n\t\tconst trackerCapturesOutboundSignal = (update: SignalFrom<T>) => {\n\t\t\tsetIntoStore(target, latestSignalState, update)\n\t\t}\n\t\tconst originalInnerValue = getFromStore(target, mutableState)\n\t\tthis.unsubscribeFromInnerValue = originalInnerValue.subscribe(\n\t\t\tsubscriptionKey,\n\t\t\ttrackerCapturesOutboundSignal,\n\t\t)\n\t\tthis.unsubscribeFromState = subscribeToState(\n\t\t\ttarget,\n\t\t\tmutableState,\n\t\t\tsubscriptionKey,\n\t\t\tfunction trackerLooksForNewReference(update: SignalFrom<T>) {\n\t\t\t\tif (update.newValue !== update.oldValue) {\n\t\t\t\t\tthis.unsubscribeFromInnerValue()\n\t\t\t\t\tthis.unsubscribeFromInnerValue = update.newValue.subscribe(\n\t\t\t\t\t\tsubscriptionKey,\n\t\t\t\t\t\ttrackerCapturesOutboundSignal,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}.bind(this),\n\t\t)\n\t}\n\n\tprivate supplySignalsToCore(\n\t\tmutableState: MutableAtomToken<T>,\n\t\tlatestSignalState: RegularAtomToken<SignalFrom<T> | null>,\n\t\ttarget: Store,\n\t): void {\n\t\tconst subscriptionKey = `tracker:${target.config.name}:${\n\t\t\tisChildStore(target) ? target.transactionMeta.update.token.key : `main`\n\t\t}:${mutableState.key}`\n\t\tsubscribeToState(\n\t\t\ttarget,\n\t\t\tlatestSignalState,\n\t\t\tsubscriptionKey,\n\t\t\tfunction trackerCapturesInboundSignal({ newValue, oldValue }) {\n\t\t\t\tconst timelineId = target.timelineTopics.getRelatedKey(\n\t\t\t\t\tlatestSignalState.key,\n\t\t\t\t)\n\n\t\t\t\tif (timelineId && target.timelines.get(timelineId)?.timeTraveling) {\n\t\t\t\t\tconst unsubscribe = subscribeToTimeline(\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t{ key: timelineId, type: `timeline` },\n\t\t\t\t\t\tsubscriptionKey,\n\t\t\t\t\t\tfunction trackerWaitsForTimeTravelToFinish(update) {\n\t\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\t\tsetIntoStore(target, mutableState, (transceiver) => {\n\t\t\t\t\t\t\t\tif (update === `redo` && newValue) {\n\t\t\t\t\t\t\t\t\ttransceiver.do(newValue)\n\t\t\t\t\t\t\t\t} else if (update === `undo` && oldValue) {\n\t\t\t\t\t\t\t\t\ttransceiver.undo(oldValue)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn transceiver\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst mutable = getFromStore(target, mutableState)\n\t\t\t\tconst updateNumber = mutable.getUpdateNumber(newValue)\n\t\t\t\tconst eventOffset = updateNumber - mutable.cacheUpdateNumber\n\t\t\t\tif (newValue && eventOffset === 1) {\n\t\t\t\t\tsetIntoStore(\n\t\t\t\t\t\ttarget,\n\t\t\t\t\t\tmutableState,\n\t\t\t\t\t\t(transceiver) => (transceiver.do(newValue), transceiver),\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tconst expected = mutable.cacheUpdateNumber + 1\n\t\t\t\t\ttarget.logger.info(\n\t\t\t\t\t\t`❌`,\n\t\t\t\t\t\t`mutable_atom`,\n\t\t\t\t\t\tmutableState.key,\n\t\t\t\t\t\t`could not be updated. Expected update number`,\n\t\t\t\t\t\texpected,\n\t\t\t\t\t\t`but got`,\n\t\t\t\t\t\tupdateNumber,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\t\t)\n\t}\n\n\tpublic mutableAtomToken: MutableAtomToken<T>\n\tpublic latestSignalToken: RegularAtomToken<SignalFrom<T> | null>\n\n\tpublic [Symbol.dispose]!: () => void\n\n\tpublic constructor(mutableAtomToken: MutableAtomToken<T>, store: Store) {\n\t\tconst target = newest(store)\n\t\tconst latestSignalToken = this.initializeSignalAtom(mutableAtomToken, target)\n\t\tthis.mutableAtomToken = mutableAtomToken\n\t\tthis.latestSignalToken = latestSignalToken\n\t\tthis.captureSignalsFromCore(mutableAtomToken, latestSignalToken, target)\n\t\tthis.supplySignalsToCore(mutableAtomToken, latestSignalToken, target)\n\t\ttarget.trackers.set(mutableAtomToken.key, this)\n\t\tthis[Symbol.dispose] = () => {\n\t\t\tthis.unsubscribeFromInnerValue()\n\t\t\tthis.unsubscribeFromState()\n\t\t\ttarget.trackers.delete(mutableAtomToken.key)\n\t\t}\n\t}\n}\n","import type { Json } from \"atom.io/json\"\n\nexport interface Transceiver<\n\tV,\n\tS extends Json.Serializable,\n\tJ extends Json.Serializable,\n> {\n\tREADONLY_VIEW: V\n\tdo: (update: S) => number | `OUT_OF_RANGE` | null\n\tundo: (update: S) => void\n\tsubscribe: (key: string, fn: (update: S) => void) => () => void\n\tcacheUpdateNumber: number\n\tgetUpdateNumber: (update: S) => number\n\ttoJSON: () => J\n}\n\n// biome-ignore format: intersection\nexport type TransceiverConstructor<\n J extends Json.Serializable,\n T extends Transceiver<any, any, J>\n> =\n\t& ( new () => T )\n\t& { fromJSON: (json: J) => T }\n\nexport function isTransceiver(\n\tvalue: unknown,\n): value is Transceiver<any, Json.Serializable, Json.Serializable> {\n\treturn (\n\t\ttypeof value === `object` &&\n\t\tvalue !== null &&\n\t\t`do` in value &&\n\t\t`undo` in value &&\n\t\t`subscribe` in value &&\n\t\t`cacheUpdateNumber` in value &&\n\t\t`getUpdateNumber` in value &&\n\t\t`READONLY_VIEW` in value &&\n\t\t`toJSON` in value\n\t)\n}\n\nexport type TransceiverMode = `playback` | `record` | `transaction`\n\nexport type SignalFrom<T extends Transceiver<any, any, any>> =\n\tT extends Transceiver<any, infer S, any> ? S : never\n\nexport type AsJSON<T extends Transceiver<any, any, any>> = T extends Transceiver<\n\tany,\n\tany,\n\tinfer J\n>\n\t? J\n\t: never\n\nexport type ConstructorOf<T extends Transceiver<any, any, any>> =\n\tTransceiverConstructor<AsJSON<T>, T>\n\n/*\nA transceiver may also keep a list of updates that have been applied to it.\nThis is useful for undo/redo functionality, especially in the context of\nrevising history. It is a good idea to accept a cache limit in your\nconstructor, and overwrite old updates. Here's an example of how we\nmight set that up:\n\nmyTransceiver = Transceiver {\n\tcacheUpdateNumber: number = 27\n\tcacheIdx: number = 1\n\tcacheLimit: number = 3\n\tcache: Array<Update> = [\n\t\t26=add:\"x\"\n\t\t27=del:\"x\" (current)\n\t\t25=add:\"y\"\n\t]\n}\n\nCONFIRM/NO-OP\nUpdate `27=del:\"x\"` is passed to myTransceiver.do:\n- [updateNumber = 27, update = `del:\"x\"`]\n- updateOffset = updateNumber - cacheUpdateNumber // 0\n- eventOffset < 1 // true (we're validating the past)\n- |eventOffset| < cacheLimit // true (we remember this update)\n- eventIdx = cacheIdx + updateOffset // 1\n- update === cache.get(eventIdx) // true\n- return null // 👍\n\nEXPECTED UPDATE\nUpdate `28=add:\"x\"` is passed to myTransceiver.do:\n- [updateNumber = 28, update = `add:\"x\"`]\n- updateOffset = updateNumber - cacheUpdateNumber // 1\n- eventOffset < 1 // false (we're in the future)\n- eventOffset === 1 // true (we're ready to apply this update)\n- cacheIdx += eventOffset // 2\n- cacheIdx %= cacheLimit // 2\n- cache[cacheIdx] = update // cache = <{ 0 => add:\"x\" }>\n- return null // 👍\n\nUNEXPECTED UPDATE\nUpdate `29=del:\"x\"` is passed to myTransceiver.do:\n- [updateNumber = 29, update = `del:\"x\"`]\n- updateOffset = updateNumber - cacheUpdateNumber // 2\n- eventOffset < 1 // false (we're in the future)\n- eventOffset === 1 // false (we're NOT ready to apply this update)\n- updateIdx := cacheIdx + updateOffset // 3\n- updateIdx %= cacheLimit // 0\n- cache[updateIdx] = update // cache = <{ 0 => del:\"x\" }>\n- expectedUpdateNumber = cacheUpdateNumber + 1 // 28\n- return expectedUpdateNumber // 🤨👂\n\nSUCCESSFUL ROLLBACK UPDATE\nUpdate `25=add:\"z\"` is passed to myTransceiver.do:\n- [updateNumber = 25, update = `add:\"z\"`]\n- updateOffset = updateNumber - cacheUpdateNumber // -2\n- eventOffset < 1 // true (we're validating the past)\n- |eventOffset| < cacheLimit // true (we remember this update)\n- eventIdx = cacheIdx + updateOffset // -1\n- eventIdx %= cacheLimit // 2\n- update === cache[eventIdx] // false (we're rolling back)\n- done := false\n- update := cache[cacheIdx] // update = `del:\"x\"`\n- undo(update) // myTransceiver.undo(`del:\"x\"`)\n- while (!done) {\n- \tcacheIdx -= 1 // 0, -1\n- \tcacheIdx %= cacheLimit // 0, 2\n- \tupdate = cache[cacheIdx] // update = `add:\"y\"`, `add:\"x\"`\n- \tundo(update) // myTransceiver.undo(`add:\"y\"`), myTransceiver.undo(`add:\"x\"`)\n- \tdone = cacheIdx === eventIdx // false, true\n- }\n- do(update) // myTransceiver.do(`add:\"z\"`)\n- return null // 👍\n\nUNSUCCESSFUL ROLLBACK UPDATE\nUpdate `24=add:\"z\"` is passed to myTransceiver.do:\n- [updateNumber = 24, update = `add:\"z\"`]\n- updateOffset = updateNumber - cacheUpdateNumber // -3\n- eventOffset < 1 // true (we're validating the past)\n- |eventOffset| < cacheLimit // 3 < 3 // false (we don't remember this update)\n- return `OUT_OF_RANGE` // 😵💫👂\n\n*/\n\n// The function wants a constructor C\n// - that has a static fromJSON(json) returning an instance of C\n// - and whose instances have toJSON() whose return type matches fromJSON's param\n","import { Future } from \"./future\"\nimport { Tracker, type Transceiver } from \"./mutable\"\nimport { closeOperation, openOperation } from \"./operation\"\nimport {\n\tevictDownstreamFromAtom,\n\tevictDownstreamFromSelector,\n} from \"./set-state/evict-downstream\"\nimport type { ReadableState } from \"./state-types\"\nimport type { Store } from \"./store\"\nimport { isChildStore } from \"./transaction\"\n\nexport function writeToCache<T, E>(\n\ttarget: Store,\n\tstate: ReadableState<T, E>,\n\tvalue: E | T,\n): E | T\nexport function writeToCache<T extends Promise<any>, E>(\n\ttarget: Store,\n\tstate: ReadableState<T, E>,\n\tvalue: T,\n): Future<Awaited<E | T>>\nexport function writeToCache<T, E>(\n\ttarget: Store,\n\tstate: ReadableState<T, E>,\n\tvalue: E | T,\n): E | Future<E | T> | T {\n\tconst { key, subject, type } = state\n\tconst currentValue = target.valueMap.get(key)\n\tif (currentValue instanceof Future && !currentValue.done) {\n\t\tconst future = currentValue\n\t\tif (value instanceof Promise) {\n\t\t\tfuture.use(value)\n\t\t\treturn future\n\t\t}\n\t\ttarget.valueMap.set(key, value)\n\t\treturn value\n\t}\n\tif (value instanceof Promise) {\n\t\tconst future = new Future<T>(value)\n\t\ttarget.valueMap.set(key, future)\n\t\tfuture\n\t\t\t.then(function handleResolvedFuture(resolved) {\n\t\t\t\tconst current = target.valueMap.get(key)\n\t\t\t\tif (current === future) {\n\t\t\t\t\topenOperation(target, state)\n\t\t\t\t\twriteToCache(target, state, resolved)\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase `atom`:\n\t\t\t\t\t\t\tevictDownstreamFromAtom(target, state)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase `readonly_pure_selector`:\n\t\t\t\t\t\tcase `writable_pure_selector`:\n\t\t\t\t\t\t\tevictDownstreamFromSelector(target, key)\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t// held selectors, by definition, don't become promises\n\t\t\t\t\t}\n\t\t\t\t\tcloseOperation(target)\n\t\t\t\t\tsubject.next({ newValue: resolved, oldValue: future })\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch((thrown) => {\n\t\t\t\ttarget.logger.error(`💥`, state.type, key, `rejected:`, thrown)\n\t\t\t})\n\t\treturn future\n\t}\n\ttarget.logger.info(`📝`, state.type, state.key, `writing to cache`, value)\n\ttarget.valueMap.set(key, value)\n\treturn value\n}\n\n/**\n * @param target - the newest layer of the store\n * @param state - the state to read from cache\n * @param mut - whether the value is intended to be mutable\n * @returns the state's current value\n */\nexport function readFromCache<T, E>(\n\ttarget: Store,\n\tstate: ReadableState<T, E>,\n\tmut: `mut` | undefined,\n): E | T {\n\ttarget.logger.info(`📖`, state.type, state.key, `reading cached value`)\n\tlet value = target.valueMap.get(state.key) as E | T\n\n\tconst mayNeedToBeCopied =\n\t\tmut === `mut` && state.type === `mutable_atom` && isChildStore(target)\n\tif (mayNeedToBeCopied) {\n\t\tconst mutableAtom = state\n\t\tconst { parent } = target\n\n\t\tif (target.valueMap.hasOwn(mutableAtom.key)) {\n\t\t\treturn value\n\t\t}\n\n\t\tconst parentValue = parent.valueMap.get(mutableAtom.key) as T &\n\t\t\tTransceiver<any, any, any>\n\n\t\ttarget.logger.info(`📃`, `atom`, mutableAtom.key, `copying`)\n\t\tconst jsonValue = parentValue.toJSON()\n\t\tconst copiedValue = mutableAtom.class.fromJSON(jsonValue)\n\t\ttarget.valueMap.set(mutableAtom.key, copiedValue)\n\t\tnew Tracker(mutableAtom, parent)\n\t\tvalue = copiedValue\n\t}\n\treturn value\n}\n\nexport function evictCachedValue(target: Store, key: string): void {\n\tconst currentValue = target.valueMap.get(key)\n\tif (currentValue instanceof Future) {\n\t\tconst selector =\n\t\t\ttarget.writableSelectors.get(key) ?? target.readonlySelectors.get(key)\n\t\tif (selector) {\n\t\t\tselector.getFrom(target)\n\t\t}\n\t\treturn\n\t}\n\tif (target.operation.open) {\n\t\ttarget.operation.prev.set(key, currentValue)\n\t}\n\ttarget.valueMap.delete(key)\n\ttarget.logger.info(`🗑`, `state`, key, `evicted`)\n}\n","import { evictCachedValue } from \"../caching\"\nimport { newest } from \"../lineage\"\nimport { isDone, markDone } from \"../operation\"\nimport type { Atom } from \"../state-types\"\nimport type { Store } from \"../store\"\n\nexport function evictDownstreamFromAtom(\n\tstore: Store,\n\tatom: Atom<any, any>,\n): void {\n\tconst target = newest(store)\n\tconst { key, type } = atom\n\tconst downstreamKeys = target.selectorAtoms.getRelatedKeys(key)\n\ttarget.logger.info(\n\t\t`🧹`,\n\t\ttype,\n\t\tkey,\n\t\tdownstreamKeys\n\t\t\t? `evicting ${downstreamKeys.size} states downstream:`\n\t\t\t: `no downstream states`,\n\t\tdownstreamKeys ?? `to evict`,\n\t)\n\tif (downstreamKeys) {\n\t\tif (target.operation.open) {\n\t\t\ttarget.logger.info(\n\t\t\t\t`🧹`,\n\t\t\t\ttype,\n\t\t\t\tkey,\n\t\t\t\t`[ ${[...target.operation.done].join(`, `)} ] already done`,\n\t\t\t)\n\t\t}\n\t\tfor (const downstreamKey of downstreamKeys) {\n\t\t\tif (isDone(target, downstreamKey)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tevictCachedValue(target, downstreamKey)\n\t\t\tmarkDone(target, downstreamKey)\n\t\t}\n\t}\n}\n\nexport function evictDownstreamFromSelector(\n\tstore: Store,\n\tselectorKey: string,\n): void {\n\tconst target = newest(store)\n\tconst relationEntries = target.selectorGraph\n\t\t.getRelationEntries({\n\t\t\tupstreamSelectorKey: selectorKey,\n\t\t})\n\t\t.filter(([_, { source }]) => source === selectorKey)\n\tfor (const [downstreamSelectorKey] of relationEntries) {\n\t\tif (isDone(target, downstreamSelectorKey)) {\n\t\t\tcontinue\n\t\t}\n\t\tevictCachedValue(target, downstreamSelectorKey)\n\t\tmarkDone(target, downstreamSelectorKey)\n\t\tevictDownstreamFromSelector(store, downstreamSelectorKey)\n\t}\n}\n","import type {\n\tFamilyMetadata,\n\tRegularAtomOptions,\n\tRegularAtomToken,\n\tUpdateHandler,\n} from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport { newest } from \"../lineage\"\nimport { resetInStore, setIntoStore } from \"../set-state\"\nimport type { RegularAtom } from \"../state-types\"\nimport type { Store } from \"../store\"\nimport { deposit } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { subscribeToState } from \"../subscribe\"\nimport type { RootStore } from \"../transaction\"\nimport type { InternalRole } from \"./has-role\"\n\nexport function createRegularAtom<T, K extends Canonical, E>(\n\tstore: Store,\n\toptions: RegularAtomOptions<T, E>,\n\tfamily: FamilyMetadata<K> | undefined,\n\tinternalRoles?: InternalRole[],\n): RegularAtomToken<T, K, E> {\n\tconst type = `atom`\n\tconst { key } = options\n\tstore.logger.info(`🔨`, type, key, `is being created`)\n\n\tconst target = newest(store)\n\tconst existing = target.atoms.get(key)\n\tif (existing && existing.type === type) {\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\t`atom`,\n\t\t\tkey,\n\t\t\t`Tried to create atom, but it already exists in the store.`,\n\t\t)\n\t\treturn deposit(existing) as RegularAtomToken<T, K, E>\n\t}\n\tconst subject = new Subject<{ newValue: T; oldValue: T }>()\n\tconst newAtom: RegularAtom<T, E> = {\n\t\t...options,\n\t\ttype,\n\t\tinstall: (s: RootStore) => {\n\t\t\ts.logger.info(`🛠️`, type, key, `installing in store \"${s.config.name}\"`)\n\t\t\treturn createRegularAtom(s, options, family)\n\t\t},\n\t\tsubject,\n\t} as const\n\tif (family) {\n\t\tnewAtom.family = family\n\t}\n\tif (internalRoles) {\n\t\tnewAtom.internalRoles = internalRoles\n\t}\n\ttarget.atoms.set(key, newAtom)\n\tconst token = deposit(newAtom) as RegularAtomToken<T, K, E>\n\tif (options.effects) {\n\t\tlet effectIndex = 0\n\t\tconst cleanupFunctions: (() => void)[] = []\n\t\tfor (const effect of options.effects) {\n\t\t\tconst cleanup = effect({\n\t\t\t\tresetSelf: () => {\n\t\t\t\t\tresetInStore(store, token)\n\t\t\t\t},\n\t\t\t\tsetSelf: (next) => {\n\t\t\t\t\tsetIntoStore(store, token, next)\n\t\t\t\t},\n\t\t\t\tonSet: (handle: UpdateHandler<T>) =>\n\t\t\t\t\tsubscribeToState(store, token, `effect[${effectIndex}]`, handle),\n\t\t\t})\n\t\t\tif (cleanup) {\n\t\t\t\tcleanupFunctions.push(cleanup)\n\t\t\t}\n\t\t\t++effectIndex\n\t\t}\n\t\tnewAtom.cleanup = () => {\n\t\t\tfor (const cleanup of cleanupFunctions) {\n\t\t\t\tcleanup()\n\t\t\t}\n\t\t}\n\t}\n\tstore.on.atomCreation.next(token)\n\treturn token\n}\n","import type { Atom } from \"../state-types\"\n\nexport const INTERNAL_ROLES = [`tracker:signal`] as const\nexport type InternalRole = (typeof INTERNAL_ROLES)[number]\n\nexport function hasRole(atom: Atom<any, any>, role: InternalRole): boolean {\n\tif (`internalRoles` in atom === false) {\n\t\treturn false\n\t}\n\n\treturn atom.internalRoles.includes(role)\n}\n"],"mappings":"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"}
|