flightdeck 0.2.24 → 0.2.25
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.
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../atom.io/internal/src/arbitrary.ts","../../atom.io/internal/src/future.ts","../../atom.io/json/src/entries.ts","../../atom.io/json/src/select-json.ts","../../atom.io/internal/src/lineage.ts","../../atom.io/internal/src/subject.ts","../../atom.io/internal/src/families/create-regular-atom-family.ts","../../atom.io/internal/src/families/create-atom-family.ts","../../atom.io/internal/src/families/create-readonly-selector-family.ts","../../atom.io/internal/src/families/create-selector-family.ts","../../atom.io/internal/src/store/circular-buffer.ts","../../atom.io/internal/src/store/counterfeit.ts","../../atom.io/internal/src/store/deposit.ts","../../atom.io/src/atom.ts","../../atom.io/src/join.ts","../../atom.io/src/logger.ts","../../atom.io/src/realm.ts","../../atom.io/src/selector.ts","../../atom.io/internal/src/transaction/is-root-store.ts","../../atom.io/internal/src/transaction/abort-transaction.ts","../../atom.io/internal/src/capitalize.ts","../../atom.io/internal/src/pretty-print.ts","../../atom.io/internal/src/not-found-error.ts","../../atom.io/internal/src/transaction/act-upon-store.ts","../../atom.io/internal/src/set-state/become.ts","../../atom.io/internal/src/get-state/read-or-compute-value.ts","../../atom.io/internal/src/operation.ts","../../atom.io/internal/src/set-state/emit-update.ts","../../atom.io/internal/src/set-state/evict-downstream.ts","../../atom.io/internal/src/set-state/set-atom.ts","../../atom.io/internal/src/set-state/set-atom-or-selector.ts","../../atom.io/internal/src/families/get-family-of-token.ts","../../atom.io/internal/src/set-state/set-into-store.ts","../../atom.io/internal/src/ingest-updates/ingest-atom-update.ts","../../atom.io/internal/src/get-trace.ts","../../atom.io/internal/src/molecule.ts","../../atom.io/internal/src/ingest-updates/ingest-creation-disposal.ts","../../atom.io/internal/src/ingest-updates/ingest-transaction-update.ts","../../atom.io/internal/src/transaction/get-epoch-number.ts","../../atom.io/internal/src/transaction/set-epoch-number.ts","../../atom.io/internal/src/transaction/apply-transaction.ts","../../atom.io/internal/src/get-environment-data.ts","../../atom.io/internal/src/get-state/get-from-store.ts","../../atom.io/internal/src/junction.ts","../../atom.io/internal/src/lazy-map.ts","../../atom.io/internal/src/transaction/build-transaction.ts","../../atom.io/internal/src/transaction/create-transaction.ts","../../atom.io/src/transaction.ts","../../atom.io/internal/src/store/store.ts","../../atom.io/internal/src/store/withdraw.ts","../../atom.io/internal/src/families/init-family-member.ts","../../atom.io/internal/src/families/seek-in-store.ts","../../atom.io/internal/src/families/find-in-store.ts","../../atom.io/internal/src/families/dispose-from-store.ts","../../atom.io/internal/src/keys.ts","../../atom.io/internal/src/selector/get-selector-dependency-keys.ts","../../atom.io/internal/src/selector/trace-selector-atoms.ts","../../atom.io/internal/src/selector/update-selector-atoms.ts","../../atom.io/internal/src/selector/register-selector.ts","../../atom.io/internal/src/selector/create-readonly-selector.ts","../../atom.io/internal/src/selector/create-writable-selector.ts","../../atom.io/internal/src/selector/create-standalone-selector.ts","../../atom.io/internal/src/selector/dispose-selector.ts","../../atom.io/internal/src/families/create-writable-selector-family.ts","../../atom.io/json/src/select-json-family.ts","../../atom.io/json/src/index.ts","../../atom.io/internal/src/subscribe/recall-state.ts","../../atom.io/internal/src/subscribe/subscribe-to-root-atoms.ts","../../atom.io/internal/src/subscribe/subscribe-to-state.ts","../../atom.io/internal/src/subscribe/subscribe-to-timeline.ts","../../atom.io/internal/src/mutable/tracker.ts","../../atom.io/internal/src/mutable/create-mutable-atom.ts","../../atom.io/internal/src/mutable/tracker-family.ts","../../atom.io/internal/src/mutable/create-mutable-atom-family.ts","../../atom.io/internal/src/mutable/get-json-family.ts","../../atom.io/internal/src/mutable/get-json-token.ts","../../atom.io/internal/src/mutable/get-update-token.ts","../../atom.io/internal/src/mutable/transceiver.ts","../../atom.io/internal/src/set-state/copy-mutable-if-needed.ts","../../atom.io/internal/src/caching.ts","../../atom.io/internal/src/atom/is-default.ts","../../atom.io/internal/src/atom/create-regular-atom.ts","../../atom.io/internal/src/atom/create-standalone-atom.ts","../../atom.io/internal/src/atom/dispose-atom.ts","../../atom.io/transceivers/set-rtx/src/set-rtx.ts","../../atom.io/internal/src/join/join-internal.ts","../../atom.io/internal/src/join/get-join.ts","../../atom.io/internal/src/join/edit-relations-in-store.ts","../../atom.io/internal/src/join/get-internal-relations-from-store.ts","../../atom.io/internal/src/reserved-keys.ts","../../atom.io/introspection/src/refinery.ts","../../atom.io/introspection/src/sprawl.ts","../../atom.io/introspection/src/differ.ts","../../atom.io/realtime/src/shared-room-store.ts","../../atom.io/realtime-server/src/ipc-sockets/custom-socket.ts","../../atom.io/realtime-server/src/ipc-sockets/child-socket.ts","../../atom.io/realtime-server/src/realtime-server-stores/server-room-external-store.ts","../../atom.io/realtime-server/src/realtime-server-stores/server-room-external-actions.ts","../../atom.io/realtime-server/src/realtime-server-stores/server-sync-store.ts","../../atom.io/realtime-server/src/realtime-server-stores/server-user-store.ts","../src/flightdeck.env.ts","../src/flightdeck.lib.ts"],"names":["resolve","atom","atomFamily","join","target","state","selectorFamily","unsubscribe","inspect","result","process","spawn","z"],"mappings":"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","file":"chunk-IUFRJGSW.js","sourcesContent":["export function arbitrary(random: () => number = Math.random): string {\n\treturn random().toString(36).slice(2)\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 (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","import type { Count, Flat } from \"atom.io/internal\"\n\nexport type Entries<K extends PropertyKey = keyof any, V = any> = [K, V][]\n\nexport type KeyOfEntries<E extends Entries> = E extends [infer K, any][]\n\t? K\n\t: never\n\nexport type ValueOfEntry<E extends Entries, K extends KeyOfEntries<E>> = {\n\t[P in Count<E[`length`]>]: E[P] extends [K, infer V] ? V : never\n}[Count<E[`length`]>]\n\nexport type FromEntries<E extends Entries> = Flat<{\n\t[K in KeyOfEntries<E>]: ValueOfEntry<E, K>\n}>\n\nexport function fromEntries<E extends Entries>(entries: E): FromEntries<E> {\n\treturn Object.fromEntries(entries) as FromEntries<E>\n}\n\nexport function toEntries<T extends object>(\n\tobj: T,\n): Entries<keyof T, T[keyof T]> {\n\treturn Object.entries(obj) as Entries<keyof T, T[keyof T]>\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store } from \"atom.io/internal\"\nimport { createStandaloneSelector, IMPLICIT } from \"atom.io/internal\"\n\nimport type { Json, JsonInterface } from \".\"\n\nexport const selectJson = <T, J extends Json.Serializable>(\n\tatom: AtomIO.AtomToken<T>,\n\ttransform: JsonInterface<T, J>,\n\tstore: Store = IMPLICIT.STORE,\n): AtomIO.WritableSelectorToken<J> => {\n\treturn createStandaloneSelector(store, {\n\t\tkey: `${atom.key}:JSON`,\n\t\tget: ({ get }) => transform.toJson(get(atom)),\n\t\tset: ({ set }, newValue) => {\n\t\t\tset(atom, transform.fromJson(newValue))\n\t\t},\n\t})\n}\n","/* 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>(scion: T): T {\n\twhile (scion.child !== null) {\n\t\tscion = scion.child\n\t}\n\treturn scion\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\tFamilyMetadata,\n\tRegularAtomFamilyOptions,\n\tRegularAtomFamilyToken,\n\tRegularAtomOptions,\n\tRegularAtomToken,\n\tStateCreation,\n\tStateDisposal,\n} from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport { prettyPrintTokenType, type RegularAtomFamily } from \"..\"\nimport { createRegularAtom } from \"../atom\"\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\nimport { Subject } from \"../subject\"\n\nexport function createRegularAtomFamily<T, K extends Canonical>(\n\tstore: Store,\n\toptions: RegularAtomFamilyOptions<T, K>,\n\tinternalRoles?: string[],\n): RegularAtomFamilyToken<T, K> {\n\tconst familyToken = {\n\t\tkey: options.key,\n\t\ttype: `atom_family`,\n\t} as const satisfies RegularAtomFamilyToken<T, K>\n\n\tconst existing = store.families.get(options.key)\n\tif (existing) {\n\t\tstore.logger.error(\n\t\t\t`❗`,\n\t\t\t`atom_family`,\n\t\t\toptions.key,\n\t\t\t`Overwriting an existing ${prettyPrintTokenType(\n\t\t\t\texisting,\n\t\t\t)} \"${existing.key}\" in store \"${store.config.name}\". You can safely ignore this warning if it is due to hot module replacement.`,\n\t\t)\n\t}\n\n\tconst subject = new Subject<\n\t\tStateCreation<RegularAtomToken<T>> | StateDisposal<RegularAtomToken<T>>\n\t>()\n\n\tconst familyFunction = (key: K): RegularAtomToken<any> => {\n\t\tconst subKey = stringifyJson(key)\n\t\tconst family: FamilyMetadata = { key: options.key, subKey }\n\t\tconst fullKey = `${options.key}(${subKey})`\n\t\tconst target = newest(store)\n\n\t\tconst def = options.default\n\t\tconst individualOptions: RegularAtomOptions<T> = {\n\t\t\tkey: fullKey,\n\t\t\tdefault: def instanceof Function ? def(key) : def,\n\t\t}\n\t\tif (options.effects) {\n\t\t\tindividualOptions.effects = options.effects(key)\n\t\t}\n\n\t\tconst token = createRegularAtom(target, individualOptions, family)\n\n\t\tsubject.next({ type: `state_creation`, token })\n\t\treturn token\n\t}\n\n\tconst atomFamily = Object.assign(familyFunction, familyToken, {\n\t\tsubject,\n\t\tinstall: (s: Store) => createRegularAtomFamily(s, options),\n\t\tinternalRoles,\n\t}) satisfies RegularAtomFamily<T, K>\n\n\tstore.families.set(options.key, atomFamily)\n\tstore.defaults.set(options.key, options.default)\n\treturn familyToken\n}\n","import type {\n\tAtomFamilyToken,\n\tMutableAtomFamilyOptions,\n\tMutableAtomFamilyToken,\n\tRegularAtomFamilyOptions,\n\tRegularAtomFamilyToken,\n} from \"atom.io\"\nimport type { Canonical, Json } from \"atom.io/json\"\n\nimport { createMutableAtomFamily, type Transceiver } from \"../mutable\"\nimport type { Store } from \"../store\"\nimport { createRegularAtomFamily } from \"./create-regular-atom-family\"\n\nexport function createAtomFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\toptions: MutableAtomFamilyOptions<T, J, K>,\n): MutableAtomFamilyToken<T, J, K>\nexport function createAtomFamily<T, K extends Canonical>(\n\tstore: Store,\n\toptions: RegularAtomFamilyOptions<T, K>,\n): RegularAtomFamilyToken<T, K>\nexport function createAtomFamily<T, K extends Canonical>(\n\tstore: Store,\n\toptions:\n\t\t| MutableAtomFamilyOptions<any, any, any>\n\t\t| RegularAtomFamilyOptions<T, K>,\n): AtomFamilyToken<any, any> {\n\tconst isMutable = `mutable` in options\n\n\tif (isMutable) {\n\t\treturn createMutableAtomFamily(store, options)\n\t}\n\treturn createRegularAtomFamily<T, K>(store, options)\n}\n","import type {\n\tFamilyMetadata,\n\tfindState,\n\tgetState,\n\tReadonlySelectorFamilyOptions,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tStateCreation,\n\tStateDisposal,\n} from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport {\n\tfindInStore,\n\tgetFromStore,\n\tgetJsonToken,\n\tprettyPrintTokenType,\n\ttype ReadonlySelectorFamily,\n} from \"..\"\nimport { newest } from \"../lineage\"\nimport { createReadonlySelector } from \"../selector\"\nimport type { Store } from \"../store\"\nimport { Subject } from \"../subject\"\n\nexport function createReadonlySelectorFamily<T, K extends Canonical>(\n\tstore: Store,\n\toptions: ReadonlySelectorFamilyOptions<T, K>,\n\tinternalRoles?: string[],\n): ReadonlySelectorFamilyToken<T, K> {\n\tconst familyToken = {\n\t\tkey: options.key,\n\t\ttype: `readonly_selector_family`,\n\t} as const satisfies ReadonlySelectorFamilyToken<T, K>\n\n\tconst existing = store.families.get(options.key)\n\tif (existing) {\n\t\tstore.logger.error(\n\t\t\t`❗`,\n\t\t\t`readonly_selector_family`,\n\t\t\toptions.key,\n\t\t\t`Overwriting an existing ${prettyPrintTokenType(\n\t\t\t\texisting,\n\t\t\t)} \"${existing.key}\" in store \"${store.config.name}\". You can safely ignore this warning if it is due to hot module replacement.`,\n\t\t)\n\t}\n\n\tconst subject = new Subject<\n\t\t| StateCreation<ReadonlySelectorToken<T>>\n\t\t| StateDisposal<ReadonlySelectorToken<T>>\n\t>()\n\n\tconst familyFunction = (key: K): ReadonlySelectorToken<T> => {\n\t\tconst subKey = stringifyJson(key)\n\t\tconst family: FamilyMetadata = { key: options.key, subKey }\n\t\tconst fullKey = `${options.key}(${subKey})`\n\t\tconst target = newest(store)\n\n\t\tconst token = createReadonlySelector(\n\t\t\ttarget,\n\t\t\t{\n\t\t\t\tkey: fullKey,\n\t\t\t\tget: options.get(key),\n\t\t\t},\n\t\t\tfamily,\n\t\t)\n\n\t\tsubject.next({ type: `state_creation`, token })\n\t\treturn token\n\t}\n\n\tconst readonlySelectorFamily = Object.assign(familyFunction, familyToken, {\n\t\tinternalRoles,\n\t\tsubject,\n\t\tinstall: (s: Store) => createReadonlySelectorFamily(s, options),\n\t\tdefault: (key: K) => {\n\t\t\tconst getFn = options.get(key)\n\t\t\treturn getFn({\n\t\t\t\tget: ((...args: Parameters<typeof getState>) =>\n\t\t\t\t\tgetFromStore(store, ...args)) as typeof getState,\n\t\t\t\tfind: ((...args: Parameters<typeof findState>) =>\n\t\t\t\t\tfindInStore(store, ...args)) as typeof findState,\n\t\t\t\tjson: (token) => getJsonToken(store, token),\n\t\t\t})\n\t\t},\n\t}) satisfies ReadonlySelectorFamily<T, K>\n\n\tstore.families.set(options.key, readonlySelectorFamily)\n\treturn familyToken\n}\n","import type {\n\tReadonlySelectorFamilyOptions,\n\tReadonlySelectorFamilyToken,\n\tSelectorFamilyToken,\n\tWritableSelectorFamilyOptions,\n\tWritableSelectorFamilyToken,\n} from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport type { Store } from \"../store\"\nimport { createReadonlySelectorFamily } from \"./create-readonly-selector-family\"\nimport { createWritableSelectorFamily } from \"./create-writable-selector-family\"\n\nexport function createSelectorFamily<T, K extends Canonical>(\n\tstore: Store,\n\toptions: WritableSelectorFamilyOptions<T, K>,\n): WritableSelectorFamilyToken<T, K>\nexport function createSelectorFamily<T, K extends Canonical>(\n\tstore: Store,\n\toptions: ReadonlySelectorFamilyOptions<T, K>,\n): ReadonlySelectorFamilyToken<T, K>\nexport function createSelectorFamily<T, K extends Canonical>(\n\tstore: Store,\n\toptions:\n\t\t| ReadonlySelectorFamilyOptions<T, K>\n\t\t| WritableSelectorFamilyOptions<T, K>,\n): SelectorFamilyToken<T, K> {\n\tconst isWritable = `set` in options\n\n\tif (isWritable) {\n\t\treturn createWritableSelectorFamily(store, options)\n\t}\n\treturn createReadonlySelectorFamily(store, options)\n}\n","export class CircularBuffer<T> {\n\tprotected _buffer: T[]\n\tprotected _index = 0\n\tpublic constructor(array: T[])\n\tpublic constructor(length: number)\n\tpublic constructor(lengthOrArray: T[] | number) {\n\t\tlet length: number\n\t\tif (typeof lengthOrArray === `number`) {\n\t\t\tlength = lengthOrArray\n\t\t} else {\n\t\t\tlength = lengthOrArray.length\n\t\t}\n\t\tthis._buffer = Array.from({ length })\n\t}\n\n\tpublic get buffer(): ReadonlyArray<T | undefined> {\n\t\treturn this._buffer\n\t}\n\n\tpublic get index(): number {\n\t\treturn this._index\n\t}\n\n\tpublic add(item: T): void {\n\t\tthis._buffer[this._index] = item\n\t\tthis._index = (this._index + 1) % this._buffer.length\n\t}\n\n\tpublic copy(): CircularBuffer<T> {\n\t\tconst copy = new CircularBuffer<T>([...this._buffer])\n\t\tcopy._index = this._index\n\t\treturn copy\n\t}\n}\n","import type {\n\tAtomFamilyToken,\n\tAtomToken,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorFamilyToken,\n\tSelectorToken,\n\tWritableFamilyToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport type { Transceiver } from \"../mutable\"\n\nexport const FAMILY_MEMBER_TOKEN_TYPES = {\n\tatom_family: `atom`,\n\tmutable_atom_family: `mutable_atom`,\n\tselector_family: `selector`,\n\treadonly_selector_family: `readonly_selector`,\n\tmolecule_family: `molecule`,\n} as const\n\nexport function counterfeit<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n\tKey extends K,\n>(token: MutableAtomFamilyToken<T, J, K>, key: Key): MutableAtomToken<T, J>\n\nexport function counterfeit<T, K extends Canonical, Key extends K>(\n\ttoken: RegularAtomFamilyToken<T, K>,\n\tkey: Key,\n): RegularAtomToken<T>\n\nexport function counterfeit<T, K extends Canonical, Key extends K>(\n\ttoken: AtomFamilyToken<T, K>,\n\tkey: Key,\n): AtomToken<T>\n\nexport function counterfeit<T, K extends Canonical, Key extends K>(\n\ttoken: WritableSelectorFamilyToken<T, K>,\n\tkey: Key,\n): WritableSelectorToken<T>\n\nexport function counterfeit<T, K extends Canonical, Key extends K>(\n\ttoken: ReadonlySelectorFamilyToken<T, K>,\n\tkey: Key,\n): ReadonlySelectorToken<T>\n\nexport function counterfeit<T, K extends Canonical, Key extends K>(\n\ttoken: SelectorFamilyToken<T, K>,\n\tkey: Key,\n): SelectorToken<T>\n\nexport function counterfeit<T, K extends Canonical, Key extends K>(\n\ttoken: WritableFamilyToken<T, K>,\n\tkey: Key,\n): WritableToken<T>\n\nexport function counterfeit<T, K extends Canonical, Key extends K>(\n\ttoken: ReadableFamilyToken<T, K>,\n\tkey: Key,\n): ReadableToken<T>\n\nexport function counterfeit(\n\ttoken: ReadableFamilyToken<any, any>,\n\tkey: Canonical,\n): ReadableToken<any> {\n\tconst subKey = stringifyJson(key)\n\tconst fullKey = `${token.key}(${subKey})`\n\tconst type = FAMILY_MEMBER_TOKEN_TYPES[token.type]\n\tconst stateToken = {\n\t\tkey: fullKey,\n\t\ttype,\n\t} satisfies ReadableToken<any>\n\n\tObject.assign(stateToken, {\n\t\tfamily: {\n\t\t\tkey: token.key,\n\t\t\tsubKey,\n\t\t},\n\t})\n\n\tObject.assign(stateToken, { counterfeit: true })\n\treturn stateToken\n}\n","import type {\n\tAtomFamilyToken,\n\tAtomIOToken,\n\tAtomToken,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorFamilyToken,\n\tSelectorToken,\n\tTimelineManageable,\n\tTimelineToken,\n\tTransactionToken,\n\tWritableFamilyToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical, Json } from \"atom.io/json\"\n\nimport type {\n\tAtom,\n\tAtomFamily,\n\tAtomIOInternalResource,\n\tFunc,\n\tMutableAtom,\n\tMutableAtomFamily,\n\tReadableFamily,\n\tReadableState,\n\tReadonlySelector,\n\tReadonlySelectorFamily,\n\tRegularAtom,\n\tRegularAtomFamily,\n\tSelector,\n\tSelectorFamily,\n\tTimeline,\n\tTransceiver,\n\tWritableFamily,\n\tWritableSelector,\n\tWritableSelectorFamily,\n\tWritableState,\n} from \"..\"\nimport type { Transaction } from \"../transaction\"\n\nexport function deposit<T>(state: RegularAtom<T>): RegularAtomToken<T>\nexport function deposit<T extends Transceiver<any>>(\n\tstate: MutableAtom<T, any>,\n): MutableAtomToken<T, any>\nexport function deposit<T>(state: Atom<T>): AtomToken<T>\nexport function deposit<T>(state: WritableSelector<T>): WritableSelectorToken<T>\nexport function deposit<T>(state: ReadonlySelector<T>): ReadonlySelectorToken<T>\nexport function deposit<T>(state: Selector<T>): SelectorToken<T>\nexport function deposit<T>(state: WritableState<T>): WritableToken<T>\nexport function deposit<T>(state: ReadableState<T>): ReadableToken<T>\n\nexport function deposit<T, K extends Canonical>(\n\tstate: RegularAtomFamily<T, K>,\n): RegularAtomFamilyToken<T, K>\nexport function deposit<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(state: MutableAtomFamily<T, J, K>): MutableAtomFamilyToken<T, J, K>\nexport function deposit<T>(state: AtomFamily<T, any>): AtomFamilyToken<T, any>\nexport function deposit<T>(\n\tstate: WritableSelectorFamily<T, any>,\n): WritableSelectorFamilyToken<T, any>\nexport function deposit<T>(\n\tstate: ReadonlySelectorFamily<T, any>,\n): ReadonlySelectorFamilyToken<T, any>\nexport function deposit<T>(\n\tstate: SelectorFamily<T, any>,\n): SelectorFamilyToken<T, any>\nexport function deposit<T>(\n\tstate: WritableFamily<T, any>,\n): WritableFamilyToken<T, any>\nexport function deposit<T>(\n\tstate: ReadableFamily<T, any>,\n): ReadableFamilyToken<T, any>\n\nexport function deposit<T extends Func>(\n\tstate: Transaction<T>,\n): 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 { Transceiver } from \"atom.io/internal\"\nimport {\n\tcreateAtomFamily,\n\tcreateStandaloneAtom,\n\tIMPLICIT,\n} from \"atom.io/internal\"\nimport type { Canonical, Json, JsonInterface } from \"atom.io/json\"\n\nimport type { AtomToken, MutableAtomToken, RegularAtomToken, Setter } from \".\"\n\n/**\n * @public\n * Create a mutable atom, a global reactive variable in the implicit store\n *\n * The value of a mutable atom must be some kind of {@link Transceiver}.\n *\n * @param options - {@link MutableAtomOptions}.\n * @returns\n * A reference to the atom created: a {@link MutableAtomToken}\n * @overload Mutable\n */\nexport function atom<T extends Transceiver<any>, J extends Json.Serializable>(\n\toptions: MutableAtomOptions<T, J>,\n): MutableAtomToken<T, J>\n\n/**\n * @public\n * Create a regular atom, a global reactive variable in the implicit store\n * @param options - {@link RegularAtomOptions}.\n * @returns\n * A reference to the atom created: a {@link RegularAtomToken}\n * @overload Regular\n */\nexport function atom<T>(options: RegularAtomOptions<T>): RegularAtomToken<T>\nexport function atom(\n\toptions: MutableAtomOptions<any, any> | RegularAtomOptions<any>,\n): AtomToken<any> {\n\treturn createStandaloneAtom(IMPLICIT.STORE, options)\n}\n\n/** @public */\nexport type Effectors<T> = {\n\t/**\n\t * Set the value of the atom\n\t * @param next - The new value of the atom, or a setter function\n\t */\n\tsetSelf: <New extends T>(next: New | Setter<T, New>) => void\n\t/** Subscribe to changes to the atom */\n\tonSet: (callback: (options: { newValue: T; oldValue: T }) => void) => void\n}\n\n/**\n * @public\n * A function that runs side effects when the atom is set\n * @param tools - {@link Effectors} that can be used to run side effects\n * @returns\n * Optionally, a cleanup function that will be called when the atom is disposed\n */\nexport type AtomEffect<T> = (tools: Effectors<T>) => (() => void) | void\n\n/** @public */\nexport type RegularAtomOptions<T> = {\n\t/** The unique identifier of the atom */\n\tkey: string\n\t/** The starting value of the atom */\n\tdefault: T | (() => T)\n\t/** Hooks used to run side effects when the atom is set */\n\teffects?: AtomEffect<T>[]\n}\n// biome-ignore format: complex intersection\nexport type MutableAtomOptions<T extends Transceiver<any>, J extends Json.Serializable> = \n\t& JsonInterface<T, J>\n\t& Omit<RegularAtomOptions<T>, `default`> \n\t& { \n\t\t\tdefault: ()\t=> T\n\t\t\tmutable: true\n\t\t}\n\n/** @public */\nexport type RegularAtomFamilyOptions<T, K extends Canonical> = {\n\t/** The unique identifier of the atom family */\n\tkey: string\n\t/** The starting value of the atom family */\n\tdefault: T | ((key: K) => T)\n\t/** Hooks used to run side effects when an atom in the family is set */\n\teffects?: (key: K) => AtomEffect<T>[]\n}\n\nexport type RegularAtomFamilyToken<T, K extends Canonical> = {\n\tkey: string\n\ttype: `atom_family`\n\t__T?: T\n\t__K?: K\n}\n\n// biome-ignore format: intersection\nexport type MutableAtomFamilyOptions<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n> = \n\t& JsonInterface<T, J>\n\t& { \n\t\tkey: string\n\t\tdefault: (key: K) => T\n\t\teffects?: (key: K) => AtomEffect<T>[]\n\t\tmutable: true,\n\t}\n\nexport type MutableAtomFamilyToken<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n> = {\n\tkey: string\n\ttype: `mutable_atom_family`\n\t__T?: T\n\t__J?: J\n\t__K?: K\n}\n\nexport type AtomFamilyToken<T, K extends Canonical = Canonical> =\n\t| MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, any, K>\n\t| RegularAtomFamilyToken<T, K>\n\nexport function atomFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(options: MutableAtomFamilyOptions<T, J, K>): MutableAtomFamilyToken<T, J, K>\nexport function atomFamily<T, K extends Canonical>(\n\toptions: RegularAtomFamilyOptions<T, K>,\n): RegularAtomFamilyToken<T, K>\nexport function atomFamily<T, K extends Canonical>(\n\toptions:\n\t\t| MutableAtomFamilyOptions<any, any, any>\n\t\t| RegularAtomFamilyOptions<T, K>,\n): MutableAtomFamilyToken<any, any, any> | RegularAtomFamilyToken<T, K> {\n\treturn createAtomFamily(IMPLICIT.STORE, options)\n}\n","import type { MutableAtomFamilyToken, ReadonlySelectorToken } from \"atom.io\"\nimport type {\n\tJunction,\n\tJunctionEntriesBase,\n\tJunctionSchemaBase,\n\tRefinement,\n\tStore,\n} from \"atom.io/internal\"\nimport {\n\teditRelationsInStore,\n\tfindRelationsInStore,\n\tgetInternalRelationsFromStore,\n\tIMPLICIT,\n\tJoin,\n} from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\nimport type { SetRTX, SetRTXJson } from \"atom.io/transceivers/set-rtx\"\n\nexport interface JoinOptions<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object | null,\n> extends JunctionSchemaBase<ASide, BSide>,\n\t\tPartial<JunctionEntriesBase<AType, BType, Content>> {\n\treadonly key: string\n\treadonly cardinality: Cardinality\n\treadonly isAType: Refinement<string, AType>\n\treadonly isBType: Refinement<string, BType>\n}\n\nexport type JoinToken<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object | null = null,\n> = {\n\tkey: string\n\ttype: `join`\n\tcardinality: Cardinality\n\ta: ASide\n\tb: BSide\n\t__aType?: AType\n\t__bType?: BType\n\t__content?: Content\n}\n\nexport function join<\n\tconst ASide extends string,\n\tconst AType extends string,\n\tconst BSide extends string,\n\tconst BType extends string,\n\tconst Cardinality extends `1:1` | `1:n` | `n:n`,\n>(\n\toptions: JoinOptions<ASide, AType, BSide, BType, Cardinality, null>,\n\tdefaultContent?: undefined,\n\tstore?: Store,\n): JoinToken<ASide, AType, BSide, BType, Cardinality, null>\nexport function join<\n\tconst ASide extends string,\n\tconst AType extends string,\n\tconst BSide extends string,\n\tconst BType extends string,\n\tconst Cardinality extends `1:1` | `1:n` | `n:n`,\n\tconst Content extends Json.Object,\n>(\n\toptions: JoinOptions<ASide, AType, BSide, BType, Cardinality, Content>,\n\tdefaultContent: Content,\n\tstore?: Store,\n): JoinToken<ASide, AType, BSide, BType, Cardinality, Content>\nexport function join<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object,\n>(\n\toptions: JoinOptions<ASide, AType, BSide, BType, Cardinality, Content>,\n\tdefaultContent: Content | undefined,\n\tstore: Store = IMPLICIT.STORE,\n): JoinToken<ASide, AType, BSide, BType, Cardinality, Content> {\n\tstore.joins.set(options.key, new Join(options, defaultContent, store))\n\tconst token: JoinToken<ASide, AType, BSide, BType, Cardinality, Content> = {\n\t\tkey: options.key,\n\t\ttype: `join`,\n\t\ta: options.between[0],\n\t\tb: options.between[1],\n\t\tcardinality: options.cardinality,\n\t}\n\treturn token\n}\n\nexport type JoinStates<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object | null,\n> = Cardinality extends `1:1`\n\t? (Content extends Json.Object\n\t\t\t? {\n\t\t\t\t\treadonly [A in ASide as `${A}EntryOf${Capitalize<BSide>}`]: ReadonlySelectorToken<\n\t\t\t\t\t\t[AType, Content] | null,\n\t\t\t\t\t\tBType\n\t\t\t\t\t>\n\t\t\t\t} & {\n\t\t\t\t\treadonly [B in BSide as `${B}EntryOf${Capitalize<ASide>}`]: ReadonlySelectorToken<\n\t\t\t\t\t\t[BType, Content] | null,\n\t\t\t\t\t\tAType\n\t\t\t\t\t>\n\t\t\t\t}\n\t\t\t: {}) & {\n\t\t\treadonly [A in ASide as `${A}KeyOf${Capitalize<BSide>}`]: ReadonlySelectorToken<\n\t\t\t\tAType | null,\n\t\t\t\tBType\n\t\t\t>\n\t\t} & {\n\t\t\treadonly [B in BSide as `${B}KeyOf${Capitalize<ASide>}`]: ReadonlySelectorToken<\n\t\t\t\tBType | null,\n\t\t\t\tAType\n\t\t\t>\n\t\t}\n\t: Cardinality extends `1:n`\n\t\t? (Content extends Json.Object\n\t\t\t\t? {\n\t\t\t\t\t\treadonly [A in ASide as `${A}EntryOf${Capitalize<BSide>}`]: ReadonlySelectorToken<\n\t\t\t\t\t\t\t[AType, Content] | null,\n\t\t\t\t\t\t\tBType\n\t\t\t\t\t\t>\n\t\t\t\t\t} & {\n\t\t\t\t\t\treadonly [B in BSide as `${B}EntriesOf${Capitalize<ASide>}`]: ReadonlySelectorToken<\n\t\t\t\t\t\t\t[BType, Content][],\n\t\t\t\t\t\t\tAType\n\t\t\t\t\t\t>\n\t\t\t\t\t}\n\t\t\t\t: {}) & {\n\t\t\t\treadonly [A in ASide as `${A}KeyOf${Capitalize<BSide>}`]: ReadonlySelectorToken<\n\t\t\t\t\tAType | null,\n\t\t\t\t\tBType\n\t\t\t\t>\n\t\t\t} & {\n\t\t\t\treadonly [B in BSide as `${B}KeysOf${Capitalize<ASide>}`]: ReadonlySelectorToken<\n\t\t\t\t\tBType[],\n\t\t\t\t\tAType\n\t\t\t\t>\n\t\t\t}\n\t\t: Cardinality extends `n:n`\n\t\t\t? (Content extends Json.Object\n\t\t\t\t\t? {\n\t\t\t\t\t\t\treadonly [A in ASide as `${A}EntriesOf${Capitalize<BSide>}`]: ReadonlySelectorToken<\n\t\t\t\t\t\t\t\t[AType, Content][],\n\t\t\t\t\t\t\t\tBType\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t} & {\n\t\t\t\t\t\t\treadonly [B in BSide as `${B}EntriesOf${Capitalize<ASide>}`]: ReadonlySelectorToken<\n\t\t\t\t\t\t\t\t[BType, Content][],\n\t\t\t\t\t\t\t\tAType\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\treadonly [A in ASide as `${A}KeysOf${Capitalize<BSide>}`]: ReadonlySelectorToken<\n\t\t\t\t\t\tAType[],\n\t\t\t\t\t\tBType\n\t\t\t\t\t>\n\t\t\t\t} & {\n\t\t\t\t\treadonly [B in BSide as `${B}KeysOf${Capitalize<ASide>}`]: ReadonlySelectorToken<\n\t\t\t\t\t\tBType[],\n\t\t\t\t\t\tAType\n\t\t\t\t\t>\n\t\t\t\t}\n\t\t\t: never\n\nexport function findRelations<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object | null,\n>(\n\ttoken: JoinToken<ASide, AType, BSide, BType, Cardinality, Content>,\n\tkey: AType | BType,\n): JoinStates<ASide, AType, BSide, BType, Cardinality, Content> {\n\treturn findRelationsInStore(token, key, IMPLICIT.STORE)\n}\n\nexport function editRelations<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object | null,\n>(\n\ttoken: JoinToken<ASide, AType, BSide, BType, Cardinality, Content>,\n\tchange: (relations: Junction<ASide, AType, BSide, BType, Content>) => void,\n): void {\n\teditRelationsInStore(token, change, IMPLICIT.STORE)\n}\n\nexport function getInternalRelations<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object | null,\n>(\n\ttoken: JoinToken<ASide, AType, BSide, BType, Cardinality, Content>,\n): MutableAtomFamilyToken<SetRTX<string>, SetRTXJson<string>, string> {\n\treturn getInternalRelationsFromStore(token, IMPLICIT.STORE)\n}\n","const LoggerIconDictionary = {\n\t\"⌛\": `Timeline event fully captured`,\n\t\"⏩\": `Timeline redo`,\n\t\"⏪\": `Timeline undo`,\n\t\"⏭️\": `Transaction redo`,\n\t\"⏮️\": `Transaction undo`,\n\t\"⏳\": `Timeline event partially captured`,\n\t\"⏹️\": `Time-travel complete`,\n\t\"✅\": `Realtime transaction success`,\n\t\"✨\": `Computation complete`,\n\t\"❌\": `Conflict prevents attempted action`,\n\t\"⭕\": `Operation start`,\n\t\"🔴\": `Operation complete`,\n\t\"❗\": `Operation blocked`,\n\t\"🟢\": `Operation unblocked`,\n\t\"🐞\": `Possible bug in AtomIO`,\n\t\"👀\": `Subscription added`,\n\t\"👋\": `Greeting`,\n\t\"👍\": `Realtime acknowledgment`,\n\t\"👪\": `Family member added`,\n\t\"💁\": `Notice`,\n\t\"💥\": `Caught`,\n\t\"📁\": `Stow update`,\n\t\"📃\": `Copy mutable`,\n\t\"📖\": `Read state`,\n\t\"📝\": `Write state`,\n\t\"📢\": `Notify subscribers`,\n\t\"🔄\": `Realtime transaction synchronized`,\n\t\"🔌\": `Register dependency`,\n\t\"🔍\": `Discover root`,\n\t\"🔥\": `Delete state`,\n\t\"🔧\": `Create mutable atom`,\n\t\"🔨\": `Create immutable atom`,\n\n\t\"🗑\": `Evict cached value`,\n\t\"🙈\": `Subscription canceled`,\n\t\"🚀\": `Performance measure`,\n\t\"🛄\": `Apply transaction`,\n\t\"🛠️\": `Install atom into store`,\n\t\"🛫\": `Begin transaction`,\n\t\"🛬\": `Complete transaction`,\n\t\"🧮\": `Computing selector`,\n\t\"🧹\": `Prepare to evict`,\n\t\"🪂\": `Abort transaction`,\n\t\"🤞\": `Realtime optimistic update enqueued`,\n\t\"👈\": `Realtime confirmed update enqueued`,\n\t\"🧑⚖️\": `Realtime update beginning reconciliation`,\n\t\"🛎️\": `Realtime transaction received`,\n\t\"🔭\": `Determining realtime perspective`,\n\t\"🖌\": `Redacting realtime update`,\n\t\"👁\": `Determining perspective`,\n} as const\nexport type LoggerIcon = keyof typeof LoggerIconDictionary\nexport type TokenDenomination =\n\t| `atom_family`\n\t| `atom`\n\t| `continuity`\n\t| `molecule_family`\n\t| `molecule`\n\t| `mutable_atom_family`\n\t| `mutable_atom`\n\t| `readonly_selector_family`\n\t| `readonly_selector`\n\t| `selector_family`\n\t| `selector`\n\t| `state`\n\t| `timeline`\n\t| `transaction`\n\t| `unknown`\n\nexport const LOG_LEVELS = [`info`, `warn`, `error`] as const\nexport type LogLevel = (typeof LOG_LEVELS)[number]\n\nexport type LogFn = (\n\ticon: LoggerIcon,\n\tdenomination: TokenDenomination,\n\ttokenKey: string,\n\tmessage: string,\n\t...rest: unknown[]\n) => void\nexport type LogFilter = (...params: Parameters<LogFn>) => boolean\n\nexport type Logger = Record<LogLevel, LogFn>\n\nexport const simpleLog =\n\t(logLevel: keyof Logger): LogFn =>\n\t(icon, denomination, tokenKey, message, ...rest) => {\n\t\t/* eslint-disable-next-line no-console */\n\t\tconsole[logLevel](\n\t\t\t`${icon} ${denomination} \"${tokenKey}\" ${message}`,\n\t\t\t...rest,\n\t\t)\n\t}\nexport const simpleLogger: Logger = {\n\terror: simpleLog(`error`),\n\tinfo: simpleLog(`info`),\n\twarn: simpleLog(`warn`),\n}\n\nexport class AtomIOLogger implements Logger {\n\tpublic logLevel: `error` | `info` | `warn` | null\n\tprivate readonly filter: LogFilter | undefined\n\tprivate readonly logger: Logger\n\n\tpublic constructor(\n\t\tlogLevel: `error` | `info` | `warn` | null,\n\t\tfilter?: LogFilter,\n\t\tlogger: Logger = simpleLogger,\n\t) {\n\t\tthis.logLevel = logLevel\n\t\tthis.filter = filter\n\t\tthis.logger = logger\n\t}\n\n\tpublic error: LogFn = (...args) => {\n\t\tif ((this.filter?.(...args) ?? true) && this.logLevel !== null) {\n\t\t\tthis.logger.error(...args)\n\t\t}\n\t}\n\tpublic info: LogFn = (...args) => {\n\t\tif ((this.filter?.(...args) ?? true) && this.logLevel === `info`) {\n\t\t\tthis.logger.info(...args)\n\t\t}\n\t}\n\tpublic warn: LogFn = (...args) => {\n\t\tif (\n\t\t\t(this.filter?.(...args) ?? true) &&\n\t\t\tthis.logLevel !== `error` &&\n\t\t\tthis.logLevel !== null\n\t\t) {\n\t\t\tthis.logger.warn(...args)\n\t\t}\n\t}\n}\n","import type { Each, Store } from \"atom.io/internal\"\nimport {\n\tallocateIntoStore,\n\tclaimWithinStore,\n\tdeallocateFromStore,\n\tfuseWithinStore,\n\tIMPLICIT,\n\tmakeRootMoleculeInStore,\n} from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\n\nexport const $claim = Symbol(`claim`)\nexport type Claim<K extends Canonical> = K & { [$claim]?: true }\n\nexport class Realm<H extends Hierarchy> {\n\tpublic store: Store\n\tpublic constructor(store: Store = IMPLICIT.STORE) {\n\t\tthis.store = store\n\t\tmakeRootMoleculeInStore(`root`, store)\n\t}\n\tpublic allocate<V extends Vassal<H>, A extends Above<V, H>>(\n\t\tprovenance: A,\n\t\tkey: V,\n\t\tattachmentStyle?: `all` | `any`,\n\t): Claim<V> {\n\t\treturn allocateIntoStore<H, V, A>(\n\t\t\tthis.store,\n\t\t\tprovenance,\n\t\t\tkey,\n\t\t\tattachmentStyle,\n\t\t)\n\t}\n\tpublic fuse<\n\t\tC extends CompoundFrom<H>,\n\t\tT extends C extends CompoundTypedKey<infer t, any, any> ? t : never,\n\t\tA extends C extends CompoundTypedKey<any, infer v, any> ? v : never,\n\t\tB extends C extends CompoundTypedKey<any, any, infer m> ? m : never,\n\t>(\n\t\ttype: T,\n\t\treagentA: SingularTypedKey<A>,\n\t\treagentB: SingularTypedKey<B>,\n\t): Claim<CompoundTypedKey<T, A, B>> {\n\t\treturn fuseWithinStore<H, C, T, A, B>(this.store, type, reagentA, reagentB)\n\t}\n\n\tpublic deallocate<V extends Vassal<H>>(claim: Claim<V>): void {\n\t\tdeallocateFromStore<H, V>(this.store, claim)\n\t}\n\tpublic claim<\n\t\tV extends Exclude<Vassal<H>, CompoundTypedKey>,\n\t\tA extends Above<V, H>,\n\t>(newProvenance: A, claim: Claim<V>, exclusive?: `exclusive`): Claim<V> {\n\t\treturn claimWithinStore<H, V, A>(this.store, newProvenance, claim, exclusive)\n\t}\n}\n\nexport class Anarchy {\n\tpublic store: Store\n\tpublic realm: Realm<any>\n\n\tpublic constructor(store: Store = IMPLICIT.STORE) {\n\t\tthis.store = store\n\t\tthis.realm = new Realm(store)\n\t}\n\n\tpublic allocate(\n\t\tprovenance: Canonical,\n\t\tkey: Canonical,\n\t\tattachmentStyle?: `all` | `any`,\n\t): void {\n\t\tallocateIntoStore<any, any, any>(\n\t\t\tthis.store,\n\t\t\tprovenance,\n\t\t\tkey,\n\t\t\tattachmentStyle,\n\t\t)\n\t}\n\n\tpublic deallocate(key: Canonical): void {\n\t\tdeallocateFromStore<any, any>(this.store, key)\n\t}\n\n\tpublic claim(\n\t\tnewProvenance: Canonical,\n\t\tkey: Canonical,\n\t\texclusive?: `exclusive`,\n\t): void {\n\t\tclaimWithinStore<any, any, any>(this.store, newProvenance, key, exclusive)\n\t}\n}\n\nexport const T$ = `T$`\nexport type T$ = typeof T$\nexport type TypeTag<T extends string> = `${T$}--${T}`\nexport type SingularTypedKey<T extends string = string> = `${T}::${string}`\nexport type CompoundTypedKey<\n\tA extends string = string,\n\tB extends string = string,\n\tC extends string = string,\n> = `${TypeTag<A>}==${SingularTypedKey<B>}++${SingularTypedKey<C>}`\nexport type TypedKey<\n\tA extends string = string,\n\tB extends string = string,\n\tC extends string = string,\n> = CompoundTypedKey<A, B, C> | SingularTypedKey<A>\ntype Scope = SingularTypedKey[]\ntype MutualFealty = {\n\tabove: Scope\n\tbelow: CompoundTypedKey\n}\ntype ExclusiveFealty = {\n\tabove: TypedKey | `root`\n\tbelow: Scope\n}\ntype Fealty = ExclusiveFealty | MutualFealty\n\nexport type Hierarchy<F extends Fealty[] = Fealty[]> = Each<F>\n\nexport type Vassal<H extends Hierarchy> = {\n\t[K in keyof H]: H[K] extends MutualFealty\n\t\t? H[K][`below`]\n\t\t: H[K] extends { below: Array<infer V> }\n\t\t\t? V extends TypedKey\n\t\t\t\t? V\n\t\t\t\t: never\n\t\t\t: never\n}[keyof H]\n\nexport type Above<TK extends TypedKey, H extends Hierarchy> = {\n\t[K in keyof H]: H[K] extends MutualFealty\n\t\t? TK extends H[K][`below`]\n\t\t\t? H[K][`above`]\n\t\t\t: never\n\t\t: H[K] extends { below: Array<infer V> }\n\t\t\t? TK extends V\n\t\t\t\t? H[K] extends ExclusiveFealty\n\t\t\t\t\t? H[K][`above`]\n\t\t\t\t\t: never\n\t\t\t\t: never\n\t\t\t: never\n}[keyof H]\n\nexport type Below<TK extends TypedKey | TypedKey[], H extends Hierarchy> = {\n\t[K in keyof H]: H[K] extends MutualFealty\n\t\t? TK extends H[K][`above`]\n\t\t\t? H[K][`below`]\n\t\t\t: TK extends H[K][`above`][number]\n\t\t\t\t? H[K][`below`]\n\t\t\t\t: never\n\t\t: H[K] extends { above: infer V }\n\t\t\t? TK extends V\n\t\t\t\t? H[K] extends ExclusiveFealty\n\t\t\t\t\t? H[K][`below`][number]\n\t\t\t\t\t: never\n\t\t\t\t: never\n\t\t\t: never\n}[keyof H]\n\nexport type Mutuals<TK extends TypedKey | TypedKey[], H extends Hierarchy> = {\n\t[K in keyof H]: H[K] extends MutualFealty\n\t\t? TK extends H[K][`above`][number]\n\t\t\t? [mutual: Exclude<H[K][`above`][number], TK>, below: H[K][`below`]]\n\t\t\t: never\n\t\t: never\n}[keyof H]\n\nexport type CompoundFrom<H extends Hierarchy> = {\n\t[K in keyof H]: H[K] extends MutualFealty ? H[K][`below`] : never\n}[keyof H]\n","import {\n\tcreateSelectorFamily,\n\tcreateStandaloneSelector,\n\tIMPLICIT,\n} from \"atom.io/internal\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport type { ReadonlySelectorToken, WritableSelectorToken } from \".\"\nimport type { Read, Write } from \"./transaction\"\n\nexport type WritableSelectorOptions<T> = {\n\tkey: string\n\tget: Read<() => T>\n\tset: Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorOptions<T> = {\n\tkey: string\n\tget: Read<() => T>\n}\n\n/**\n * @public\n * Declare a selector. The value of a selector should depend\n * on the value of atoms or other selectors in the store.\n *\n * A writable selector can be \"set\" to a new value.\n * It is advised to set its dependencies to values\n * that would produce the new value of the selector.\n * @param options - {@link WritableSelectorOptions}.\n * @returns\n * The token for your selector.\n * @overload Writable\n */\nexport function selector<T>(\n\toptions: WritableSelectorOptions<T>,\n): WritableSelectorToken<T>\n\n/**\n * @public\n * Declare a selector. The value of a selector should depend\n * on the value of atoms or other selectors in the store.\n * @param options - {@link ReadonlySelectorOptions}.\n */\nexport function selector<T>(\n\toptions: ReadonlySelectorOptions<T>,\n): ReadonlySelectorToken<T>\nexport function selector<T>(\n\toptions: ReadonlySelectorOptions<T> | WritableSelectorOptions<T>,\n): ReadonlySelectorToken<T> | WritableSelectorToken<T> {\n\treturn createStandaloneSelector(IMPLICIT.STORE, options)\n}\n\nexport type WritableSelectorFamilyOptions<T, K extends Canonical> = {\n\tkey: string\n\tget: (key: K) => Read<() => T>\n\tset: (key: K) => Write<(newValue: T) => void>\n}\nexport type ReadonlySelectorFamilyOptions<T, K extends Canonical> = {\n\tkey: string\n\tget: (key: K) => Read<() => T>\n}\n\nexport type WritableSelectorFamilyToken<T, K extends Canonical> = {\n\tkey: string\n\ttype: `selector_family`\n\t__T?: T\n\t__K?: K\n}\n\nexport type ReadonlySelectorFamilyToken<T, K extends Canonical> = {\n\tkey: string\n\ttype: `readonly_selector_family`\n\t__T?: T\n\t__K?: K\n}\n\nexport type SelectorFamilyToken<T, K extends Canonical> =\n\t| ReadonlySelectorFamilyToken<T, K>\n\t| WritableSelectorFamilyToken<T, K>\n\nexport function selectorFamily<T, K extends Canonical>(\n\toptions: WritableSelectorFamilyOptions<T, K>,\n): WritableSelectorFamilyToken<T, K>\nexport function selectorFamily<T, K extends Canonical>(\n\toptions: ReadonlySelectorFamilyOptions<T, K>,\n): ReadonlySelectorFamilyToken<T, K>\nexport function selectorFamily<T, K extends Canonical>(\n\toptions:\n\t\t| ReadonlySelectorFamilyOptions<T, K>\n\t\t| WritableSelectorFamilyOptions<T, K>,\n): ReadonlySelectorFamilyToken<T, K> | WritableSelectorFamilyToken<T, K> {\n\treturn createSelectorFamily(IMPLICIT.STORE, options)\n}\n","import type { Store } from \"../store\"\nimport type { Func } from \"../utility-types\"\nimport type { TransactionEpoch, TransactionProgress } from \".\"\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<Func>\n\tparent: ChildStore | RootStore\n\tchild: ChildStore | null\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 { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\nimport { isChildStore } from \"./is-root-store\"\n\nexport const abortTransaction = (store: Store): void => {\n\tconst target = newest(store)\n\tif (!isChildStore(target)) {\n\t\tstore.logger.warn(\n\t\t\t`🐞`,\n\t\t\t`transaction`,\n\t\t\t`???`,\n\t\t\t`abortTransaction called outside of a transaction. This is probably a bug in AtomIO.`,\n\t\t)\n\t\treturn\n\t}\n\tstore.logger.info(\n\t\t`🪂`,\n\t\t`transaction`,\n\t\ttarget.transactionMeta.update.key,\n\t\t`Aborting transaction`,\n\t)\n\ttarget.parent.child = null\n}\n","export function capitalize<S extends string>(string: S): Capitalize<S> {\n\treturn (string[0].toUpperCase() + string.slice(1)) as Capitalize<S>\n}\n","import type { AtomIOToken } from \"atom.io\"\n\nimport { capitalize } from \"./capitalize\"\n\nexport function prettyPrintTokenType(token: AtomIOToken): string {\n\treturn token.type.split(`_`).map(capitalize).join(` `)\n}\n","import type { AtomIOToken } from \"atom.io\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport { prettyPrintTokenType } from \"./pretty-print\"\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`${prettyPrintTokenType(token)} ${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 { TransactionToken } from \"atom.io\"\n\nimport { NotFoundError } from \"../not-found-error\"\nimport type { Store } from \"../store\"\nimport { withdraw } from \"../store\"\nimport type { Func } from \"../utility-types\"\n\nexport function actUponStore<F extends Func>(\n\tstore: Store,\n\ttoken: TransactionToken<F>,\n\tid: string,\n): (...parameters: Parameters<F>) => ReturnType<F> {\n\treturn (...parameters: Parameters<F>): ReturnType<F> => {\n\t\tconst tx = withdraw(store, token)\n\t\tif (tx) {\n\t\t\treturn tx.run(parameters, id)\n\t\t}\n\t\tthrow new NotFoundError(token, store)\n\t}\n}\n","export type Modify<T> = (thing: T) => T\n\nexport const become =\n\t<T>(nextVersionOfThing: Modify<T> | T) =>\n\t(originalThing: T): T =>\n\t\tnextVersionOfThing instanceof Function\n\t\t\t? nextVersionOfThing(originalThing)\n\t\t\t: nextVersionOfThing\n","import type { ReadableState } from \"..\"\nimport { readCachedValue } from \"../caching\"\nimport type { Store } from \"../store\"\n\nexport const readOrComputeValue = <T>(\n\ttarget: Store,\n\tstate: ReadableState<T>,\n): T => {\n\tif (target.valueMap.has(state.key)) {\n\t\ttarget.logger.info(`📖`, state.type, state.key, `reading cached value`)\n\t\treturn readCachedValue(state, target)\n\t}\n\tswitch (state.type) {\n\t\tcase `selector`:\n\t\tcase `readonly_selector`:\n\t\t\ttarget.logger.info(`🧮`, state.type, state.key, `computing value`)\n\t\t\treturn state.get()\n\t\tcase `atom`:\n\t\tcase `mutable_atom`: {\n\t\t\tconst def = state.default\n\t\t\tlet fallback: T\n\t\t\tif (def instanceof Function) {\n\t\t\t\tfallback = def()\n\t\t\t} else {\n\t\t\t\tfallback = def\n\t\t\t}\n\t\t\ttarget.logger.info(\n\t\t\t\t`💁`,\n\t\t\t\t`atom`,\n\t\t\t\tstate.key,\n\t\t\t\t`could not find cached value; using default`,\n\t\t\t\tfallback,\n\t\t\t)\n\t\t\treturn fallback\n\t\t}\n\t}\n}\n","import type { WritableToken } from \"atom.io\"\n\nimport type { Store } from \"./store\"\nimport { isChildStore } from \"./transaction/is-root-store\"\n\nexport type OperationProgress =\n\t| {\n\t\t\topen: false\n\t }\n\t| {\n\t\t\topen: true\n\t\t\tdone: Set<string>\n\t\t\tprev: Map<string, any>\n\t\t\ttime: number\n\t\t\ttoken: WritableToken<any>\n\t }\n\nexport const openOperation = (\n\tstore: Store,\n\ttoken: WritableToken<any>,\n): number | undefined => {\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\ttime: Date.now(),\n\t\ttoken,\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\t!isChildStore(store)\n\t\t\t\t? ``\n\t\t\t\t: ` ${store.transactionMeta.phase} \"${store.transactionMeta.update.key}\"`\n\t\t}`,\n\t)\n}\nexport const 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 { StateUpdate } from \"atom.io\"\n\nimport type { Atom, Selector, Store } from \"..\"\n\nexport const emitUpdate = <T>(\n\tstore: Store,\n\tstate: Atom<T> | Selector<T>,\n\tupdate: StateUpdate<T>,\n): void => {\n\tswitch (state.type) {\n\t\tcase `mutable_atom`:\n\t\t\tstore.logger.info(\n\t\t\t\t`📢`,\n\t\t\t\tstate.type,\n\t\t\t\tstate.key,\n\t\t\t\t`is now (`,\n\t\t\t\tupdate.newValue,\n\t\t\t\t`) subscribers:`,\n\t\t\t\tstate.subject.subscribers,\n\t\t\t)\n\t\t\tbreak\n\t\tcase `atom`:\n\t\tcase `selector`:\n\t\tcase `readonly_selector`:\n\t\t\tstore.logger.info(\n\t\t\t\t`📢`,\n\t\t\t\tstate.type,\n\t\t\t\tstate.key,\n\t\t\t\t`went (`,\n\t\t\t\tupdate.oldValue,\n\t\t\t\t`->`,\n\t\t\t\tupdate.newValue,\n\t\t\t\t`) subscribers:`,\n\t\t\t\tstate.subject.subscribers,\n\t\t\t)\n\t}\n\tstate.subject.next(update)\n}\n","import type { Atom } from \"..\"\nimport { evictCachedValue } from \"../caching\"\nimport { newest } from \"../lineage\"\nimport { isDone, markDone } from \"../operation\"\nimport type { Store } from \"../store\"\n\nexport const evictDownStream = <T>(store: Store, atom: Atom<T>): void => {\n\tconst target = newest(store)\n\tconst downstreamKeys = target.selectorAtoms.getRelatedKeys(atom.key)\n\ttarget.logger.info(\n\t\t`🧹`,\n\t\tatom.type,\n\t\tatom.key,\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\tatom.type,\n\t\t\t\tatom.key,\n\t\t\t\t`[ ${[...target.operation.done].join(`, `)} ] already done`,\n\t\t\t)\n\t\t}\n\t\tfor (const key of downstreamKeys) {\n\t\t\tif (isDone(target, key)) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tevictCachedValue(key, target)\n\t\t\tmarkDone(target, key)\n\t\t}\n\t}\n}\n","import type { KeyedStateUpdate } from \"atom.io\"\n\nimport type { Atom, Store } from \"..\"\nimport { isAtomDefault, markAtomAsNotDefault } from \"../atom\"\nimport { cacheValue } from \"../caching\"\nimport { readOrComputeValue } from \"../get-state/read-or-compute-value\"\nimport { isTransceiver, type Transceiver } from \"../mutable\"\nimport { markDone } from \"../operation\"\nimport { isChildStore } from \"../transaction/is-root-store\"\nimport { become } from \"./become\"\nimport { copyMutableIfNeeded } from \"./copy-mutable-if-needed\"\nimport { emitUpdate } from \"./emit-update\"\nimport { evictDownStream } from \"./evict-downstream\"\n\nexport const setAtom = <T>(\n\ttarget: Store,\n\tatom: Atom<T>,\n\tnext: T | ((oldValue: T) => T),\n): void => {\n\tconst oldValue = readOrComputeValue(target, atom)\n\tlet newValue = oldValue\n\tif (atom.type === `mutable_atom` && isChildStore(target)) {\n\t\tconst { parent } = target\n\t\tconst copiedValue = copyMutableIfNeeded(target, atom, parent)\n\t\tnewValue = copiedValue\n\t}\n\tnewValue = become(next)(newValue)\n\ttarget.logger.info(`📝`, `atom`, atom.key, `set to`, newValue)\n\tnewValue = cacheValue(target, atom.key, newValue, atom.subject)\n\tif (isAtomDefault(target, atom.key)) {\n\t\tmarkAtomAsNotDefault(target, atom.key)\n\t}\n\tmarkDone(target, atom.key)\n\tevictDownStream(target, atom)\n\tconst update = { oldValue, newValue }\n\tif (!isChildStore(target)) {\n\t\temitUpdate(target, atom, update)\n\t\treturn\n\t}\n\tif (target.on.transactionApplying.state === null) {\n\t\tconst { key } = atom\n\t\tif (isTransceiver(update.newValue)) {\n\t\t\treturn\n\t\t}\n\t\tconst atomUpdate: KeyedStateUpdate<T> = {\n\t\t\ttype: `atom_update`,\n\t\t\tkey,\n\t\t\t...update,\n\t\t}\n\t\tif (atom.family) {\n\t\t\tatomUpdate.family = atom.family\n\t\t}\n\t\ttarget.transactionMeta.update.updates.push(atomUpdate)\n\t\ttarget.logger.info(\n\t\t\t`📁`,\n\t\t\t`atom`,\n\t\t\tkey,\n\t\t\t`stowed (`,\n\t\t\tupdate.oldValue,\n\t\t\t`->`,\n\t\t\tupdate.newValue,\n\t\t\t`)`,\n\t\t)\n\t} else if (atom.key.startsWith(`*`)) {\n\t\tconst mutableKey = atom.key.slice(1)\n\t\tconst mutableAtom = target.atoms.get(mutableKey) as Atom<any>\n\t\tlet transceiver: Transceiver<any> = target.valueMap.get(mutableKey)\n\t\tif (mutableAtom.type === `mutable_atom` && isChildStore(target)) {\n\t\t\tconst { parent } = target\n\t\t\tconst copiedValue = copyMutableIfNeeded(target, mutableAtom, parent)\n\t\t\ttransceiver = copiedValue\n\t\t}\n\t\tconst accepted = transceiver.do(update.newValue) === null\n\t\tif (accepted) evictDownStream(target, mutableAtom)\n\t}\n}\n","import type { WritableState } from \"..\"\nimport type { Store } from \"../store\"\nimport { setAtom } from \"./set-atom\"\n\nexport const setAtomOrSelector = <T>(\n\tstore: Store,\n\tstate: WritableState<T>,\n\tvalue: T | ((oldValue: T) => T),\n): void => {\n\tswitch (state.type) {\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\t\tsetAtom(store, state, value)\n\t\t\tbreak\n\t\tcase `selector`:\n\t\t\tstate.set(value)\n\t\t\tbreak\n\t}\n}\n","import type {\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tWritableFamilyToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical, Json } from \"atom.io/json\"\n\nimport type { Transceiver } from \"../mutable\"\nimport type { Store } from \"../store\"\n\nexport function getFamilyOfToken<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\ttoken: MutableAtomToken<T, J, K>,\n): MutableAtomFamilyToken<T, J, K> | undefined\n\nexport function getFamilyOfToken<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: RegularAtomToken<T, K>,\n): RegularAtomFamilyToken<T, K> | undefined\n\nexport function getFamilyOfToken<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: WritableSelectorToken<T, K>,\n): WritableSelectorFamilyToken<T, K> | undefined\n\nexport function getFamilyOfToken<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: ReadonlySelectorToken<T, K>,\n): ReadonlySelectorFamilyToken<T, K> | undefined\n\nexport function getFamilyOfToken<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: WritableToken<T, K>,\n): WritableFamilyToken<T, K> | undefined\n\nexport function getFamilyOfToken<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: ReadableToken<T, K>,\n): ReadableFamilyToken<T, K> | undefined\n\nexport function getFamilyOfToken(\n\tstore: Store,\n\ttoken: ReadableToken<any, any>,\n): ReadableFamilyToken<any, any> | undefined {\n\tif (token.family) {\n\t\tconst family = store.families.get(token.family.key)\n\t\tif (family) {\n\t\t\treturn family\n\t\t}\n\t}\n}\n","import type { WritableFamilyToken, WritableToken } from \"atom.io\"\nimport { type Canonical, parseJson, stringifyJson } from \"atom.io/json\"\n\nimport { findInStore } from \"../families\"\nimport { getFamilyOfToken } from \"../families/get-family-of-token\"\nimport { closeOperation, openOperation } from \"../operation\"\nimport type { Store } from \"../store\"\nimport { withdraw } from \"../store\"\nimport { setAtomOrSelector } from \"./set-atom-or-selector\"\n\nexport function setIntoStore<T, New extends T>(\n\tstore: Store,\n\ttoken: WritableToken<T>,\n\tvalue: New | ((oldValue: T) => New),\n): void\n\nexport function setIntoStore<T, K extends Canonical, New extends T>(\n\tstore: Store,\n\ttoken: WritableFamilyToken<T, K>,\n\tkey: K,\n\tvalue: New | ((oldValue: T) => New),\n): void\n\nexport function setIntoStore<T, New extends T>(\n\tstore: Store,\n\t...params:\n\t\t| [\n\t\t\t\ttoken: WritableFamilyToken<T, Canonical>,\n\t\t\t\tkey: Canonical,\n\t\t\t\tvalue: New | ((oldValue: T) => New),\n\t\t ]\n\t\t| [token: WritableToken<T>, value: New | ((oldValue: T) => New)]\n): void {\n\tlet token: WritableToken<T>\n\tlet family: WritableFamilyToken<T, Canonical> | null\n\tlet key: Canonical | null\n\tlet value: New | ((oldValue: T) => New)\n\tif (params.length === 2) {\n\t\ttoken = params[0]\n\t\tvalue = params[1]\n\t\tfamily = getFamilyOfToken(store, token) ?? null\n\t\tif (family) {\n\t\t\tkey = token.family ? parseJson(token.family.subKey) : null\n\t\t\ttoken = findInStore(store, family, key)\n\t\t}\n\t} else {\n\t\tfamily = params[0]\n\t\tkey = params[1]\n\t\tvalue = params[2]\n\t\ttoken = findInStore(store, family, key)\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 set because it was not found in the store \"${store.config.name}\".`,\n\t\t\tdisposal\n\t\t\t\t? `This state was previously disposed:\\n${disposal.trace}`\n\t\t\t\t: `No previous disposal trace was found.`,\n\t\t)\n\t\treturn\n\t}\n\n\tconst rejectionTime = openOperation(store, token)\n\tif (rejectionTime) {\n\t\tconst unsubscribe = store.on.operationClose.subscribe(\n\t\t\t`waiting to set \"${token.key}\" at T-${rejectionTime}`,\n\t\t\t() => {\n\t\t\t\tunsubscribe()\n\t\t\t\tstore.logger.info(\n\t\t\t\t\t`🟢`,\n\t\t\t\t\ttoken.type,\n\t\t\t\t\ttoken.key,\n\t\t\t\t\t`resuming deferred setState from T-${rejectionTime}`,\n\t\t\t\t)\n\t\t\t\tsetIntoStore(store, token, value)\n\t\t\t},\n\t\t)\n\t\treturn\n\t}\n\tconst state = withdraw(store, token)\n\tsetAtomOrSelector(store, state, value)\n\tcloseOperation(store)\n}\n","import type { KeyedStateUpdate, RegularAtomToken } from \"atom.io\"\n\nimport { setIntoStore } from \"../set-state\"\nimport type { Store } from \"../store\"\n\nexport function ingestAtomUpdate(\n\tapplying: `newValue` | `oldValue`,\n\tatomUpdate: KeyedStateUpdate<any>,\n\tstore: Store,\n): void {\n\tconst { key, newValue, oldValue } = atomUpdate\n\tconst value = applying === `newValue` ? newValue : oldValue\n\tconst token: RegularAtomToken<unknown> = { key, type: `atom` }\n\tif (atomUpdate.family) {\n\t\tObject.assign(token, { family: atomUpdate.family })\n\t}\n\tsetIntoStore(store, token, value)\n}\n","export function getTrace(error: Error): string {\n\tconst { stack } = error\n\tif (stack) {\n\t\treturn `\\n` + stack.split(`\\n`)?.slice(1)?.join(`\\n`)\n\t}\n\treturn ``\n}\n","import type {\n\tAbove,\n\tClaim,\n\tCompoundFrom,\n\tCompoundTypedKey,\n\tHierarchy,\n\tMoleculeCreation,\n\tMoleculeDisposal,\n\tMoleculeTransfer,\n\tSingularTypedKey,\n\tVassal,\n} from \"atom.io\"\nimport type { Canonical, stringified } from \"atom.io/json\"\nimport { parseJson, stringifyJson } from \"atom.io/json\"\n\nimport { disposeFromStore, findInStore } from \"./families\"\nimport { getTrace } from \"./get-trace\"\nimport { newest } from \"./lineage\"\nimport type { Store } from \"./store\"\nimport { IMPLICIT } from \"./store\"\nimport { isChildStore } from \"./transaction\"\n\nexport type Molecule<K extends Canonical> = {\n\treadonly key: K\n\treadonly stringKey: stringified<K>\n\treadonly dependsOn: `all` | `any`\n}\n\nexport function makeRootMoleculeInStore<S extends string>(\n\tkey: S,\n\tstore: Store = IMPLICIT.STORE,\n): S {\n\tconst molecule = {\n\t\tkey,\n\t\tstringKey: stringifyJson(key),\n\t\tdependsOn: `any`,\n\t} satisfies Molecule<S>\n\tstore.molecules.set(stringifyJson(key), molecule)\n\treturn key\n}\n\nexport function allocateIntoStore<\n\tH extends Hierarchy,\n\tV extends Vassal<H>,\n\tA extends Above<V, H>,\n>(\n\tstore: Store,\n\tprovenance: A,\n\tkey: V,\n\tdependsOn: `all` | `any` = `any`,\n): Claim<V> {\n\tconst origin = provenance as Canonical | [Canonical, Canonical]\n\tconst stringKey = stringifyJson(key)\n\tconst invalidKeys: stringified<Canonical>[] = []\n\tconst target = newest(store)\n\n\tif (Array.isArray(origin)) {\n\t\tfor (const formerClaim of origin) {\n\t\t\tconst claimString = stringifyJson(formerClaim)\n\t\t\tconst claim = target.molecules.get(claimString)\n\t\t\tif (claim) {\n\t\t\t\tstore.moleculeGraph.set(claimString, stringKey, { source: claimString })\n\t\t\t} else {\n\t\t\t\tinvalidKeys.push(claimString)\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconst claimString = stringifyJson(origin)\n\t\tconst claim = target.molecules.get(claimString)\n\t\tif (claim) {\n\t\t\tstore.moleculeGraph.set(claimString, stringKey, { source: claimString })\n\t\t} else {\n\t\t\tinvalidKeys.push(claimString)\n\t\t}\n\t}\n\tif (invalidKeys.length === 0) {\n\t\ttarget.molecules.set(stringKey, { key, stringKey, dependsOn })\n\t}\n\n\tconst creationEvent: MoleculeCreation = {\n\t\ttype: `molecule_creation`,\n\t\tkey,\n\t\tprovenance: origin,\n\t}\n\tconst isTransaction =\n\t\tisChildStore(target) && target.transactionMeta.phase === `building`\n\tif (isTransaction) {\n\t\ttarget.transactionMeta.update.updates.push(creationEvent)\n\t} else {\n\t\ttarget.on.moleculeCreation.next(creationEvent)\n\t}\n\n\tfor (const claim of invalidKeys) {\n\t\tconst disposal = store.disposalTraces.buffer.find(\n\t\t\t(item) => item?.key === claim,\n\t\t)\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\t`molecule`,\n\t\t\tkey,\n\t\t\t`allocation failed:`,\n\t\t\t`Could not allocate to ${claim} in store \"${store.config.name}\".`,\n\t\t\tdisposal\n\t\t\t\t? `\\n ${claim} was most recently disposed\\n${disposal.trace}`\n\t\t\t\t: `No previous disposal trace for ${claim} was found.`,\n\t\t)\n\t}\n\n\treturn key as Claim<V>\n}\n\nexport function fuseWithinStore<\n\tH extends Hierarchy,\n\tC extends CompoundFrom<H>,\n\tT extends C extends CompoundTypedKey<infer t, any, any> ? t : never,\n\tA extends C extends CompoundTypedKey<any, infer a, any> ? a : never,\n\tB extends C extends CompoundTypedKey<any, any, infer b> ? b : never,\n>(\n\tstore: Store,\n\ttype: T,\n\tsideA: SingularTypedKey<A>,\n\tsideB: SingularTypedKey<B>,\n): Claim<CompoundTypedKey<T, A, B>> {\n\tconst compoundKey: CompoundTypedKey<T, A, B> =\n\t\t`T$--${type}==${sideA}++${sideB}`\n\tconst above = [sideA, sideB] as Above<Vassal<H>, H>\n\tallocateIntoStore<H, Vassal<H>, Above<Vassal<H>, H>>(\n\t\tstore,\n\t\tabove,\n\t\tcompoundKey as Vassal<H>,\n\t\t`all`,\n\t)\n\treturn compoundKey\n}\n\nexport function deallocateFromStore<H extends Hierarchy, V extends Vassal<H>>(\n\tstore: Store,\n\tclaim: Claim<V>,\n): void {\n\tconst stringKey = stringifyJson(claim)\n\n\tconst molecule = store.molecules.get(stringKey)\n\tif (!molecule) {\n\t\tconst disposal = store.disposalTraces.buffer.find(\n\t\t\t(item) => item?.key === stringKey,\n\t\t)\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\t`molecule`,\n\t\t\tclaim,\n\t\t\t`deallocation failed:`,\n\t\t\t`Could not find allocation for ${stringKey} in store \"${store.config.name}\".`,\n\t\t\tdisposal\n\t\t\t\t? `\\n This state was most recently deallocated\\n${disposal.trace}`\n\t\t\t\t: `No previous disposal trace for ${stringKey} was found.`,\n\t\t)\n\t\treturn\n\t}\n\n\tconst joinKeys = store.moleculeJoins.getRelatedKeys(\n\t\tmolecule.key as string /* 💥 RECONCILE */,\n\t)\n\tif (joinKeys) {\n\t\tfor (const joinKey of joinKeys) {\n\t\t\tconst join = store.joins.get(joinKey)\n\t\t\tif (join) {\n\t\t\t\tjoin.relations.delete(molecule.key)\n\t\t\t\tjoin.molecules.delete(molecule.stringKey) // get rid of\n\t\t\t}\n\t\t}\n\t}\n\tstore.moleculeJoins.delete(molecule.stringKey)\n\n\tconst provenance: stringified<Canonical>[] = []\n\n\tconst values: [string, any][] = []\n\tconst disposalEvent: MoleculeDisposal = {\n\t\ttype: `molecule_disposal`,\n\t\tkey: molecule.key,\n\t\tvalues,\n\t\tprovenance,\n\t}\n\tconst target = newest(store)\n\ttarget.molecules.delete(stringKey)\n\tconst isTransaction =\n\t\tisChildStore(target) && target.transactionMeta.phase === `building`\n\tif (isTransaction) {\n\t\ttarget.transactionMeta.update.updates.push(disposalEvent)\n\t}\n\tconst relatedMolecules = store.moleculeGraph.getRelationEntries({\n\t\tdownstreamMoleculeKey: molecule.stringKey,\n\t})\n\tif (relatedMolecules) {\n\t\tfor (const [relatedStringKey, { source }] of relatedMolecules) {\n\t\t\tif (source === molecule.stringKey) {\n\t\t\t\tconst relatedKey = parseJson(relatedStringKey)\n\t\t\t\tdeallocateFromStore<any, any>(store, relatedKey)\n\t\t\t} else {\n\t\t\t\tprovenance.push(source)\n\t\t\t}\n\t\t}\n\t}\n\tconst familyKeys = target.moleculeData.getRelatedKeys(molecule.stringKey)\n\tif (familyKeys) {\n\t\tfor (const familyKey of familyKeys) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: tokens of molecules must have a family\n\t\t\tconst family = target.families.get(familyKey)!\n\t\t\tconst token = findInStore(store, family, molecule.key)\n\t\t\tvalues.push([family.key, token])\n\t\t\tdisposeFromStore(store, token)\n\t\t}\n\t}\n\n\ttarget.moleculeGraph.delete(molecule.stringKey)\n\ttarget.moleculeJoins.delete(molecule.stringKey)\n\ttarget.moleculeData.delete(molecule.stringKey)\n\n\tif (!isTransaction) {\n\t\ttarget.on.moleculeDisposal.next(disposalEvent)\n\t}\n\ttarget.molecules.delete(molecule.stringKey)\n\n\tconst trace = getTrace(new Error())\n\tstore.disposalTraces.add({ key: stringKey, trace })\n}\nexport function claimWithinStore<\n\tH extends Hierarchy,\n\tV extends Exclude<Vassal<H>, CompoundTypedKey>,\n\tA extends Above<V, H>,\n>(\n\tstore: Store,\n\tnewProvenance: A,\n\tclaim: Claim<V>,\n\texclusive?: `exclusive`,\n): Claim<V> {\n\tconst stringKey = stringifyJson(claim)\n\tconst target = newest(store)\n\tconst molecule = target.molecules.get(stringKey)\n\tif (!molecule) {\n\t\tconst disposal = store.disposalTraces.buffer.find(\n\t\t\t(item) => item?.key === stringKey,\n\t\t)\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\t`molecule`,\n\t\t\tclaim,\n\t\t\t`claim failed:`,\n\t\t\t`Could not allocate to ${stringKey} in store \"${store.config.name}\".`,\n\t\t\tdisposal\n\t\t\t\t? `\\n ${stringKey} was most recently disposed\\n${disposal.trace}`\n\t\t\t\t: `No previous disposal trace for ${stringKey} was found.`,\n\t\t)\n\t\treturn claim\n\t}\n\n\tconst newProvenanceKey = stringifyJson(newProvenance as Canonical)\n\tconst newProvenanceMolecule = target.molecules.get(newProvenanceKey)\n\tif (!newProvenanceMolecule) {\n\t\tconst disposal = store.disposalTraces.buffer.find(\n\t\t\t(item) => item?.key === newProvenanceKey,\n\t\t)\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\t`molecule`,\n\t\t\tclaim,\n\t\t\t`claim failed:`,\n\t\t\t`Could not allocate to ${newProvenanceKey} in store \"${store.config.name}\".`,\n\t\t\tdisposal\n\t\t\t\t? `\\n ${newProvenanceKey} was most recently disposed\\n${disposal.trace}`\n\t\t\t\t: `No previous disposal trace for ${newProvenanceKey} was found.`,\n\t\t)\n\t\treturn claim\n\t}\n\n\tconst priorProvenance = store.moleculeGraph\n\t\t.getRelationEntries({\n\t\t\tdownstreamMoleculeKey: molecule.stringKey,\n\t\t})\n\t\t.filter(([, { source }]) => source !== stringKey)\n\t\t.map(([key]) => parseJson(key))\n\tif (exclusive) {\n\t\ttarget.moleculeGraph.delete(stringKey)\n\t}\n\ttarget.moleculeGraph.set(\n\t\t{\n\t\t\tupstreamMoleculeKey: newProvenanceMolecule.stringKey,\n\t\t\tdownstreamMoleculeKey: molecule.stringKey,\n\t\t},\n\t\t{\n\t\t\tsource: newProvenanceMolecule.stringKey,\n\t\t},\n\t)\n\tconst transferEvent: MoleculeTransfer = {\n\t\ttype: `molecule_transfer`,\n\t\tkey: molecule.key,\n\t\tfrom: priorProvenance,\n\t\tto: [newProvenanceMolecule.key],\n\t}\n\tconst isTransaction =\n\t\tisChildStore(target) && target.transactionMeta.phase === `building`\n\tif (isTransaction) {\n\t\ttarget.transactionMeta.update.updates.push(transferEvent)\n\t}\n\n\treturn claim\n}\n","import type {\n\tMoleculeCreation,\n\tMoleculeDisposal,\n\tMoleculeTransfer,\n\tReadableToken,\n\tStateCreation,\n\tStateDisposal,\n} from \"atom.io\"\nimport { parseJson, stringifyJson } from \"atom.io/json\"\n\nimport { disposeFromStore, findInStore } from \"../families\"\nimport {\n\tallocateIntoStore,\n\tclaimWithinStore,\n\tdeallocateFromStore,\n} from \"../molecule\"\nimport type { Store } from \"../store\"\n\nexport function ingestCreationEvent(\n\tupdate: StateCreation<any>,\n\tapplying: `newValue` | `oldValue`,\n\tstore: Store,\n): void {\n\tswitch (applying) {\n\t\tcase `newValue`: {\n\t\t\tcreateInStore(update, store)\n\t\t\tbreak\n\t\t}\n\t\tcase `oldValue`: {\n\t\t\tdisposeFromStore(store, update.token)\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport function ingestDisposalEvent(\n\tupdate: StateDisposal<ReadableToken<any>>,\n\tapplying: `newValue` | `oldValue`,\n\tstore: Store,\n): void {\n\tswitch (applying) {\n\t\tcase `newValue`: {\n\t\t\tdisposeFromStore(store, update.token)\n\t\t\tbreak\n\t\t}\n\t\tcase `oldValue`: {\n\t\t\tcreateInStore(update, store)\n\t\t\tif (update.subType === `atom`) {\n\t\t\t\tstore.valueMap.set(update.token.key, update.value)\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n}\n\nfunction createInStore(\n\tupdate: StateCreation<any> | StateDisposal<any>,\n\tstore: Store,\n): void {\n\tconst { family: familyMeta } = update.token\n\tif (familyMeta) {\n\t\tconst family = store.families.get(familyMeta.key)\n\t\tif (family) {\n\t\t\tfindInStore(store, family, parseJson(familyMeta.subKey))\n\t\t}\n\t}\n}\n\nexport function ingestMoleculeCreationEvent(\n\tupdate: MoleculeCreation,\n\tapplying: `newValue` | `oldValue`,\n\tstore: Store,\n): void {\n\tswitch (applying) {\n\t\tcase `newValue`:\n\t\t\tallocateIntoStore<any, any, any>(store, update.provenance, update.key)\n\t\t\tbreak\n\n\t\tcase `oldValue`:\n\t\t\tdeallocateFromStore<any, any>(store, update.key)\n\t\t\tbreak\n\t}\n}\nexport function ingestMoleculeDisposalEvent(\n\tupdate: MoleculeDisposal,\n\tapplying: `newValue` | `oldValue`,\n\tstore: Store,\n): void {\n\tswitch (applying) {\n\t\tcase `newValue`:\n\t\t\tdeallocateFromStore<any, any>(store, update.key)\n\t\t\tbreak\n\n\t\tcase `oldValue`:\n\t\t\t{\n\t\t\t\tconst provenanceJson = update.provenance.map(parseJson)\n\t\t\t\tallocateIntoStore<any, any, any>(store, provenanceJson, update.key)\n\t\t\t\tfor (const [familyKey, value] of update.values) {\n\t\t\t\t\tconst family = store.families.get(familyKey)\n\t\t\t\t\tif (family) {\n\t\t\t\t\t\tfindInStore(store, family, update.key)\n\t\t\t\t\t\tconst memberKey = `${familyKey}(${stringifyJson(update.key)})`\n\t\t\t\t\t\tstore.valueMap.set(memberKey, value)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t}\n}\nexport function ingestMoleculeTransferEvent(\n\tupdate: MoleculeTransfer,\n\tapplying: `newValue` | `oldValue`,\n\tstore: Store,\n): void {\n\tswitch (applying) {\n\t\tcase `newValue`:\n\t\t\t{\n\t\t\t\tconst provenance = update.to.length === 1 ? update.to[0] : update.to\n\t\t\t\tclaimWithinStore<any, any, any>(\n\t\t\t\t\tstore,\n\t\t\t\t\tprovenance,\n\t\t\t\t\tupdate.key,\n\t\t\t\t\t`exclusive`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tbreak\n\t\tcase `oldValue`:\n\t\t\t{\n\t\t\t\tconst provenance =\n\t\t\t\t\tupdate.from.length === 1 ? update.from[0] : update.from\n\t\t\t\tclaimWithinStore<any, any, any>(\n\t\t\t\t\tstore,\n\t\t\t\t\tprovenance,\n\t\t\t\t\tupdate.key,\n\t\t\t\t\t`exclusive`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tbreak\n\t}\n}\n","import type { TransactionUpdate } from \"atom.io\"\n\nimport type { Store } from \"../store\"\nimport { ingestAtomUpdate } from \"./ingest-atom-update\"\nimport {\n\tingestCreationEvent,\n\tingestDisposalEvent,\n\tingestMoleculeCreationEvent,\n\tingestMoleculeDisposalEvent,\n\tingestMoleculeTransferEvent,\n} from \"./ingest-creation-disposal\"\n\nexport function ingestTransactionUpdate(\n\tapplying: `newValue` | `oldValue`,\n\ttransactionUpdate: TransactionUpdate<any>,\n\tstore: Store,\n): void {\n\tconst updates =\n\t\tapplying === `newValue`\n\t\t\t? transactionUpdate.updates\n\t\t\t: [...transactionUpdate.updates].reverse()\n\tfor (const updateFromTransaction of updates) {\n\t\tswitch (updateFromTransaction.type) {\n\t\t\tcase `atom_update`:\n\t\t\tcase `selector_update`:\n\t\t\t\tingestAtomUpdate(applying, updateFromTransaction, store)\n\t\t\t\tbreak\n\t\t\tcase `state_creation`:\n\t\t\t\tingestCreationEvent(updateFromTransaction, applying, store)\n\t\t\t\tbreak\n\t\t\tcase `state_disposal`:\n\t\t\t\tingestDisposalEvent(updateFromTransaction, applying, store)\n\t\t\t\tbreak\n\t\t\tcase `molecule_creation`:\n\t\t\t\tingestMoleculeCreationEvent(updateFromTransaction, applying, store)\n\t\t\t\tbreak\n\t\t\tcase `molecule_disposal`:\n\t\t\t\tingestMoleculeDisposalEvent(updateFromTransaction, applying, store)\n\t\t\t\tbreak\n\t\t\tcase `molecule_transfer`:\n\t\t\t\tingestMoleculeTransferEvent(updateFromTransaction, applying, store)\n\t\t\t\tbreak\n\t\t\tcase `transaction_update`:\n\t\t\t\tingestTransactionUpdate(applying, updateFromTransaction, store)\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n","import type { Store } from \"../store\"\nimport type { RootStore } from \"./is-root-store\"\nimport { isRootStore } from \"./is-root-store\"\n\nexport function getContinuityKey(\n\tstore: RootStore,\n\ttransactionKey: string,\n): string | undefined {\n\tconst continuity =\n\t\tstore.transactionMeta.actionContinuities.getRelatedKey(transactionKey)\n\n\treturn continuity\n}\n\nexport function getEpochNumberOfContinuity(\n\tstore: RootStore,\n\tcontinuityKey: string,\n): number | undefined {\n\tconst epoch = store.transactionMeta.epoch.get(continuityKey)\n\treturn epoch\n}\n\nexport function getEpochNumberOfAction(\n\tstore: Store,\n\ttransactionKey: string,\n): number | undefined {\n\tconst isRoot = isRootStore(store)\n\tif (!isRoot) {\n\t\treturn undefined\n\t}\n\tconst continuityKey = getContinuityKey(store, transactionKey)\n\tif (continuityKey === undefined) {\n\t\treturn undefined\n\t}\n\treturn getEpochNumberOfContinuity(store, continuityKey)\n}\n","import type { Store } from \"../store\"\nimport { getContinuityKey } from \"./get-epoch-number\"\nimport { isRootStore } from \"./is-root-store\"\n\nexport function setEpochNumberOfContinuity(\n\tstore: Store,\n\tcontinuityKey: string,\n\tnewEpoch: number,\n): void {\n\tconst isRoot = isRootStore(store)\n\tif (isRoot && continuityKey) {\n\t\tstore.transactionMeta.epoch.set(continuityKey, newEpoch)\n\t}\n}\n\nexport function setEpochNumberOfAction(\n\tstore: Store,\n\ttransactionKey: string,\n\tnewEpoch: number,\n): void {\n\tconst isRoot = isRootStore(store)\n\tif (!isRoot) {\n\t\treturn\n\t}\n\tconst continuityKey = getContinuityKey(store, transactionKey)\n\n\tif (continuityKey !== undefined) {\n\t\tstore.transactionMeta.epoch.set(continuityKey, newEpoch)\n\t}\n}\n","import { ingestTransactionUpdate } from \"../ingest-updates\"\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\nimport { withdraw } from \"../store\"\nimport type { Func } from \"../utility-types\"\nimport { isChildStore, isRootStore } from \"./is-root-store\"\nimport { setEpochNumberOfAction } from \"./set-epoch-number\"\n\nexport const applyTransaction = <F extends Func>(\n\toutput: ReturnType<F>,\n\tstore: Store,\n): void => {\n\tconst child = newest(store)\n\tconst { parent } = child\n\tif (\n\t\tparent === null ||\n\t\t!isChildStore(child) ||\n\t\tchild.transactionMeta?.phase !== `building`\n\t) {\n\t\tstore.logger.warn(\n\t\t\t`🐞`,\n\t\t\t`transaction`,\n\t\t\t`???`,\n\t\t\t`applyTransaction called outside of a transaction. This is probably a bug in AtomIO.`,\n\t\t)\n\t\treturn\n\t}\n\tchild.transactionMeta.phase = `applying`\n\tchild.transactionMeta.update.output = output\n\tparent.child = null\n\tparent.on.transactionApplying.next(child.transactionMeta)\n\tconst { updates } = child.transactionMeta.update\n\tstore.logger.info(\n\t\t`🛄`,\n\t\t`transaction`,\n\t\tchild.transactionMeta.update.key,\n\t\t`Applying transaction with ${updates.length} updates:`,\n\t\tupdates,\n\t)\n\n\tingestTransactionUpdate(`newValue`, child.transactionMeta.update, parent)\n\n\tif (isRootStore(parent)) {\n\t\tsetEpochNumberOfAction(\n\t\t\tparent,\n\t\t\tchild.transactionMeta.update.key,\n\t\t\tchild.transactionMeta.update.epoch,\n\t\t)\n\t\tconst myTransaction = withdraw<F>(store, {\n\t\t\tkey: child.transactionMeta.update.key,\n\t\t\ttype: `transaction`,\n\t\t})\n\t\tmyTransaction?.subject.next(child.transactionMeta.update)\n\t\tstore.logger.info(\n\t\t\t`🛬`,\n\t\t\t`transaction`,\n\t\t\tchild.transactionMeta.update.key,\n\t\t\t`Finished applying transaction.`,\n\t\t)\n\t} else if (isChildStore(parent)) {\n\t\tparent.transactionMeta.update.updates.push(child.transactionMeta.update)\n\t}\n\tparent.on.transactionApplying.next(null)\n}\n","import type { Store } from \"./store\"\n\nexport type EnvironmentData = {\n\tstore: Store\n}\n\nexport function getEnvironmentData(store: Store): EnvironmentData {\n\treturn {\n\t\tstore,\n\t}\n}\n","import type { ReadableFamilyToken, ReadableToken } from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport { findInStore } from \"../families\"\nimport type { Store } from \"../store\"\nimport { withdraw } from \"../store\"\nimport { readOrComputeValue } from \"./read-or-compute-value\"\n\nexport function getFromStore<T>(store: Store, token: ReadableToken<T>): T\n\nexport function getFromStore<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<T, K>,\n\tkey: K,\n): T\n\nexport function getFromStore(\n\tstore: Store,\n\t...params:\n\t\t| [token: ReadableFamilyToken<any, any>, key: Canonical]\n\t\t| [token: ReadableToken<any>]\n): any {\n\tlet token: ReadableToken<any>\n\tlet family: ReadableFamilyToken<any, Canonical> | null\n\tlet key: Canonical | null\n\tif (params.length === 1) {\n\t\ttoken = params[0]\n\t} else {\n\t\tfamily = params[0]\n\t\tkey = params[1]\n\t\ttoken = findInStore(store, family, key)\n\t}\n\tif (`counterfeit` in token && `family` in token) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: family must be present\n\t\tfamily = store.families.get(token.family.key)!\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 retrieved because it was not found in the store \"${store.config.name}\".`,\n\t\t\tdisposal\n\t\t\t\t? `This state was previously disposed:\\n${disposal.trace}`\n\t\t\t\t: `No previous disposal trace was found.`,\n\t\t)\n\t\tswitch (family.type) {\n\t\t\tcase `atom_family`:\n\t\t\tcase `mutable_atom_family`:\n\t\t\t\treturn store.defaults.get(family.key)\n\t\t\tcase `selector_family`:\n\t\t\tcase `readonly_selector_family`: {\n\t\t\t\tif (store.defaults.has(family.key)) {\n\t\t\t\t\treturn store.defaults.get(token.family.key)\n\t\t\t\t}\n\t\t\t\tconst defaultValue = withdraw(store, family).default(subKey)\n\t\t\t\tstore.defaults.set(family.key, defaultValue)\n\t\t\t\treturn defaultValue\n\t\t\t}\n\t\t}\n\t}\n\n\treturn readOrComputeValue(store, withdraw(store, token))\n}\n","import type { Json } from \"atom.io/json\"\n\nimport type { Refinement } from \"./utility-types\"\n\nexport type JunctionEntriesBase<\n\tAType extends string,\n\tBType extends string,\n\tContent extends Json.Object | null,\n> = {\n\treadonly relations: ([AType, BType[]] | [BType, AType[]])[]\n\treadonly contents: [string, Content][]\n}\nexport interface JunctionEntries<\n\tAType extends string,\n\tBType extends string,\n\tContent extends Json.Object | null,\n> extends Json.Object,\n\t\tJunctionEntriesBase<AType, BType, Content> {}\n\nexport type JunctionSchemaBase<ASide extends string, BSide extends string> = {\n\treadonly between: [a: ASide, b: BSide]\n\treadonly cardinality: `1:1` | `1:n` | `n:n`\n}\nexport interface JunctionSchema<ASide extends string, BSide extends string>\n\textends Json.Object,\n\t\tJunctionSchemaBase<ASide, BSide> {}\n\nexport type BaseExternalStoreConfiguration = {\n\taddRelation: (a: string, b: string) => void\n\tdeleteRelation: (a: string, b: string) => void\n\treplaceRelationsSafely: (a: string, bs: string[]) => void\n\treplaceRelationsUnsafely: (a: string, bs: string[]) => void\n\tgetRelatedKeys(key: string): Set<string> | undefined\n\thas: (a: string, b?: string) => boolean\n}\n\nexport type ExternalStoreWithContentConfiguration<Content extends Json.Object> =\n\t{\n\t\tgetContent: (contentKey: string) => Content | undefined\n\t\tsetContent: (contentKey: string, content: Content) => void\n\t\tdeleteContent: (contentKey: string) => void\n\t}\n\nexport type Empty<Obj extends object> = {\n\t[Key in keyof Obj]?: undefined\n}\n\nexport type ExternalStoreConfiguration<Content extends Json.Object | null> =\n\tContent extends Json.Object\n\t\t? BaseExternalStoreConfiguration &\n\t\t\t\tExternalStoreWithContentConfiguration<Content>\n\t\t: BaseExternalStoreConfiguration &\n\t\t\t\tEmpty<ExternalStoreWithContentConfiguration<Json.Object>>\n\nexport type JunctionAdvancedConfiguration<\n\tAType extends string,\n\tBType extends string,\n\tContent extends Json.Object | null,\n> = {\n\twarn?: (...args: any[]) => void\n\texternalStore?: ExternalStoreConfiguration<Content>\n\tisAType?: Refinement<string, AType>\n\tisBType?: Refinement<string, BType>\n\tisContent?: Refinement<unknown, Content>\n\tmakeContentKey?: (a: AType, b: BType) => string\n}\n\nexport type JunctionJSON<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tContent extends Json.Object | null,\n> = JunctionEntries<AType, BType, Content> & JunctionSchema<ASide, BSide>\n\nexport class Junction<\n\tconst ASide extends string,\n\tconst AType extends string,\n\tconst BSide extends string,\n\tconst BType extends string,\n\tconst Content extends Json.Object | null = null,\n> {\n\tpublic readonly a: ASide\n\tpublic readonly b: BSide\n\tpublic readonly cardinality: `1:1` | `1:n` | `n:n`\n\tpublic readonly relations = new Map<AType | BType, Set<AType> | Set<BType>>()\n\tpublic readonly contents = new Map<string, Content>()\n\n\tpublic isAType?: Refinement<string, AType> | null\n\tpublic isBType?: Refinement<string, BType> | null\n\tpublic isContent: Refinement<unknown, Content> | null\n\tpublic makeContentKey = (a: AType, b: BType): string => `${a}:${b}`\n\n\tpublic warn?: (...args: any[]) => void\n\n\tpublic getRelatedKeys(key: AType): Set<BType> | undefined\n\tpublic getRelatedKeys(key: BType): Set<AType> | undefined\n\tpublic getRelatedKeys(key: AType | BType): Set<AType> | Set<BType> | undefined\n\tpublic getRelatedKeys(\n\t\tkey: AType | BType,\n\t): Set<AType> | Set<BType> | undefined {\n\t\treturn this.relations.get(key)\n\t}\n\tprotected addRelation(a: AType, b: BType): void {\n\t\tlet aRelations = this.relations.get(a) as Set<BType> | undefined\n\t\tlet bRelations = this.relations.get(b) as Set<AType> | undefined\n\t\tif (aRelations) {\n\t\t\taRelations.add(b)\n\t\t} else {\n\t\t\taRelations = new Set([b])\n\t\t\tthis.relations.set(a, aRelations)\n\t\t}\n\t\tif (bRelations) {\n\t\t\tbRelations.add(a)\n\t\t} else {\n\t\t\tbRelations = new Set([a])\n\t\t\tthis.relations.set(b, bRelations)\n\t\t}\n\t}\n\tprotected deleteRelation(a: AType, b: BType): void {\n\t\tconst aRelations = this.relations.get(a) as Set<BType> | undefined\n\t\tif (aRelations) {\n\t\t\taRelations.delete(b)\n\t\t\tif (aRelations.size === 0) {\n\t\t\t\tthis.relations.delete(a)\n\t\t\t}\n\t\t\tconst bRelations = this.relations.get(b) as Set<AType> | undefined\n\t\t\tif (bRelations) {\n\t\t\t\tbRelations.delete(a)\n\t\t\t\tif (bRelations.size === 0) {\n\t\t\t\t\tthis.relations.delete(b)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected replaceRelationsUnsafely(a: AType, bs: BType[]): void\n\tprotected replaceRelationsUnsafely(b: BType, as: AType[]): void\n\tprotected replaceRelationsUnsafely(\n\t\tx: AType | BType,\n\t\tys: AType[] | BType[],\n\t): void {\n\t\tthis.relations.set(x as AType, new Set(ys as BType[]))\n\t\tfor (const y of ys) {\n\t\t\tconst yRelations = new Set<AType>().add(x as AType)\n\t\t\tthis.relations.set(y, yRelations)\n\t\t}\n\t}\n\tprotected replaceRelationsSafely(a: AType, bs: BType[]): void\n\tprotected replaceRelationsSafely(b: BType, as: AType[]): void\n\tprotected replaceRelationsSafely<\n\t\tXType extends AType | BType,\n\t\tYType extends XType extends AType ? BType : AType,\n\t>(x: XType, ys: YType[]): void {\n\t\tconst xRelationsPrev = this.relations.get(x)\n\t\tlet a: AType | undefined = this.isAType?.(x) ? x : undefined\n\t\tlet b: BType | undefined = a === undefined ? (x as BType) : undefined\n\t\tif (xRelationsPrev) {\n\t\t\tfor (const y of xRelationsPrev) {\n\t\t\t\ta ??= y as AType\n\t\t\t\tb ??= y as BType\n\t\t\t\tconst yRelations = this.relations.get(y) as Set<XType> | undefined\n\t\t\t\tif (yRelations) {\n\t\t\t\t\tif (yRelations.size === 1) {\n\t\t\t\t\t\tthis.relations.delete(y)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tyRelations.delete(x)\n\t\t\t\t\t}\n\t\t\t\t\tthis.contents.delete(this.makeContentKey(a, b))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.relations.set(x, new Set(ys) as any)\n\t\tfor (const y of ys) {\n\t\t\tlet yRelations = this.relations.get(y) as Set<XType> | undefined\n\t\t\tif (yRelations) {\n\t\t\t\tyRelations.add(x)\n\t\t\t} else {\n\t\t\t\tyRelations = new Set<XType>().add(x)\n\t\t\t\tthis.relations.set(y, yRelations as any)\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected getContentInternal(contentKey: string): Content | undefined {\n\t\treturn this.contents.get(contentKey)\n\t}\n\tprotected setContent(contentKey: string, content: Content): void {\n\t\tthis.contents.set(contentKey, content)\n\t}\n\tprotected deleteContent(contentKey: string): void {\n\t\tthis.contents.delete(contentKey)\n\t}\n\n\tpublic constructor(\n\t\tdata: JunctionSchema<ASide, BSide> &\n\t\t\tPartial<JunctionEntries<NoInfer<AType>, NoInfer<BType>, Content>>,\n\t\tconfig?: JunctionAdvancedConfiguration<AType, BType, Content>,\n\t) {\n\t\tthis.a = data.between[0]\n\t\tthis.b = data.between[1]\n\n\t\tthis.cardinality = data.cardinality\n\t\tif (!config?.externalStore) {\n\t\t\tthis.relations = new Map(\n\t\t\t\tdata.relations?.map(([x, ys]) => [x, new Set(ys as AType[])]),\n\t\t\t)\n\t\t\tthis.contents = new Map(data.contents)\n\t\t}\n\t\tthis.isAType = config?.isAType ?? null\n\t\tthis.isBType = config?.isBType ?? null\n\t\tthis.isContent = config?.isContent ?? null\n\t\tif (config?.makeContentKey) {\n\t\t\tthis.makeContentKey = config.makeContentKey\n\t\t}\n\t\tif (config?.externalStore) {\n\t\t\tconst externalStore = config.externalStore\n\t\t\tthis.has = (a, b) => externalStore.has(a, b)\n\t\t\tthis.addRelation = (a, b) => {\n\t\t\t\texternalStore.addRelation(a, b)\n\t\t\t}\n\t\t\tthis.deleteRelation = (a, b) => {\n\t\t\t\texternalStore.deleteRelation(a, b)\n\t\t\t}\n\t\t\tthis.replaceRelationsSafely = (a, bs) => {\n\t\t\t\texternalStore.replaceRelationsSafely(a, bs)\n\t\t\t}\n\t\t\tthis.replaceRelationsUnsafely = (a, bs) => {\n\t\t\t\texternalStore.replaceRelationsUnsafely(a, bs)\n\t\t\t}\n\t\t\tthis.getRelatedKeys = ((key) =>\n\t\t\t\texternalStore.getRelatedKeys(\n\t\t\t\t\tkey,\n\t\t\t\t)) as typeof Junction.prototype.getRelatedKeys\n\t\t\tif (externalStore.getContent) {\n\t\t\t\tthis.getContentInternal = (contentKey) => {\n\t\t\t\t\treturn externalStore.getContent(contentKey) as any\n\t\t\t\t}\n\t\t\t\tthis.setContent = (contentKey, content) => {\n\t\t\t\t\texternalStore.setContent(contentKey, content as any)\n\t\t\t\t}\n\t\t\t\tthis.deleteContent = (contentKey) => {\n\t\t\t\t\texternalStore.deleteContent(contentKey)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const [x, ys] of data.relations ?? []) {\n\t\t\t\tlet a = this.isAType?.(x) ? x : undefined\n\t\t\t\tlet b = a === undefined ? (x as BType) : undefined\n\t\t\t\tfor (const y of ys) {\n\t\t\t\t\ta ??= y as AType\n\t\t\t\t\tb ??= y as BType\n\t\t\t\t\tthis.addRelation(a, b)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const [contentKey, content] of data.contents ?? []) {\n\t\t\t\tthis.setContent(contentKey, content)\n\t\t\t}\n\t\t}\n\t\tif (config?.warn) {\n\t\t\tthis.warn = config.warn\n\t\t}\n\t}\n\tpublic toJSON(): JunctionJSON<ASide, AType, BSide, BType, Content> {\n\t\treturn {\n\t\t\tbetween: [this.a, this.b],\n\t\t\tcardinality: this.cardinality,\n\t\t\trelations: [...this.relations.entries()].map(\n\t\t\t\t([a, b]) => [a, [...b]] as [AType, BType[]],\n\t\t\t),\n\t\t\tcontents: [...this.contents.entries()],\n\t\t}\n\t}\n\n\tpublic set(\n\t\ta: AType,\n\t\t...rest: Content extends null ? [b: BType] : [b: BType, content: Content]\n\t): this\n\tpublic set(\n\t\trelation: { [Key in ASide]: AType } & { [Key in BSide]: BType },\n\t\t...rest: Content extends null ? [] | [void?: undefined] : [content: Content]\n\t): this\n\tpublic set(\n\t\t// a: AType | ({ [Key in ASide]: AType } & { [Key in BSide]: BType }),\n\t\t// ...rest: Content extends null\n\t\t// \t? [] | [b?: BType | undefined]\n\t\t// \t: [b: BType, content: Content] | [content: Content]\n\t\t...params:\n\t\t\t| [\n\t\t\t\t\ta: AType,\n\t\t\t\t\t...rest: Content extends null\n\t\t\t\t\t\t? [b: BType]\n\t\t\t\t\t\t: [b: BType, content: Content],\n\t\t\t ]\n\t\t\t| [\n\t\t\t\t\trelation: { [Key in ASide]: AType } & { [Key in BSide]: BType },\n\t\t\t\t\t...rest: Content extends null\n\t\t\t\t\t\t? [] | [void?: undefined]\n\t\t\t\t\t\t: [content: Content],\n\t\t\t ]\n\t\t// | [{ [Key in ASide]: AType } & { [Key in BSide]: BType }, content: Content]\n\t\t// | [{ [Key in ASide]: AType } & { [Key in BSide]: BType }]\n\t\t// | [a: AType, b: BType, content: Content]\n\t\t// | [a: AType, b: BType]\n\t): this {\n\t\tlet a: AType\n\t\tlet b: BType\n\t\tlet content: Content | undefined\n\t\tswitch (params.length) {\n\t\t\tcase 1: {\n\t\t\t\tconst relation = params[0] as Record<ASide, AType> & Record<BSide, BType>\n\t\t\t\ta = relation[this.a]\n\t\t\t\tb = relation[this.b]\n\t\t\t\tcontent = undefined\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 2: {\n\t\t\t\tconst zeroth = params[0]\n\t\t\t\tif (typeof zeroth === `string`) {\n\t\t\t\t\t;[a, b] = params as unknown as [AType, BType]\n\t\t\t\t} else {\n\t\t\t\t\ta = zeroth[this.a]\n\t\t\t\t\tb = zeroth[this.b]\n\t\t\t\t\tcontent = params[1] as Content\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\ta = params[0] as AType\n\t\t\t\tb = params[1] as BType\n\t\t\t\tcontent = params[2] as Content\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tswitch (this.cardinality) {\n\t\t\t// biome-ignore lint/suspicious/noFallthroughSwitchClause: perfect here\n\t\t\tcase `1:1`: {\n\t\t\t\tconst bPrev = this.getRelatedKey(a)\n\t\t\t\tif (bPrev && bPrev !== b) this.delete(a, bPrev)\n\t\t\t}\n\t\t\tcase `1:n`:\n\t\t\t\t{\n\t\t\t\t\tconst aPrev = this.getRelatedKey(b)\n\t\t\t\t\tif (aPrev && aPrev !== a) this.delete(aPrev, b)\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase `n:n`: // do nothing\n\t\t}\n\t\tif (content) {\n\t\t\tconst contentKey = this.makeContentKey(a, b)\n\t\t\tthis.setContent(contentKey, content)\n\t\t}\n\t\tthis.addRelation(a, b)\n\t\treturn this\n\t}\n\n\tpublic delete(a: AType, b?: BType): this\n\tpublic delete(b: BType, a?: AType): this\n\tpublic delete(\n\t\trelation:\n\t\t\t| { [Key in ASide]: AType }\n\t\t\t| { [Key in BSide]: BType }\n\t\t\t| ({ [Key in ASide]: AType } & { [Key in BSide]: BType }),\n\t\tb?: undefined,\n\t): this\n\tpublic delete(\n\t\tx:\n\t\t\t| AType\n\t\t\t| BType\n\t\t\t| Record<ASide | BSide, string>\n\t\t\t| Record<ASide, string>\n\t\t\t| Record<BSide, string>,\n\t\tb?: AType | BType,\n\t): this {\n\t\t// @ts-expect-error we deduce that this.b may index x\n\t\tb = typeof b === `string` ? (b as BType) : (x[this.b] as BType | undefined)\n\t\tconst a =\n\t\t\t// @ts-expect-error we deduce that this.a may index x\n\t\t\ttypeof x === `string` ? (x as AType) : (x[this.a] as AType | undefined)\n\n\t\tif (a === undefined && typeof b === `string`) {\n\t\t\tconst bRelations = this.getRelatedKeys(b) as Set<AType>\n\t\t\tif (bRelations) {\n\t\t\t\tfor (const bRelation of bRelations) {\n\t\t\t\t\tthis.delete(bRelation, b)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (typeof a === `string` && b === undefined) {\n\t\t\tconst aRelations = this.getRelatedKeys(a)\n\t\t\tif (aRelations) {\n\t\t\t\tfor (const aRelation of aRelations) {\n\t\t\t\t\tthis.delete(a, aRelation)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (typeof a === `string` && typeof b === `string`) {\n\t\t\tthis.deleteRelation(a, b)\n\t\t\tconst contentKey = this.makeContentKey(a, b)\n\t\t\tthis.deleteContent(contentKey)\n\t\t}\n\t\treturn this\n\t}\n\n\tpublic getRelatedKey(key: AType): BType | undefined\n\tpublic getRelatedKey(key: BType): AType | undefined\n\tpublic getRelatedKey(key: AType | BType): AType | BType | undefined {\n\t\tconst relations = this.getRelatedKeys(key)\n\t\tif (relations) {\n\t\t\tif (relations.size > 1) {\n\t\t\t\tthis.warn?.(\n\t\t\t\t\t`${relations.size} related keys were found for key \"${key}\": (${[\n\t\t\t\t\t\t...relations,\n\t\t\t\t\t]\n\t\t\t\t\t\t.map((k) => `\"${k}\"`)\n\t\t\t\t\t\t.join(`, `)}). Only one related key was expected.`,\n\t\t\t\t)\n\t\t\t}\n\t\t\tlet singleRelation: AType | BType | undefined\n\t\t\tfor (const relation of relations) {\n\t\t\t\tsingleRelation = relation\n\t\t\t\tbreak\n\t\t\t}\n\t\t\treturn singleRelation\n\t\t}\n\t}\n\n\tpublic replaceRelations(\n\t\ta: AType,\n\t\trelations: Content extends null ? BType[] : Record<BType, Content>,\n\t\tconfig?: { reckless: boolean },\n\t): this\n\tpublic replaceRelations(\n\t\tb: BType,\n\t\trelations: Content extends null ? AType[] : Record<AType, Content>,\n\t\tconfig?: { reckless: boolean },\n\t): this\n\tpublic replaceRelations<\n\t\tXType extends AType | BType,\n\t\tYType extends XType extends AType ? BType : AType,\n\t>(\n\t\tx: XType,\n\t\trelations: Content extends null ? YType[] : Record<YType, Content>,\n\t\tconfig?: { reckless: boolean },\n\t): this {\n\t\tconst hasContent = !Array.isArray(relations)\n\t\tconst ys = (hasContent ? Object.keys(relations) : relations) as YType[]\n\t\tif (config?.reckless) {\n\t\t\tthis.replaceRelationsUnsafely(x as any, ys as any)\n\t\t} else {\n\t\t\tthis.replaceRelationsSafely(x as any, ys as any)\n\t\t}\n\t\tif (hasContent) {\n\t\t\tfor (const y of ys) {\n\t\t\t\tconst contentKey = this.makeContentKey(x as any, y as any) // sort XY to AB ❗\n\t\t\t\tconst content = (relations as Record<YType, Content>)[y]\n\t\t\t\tthis.setContent(contentKey, content)\n\t\t\t}\n\t\t}\n\t\treturn this\n\t}\n\n\tpublic getContent(a: AType, b: BType): Content | undefined {\n\t\tconst contentKey = this.makeContentKey(a, b)\n\t\treturn this.getContentInternal(contentKey)\n\t}\n\n\tpublic getRelationEntries(input: Record<ASide, AType>): [BType, Content][]\n\tpublic getRelationEntries(input: Record<BSide, BType>): [AType, Content][]\n\tpublic getRelationEntries(\n\t\tinput: Record<ASide, AType> | Record<BSide, BType>,\n\t): [AType | BType, Content][] {\n\t\tconst a: AType | undefined = (input as any)[this.a]\n\t\tconst b: BType | undefined = (input as any)[this.b]\n\t\tif (a !== undefined && b === undefined) {\n\t\t\tconst aRelations = this.getRelatedKeys(a)\n\t\t\tif (aRelations) {\n\t\t\t\treturn [...aRelations].map((aRelation) => {\n\t\t\t\t\treturn [aRelation, this.getContent(a, aRelation) as Content]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (a === undefined && b !== undefined) {\n\t\t\tconst bRelations = this.getRelatedKeys(b)\n\t\t\tif (bRelations) {\n\t\t\t\treturn [...bRelations].map((bRelation) => {\n\t\t\t\t\treturn [bRelation, this.getContent(bRelation, b) as Content]\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\treturn []\n\t}\n\n\tpublic has(a: AType, b?: BType): boolean\n\tpublic has(b: BType, a?: AType): boolean\n\tpublic has(a: AType | BType, b?: AType | BType): boolean {\n\t\tif (b) {\n\t\t\tconst setA = this.getRelatedKeys(a)\n\t\t\treturn setA?.has(b as any) ?? false\n\t\t}\n\t\treturn this.relations.has(a)\n\t}\n}\n","export class LazyMap<K, V> extends Map<K, V> {\n\tpublic deleted = new Set<K>()\n\tprotected readonly source: Map<K, V>\n\n\tpublic constructor(source: Map<K, V>) {\n\t\tsuper()\n\t\tthis.source = source\n\t}\n\n\tpublic get(key: K): V | undefined {\n\t\tconst has = super.has(key)\n\t\tif (has) {\n\t\t\treturn super.get(key)\n\t\t}\n\t\tif (!this.deleted.has(key) && this.source.has(key)) {\n\t\t\tconst value = this.source.get(key)\n\t\t\treturn value\n\t\t}\n\t\treturn undefined\n\t}\n\n\tpublic set(key: K, value: V): this {\n\t\tthis.deleted.delete(key)\n\t\treturn super.set(key, value)\n\t}\n\n\tpublic hasOwn(key: K): boolean {\n\t\treturn super.has(key)\n\t}\n\n\tpublic has(key: K): boolean {\n\t\treturn !this.deleted.has(key) && (super.has(key) || this.source.has(key))\n\t}\n\n\tpublic delete(key: K): boolean {\n\t\tthis.deleted.add(key)\n\t\treturn super.delete(key)\n\t}\n}\n","import type { disposeState, findState, getState, setState } from \"atom.io\"\n\nimport { arbitrary } from \"../arbitrary\"\nimport { disposeFromStore, findInStore } from \"../families\"\nimport { getEnvironmentData } from \"../get-environment-data\"\nimport { getFromStore } from \"../get-state\"\nimport { Junction } from \"../junction\"\nimport { LazyMap } from \"../lazy-map\"\nimport { newest } from \"../lineage\"\nimport { getJsonToken } from \"../mutable\"\nimport { setIntoStore } from \"../set-state\"\nimport type { Store } from \"../store\"\nimport type { Func } from \"../utility-types\"\nimport type { TransactionProgress } from \".\"\nimport { actUponStore, getEpochNumberOfAction } from \".\"\nimport type { ChildStore, RootStore } from \"./is-root-store\"\n\nexport const buildTransaction = (\n\tstore: Store,\n\tkey: string,\n\tparams: any[],\n\tid: string,\n): ChildStore => {\n\tconst parent = newest(store) as ChildStore | RootStore\n\tconst childBase: Omit<ChildStore, `transactionMeta`> = {\n\t\tparent,\n\t\tchild: null,\n\t\ton: parent.on,\n\t\tloggers: parent.loggers,\n\t\tlogger: parent.logger,\n\t\tconfig: parent.config,\n\t\tatoms: new LazyMap(parent.atoms),\n\t\tatomsThatAreDefault: new Set(parent.atomsThatAreDefault),\n\t\tfamilies: new LazyMap(parent.families),\n\t\tjoins: new LazyMap(parent.joins),\n\t\toperation: { open: false },\n\t\treadonlySelectors: new LazyMap(parent.readonlySelectors),\n\t\ttimelines: new LazyMap(parent.timelines),\n\t\ttimelineTopics: new Junction(parent.timelineTopics.toJSON()),\n\t\ttrackers: new Map(),\n\t\ttransactions: new LazyMap(parent.transactions),\n\t\tselectorAtoms: new Junction(parent.selectorAtoms.toJSON()),\n\t\tselectorGraph: new Junction(parent.selectorGraph.toJSON(), {\n\t\t\tmakeContentKey: (...keys) => keys.sort().join(`:`),\n\t\t}),\n\t\tselectors: new LazyMap(parent.selectors),\n\t\tvalueMap: new LazyMap(parent.valueMap),\n\t\tdefaults: parent.defaults,\n\t\tdisposalTraces: store.disposalTraces.copy(),\n\t\tmolecules: new LazyMap(parent.molecules),\n\t\tmoleculeGraph: new Junction(parent.moleculeGraph.toJSON(), {\n\t\t\tmakeContentKey: parent.moleculeGraph.makeContentKey,\n\t\t}),\n\t\tmoleculeData: new Junction(parent.moleculeData.toJSON(), {\n\t\t\tmakeContentKey: parent.moleculeData.makeContentKey,\n\t\t}),\n\t\tmoleculeJoins: new Junction(parent.moleculeJoins.toJSON(), {\n\t\t\tmakeContentKey: parent.moleculeJoins.makeContentKey,\n\t\t}),\n\t\tmiscResources: new LazyMap(parent.miscResources),\n\t}\n\tconst epoch = getEpochNumberOfAction(store, key)\n\tconst transactionMeta: TransactionProgress<Func> = {\n\t\tphase: `building`,\n\t\tupdate: {\n\t\t\ttype: `transaction_update`,\n\t\t\tkey,\n\t\t\tid,\n\t\t\tepoch: epoch === undefined ? Number.NaN : epoch + 1,\n\t\t\tupdates: [],\n\t\t\tparams,\n\t\t\toutput: undefined,\n\t\t},\n\t\ttoolkit: {\n\t\t\tget: ((...ps: Parameters<typeof getState>) =>\n\t\t\t\tgetFromStore(child, ...ps)) as typeof getState,\n\t\t\tset: ((...ps: Parameters<typeof setState>) => {\n\t\t\t\tsetIntoStore(child, ...ps)\n\t\t\t}) as typeof setState,\n\t\t\trun: (token, identifier = arbitrary()) =>\n\t\t\t\tactUponStore(child, token, identifier),\n\t\t\tfind: ((...ps: Parameters<typeof findState>) =>\n\t\t\t\tfindInStore(store, ...ps)) as typeof findState,\n\t\t\tjson: (token) => getJsonToken(child, token),\n\t\t\tdispose: ((...ps: Parameters<typeof disposeState>) => {\n\t\t\t\tdisposeFromStore(child, ...ps)\n\t\t\t}) as typeof disposeState,\n\t\t\tenv: () => getEnvironmentData(child),\n\t\t},\n\t}\n\tconst child: ChildStore = Object.assign(childBase, {\n\t\ttransactionMeta,\n\t})\n\tparent.child = child\n\tstore.logger.info(\n\t\t`🛫`,\n\t\t`transaction`,\n\t\tkey,\n\t\t`Building transaction with params:`,\n\t\tparams,\n\t)\n\treturn child\n}\n","import type {\n\tTransactionOptions,\n\tTransactionToken,\n\tTransactionUpdate,\n} from \"atom.io\"\n\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\nimport { deposit } from \"../store\"\nimport { Subject } from \"../subject\"\nimport type { Func } from \"../utility-types\"\nimport { abortTransaction } from \"./abort-transaction\"\nimport { applyTransaction } from \"./apply-transaction\"\nimport { buildTransaction } from \"./build-transaction\"\n\nexport type Transaction<F extends Func> = {\n\tkey: string\n\ttype: `transaction`\n\tinstall: (store: Store) => void\n\tsubject: Subject<TransactionUpdate<F>>\n\trun: (parameters: Parameters<F>, id?: string) => ReturnType<F>\n}\n\nexport function createTransaction<F extends Func>(\n\tstore: Store,\n\toptions: TransactionOptions<F>,\n): TransactionToken<F> {\n\tconst newTransaction: Transaction<F> = {\n\t\tkey: options.key,\n\t\ttype: `transaction`,\n\t\trun: (params: Parameters<F>, id: string) => {\n\t\t\tconst childStore = buildTransaction(store, options.key, params, id)\n\t\t\ttry {\n\t\t\t\tconst target = newest(store)\n\t\t\t\tconst { toolkit } = childStore.transactionMeta\n\t\t\t\tconst output = options.do(toolkit, ...params)\n\t\t\t\tapplyTransaction(output, target)\n\t\t\t\treturn output\n\t\t\t} catch (thrown) {\n\t\t\t\tabortTransaction(target)\n\t\t\t\tstore.logger.warn(`💥`, `transaction`, options.key, `caught:`, thrown)\n\t\t\t\tthrow thrown\n\t\t\t}\n\t\t},\n\t\tinstall: (s) => createTransaction(s, options),\n\t\tsubject: new Subject(),\n\t}\n\tconst target = newest(store)\n\ttarget.transactions.set(newTransaction.key, newTransaction)\n\tconst token = deposit(newTransaction)\n\tstore.on.transactionCreation.next(token)\n\treturn token\n}\n","import type { findState, getState, setState } from \"atom.io\"\nimport type { EnvironmentData, Func, Transceiver } from \"atom.io/internal\"\nimport {\n\tactUponStore,\n\tarbitrary,\n\tcreateTransaction,\n\tIMPLICIT,\n} from \"atom.io/internal\"\nimport type { Canonical, Json, stringified } from \"atom.io/json\"\n\nimport type {\n\tdisposeState,\n\tKeyedStateUpdate,\n\tMutableAtomToken,\n\tReadableToken,\n\tTokenType,\n\tWritableSelectorToken,\n} from \".\"\n\nexport type TransactionToken<F extends Func> = {\n\tkey: string\n\ttype: `transaction`\n\t__F?: F\n}\n\nexport type StateCreation<Token extends ReadableToken<any>> = {\n\ttype: `state_creation`\n\ttoken: Token\n}\nexport type AtomDisposal<Token extends ReadableToken<any>> = {\n\ttype: `state_disposal`\n\tsubType: `atom`\n\ttoken: Token\n\tvalue: TokenType<Token>\n}\nexport type SelectorDisposal<Token extends ReadableToken<any>> = {\n\ttype: `state_disposal`\n\tsubType: `selector`\n\ttoken: Token\n}\nexport type StateDisposal<Token extends ReadableToken<any>> =\n\t| AtomDisposal<Token>\n\t| SelectorDisposal<Token>\n\nexport type MoleculeCreation = {\n\ttype: `molecule_creation`\n\tkey: Canonical\n\tprovenance: Canonical\n}\n\nexport type MoleculeDisposal = {\n\ttype: `molecule_disposal`\n\tkey: Canonical\n\tprovenance: stringified<Canonical>[]\n\tvalues: [key: string, value: any][]\n}\n\nexport type MoleculeTransfer = {\n\ttype: `molecule_transfer`\n\tkey: Canonical\n\tfrom: Canonical[]\n\tto: Canonical[]\n}\n\nexport type TransactionUpdateContent =\n\t| KeyedStateUpdate<unknown>\n\t| MoleculeCreation\n\t| MoleculeDisposal\n\t| MoleculeTransfer\n\t| StateCreation<ReadableToken<unknown>>\n\t| StateDisposal<ReadableToken<unknown>>\n\t| TransactionUpdate<Func>\n\nexport type TransactionUpdate<F extends Func> = {\n\ttype: `transaction_update`\n\tkey: string\n\tid: string\n\tepoch: number\n\tupdates: TransactionUpdateContent[]\n\tparams: Parameters<F>\n\toutput: ReturnType<F>\n}\n\nexport type GetterToolkit = Pick<SetterToolkit, `find` | `get` | `json`>\nexport type SetterToolkit = Readonly<{\n\tget: typeof getState\n\tset: typeof setState\n\tfind: typeof findState\n\tjson: <T extends Transceiver<any>, J extends Json.Serializable>(\n\t\tstate: MutableAtomToken<T, J>,\n\t) => WritableSelectorToken<J>\n}>\nexport type ActorToolkit = Readonly<{\n\tget: typeof getState\n\tset: typeof setState\n\tfind: typeof findState\n\tjson: <T extends Transceiver<any>, J extends Json.Serializable>(\n\t\tstate: MutableAtomToken<T, J>,\n\t) => WritableSelectorToken<J>\n\tdispose: typeof disposeState\n\trun: typeof runTransaction\n\tenv: () => EnvironmentData\n}>\n\nexport type Read<F extends Func> = (\n\ttoolkit: GetterToolkit,\n\t...parameters: Parameters<F>\n) => ReturnType<F>\n\nexport type Write<F extends Func> = (\n\ttoolkit: SetterToolkit,\n\t...parameters: Parameters<F>\n) => ReturnType<F>\n\nexport type Transact<F extends Func> = (\n\ttoolkit: ActorToolkit,\n\t...parameters: Parameters<F>\n) => ReturnType<F>\n\nexport type TransactionOptions<F extends Func> = {\n\tkey: string\n\tdo: Transact<F>\n}\n\nexport type TransactionIO<Token extends TransactionToken<any>> =\n\tToken extends TransactionToken<infer F> ? F : never\n\nexport function transaction<F extends Func>(\n\toptions: TransactionOptions<F>,\n): TransactionToken<F> {\n\treturn createTransaction(IMPLICIT.STORE, options)\n}\n\nexport function runTransaction<F extends Func>(\n\ttoken: TransactionToken<F>,\n\tid = arbitrary(),\n): (...parameters: Parameters<F>) => ReturnType<F> {\n\treturn actUponStore(IMPLICIT.STORE, token, id)\n}\n","import type {\n\tAtomToken,\n\tLogger,\n\tMoleculeCreation,\n\tMoleculeDisposal,\n\tReadonlySelectorToken,\n\tTimelineToken,\n\tTransactionToken,\n\tWritableSelectorToken,\n} from \"atom.io\"\nimport { AtomIOLogger } from \"atom.io\"\nimport type { Canonical, stringified } from \"atom.io/json\"\n\nimport type {\n\tAtom,\n\tMutableAtomFamily,\n\tReadonlySelector,\n\tReadonlySelectorFamily,\n\tRegularAtomFamily,\n\tWritableSelector,\n\tWritableSelectorFamily,\n} from \"..\"\nimport { isReservedIntrospectionKey } from \"..\"\nimport type { Join } from \"../join\"\nimport { Junction } from \"../junction\"\nimport type { Lineage } from \"../lineage\"\nimport type { Molecule } from \"../molecule\"\nimport type { Tracker, Transceiver } from \"../mutable\"\nimport { getJsonToken, getUpdateToken } from \"../mutable\"\nimport type { OperationProgress } from \"../operation\"\nimport { StatefulSubject, Subject } from \"../subject\"\nimport type { Timeline } from \"../timeline\"\nimport type {\n\tTransaction,\n\tTransactionEpoch,\n\tTransactionProgress,\n} from \"../transaction\"\nimport { isRootStore } from \"../transaction\"\nimport type { Func } from \"../utility-types\"\nimport { CircularBuffer } from \"./circular-buffer\"\n\nexport class Store implements Lineage {\n\tpublic parent: Store | null = null\n\tpublic child: Store | null = null\n\n\tpublic valueMap = new Map<string, any>()\n\tpublic defaults = new Map<string, any>()\n\n\tpublic atoms = new Map<string, Atom<any>>()\n\tpublic selectors = new Map<string, WritableSelector<any>>()\n\tpublic readonlySelectors = new Map<string, ReadonlySelector<any>>()\n\n\tpublic atomsThatAreDefault = new Set<string>()\n\tpublic selectorAtoms = new Junction({\n\t\tbetween: [`selectorKey`, `atomKey`],\n\t\tcardinality: `n:n`,\n\t})\n\tpublic selectorGraph = new Junction<\n\t\t`upstreamSelectorKey`,\n\t\tstring,\n\t\t`downstreamSelectorKey`,\n\t\tstring,\n\t\t{ source: string }\n\t>(\n\t\t{\n\t\t\tbetween: [`upstreamSelectorKey`, `downstreamSelectorKey`],\n\t\t\tcardinality: `n:n`,\n\t\t},\n\t\t{\n\t\t\tmakeContentKey: (...keys) => keys.sort().join(`:`),\n\t\t},\n\t)\n\tpublic trackers = new Map<string, Tracker<Transceiver<any>>>()\n\tpublic families = new Map<\n\t\tstring,\n\t\t| MutableAtomFamily<any, any, any>\n\t\t| ReadonlySelectorFamily<any, any>\n\t\t| RegularAtomFamily<any, any>\n\t\t| WritableSelectorFamily<any, any>\n\t>()\n\tpublic joins = new Map<string, Join<any, any, any, any, any, any>>()\n\n\tpublic transactions = new Map<string, Transaction<Func>>()\n\tpublic transactionMeta: TransactionEpoch | TransactionProgress<Func> = {\n\t\tepoch: new Map<string, number>(),\n\t\tactionContinuities: new Junction({\n\t\t\tbetween: [`continuity`, `action`],\n\t\t\tcardinality: `1:n`,\n\t\t}),\n\t}\n\n\tpublic timelines = new Map<string, Timeline<any>>()\n\tpublic timelineTopics = new Junction<\n\t\t`timelineKey`,\n\t\tstring,\n\t\t`topicKey`,\n\t\tstring,\n\t\t{ topicType: `atom_family` | `atom` | `molecule_family` | `molecule` }\n\t>({\n\t\tbetween: [`timelineKey`, `topicKey`],\n\t\tcardinality: `1:n`,\n\t})\n\n\tpublic disposalTraces = new CircularBuffer<{ key: string; trace: string }>(100)\n\n\tpublic molecules = new Map<string, Molecule<Canonical>>()\n\tpublic moleculeJoins = new Junction<\n\t\t`moleculeKey`,\n\t\tstringified<Canonical>,\n\t\t`joinKey`,\n\t\tstring\n\t>(\n\t\t{\n\t\t\tbetween: [`moleculeKey`, `joinKey`],\n\t\t\tcardinality: `n:n`,\n\t\t},\n\t\t{\n\t\t\tmakeContentKey: (...keys) => keys.sort().join(`:`),\n\t\t},\n\t)\n\tpublic moleculeGraph = new Junction<\n\t\t`upstreamMoleculeKey`,\n\t\tstringified<Canonical> | `root`,\n\t\t`downstreamMoleculeKey`,\n\t\tstringified<Canonical>,\n\t\t{ source: stringified<Canonical> }\n\t>(\n\t\t{\n\t\t\tbetween: [`upstreamMoleculeKey`, `downstreamMoleculeKey`],\n\t\t\tcardinality: `n:n`,\n\t\t},\n\t\t{\n\t\t\tmakeContentKey: (...keys) => keys.sort().join(`:`),\n\t\t},\n\t)\n\tpublic moleculeData = new Junction<\n\t\t`moleculeKey`,\n\t\tstringified<Canonical>,\n\t\t`stateFamilyKey`,\n\t\tstring\n\t>(\n\t\t{\n\t\t\tbetween: [`moleculeKey`, `stateFamilyKey`],\n\t\t\tcardinality: `n:n`,\n\t\t},\n\t\t{\n\t\t\tmakeContentKey: (...keys) => keys.sort().join(`:`),\n\t\t},\n\t)\n\tpublic miscResources = new Map<string, Disposable>()\n\n\tpublic on = {\n\t\tatomCreation: new Subject<AtomToken<unknown>>(),\n\t\tatomDisposal: new Subject<AtomToken<unknown>>(),\n\t\tselectorCreation: new Subject<\n\t\t\tReadonlySelectorToken<unknown> | WritableSelectorToken<unknown>\n\t\t>(),\n\t\tselectorDisposal: new Subject<\n\t\t\tReadonlySelectorToken<unknown> | WritableSelectorToken<unknown>\n\t\t>(),\n\t\ttimelineCreation: new Subject<TimelineToken<unknown>>(),\n\t\ttransactionCreation: new Subject<TransactionToken<Func>>(),\n\t\ttransactionApplying: new StatefulSubject<TransactionProgress<Func> | null>(\n\t\t\tnull,\n\t\t),\n\t\toperationClose: new Subject<OperationProgress>(),\n\t\tmoleculeCreation: new Subject<MoleculeCreation>(),\n\t\tmoleculeDisposal: new Subject<MoleculeDisposal>(),\n\t}\n\tpublic operation: OperationProgress = { open: false }\n\n\tpublic config: {\n\t\tname: string\n\t\tlifespan: `ephemeral` | `immortal`\n\t} = {\n\t\tname: `IMPLICIT_STORE`,\n\t\tlifespan: `ephemeral`,\n\t}\n\n\tpublic loggers: AtomIOLogger[] = [\n\t\tnew AtomIOLogger(`warn`, (_, __, key) => !isReservedIntrospectionKey(key)),\n\t]\n\tpublic logger: Logger = {\n\t\terror: (...messages) => {\n\t\t\tfor (const logger of this.loggers) logger.error(...messages)\n\t\t},\n\t\tinfo: (...messages) => {\n\t\t\tfor (const logger of this.loggers) logger.info(...messages)\n\t\t},\n\t\twarn: (...messages) => {\n\t\t\tfor (const logger of this.loggers) logger.warn(...messages)\n\t\t},\n\t}\n\n\tpublic constructor(config: Store[`config`], store: Store | null = null) {\n\t\tthis.config = {\n\t\t\t...store?.config,\n\t\t\t...config,\n\t\t}\n\t\tif (store !== null) {\n\t\t\tthis.valueMap = new Map(store?.valueMap)\n\t\t\tthis.operation = { ...store?.operation }\n\t\t\tif (isRootStore(store)) {\n\t\t\t\tthis.transactionMeta = {\n\t\t\t\t\tepoch: new Map(store?.transactionMeta.epoch),\n\t\t\t\t\tactionContinuities: new Junction(\n\t\t\t\t\t\tstore?.transactionMeta.actionContinuities.toJSON(),\n\t\t\t\t\t),\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const [, family] of store.families) {\n\t\t\t\tif (\n\t\t\t\t\tfamily.internalRoles?.includes(`mutable`) ||\n\t\t\t\t\tfamily.internalRoles?.includes(`join`)\n\t\t\t\t) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfamily.install(this)\n\t\t\t}\n\t\t\tconst mutableHelpers = new Set<string>()\n\t\t\tfor (const [, atom] of store.atoms) {\n\t\t\t\tif (mutableHelpers.has(atom.key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tatom.install(this)\n\t\t\t\tif (atom.type === `mutable_atom`) {\n\t\t\t\t\tconst originalJsonToken = getJsonToken(store, atom)\n\t\t\t\t\tconst originalUpdateToken = getUpdateToken(atom)\n\t\t\t\t\tmutableHelpers.add(originalJsonToken.key)\n\t\t\t\t\tmutableHelpers.add(originalUpdateToken.key)\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const [, selector] of store.readonlySelectors) {\n\t\t\t\tselector.install(this)\n\t\t\t}\n\t\t\tfor (const [, selector] of store.selectors) {\n\t\t\t\tif (mutableHelpers.has(selector.key)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tselector.install(this)\n\t\t\t}\n\t\t\tfor (const [, tx] of store.transactions) {\n\t\t\t\ttx.install(this)\n\t\t\t}\n\t\t\tfor (const [, timeline] of store.timelines) {\n\t\t\t\ttimeline.install(this)\n\t\t\t}\n\t\t}\n\t}\n}\n\ndeclare global {\n\tvar ATOM_IO_IMPLICIT_STORE: Store | undefined\n}\n\nexport const IMPLICIT = {\n\tget STORE(): Store {\n\t\tglobalThis.ATOM_IO_IMPLICIT_STORE ??= new Store({\n\t\t\tname: `IMPLICIT_STORE`,\n\t\t\tlifespan: `ephemeral`,\n\t\t})\n\t\treturn globalThis.ATOM_IO_IMPLICIT_STORE\n\t},\n}\n\nexport const clearStore = (store: Store): void => {\n\tconst { config } = store\n\tfor (const disposable of store.miscResources.values()) {\n\t\tdisposable[Symbol.dispose]()\n\t}\n\tObject.assign(store, new Store(config))\n\tstore.config = config\n}\n","import type {\n\tAtomFamilyToken,\n\tAtomIOToken,\n\tAtomToken,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorFamilyToken,\n\tSelectorToken,\n\tTimelineManageable,\n\tTimelineToken,\n\tTransactionToken,\n\tWritableFamilyToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical, Json } from \"atom.io/json\"\n\nimport type {\n\tAtom,\n\tAtomFamily,\n\tAtomIOInternalResource,\n\tFunc,\n\tMutableAtom,\n\tMutableAtomFamily,\n\tReadableFamily,\n\tReadableState,\n\tReadonlySelector,\n\tReadonlySelectorFamily,\n\tRegularAtom,\n\tRegularAtomFamily,\n\tSelector,\n\tSelectorFamily,\n\tTransceiver,\n\tWritableFamily,\n\tWritableSelector,\n\tWritableSelectorFamily,\n\tWritableState,\n} from \"..\"\nimport { NotFoundError } from \"..\"\nimport type { Timeline } from \"../timeline\"\nimport type { Transaction } from \"../transaction\"\nimport type { Store } from \"./store\"\n\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: RegularAtomToken<T>,\n): RegularAtom<T>\nexport function withdraw<T extends Transceiver<any>>(\n\tstore: Store,\n\ttoken: MutableAtomToken<T, any>,\n): MutableAtom<T, any>\nexport function withdraw<T>(store: Store, token: AtomToken<T>): Atom<T>\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: WritableSelectorToken<T>,\n): WritableSelector<T>\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: ReadonlySelectorToken<T>,\n): ReadonlySelector<T>\nexport function withdraw<T>(store: Store, token: SelectorToken<T>): Selector<T>\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: WritableToken<T>,\n): WritableState<T>\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: ReadableToken<T>,\n): ReadableState<T>\n\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: RegularAtomFamilyToken<T, K>,\n): RegularAtomFamily<T, K>\nexport function withdraw<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\ttoken: MutableAtomFamilyToken<T, J, K>,\n): MutableAtomFamily<T, J, K>\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: AtomFamilyToken<T>,\n): AtomFamily<T, any>\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: ReadonlySelectorFamilyToken<T, K>,\n): ReadonlySelectorFamily<T, any>\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: WritableSelectorFamilyToken<T, K>,\n): WritableSelectorFamily<T, any>\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: SelectorFamilyToken<T, K>,\n): SelectorFamily<T, any>\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<T, K>,\n): ReadableFamily<T, any>\nexport function withdraw<T, K extends Canonical>(\n\tstore: Store,\n\ttoken: WritableFamilyToken<T, K>,\n): WritableFamily<T, any>\n\nexport function withdraw<T extends Func>(\n\tstore: Store,\n\ttoken: TransactionToken<T>,\n): Transaction<T extends Func ? 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>(\n\tstore: Store,\n\ttoken: WritableToken<T>,\n): WritableState<T>\nexport function withdraw<T>(\n\tstore: Store,\n\ttoken: ReadableToken<T>,\n): ReadableState<T>\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 `selector`:\n\t\t\t\twithdrawn = target.selectors.get(token.key)\n\t\t\t\tbreak\n\t\t\tcase `readonly_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 `selector_family`:\n\t\t\tcase `readonly_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 {\n\tAtomFamilyToken,\n\tAtomToken,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorFamilyToken,\n\tSelectorToken,\n\tWritableFamilyToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical, Json } from \"atom.io/json\"\n\nimport { newest } from \"../lineage\"\nimport type { Transceiver } from \"../mutable\"\nimport { NotFoundError } from \"../not-found-error\"\nimport type { Store } from \"../store\"\nimport { isChildStore, isRootStore } from \"../transaction\"\n\nexport function initFamilyMemberInStore<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n\tKey extends K,\n>(\n\tstore: Store,\n\ttoken: MutableAtomFamilyToken<T, J, K>,\n\tkey: Key,\n): MutableAtomToken<T, J, K>\n\nexport function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: RegularAtomFamilyToken<T, K>,\n\tkey: Key,\n): RegularAtomToken<T, K>\n\nexport function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: AtomFamilyToken<T, K>,\n\tkey: Key,\n): AtomToken<T, K>\n\nexport function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: WritableSelectorFamilyToken<T, K>,\n\tkey: Key,\n): WritableSelectorToken<T, K>\n\nexport function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: ReadonlySelectorFamilyToken<T, K>,\n\tkey: Key,\n): ReadonlySelectorToken<T, K>\n\nexport function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: SelectorFamilyToken<T, K>,\n\tkey: Key,\n): SelectorToken<T, K>\n\nexport function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: WritableFamilyToken<T, K>,\n\tkey: Key,\n): WritableToken<T, K>\n\nexport function initFamilyMemberInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<T, K>,\n\tkey: Key,\n): ReadableToken<T, K>\n\nexport function initFamilyMemberInStore(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<any, any>,\n\tkey: Json.Serializable,\n): ReadableToken<any> {\n\tconst family = store.families.get(token.key)\n\tif (family === undefined) {\n\t\tthrow new NotFoundError(token, store)\n\t}\n\tconst state = family(key)\n\tconst target = newest(store)\n\tif (state.family) {\n\t\tif (isRootStore(target)) {\n\t\t\tswitch (state.type) {\n\t\t\t\tcase `atom`:\n\t\t\t\tcase `mutable_atom`:\n\t\t\t\t\tstore.on.atomCreation.next(state)\n\t\t\t\t\tbreak\n\t\t\t\tcase `selector`:\n\t\t\t\tcase `readonly_selector`:\n\t\t\t\t\tstore.on.selectorCreation.next(state)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t} else if (\n\t\t\tisChildStore(target) &&\n\t\t\ttarget.on.transactionApplying.state === null\n\t\t) {\n\t\t\ttarget.transactionMeta.update.updates.push({\n\t\t\t\ttype: `state_creation`,\n\t\t\t\ttoken: state,\n\t\t\t})\n\t\t}\n\t}\n\treturn state\n}\n","import type {\n\tAtomFamilyToken,\n\tAtomToken,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorFamilyToken,\n\tSelectorToken,\n\tWritableFamilyToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport type { Molecule, ReadableState } from \"..\"\nimport { newest } from \"../lineage\"\nimport type { Transceiver } from \"../mutable\"\nimport { deposit, type Store } from \"../store\"\n\nexport function seekInStore<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n\tKey extends K,\n>(\n\tstore: Store,\n\ttoken: MutableAtomFamilyToken<T, J, K>,\n\tkey: Key,\n): MutableAtomToken<T, J, K> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: RegularAtomFamilyToken<T, K>,\n\tkey: Key,\n): RegularAtomToken<T, K> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: AtomFamilyToken<T, K>,\n\tkey: Key,\n): AtomToken<T, K> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: WritableSelectorFamilyToken<T, K>,\n\tkey: Key,\n): WritableSelectorToken<T, K> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: ReadonlySelectorFamilyToken<T, K>,\n\tkey: Key,\n): ReadonlySelectorToken<T, K> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: SelectorFamilyToken<T, K>,\n\tkey: Key,\n): SelectorToken<T, K> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: WritableFamilyToken<T, K>,\n\tkey: Key,\n): WritableToken<T, K> | undefined\n\nexport function seekInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<T, K>,\n\tkey: Key,\n): ReadableToken<T, K> | undefined\n\nexport function seekInStore(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<any, any>,\n\tkey: Canonical,\n): ReadableToken<any> | undefined {\n\tconst subKey = stringifyJson(key)\n\tconst fullKey = `${token.key}(${subKey})`\n\tconst target = newest(store)\n\tlet state: Molecule<any> | ReadableState<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 `selector_family`:\n\t\t\tstate = target.selectors.get(fullKey)\n\t\t\tbreak\n\t\tcase `readonly_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 {\n\tAtomFamilyToken,\n\tAtomToken,\n\tMutableAtomFamilyToken,\n\tMutableAtomToken,\n\tReadableFamilyToken,\n\tReadableToken,\n\tReadonlySelectorFamilyToken,\n\tReadonlySelectorToken,\n\tRegularAtomFamilyToken,\n\tRegularAtomToken,\n\tSelectorFamilyToken,\n\tSelectorToken,\n\tWritableFamilyToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n\tWritableToken,\n} from \"atom.io\"\nimport { type Canonical, type Json, stringifyJson } from \"atom.io/json\"\n\nimport { newest } from \"../lineage\"\nimport type { Transceiver } from \"../mutable\"\nimport { counterfeit, type Store } from \"../store\"\nimport { initFamilyMemberInStore } from \"./init-family-member\"\nimport { seekInStore } from \"./seek-in-store\"\n\nexport function findInStore<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n\tKey extends K,\n>(\n\tstore: Store,\n\ttoken: MutableAtomFamilyToken<T, J, K>,\n\tkey: Key,\n): MutableAtomToken<T, J, K>\n\nexport function findInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: RegularAtomFamilyToken<T, K>,\n\tkey: Key,\n): RegularAtomToken<T, K>\n\nexport function findInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: AtomFamilyToken<T, K>,\n\tkey: Key,\n): AtomToken<T, K>\n\nexport function findInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: WritableSelectorFamilyToken<T, K>,\n\tkey: Key,\n): WritableSelectorToken<T, K>\n\nexport function findInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: ReadonlySelectorFamilyToken<T, K>,\n\tkey: Key,\n): ReadonlySelectorToken<T, K>\n\nexport function findInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: SelectorFamilyToken<T, K>,\n\tkey: Key,\n): SelectorToken<T, K>\n\nexport function findInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: WritableFamilyToken<T, K>,\n\tkey: Key,\n): WritableToken<T, K>\n\nexport function findInStore<T, K extends Canonical, Key extends K>(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<T, K>,\n\tkey: Key,\n): ReadableToken<T, K>\n\nexport function findInStore(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<any, any>,\n\tkey: Canonical,\n): ReadableToken<any> {\n\tlet state = seekInStore(store, token, key)\n\tif (state) {\n\t\treturn state\n\t}\n\tconst stringKey = stringifyJson(key)\n\tconst molecule = store.molecules.get(stringKey)\n\tif (!molecule && store.config.lifespan === `immortal`) {\n\t\tconst fakeToken = counterfeit(token, key)\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\tfakeToken.type,\n\t\t\tfakeToken.key,\n\t\t\t`was not found in store \"${store.config.name}\"; returned a counterfeit token.`,\n\t\t)\n\t\treturn fakeToken\n\t}\n\tstate = initFamilyMemberInStore(store, token, key)\n\tif (molecule) {\n\t\tconst target = newest(store)\n\t\ttarget.moleculeData.set(stringKey, token.key)\n\t}\n\treturn state\n}\n","import type { ReadableFamilyToken, ReadableToken } from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\n\nimport { disposeAtom } from \"../atom\"\nimport { disposeSelector } from \"../selector\"\nimport { type Store, withdraw } from \"../store\"\nimport { findInStore } from \"./find-in-store\"\n\nexport function disposeFromStore(store: Store, token: ReadableToken<any>): void\n\nexport function disposeFromStore<K extends Canonical>(\n\tstore: Store,\n\ttoken: ReadableFamilyToken<any, K>,\n\tkey: K,\n): void\n\nexport function disposeFromStore(\n\tstore: Store,\n\t...params:\n\t\t| [token: ReadableFamilyToken<any, any>, key: Canonical]\n\t\t| [token: ReadableToken<any>]\n): void {\n\tlet token: ReadableToken<any>\n\tif (params.length === 1) {\n\t\ttoken = params[0]\n\t} else {\n\t\tconst family = params[0]\n\t\tconst key = params[1]\n\t\tconst maybeToken = findInStore(store, family, key)\n\t\ttoken = maybeToken\n\t}\n\ttry {\n\t\twithdraw(store, token)\n\t} catch (thrown) {\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 disposed because it was not found in the store \"${store.config.name}\".`,\n\t\t)\n\t\treturn\n\t}\n\tswitch (token.type) {\n\t\tcase `atom`:\n\t\tcase `mutable_atom`:\n\t\t\tdisposeAtom(store, token)\n\t\t\tbreak\n\t\tcase `selector`:\n\t\tcase `readonly_selector`:\n\t\t\tdisposeSelector(store, token)\n\t\t\tbreak\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).selectors.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 const getSelectorDependencyKeys = (\n\tkey: string,\n\tstore: Store,\n): (\n\t| AtomKey<unknown>\n\t| ReadonlySelectorKey<unknown>\n\t| SelectorKey<unknown>\n)[] => {\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 type { Selector, Store } from \"..\"\nimport type { AtomKey, StateKey } from \"../keys\"\nimport { isAtomKey } from \"../keys\"\nimport { getSelectorDependencyKeys } from \"./get-selector-dependency-keys\"\n\nexport const traceSelectorAtoms = (\n\tdirectDependencyKey: StateKey<unknown>,\n\tcovered: Set<string>,\n\tstore: Store,\n): AtomKey<unknown>[] => {\n\tconst rootKeys: AtomKey<unknown>[] = []\n\n\tconst indirectDependencyKeys = getSelectorDependencyKeys(\n\t\tdirectDependencyKey,\n\t\tstore,\n\t)\n\twhile (indirectDependencyKeys.length > 0) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: just checked length ^^^\n\t\tconst indirectDependencyKey = indirectDependencyKeys.shift()!\n\t\tif (covered.has(indirectDependencyKey)) {\n\t\t\tcontinue\n\t\t}\n\t\tcovered.add(indirectDependencyKey)\n\n\t\tif (!isAtomKey(store, indirectDependencyKey)) {\n\t\t\tindirectDependencyKeys.push(\n\t\t\t\t...getSelectorDependencyKeys(indirectDependencyKey, store),\n\t\t\t)\n\t\t} else if (!rootKeys.includes(indirectDependencyKey)) {\n\t\t\trootKeys.push(indirectDependencyKey)\n\t\t}\n\t}\n\n\treturn rootKeys\n}\n\nexport const traceAllSelectorAtoms = (\n\tselector: Selector<any>,\n\tstore: Store,\n): AtomKey<unknown>[] => {\n\tconst selectorKey = selector.key\n\tconst directDependencyKeys = getSelectorDependencyKeys(selectorKey, store)\n\tconst covered = new Set<string>()\n\treturn directDependencyKeys.flatMap((depKey) =>\n\t\tisAtomKey(store, depKey)\n\t\t\t? depKey\n\t\t\t: traceSelectorAtoms(depKey, covered, store),\n\t)\n}\n","import type { ReadonlySelectorToken, WritableToken } from \"atom.io\"\n\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\nimport { traceSelectorAtoms } from \"./trace-selector-atoms\"\n\nexport const updateSelectorAtoms = (\n\tselectorKey: string,\n\tdependency: ReadonlySelectorToken<unknown> | WritableToken<unknown>,\n\tcovered: Set<string>,\n\tstore: Store,\n): void => {\n\tconst target = newest(store)\n\tif (dependency.type === `atom` || dependency.type === `mutable_atom`) {\n\t\ttarget.selectorAtoms.set({\n\t\t\tselectorKey,\n\t\t\tatomKey: dependency.key,\n\t\t})\n\t\tstore.logger.info(\n\t\t\t`🔍`,\n\t\t\t`selector`,\n\t\t\tselectorKey,\n\t\t\t`discovers root atom \"${dependency.key}\"`,\n\t\t)\n\t} else {\n\t\tconst rootKeys = traceSelectorAtoms(dependency.key, covered, store)\n\t\tstore.logger.info(\n\t\t\t`🔍`,\n\t\t\t`selector`,\n\t\t\tselectorKey,\n\t\t\t`discovers root atoms: [ ${rootKeys\n\t\t\t\t.map((key) => `\"${key}\"`)\n\t\t\t\t.join(`, `)} ]`,\n\t\t)\n\t\tfor (const atomKey of rootKeys) {\n\t\t\ttarget.selectorAtoms = target.selectorAtoms.set({\n\t\t\t\tselectorKey,\n\t\t\t\tatomKey,\n\t\t\t})\n\t\t}\n\t}\n\tcovered.add(dependency.key)\n}\n","import type {\n\tfindState,\n\tReadableFamilyToken,\n\tReadableToken,\n\tsetState,\n\tSetterToolkit,\n\tWritableFamilyToken,\n\tWritableToken,\n} from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nimport { findInStore } from \"../families\"\nimport { readOrComputeValue } from \"../get-state/read-or-compute-value\"\nimport { newest } from \"../lineage\"\nimport { getJsonToken } from \"../mutable\"\nimport { setAtomOrSelector } from \"../set-state\"\nimport type { Store } from \"../store\"\nimport { withdraw } from \"../store\"\nimport { updateSelectorAtoms } from \"./update-selector-atoms\"\n\nexport const registerSelector = (\n\tselectorKey: string,\n\tcovered: Set<string>,\n\tstore: Store,\n): SetterToolkit => ({\n\tget: (\n\t\t...params:\n\t\t\t| [ReadableFamilyToken<any, any>, Json.Serializable]\n\t\t\t| [ReadableToken<any>]\n\t) => {\n\t\tconst target = newest(store)\n\t\tlet dependency: ReadableToken<any>\n\n\t\tif (params.length === 2) {\n\t\t\tconst [family, key] = params\n\t\t\tdependency = findInStore(store, family, key)\n\t\t} else {\n\t\t\t;[dependency] = params\n\t\t}\n\n\t\tconst dependencyState = withdraw(store, dependency)\n\t\tconst dependencyValue = readOrComputeValue(store, dependencyState)\n\n\t\tstore.logger.info(\n\t\t\t`🔌`,\n\t\t\t`selector`,\n\t\t\tselectorKey,\n\t\t\t`registers dependency ( \"${dependency.key}\" =`,\n\t\t\tdependencyValue,\n\t\t\t`)`,\n\t\t)\n\n\t\ttarget.selectorGraph.set(\n\t\t\t{\n\t\t\t\tupstreamSelectorKey: dependency.key,\n\t\t\t\tdownstreamSelectorKey: selectorKey,\n\t\t\t},\n\t\t\t{\n\t\t\t\tsource: dependency.key,\n\t\t\t},\n\t\t)\n\t\tupdateSelectorAtoms(selectorKey, dependency as any, covered, store)\n\t\treturn dependencyValue\n\t},\n\tset: (<T, New extends T>(\n\t\t...params:\n\t\t\t| [\n\t\t\t\t\ttoken: WritableFamilyToken<T, any>,\n\t\t\t\t\tkey: Json.Serializable,\n\t\t\t\t\tvalue: New | ((oldValue: any) => New),\n\t\t\t ]\n\t\t\t| [token: WritableToken<T>, value: New | ((oldValue: T) => New)]\n\t) => {\n\t\tlet token: WritableToken<T>\n\t\tlet value: New | ((oldValue: T) => New)\n\t\tif (params.length === 2) {\n\t\t\ttoken = params[0]\n\t\t\tvalue = params[1]\n\t\t} else {\n\t\t\tconst family = params[0]\n\t\t\tconst key = params[1]\n\t\t\tvalue = params[2]\n\t\t\ttoken = findInStore(store, family, key)\n\t\t}\n\t\tconst target = newest(store)\n\t\tconst state = withdraw(target, token)\n\t\tsetAtomOrSelector(target, state, value)\n\t}) as typeof setState,\n\tfind: ((...args: Parameters<typeof findState>) =>\n\t\tfindInStore(store, ...args)) as typeof findState,\n\tjson: (token) => getJsonToken(store, token),\n})\n","import type {\n\tFamilyMetadata,\n\tReadonlySelectorOptions,\n\tReadonlySelectorToken,\n} from \"atom.io\"\n\nimport type { ReadonlySelector } from \"..\"\nimport { cacheValue } from \"../caching\"\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { registerSelector } from \"./register-selector\"\n\nexport const createReadonlySelector = <T>(\n\tstore: Store,\n\toptions: ReadonlySelectorOptions<T>,\n\tfamily: FamilyMetadata | undefined,\n): ReadonlySelectorToken<T> => {\n\tconst target = newest(store)\n\tconst subject = new Subject<{ newValue: T; oldValue: T }>()\n\tconst covered = new Set<string>()\n\tconst { get, find, json } = registerSelector(options.key, covered, target)\n\tconst getSelf = () => {\n\t\tconst value = options.get({ get, find, json })\n\t\tcacheValue(newest(store), options.key, value, subject)\n\t\tcovered.clear()\n\t\treturn value\n\t}\n\n\tconst readonlySelector: ReadonlySelector<T> = {\n\t\t...options,\n\t\tsubject,\n\t\tinstall: (s: Store) => createReadonlySelector(s, options, family),\n\t\tget: getSelf,\n\t\ttype: `readonly_selector`,\n\t\t...(family && { family }),\n\t}\n\ttarget.readonlySelectors.set(options.key, readonlySelector)\n\tconst initialValue = getSelf()\n\tstore.logger.info(\n\t\t`✨`,\n\t\treadonlySelector.type,\n\t\treadonlySelector.key,\n\t\t`=`,\n\t\tinitialValue,\n\t)\n\tconst token: ReadonlySelectorToken<T> = {\n\t\tkey: options.key,\n\t\ttype: `readonly_selector`,\n\t}\n\tif (family) {\n\t\ttoken.family = family\n\t}\n\treturn token\n}\n","import type {\n\tFamilyMetadata,\n\tWritableSelectorOptions,\n\tWritableSelectorToken,\n} from \"atom.io\"\n\nimport type { WritableSelector } from \"..\"\nimport { cacheValue } from \"../caching\"\nimport { newest } from \"../lineage\"\nimport { markDone } from \"../operation\"\nimport { become } from \"../set-state\"\nimport type { Store } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { isRootStore } from \"../transaction\"\nimport { registerSelector } from \"./register-selector\"\n\nexport const createWritableSelector = <T>(\n\tstore: Store,\n\toptions: WritableSelectorOptions<T>,\n\tfamily: FamilyMetadata | undefined,\n): WritableSelectorToken<T> => {\n\tconst target = newest(store)\n\tconst subject = new Subject<{ newValue: T; oldValue: T }>()\n\tconst covered = new Set<string>()\n\tconst setterToolkit = registerSelector(options.key, covered, target)\n\tconst { find, get, json } = setterToolkit\n\tconst getterToolkit = { find, get, json }\n\n\tconst getSelf = (getFn = options.get, innerTarget = newest(store)): T => {\n\t\tconst value = getFn(getterToolkit)\n\t\tcacheValue(innerTarget, options.key, value, subject)\n\t\tcovered.clear()\n\t\treturn value\n\t}\n\n\tconst setSelf = (next: T | ((oldValue: T) => T)): void => {\n\t\tconst innerTarget = newest(store)\n\t\tconst oldValue = getSelf(options.get, innerTarget)\n\t\tconst newValue = become(next)(oldValue)\n\t\tstore.logger.info(\n\t\t\t`📝`,\n\t\t\t`selector`,\n\t\t\toptions.key,\n\t\t\t`set (`,\n\t\t\toldValue,\n\t\t\t`->`,\n\t\t\tnewValue,\n\t\t\t`)`,\n\t\t)\n\t\tcacheValue(innerTarget, options.key, newValue, subject)\n\t\tmarkDone(innerTarget, options.key)\n\t\tif (isRootStore(innerTarget)) {\n\t\t\tsubject.next({ newValue, oldValue })\n\t\t}\n\t\toptions.set(setterToolkit, newValue)\n\t}\n\tconst mySelector: WritableSelector<T> = {\n\t\t...options,\n\t\tsubject,\n\t\tinstall: (s: Store) => createWritableSelector(s, options, family),\n\t\tget: getSelf,\n\t\tset: setSelf,\n\t\ttype: `selector`,\n\t\t...(family && { family }),\n\t}\n\ttarget.selectors.set(options.key, mySelector)\n\tconst initialValue = getSelf()\n\tstore.logger.info(`✨`, mySelector.type, mySelector.key, `=`, initialValue)\n\tconst token: WritableSelectorToken<T> = {\n\t\tkey: options.key,\n\t\ttype: `selector`,\n\t}\n\tif (family) {\n\t\ttoken.family = family\n\t}\n\treturn token\n}\n","import type {\n\tReadonlySelectorOptions,\n\tReadonlySelectorToken,\n\tWritableSelectorOptions,\n\tWritableSelectorToken,\n} from \"atom.io\"\n\nimport type { Store } from \"../store\"\nimport { createReadonlySelector } from \"./create-readonly-selector\"\nimport { createWritableSelector } from \"./create-writable-selector\"\n\nexport function createStandaloneSelector<T>(\n\tstore: Store,\n\toptions: WritableSelectorOptions<T>,\n): WritableSelectorToken<T>\nexport function createStandaloneSelector<T>(\n\tstore: Store,\n\toptions: ReadonlySelectorOptions<T>,\n): ReadonlySelectorToken<T>\nexport function createStandaloneSelector<T>(\n\tstore: Store,\n\toptions: ReadonlySelectorOptions<T> | WritableSelectorOptions<T>,\n): ReadonlySelectorToken<T> | WritableSelectorToken<T> {\n\tconst isWritable = `set` in options\n\n\tif (isWritable) {\n\t\tconst state = createWritableSelector(store, options, undefined)\n\t\tstore.on.selectorCreation.next(state)\n\t\treturn state\n\t}\n\tconst state = createReadonlySelector(store, options, undefined)\n\tstore.on.selectorCreation.next(state)\n\treturn state\n}\n","import type { SelectorFamilyToken, SelectorToken } from \"atom.io\"\n\nimport type { Store } from \"..\"\nimport { isChildStore, newest, withdraw } from \"..\"\n\nexport function disposeSelector(\n\tstore: Store,\n\tselectorToken: SelectorToken<unknown>,\n): void {\n\tconst target = newest(store)\n\tconst { key } = selectorToken\n\tconst selector = withdraw(target, selectorToken)\n\tif (!selector.family) {\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\t`selector`,\n\t\t\tkey,\n\t\t\t`Standalone selectors cannot be disposed.`,\n\t\t)\n\t} else {\n\t\tconst molecule = target.molecules.get(selector.family.subKey)\n\t\tif (molecule) {\n\t\t\ttarget.moleculeData.delete(selector.family.subKey, selector.family.key)\n\t\t}\n\t\tlet familyToken: SelectorFamilyToken<any, any>\n\t\tswitch (selectorToken.type) {\n\t\t\tcase `selector`:\n\t\t\t\t{\n\t\t\t\t\ttarget.selectors.delete(key)\n\t\t\t\t\tfamilyToken = {\n\t\t\t\t\t\tkey: selector.family.key,\n\t\t\t\t\t\ttype: `selector_family`,\n\t\t\t\t\t}\n\t\t\t\t\tconst family = withdraw(store, familyToken)\n\t\t\t\t\tfamily.subject.next({\n\t\t\t\t\t\ttype: `state_disposal`,\n\t\t\t\t\t\tsubType: `selector`,\n\t\t\t\t\t\ttoken: selectorToken,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase `readonly_selector`:\n\t\t\t\t{\n\t\t\t\t\ttarget.readonlySelectors.delete(key)\n\t\t\t\t\tfamilyToken = {\n\t\t\t\t\t\tkey: selector.family.key,\n\t\t\t\t\t\ttype: `readonly_selector_family`,\n\t\t\t\t\t}\n\t\t\t\t\tconst family = withdraw(store, familyToken)\n\t\t\t\t\tfamily.subject.next({\n\t\t\t\t\t\ttype: `state_disposal`,\n\t\t\t\t\t\tsubType: `selector`,\n\t\t\t\t\t\ttoken: selectorToken,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t}\n\n\t\ttarget.valueMap.delete(key)\n\t\ttarget.selectorAtoms.delete(key)\n\t\ttarget.selectorGraph.delete(key)\n\t\tstore.logger.info(`🔥`, selectorToken.type, key, `deleted`)\n\t\tif (isChildStore(target) && target.transactionMeta.phase === `building`) {\n\t\t\ttarget.transactionMeta.update.updates.push({\n\t\t\t\ttype: `state_disposal`,\n\t\t\t\tsubType: `selector`,\n\t\t\t\ttoken: selectorToken,\n\t\t\t})\n\t\t} else {\n\t\t\tstore.on.selectorDisposal.next(selectorToken)\n\t\t}\n\t}\n}\n","import type {\n\tFamilyMetadata,\n\tfindState,\n\tgetState,\n\tStateCreation,\n\tStateDisposal,\n\tWritableSelectorFamilyOptions,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n} from \"atom.io\"\nimport type { Canonical } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nimport {\n\tfindInStore,\n\tgetFromStore,\n\tgetJsonToken,\n\tprettyPrintTokenType,\n\ttype WritableSelectorFamily,\n} from \"..\"\nimport { newest } from \"../lineage\"\nimport { createWritableSelector } from \"../selector\"\nimport type { Store } from \"../store\"\nimport { Subject } from \"../subject\"\n\nexport function createWritableSelectorFamily<T, K extends Canonical>(\n\tstore: Store,\n\toptions: WritableSelectorFamilyOptions<T, K>,\n\tinternalRoles?: string[],\n): WritableSelectorFamilyToken<T, K> {\n\tconst familyToken = {\n\t\tkey: options.key,\n\t\ttype: `selector_family`,\n\t} as const satisfies WritableSelectorFamilyToken<T, K>\n\n\tconst existing = store.families.get(options.key)\n\tif (existing) {\n\t\tstore.logger.error(\n\t\t\t`❗`,\n\t\t\t`selector_family`,\n\t\t\toptions.key,\n\t\t\t`Overwriting an existing ${prettyPrintTokenType(\n\t\t\t\texisting,\n\t\t\t)} \"${existing.key}\" in store \"${store.config.name}\". You can safely ignore this warning if it is due to hot module replacement.`,\n\t\t)\n\t}\n\tconst subject = new Subject<\n\t\t| StateCreation<WritableSelectorToken<T>>\n\t\t| StateDisposal<WritableSelectorToken<T>>\n\t>()\n\n\tconst familyFunction = (key: K): WritableSelectorToken<T> => {\n\t\tconst subKey = stringifyJson(key)\n\t\tconst family: FamilyMetadata = { key: options.key, subKey }\n\t\tconst fullKey = `${options.key}(${subKey})`\n\t\tconst target = newest(store)\n\n\t\tconst token = createWritableSelector(\n\t\t\ttarget,\n\t\t\t{\n\t\t\t\tkey: fullKey,\n\t\t\t\tget: options.get(key),\n\t\t\t\tset: options.set(key),\n\t\t\t},\n\t\t\tfamily,\n\t\t)\n\n\t\tsubject.next({ type: `state_creation`, token })\n\t\treturn token\n\t}\n\n\tconst selectorFamily = Object.assign(familyFunction, familyToken, {\n\t\tinternalRoles,\n\t\tsubject,\n\t\tinstall: (s: Store) => createWritableSelectorFamily(s, options),\n\t\tdefault: (key: K) => {\n\t\t\tconst getFn = options.get(key)\n\t\t\treturn getFn({\n\t\t\t\tget: ((...args: Parameters<typeof getState>) =>\n\t\t\t\t\tgetFromStore(store, ...args)) as typeof getState,\n\t\t\t\tfind: ((...args: Parameters<typeof findState>) =>\n\t\t\t\t\tfindInStore(store, ...args)) as typeof findState,\n\t\t\t\tjson: (token) => getJsonToken(store, token),\n\t\t\t})\n\t\t},\n\t}) satisfies WritableSelectorFamily<T, K>\n\n\tstore.families.set(options.key, selectorFamily)\n\treturn familyToken\n}\n","import type * as AtomIO from \"atom.io\"\nimport type { Store, Transceiver } from \"atom.io/internal\"\n\nimport { createWritableSelectorFamily } from \"../../internal/src/families/create-writable-selector-family\"\nimport type { Canonical, Json, JsonInterface } from \".\"\n\nexport function selectJsonFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken: AtomIO.MutableAtomFamilyToken<T, J, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritableSelectorFamilyToken<J, K>\nexport function selectJsonFamily<\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken: AtomIO.RegularAtomFamilyToken<T, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritableSelectorFamilyToken<J, K>\nexport function selectJsonFamily<\n\tT,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\tatomFamilyToken:\n\t\t| AtomIO.MutableAtomFamilyToken<T extends Transceiver<any> ? T : never, J, K>\n\t\t| AtomIO.RegularAtomFamilyToken<T, K>,\n\ttransform: JsonInterface<T, J>,\n): AtomIO.WritableSelectorFamilyToken<J, K> {\n\tconst jsonFamily = createWritableSelectorFamily<J, K>(\n\t\tstore,\n\t\t{\n\t\t\tkey: `${atomFamilyToken.key}:JSON`,\n\t\t\tget:\n\t\t\t\t(key) =>\n\t\t\t\t({ get }) => {\n\t\t\t\t\tconst baseState = get(atomFamilyToken, key)\n\t\t\t\t\treturn transform.toJson(baseState)\n\t\t\t\t},\n\t\t\tset:\n\t\t\t\t(key) =>\n\t\t\t\t({ set }, newValue) => {\n\t\t\t\t\tset(atomFamilyToken, key, transform.fromJson(newValue))\n\t\t\t\t},\n\t\t},\n\t\t[`mutable`, `json`],\n\t)\n\treturn jsonFamily\n}\n","export * from \"./entries\"\nexport * from \"./select-json\"\nexport * from \"./select-json-family\"\n\nexport type primitive = boolean | number | string | null\n\nexport namespace Json {\n\texport namespace Tree {\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Array<Element = unknown> = ReadonlyArray<Element>\n\t\t// eslint-disable-next-line @typescript-eslint/no-shadow\n\t\texport type Object<K extends string = string, V = unknown> = Record<K, V>\n\t\texport type Fork = Array | Object\n\t\texport type Leaf = primitive\n\t\texport type Node = Fork | Leaf\n\t}\n\n\texport type Serializable =\n\t\t| primitive\n\t\t| Readonly<{ [key: string]: Serializable }>\n\t\t| ReadonlyArray<Serializable>\n\n\texport type Object<\n\t\tKey extends string = string,\n\t\tValue extends Serializable = Serializable,\n\t> = Record<Key, Value>\n\n\texport type Array<Element extends Serializable = Serializable> =\n\t\tReadonlyArray<Element>\n}\n\nexport type stringified<J extends Json.Serializable> = J extends string\n\t? `\"${J}\"`\n\t: J extends number\n\t\t? `${J}`\n\t\t: J extends true\n\t\t\t? `true`\n\t\t\t: J extends false\n\t\t\t\t? `false`\n\t\t\t\t: J extends boolean\n\t\t\t\t\t? `false` | `true`\n\t\t\t\t\t: J extends null\n\t\t\t\t\t\t? `null`\n\t\t\t\t\t\t: string & { __json?: J }\n\nexport const parseJson = <S extends stringified<Json.Serializable>>(\n\tstr: S | string,\n): S extends stringified<infer J> ? J : Json.Serializable => JSON.parse(str)\n\nexport const stringifyJson = <J extends Json.Serializable>(\n\tjson: J,\n): stringified<J> => JSON.stringify(json) as stringified<J>\n\nexport type Canonical = primitive | ReadonlyArray<Canonical>\n\nexport type JsonIO = (...params: Json.Serializable[]) => Json.Serializable | void\n\nexport type JsonInterface<T, J extends Json.Serializable = Json.Serializable> = {\n\ttoJson: (t: T) => J\n\tfromJson: (json: J) => T\n}\n\nconst JSON_PROTOTYPES = [\n\tArray.prototype,\n\tBoolean.prototype,\n\tNumber.prototype,\n\tObject.prototype,\n\tString.prototype,\n] as const\nexport const isJson = (input: unknown): input is Json.Tree.Node => {\n\tif (input === null) return true\n\tif (input === undefined) return false\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn JSON_PROTOTYPES.includes(prototype)\n}\n\nexport const JSON_TYPE_NAMES = [\n\t`array`,\n\t`boolean`,\n\t`null`,\n\t`number`,\n\t`object`,\n\t`string`,\n] as const\n\nexport type JsonTypeName = (typeof JSON_TYPE_NAMES)[number]\n\nexport interface JsonTypes extends Record<JsonTypeName, Json.Serializable> {\n\tarray: Json.Array\n\tboolean: boolean\n\tnull: null\n\tnumber: number\n\tobject: Json.Object\n\tstring: string\n}\n\nexport const JSON_DEFAULTS: JsonTypes = {\n\tarray: [],\n\tboolean: false,\n\tnull: null,\n\tnumber: 0,\n\tobject: {},\n\tstring: ``,\n}\n","import type { ReadableState } from \"..\"\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\n\nexport const recallState = <T>(store: Store, state: ReadableState<T>): 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 type { Selector } from \"..\"\nimport { readOrComputeValue } from \"../get-state/read-or-compute-value\"\nimport { newest } from \"../lineage\"\nimport { traceAllSelectorAtoms } from \"../selector\"\nimport type { Store } from \"../store\"\nimport { recallState } from \"./recall-state\"\n\nexport const subscribeToRootAtoms = <T>(\n\tstore: Store,\n\tselector: Selector<T>,\n): (() => void)[] => {\n\tconst target = newest(store)\n\tconst dependencySubscriptions = traceAllSelectorAtoms(selector, store).map(\n\t\t(atomKey) => {\n\t\t\tconst atom = target.atoms.get(atomKey)\n\t\t\tif (atom === undefined) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Atom \"${atomKey}\", a dependency of selector \"${selector.key}\", not found in store \"${store.config.name}\".`,\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn atom.subject.subscribe(\n\t\t\t\t`${selector.type}:${selector.key}`,\n\t\t\t\t(atomChange) => {\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`📢`,\n\t\t\t\t\t\tselector.type,\n\t\t\t\t\t\tselector.key,\n\t\t\t\t\t\t`root`,\n\t\t\t\t\t\tatomKey,\n\t\t\t\t\t\t`went`,\n\t\t\t\t\t\tatomChange.oldValue,\n\t\t\t\t\t\t`->`,\n\t\t\t\t\t\tatomChange.newValue,\n\t\t\t\t\t)\n\t\t\t\t\tconst oldValue = recallState(target, selector)\n\t\t\t\t\tconst newValue = readOrComputeValue(target, selector)\n\t\t\t\t\tstore.logger.info(\n\t\t\t\t\t\t`✨`,\n\t\t\t\t\t\tselector.type,\n\t\t\t\t\t\tselector.key,\n\t\t\t\t\t\t`went`,\n\t\t\t\t\t\toldValue,\n\t\t\t\t\t\t`->`,\n\t\t\t\t\t\tnewValue,\n\t\t\t\t\t)\n\t\t\t\t\tselector.subject.next({ newValue, oldValue })\n\t\t\t\t},\n\t\t\t)\n\t\t},\n\t)\n\treturn dependencySubscriptions\n}\n","import type { ReadableToken, StateUpdate, UpdateHandler } from \"atom.io\"\n\nimport type { Store } from \"../store\"\nimport { withdraw } from \"../store\"\nimport { subscribeToRootAtoms } from \"./subscribe-to-root-atoms\"\n\nexport function subscribeToState<T>(\n\tstore: Store,\n\ttoken: ReadableToken<T>,\n\tkey: string,\n\thandleUpdate: UpdateHandler<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\tconst state = withdraw(store, token)\n\tstore.logger.info(`👀`, state.type, state.key, `Adding subscription \"${key}\"`)\n\tconst isSelector =\n\t\tstate.type === `selector` || state.type === `readonly_selector`\n\tlet dependencyUnsubFunctions: (() => void)[] | null = null\n\tlet updateHandler: UpdateHandler<T> = safelyHandleUpdate\n\tif (isSelector) {\n\t\tdependencyUnsubFunctions = subscribeToRootAtoms(store, state)\n\t\tupdateHandler = (update) => {\n\t\t\tif (dependencyUnsubFunctions) {\n\t\t\t\tdependencyUnsubFunctions.length = 0\n\t\t\t\tdependencyUnsubFunctions.push(...subscribeToRootAtoms(store, state))\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\tif (dependencyUnsubFunctions) {\n\t\t\tfor (const unsubFromDependency of dependencyUnsubFunctions) {\n\t\t\t\tunsubFromDependency()\n\t\t\t}\n\t\t}\n\t}\n\n\treturn unsubscribe\n}\n","import type { TimelineManageable, TimelineToken, TimelineUpdate } from \"atom.io\"\n\nimport type { Store } from \"..\"\nimport { withdraw } from \"..\"\n\nexport const subscribeToTimeline = <ManagedAtom extends TimelineManageable>(\n\tstore: Store,\n\ttoken: TimelineToken<ManagedAtom>,\n\tkey: string,\n\thandleUpdate: (update: TimelineUpdate<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\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { Store } from \"..\"\nimport {\n\tgetFromStore,\n\tnewest,\n\tsetIntoStore,\n\tsubscribeToState,\n\tsubscribeToTimeline,\n} from \"..\"\nimport { createRegularAtom } from \"../atom\"\nimport { isChildStore } from \"../transaction/is-root-store\"\nimport type { 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<Mutable extends Transceiver<any>> {\n\tprivate Update: Mutable extends Transceiver<infer Signal> ? Signal : never\n\n\tprivate initializeState(\n\t\tmutableState: MutableAtomToken<Mutable, Json.Serializable>,\n\t\tstore: Store,\n\t): RegularAtomToken<typeof this.Update | null> {\n\t\tconst latestUpdateStateKey = `*${mutableState.key}`\n\t\tstore.atoms.delete(latestUpdateStateKey)\n\t\tstore.valueMap.delete(latestUpdateStateKey)\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 latestUpdateState = createRegularAtom<\n\t\t\t(Mutable extends Transceiver<infer Signal> ? Signal : never) | null\n\t\t>(\n\t\t\tstore,\n\t\t\t{\n\t\t\t\tkey: latestUpdateStateKey,\n\t\t\t\tdefault: null,\n\t\t\t},\n\t\t\tfamilyMetaData,\n\t\t)\n\t\tif (store.parent?.valueMap.has(latestUpdateStateKey)) {\n\t\t\tconst parentValue = store.parent.valueMap.get(latestUpdateStateKey)\n\t\t\tstore.valueMap.set(latestUpdateStateKey, parentValue)\n\t\t}\n\n\t\treturn latestUpdateState\n\t}\n\n\tprivate unsubscribeFromInnerValue: () => void\n\tprivate unsubscribeFromState: () => void\n\tprivate observeCore(\n\t\tmutableState: MutableAtomToken<Mutable, any>,\n\t\tlatestUpdateState: RegularAtomToken<typeof this.Update | null>,\n\t\ttarget: Store,\n\t): void {\n\t\tconst subscriptionKey = `tracker:${target.config.name}:${\n\t\t\tisChildStore(target) ? target.transactionMeta.update.key : `main`\n\t\t}:${mutableState.key}`\n\t\tconst originalInnerValue = getFromStore(target, mutableState)\n\t\tthis.unsubscribeFromInnerValue = originalInnerValue.subscribe(\n\t\t\tsubscriptionKey,\n\t\t\t(update) => {\n\t\t\t\tsetIntoStore(target, latestUpdateState, update)\n\t\t\t},\n\t\t)\n\t\tthis.unsubscribeFromState = subscribeToState(\n\t\t\ttarget,\n\t\t\tmutableState,\n\t\t\tsubscriptionKey,\n\t\t\t(update) => {\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\t(transceiverUpdate) => {\n\t\t\t\t\t\t\tsetIntoStore(target, latestUpdateState, transceiverUpdate)\n\t\t\t\t\t\t},\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t},\n\t\t)\n\t}\n\n\tprivate updateCore<Core extends Transceiver<any>>(\n\t\tmutableState: MutableAtomToken<Core, Json.Serializable>,\n\t\tlatestUpdateState: RegularAtomToken<typeof this.Update | null>,\n\t\ttarget: Store,\n\t): void {\n\t\tconst subscriptionKey = `tracker:${target.config.name}:${\n\t\t\tisChildStore(target) ? target.transactionMeta.update.key : `main`\n\t\t}:${mutableState.key}`\n\t\tsubscribeToState(\n\t\t\ttarget,\n\t\t\tlatestUpdateState,\n\t\t\tsubscriptionKey,\n\t\t\t({ newValue, oldValue }) => {\n\t\t\t\tconst timelineId = target.timelineTopics.getRelatedKey(\n\t\t\t\t\tlatestUpdateState.key,\n\t\t\t\t)\n\n\t\t\t\tif (timelineId) {\n\t\t\t\t\tconst timelineData = target.timelines.get(timelineId)\n\t\t\t\t\tif (timelineData?.timeTraveling) {\n\t\t\t\t\t\tconst unsubscribe = subscribeToTimeline(\n\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t{ key: timelineId, type: `timeline` },\n\t\t\t\t\t\t\tsubscriptionKey,\n\t\t\t\t\t\t\t(update) => {\n\t\t\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\t\t\tsetIntoStore(target, mutableState, (transceiver) => {\n\t\t\t\t\t\t\t\t\tif (update === `redo` && newValue) {\n\t\t\t\t\t\t\t\t\t\ttransceiver.do(newValue)\n\t\t\t\t\t\t\t\t\t} else if (update === `undo` && oldValue) {\n\t\t\t\t\t\t\t\t\t\ttransceiver.undo(oldValue)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn transceiver\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\treturn\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst unsubscribe = target.on.operationClose.subscribe(\n\t\t\t\t\tsubscriptionKey,\n\t\t\t\t\t() => {\n\t\t\t\t\t\tunsubscribe()\n\t\t\t\t\t\tconst mutable = getFromStore(target, mutableState)\n\t\t\t\t\t\tconst updateNumber =\n\t\t\t\t\t\t\tnewValue === null ? -1 : mutable.getUpdateNumber(newValue)\n\t\t\t\t\t\tconst eventOffset = updateNumber - mutable.cacheUpdateNumber\n\t\t\t\t\t\tif (newValue && eventOffset === 1) {\n\t\t\t\t\t\t\tsetIntoStore(\n\t\t\t\t\t\t\t\ttarget,\n\t\t\t\t\t\t\t\tmutableState,\n\t\t\t\t\t\t\t\t(transceiver) => (transceiver.do(newValue), transceiver),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget.logger.info(\n\t\t\t\t\t\t\t\t`❌`,\n\t\t\t\t\t\t\t\t`mutable_atom`,\n\t\t\t\t\t\t\t\tmutableState.key,\n\t\t\t\t\t\t\t\t`could not be updated. Expected update number ${\n\t\t\t\t\t\t\t\t\tmutable.cacheUpdateNumber + 1\n\t\t\t\t\t\t\t\t}, but got ${updateNumber}`,\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)\n\t\t\t},\n\t\t)\n\t}\n\n\tpublic mutableState: MutableAtomToken<Mutable, Json.Serializable>\n\tpublic latestUpdateState: RegularAtomToken<typeof this.Update | null>\n\n\tpublic [Symbol.dispose]: () => void\n\n\tpublic constructor(\n\t\tmutableState: MutableAtomToken<Mutable, Json.Serializable>,\n\t\tstore: Store,\n\t) {\n\t\tthis.mutableState = mutableState\n\t\tconst target = newest(store)\n\t\tthis.latestUpdateState = this.initializeState(mutableState, target)\n\t\tthis.observeCore(mutableState, this.latestUpdateState, target)\n\t\tthis.updateCore(mutableState, this.latestUpdateState, target)\n\t\ttarget.trackers.set(mutableState.key, this)\n\t\tthis[Symbol.dispose] = () => {\n\t\t\tthis.unsubscribeFromInnerValue()\n\t\t\tthis.unsubscribeFromState()\n\t\t\ttarget.trackers.delete(mutableState.key)\n\t\t}\n\t}\n}\n","import type {\n\tFamilyMetadata,\n\tMutableAtomOptions,\n\tMutableAtomToken,\n\tUpdateHandler,\n} from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\nimport { selectJson } from \"atom.io/json\"\n\nimport { cacheValue, type MutableAtom, setIntoStore } from \"..\"\nimport { markAtomAsDefault } from \"../atom\"\nimport { newest } from \"../lineage\"\nimport { deposit, type Store } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { subscribeToState } from \"../subscribe\"\nimport { Tracker } from \"./tracker\"\nimport type { Transceiver } from \"./transceiver\"\n\nexport function createMutableAtom<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(\n\tstore: Store,\n\toptions: MutableAtomOptions<T, J>,\n\tfamily: FamilyMetadata | undefined,\n): MutableAtomToken<T, J> {\n\tstore.logger.info(\n\t\t`🔨`,\n\t\t`atom`,\n\t\toptions.key,\n\t\t`creating in store \"${store.config.name}\"`,\n\t)\n\tconst target = newest(store)\n\tconst existing = target.atoms.get(options.key)\n\tif (existing && existing.type === `mutable_atom`) {\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\t`atom`,\n\t\t\toptions.key,\n\t\t\t`Tried to create atom, but it already exists in the store.`,\n\t\t)\n\t\treturn deposit(existing)\n\t}\n\tconst subject = new Subject<{ newValue: T; oldValue: T }>()\n\tconst newAtom: MutableAtom<T, J> = {\n\t\t...options,\n\t\ttype: `mutable_atom`,\n\t\tinstall: (s: Store) => {\n\t\t\ts.logger.info(\n\t\t\t\t`🛠️`,\n\t\t\t\t`atom`,\n\t\t\t\toptions.key,\n\t\t\t\t`installing in store \"${s.config.name}\"`,\n\t\t\t)\n\t\t\treturn createMutableAtom(s, options, family)\n\t\t},\n\t\tsubject,\n\t} as const\n\tif (family) {\n\t\tnewAtom.family = family\n\t}\n\tconst initialValue = options.default()\n\ttarget.atoms.set(newAtom.key, newAtom)\n\tmarkAtomAsDefault(store, options.key)\n\tcacheValue(target, options.key, initialValue, subject)\n\tconst token = deposit(newAtom)\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\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\n\tnew Tracker(token, store)\n\tif (!family) {\n\t\tselectJson(token, options, store)\n\t}\n\n\treturn token\n}\n","import type { Canonical } from \"atom.io/json\"\nimport { parseJson } from \"atom.io/json\"\n\nimport type { MutableAtomFamily, RegularAtomFamily } from \"..\"\nimport { createRegularAtomFamily } from \"../families\"\nimport { type Store, withdraw } from \"../store\"\nimport { Tracker } from \"./tracker\"\nimport type { Transceiver } from \"./transceiver\"\n\nexport class FamilyTracker<\n\tCore extends Transceiver<any>,\n\tFamilyMemberKey extends Canonical,\n> {\n\tprivate trackers: Map<FamilyMemberKey, Tracker<Core>> = new Map()\n\tprivate readonly Update: Core extends Transceiver<infer Signal>\n\t\t? Signal\n\t\t: never\n\n\tpublic readonly latestUpdateAtoms: RegularAtomFamily<\n\t\ttypeof this.Update | null,\n\t\tFamilyMemberKey\n\t>\n\tpublic readonly mutableAtoms: MutableAtomFamily<Core, any, FamilyMemberKey>\n\n\tpublic constructor(\n\t\tmutableAtoms: MutableAtomFamily<Core, any, FamilyMemberKey>,\n\t\tstore: Store,\n\t) {\n\t\tconst updateAtoms = createRegularAtomFamily<\n\t\t\ttypeof this.Update | null,\n\t\t\tFamilyMemberKey\n\t\t>(\n\t\t\tstore,\n\t\t\t{\n\t\t\t\tkey: `*${mutableAtoms.key}`,\n\t\t\t\tdefault: null,\n\t\t\t},\n\t\t\t[`mutable`, `updates`],\n\t\t)\n\t\tthis.latestUpdateAtoms = withdraw(store, updateAtoms)\n\t\tthis.mutableAtoms = mutableAtoms\n\t\tthis.mutableAtoms.subject.subscribe(\n\t\t\t`store=${store.config.name}::tracker-atom-family`,\n\t\t\t(event) => {\n\t\t\t\tconst { type, token } = event\n\t\t\t\tif (token.family) {\n\t\t\t\t\tconst key = parseJson(token.family.subKey)\n\t\t\t\t\tswitch (type) {\n\t\t\t\t\t\tcase `state_creation`:\n\t\t\t\t\t\t\tthis.trackers.set(key, new Tracker<Core>(token, store))\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase `state_disposal`:\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tconst tracker = this.trackers.get(key)\n\t\t\t\t\t\t\t\tif (tracker) {\n\t\t\t\t\t\t\t\t\ttracker[Symbol.dispose]()\n\t\t\t\t\t\t\t\t\tthis.trackers.delete(key)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t)\n\t}\n}\n","import type {\n\tFamilyMetadata,\n\tMutableAtomFamilyOptions,\n\tMutableAtomFamilyToken,\n\tMutableAtomOptions,\n\tMutableAtomToken,\n\tStateCreation,\n\tStateDisposal,\n} from \"atom.io\"\nimport type { Canonical, Json } from \"atom.io/json\"\nimport { selectJsonFamily, stringifyJson } from \"atom.io/json\"\n\nimport { type MutableAtomFamily, prettyPrintTokenType } from \"..\"\nimport { newest } from \"../lineage\"\nimport { createMutableAtom } from \"../mutable\"\nimport type { Store } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { FamilyTracker } from \"./tracker-family\"\nimport type { Transceiver } from \"./transceiver\"\n\nexport function createMutableAtomFamily<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n\tK extends Canonical,\n>(\n\tstore: Store,\n\toptions: MutableAtomFamilyOptions<T, J, K>,\n\tinternalRoles?: string[],\n): MutableAtomFamilyToken<T, J, K> {\n\tconst familyToken = {\n\t\tkey: options.key,\n\t\ttype: `mutable_atom_family`,\n\t} as const satisfies MutableAtomFamilyToken<T, J, K>\n\n\tconst existing = store.families.get(options.key)\n\tif (existing) {\n\t\tstore.logger.error(\n\t\t\t`❗`,\n\t\t\t`mutable_atom_family`,\n\t\t\toptions.key,\n\t\t\t`Overwriting an existing ${prettyPrintTokenType(\n\t\t\t\texisting,\n\t\t\t)} \"${existing.key}\" in store \"${store.config.name}\". You can safely ignore this warning if it is due to hot module replacement.`,\n\t\t)\n\t}\n\n\tconst subject = new Subject<\n\t\tStateCreation<MutableAtomToken<T, J>> | StateDisposal<MutableAtomToken<T, J>>\n\t>()\n\n\tconst familyFunction = (key: K): MutableAtomToken<T, J> => {\n\t\tconst subKey = stringifyJson(key)\n\t\tconst family: FamilyMetadata = { key: options.key, subKey }\n\t\tconst fullKey = `${options.key}(${subKey})`\n\t\tconst target = newest(store)\n\n\t\tconst individualOptions: MutableAtomOptions<T, J> = {\n\t\t\tkey: fullKey,\n\t\t\tdefault: () => options.default(key),\n\t\t\ttoJson: options.toJson,\n\t\t\tfromJson: options.fromJson,\n\t\t\tmutable: true,\n\t\t}\n\t\tif (options.effects) {\n\t\t\tindividualOptions.effects = options.effects(key)\n\t\t}\n\n\t\tconst token = createMutableAtom(target, individualOptions, family)\n\n\t\tsubject.next({ type: `state_creation`, token })\n\t\treturn token\n\t}\n\n\tconst atomFamily = Object.assign(familyFunction, familyToken, {\n\t\tsubject,\n\t\tinstall: (s: Store) => createMutableAtomFamily(s, options),\n\t\ttoJson: options.toJson,\n\t\tfromJson: options.fromJson,\n\t\tinternalRoles,\n\t}) satisfies MutableAtomFamily<T, J, K>\n\n\tstore.families.set(options.key, atomFamily)\n\tselectJsonFamily(store, atomFamily, options)\n\tnew FamilyTracker(atomFamily, store)\n\treturn familyToken\n}\n","import type { MutableAtomFamilyToken } from \"atom.io\"\nimport type { Canonical, Json } from \"atom.io/json\"\n\nimport type { WritableSelectorFamily } from \"..\"\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\nimport type { Transceiver } from \"./transceiver\"\n\nexport const getJsonFamily = <\n\tCore extends Transceiver<Json.Serializable>,\n\tSerializableCore extends Json.Serializable,\n\tKey extends Canonical,\n>(\n\tmutableAtomFamily: MutableAtomFamilyToken<Core, SerializableCore, Key>,\n\tstore: Store,\n): WritableSelectorFamily<SerializableCore, Key> => {\n\tconst target = newest(store)\n\tconst key = `${mutableAtomFamily.key}:JSON`\n\tconst jsonFamily: WritableSelectorFamily<SerializableCore, Key> =\n\t\ttarget.families.get(key) as WritableSelectorFamily<SerializableCore, Key>\n\treturn jsonFamily\n}\n","import type {\n\tMutableAtomToken,\n\tWritableSelectorFamilyToken,\n\tWritableSelectorToken,\n} from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nimport { findInStore } from \"../families\"\nimport { newest } from \"../lineage\"\nimport { type Store, withdraw } from \"../store\"\nimport type { Transceiver } from \"./transceiver\"\n\nexport const getJsonToken = <\n\tCore extends Transceiver<any>,\n\tSerializableCore extends Json.Serializable,\n>(\n\tstore: Store,\n\tmutableAtomToken: MutableAtomToken<Core, SerializableCore>,\n): WritableSelectorToken<SerializableCore> => {\n\tif (mutableAtomToken.family) {\n\t\tconst target = newest(store)\n\t\tconst jsonFamilyKey = `${mutableAtomToken.family.key}:JSON`\n\t\tconst jsonFamilyToken: WritableSelectorFamilyToken<\n\t\t\tSerializableCore,\n\t\t\tstring\n\t\t> = {\n\t\t\tkey: jsonFamilyKey,\n\t\t\ttype: `selector_family`,\n\t\t}\n\t\tconst family = withdraw(target, jsonFamilyToken)\n\t\tconst subKey = JSON.parse(mutableAtomToken.family.subKey)\n\t\tconst jsonToken = findInStore(store, family, subKey)\n\t\treturn jsonToken\n\t}\n\tconst token: WritableSelectorToken<SerializableCore> = {\n\t\ttype: `selector`,\n\t\tkey: `${mutableAtomToken.key}:JSON`,\n\t}\n\treturn token\n}\n","import type { MutableAtomToken, RegularAtomToken } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { Signal, Transceiver } from \"./transceiver\"\n\nexport const getUpdateToken = <\n\tCore extends Transceiver<any>,\n\tSerializableCore extends Json.Serializable,\n>(\n\tmutableAtomToken: MutableAtomToken<Core, SerializableCore>,\n): RegularAtomToken<Signal<Core>> => {\n\tconst key = `*${mutableAtomToken.key}`\n\tconst updateToken: RegularAtomToken<Signal<Core>> = { type: `atom`, key }\n\tif (mutableAtomToken.family) {\n\t\tupdateToken.family = {\n\t\t\tkey: `*${mutableAtomToken.family.key}`,\n\t\t\tsubKey: mutableAtomToken.family.subKey,\n\t\t}\n\t}\n\treturn updateToken\n}\n","import type { Json } from \"atom.io/json\"\n\nexport interface Transceiver<S extends Json.Serializable> {\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}\n\nexport function isTransceiver(\n\tvalue: unknown,\n): value is Transceiver<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)\n}\n\nexport type TransceiverMode = `playback` | `record` | `transaction`\n\nexport type Signal<TVR extends Transceiver<any>> = TVR extends Transceiver<\n\tinfer S\n>\n\t? S\n\t: never\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\"`]\t\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","import type { MutableAtom, Transceiver } from \"..\"\nimport { Tracker } from \"../mutable\"\nimport type { Store } from \"../store\"\n\nexport function copyMutableIfNeeded<T extends Transceiver<any>>(\n\ttarget: Store,\n\tatom: MutableAtom<T, any>,\n\torigin: Store,\n): T {\n\tconst originValue = origin.valueMap.get(atom.key)\n\tconst targetValue = target.valueMap.get(atom.key)\n\n\tif (originValue !== targetValue) {\n\t\treturn targetValue\n\t}\n\n\tif (originValue === undefined) {\n\t\treturn atom.default()\n\t}\n\n\torigin.logger.info(`📃`, `atom`, atom.key, `copying`)\n\tconst jsonValue = atom.toJson(originValue)\n\tconst copiedValue = atom.fromJson(jsonValue)\n\ttarget.valueMap.set(atom.key, copiedValue)\n\tnew Tracker(atom, origin)\n\treturn copiedValue\n}\n","import type { StateUpdate } from \"atom.io\"\n\nimport type { ReadableState } from \".\"\nimport { isChildStore } from \".\"\nimport { Future } from \"./future\"\nimport { copyMutableIfNeeded } from \"./set-state/copy-mutable-if-needed\"\nimport type { Store } from \"./store\"\nimport type { Subject } from \"./subject\"\n\nexport function cacheValue<T>(\n\tstore: Store,\n\tkey: string,\n\tvalue: T,\n\tsubject: Subject<StateUpdate<unknown>>,\n): T\nexport function cacheValue<T extends Promise<any>>(\n\tstore: Store,\n\tkey: string,\n\tvalue: T,\n\tsubject: Subject<StateUpdate<unknown>>,\n): Future<T>\nexport function cacheValue<T>(\n\ttarget: Store,\n\tkey: string,\n\tvalue: T,\n\tsubject: Subject<StateUpdate<unknown>>,\n): Future<T> | T {\n\tconst currentValue = target.valueMap.get(key)\n\tif (currentValue instanceof Future) {\n\t\tconst future = currentValue\n\t\tfuture.use(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((resolved) => {\n\t\t\t\tcacheValue(target, key, resolved, subject)\n\t\t\t\tsubject.next({ newValue: resolved, oldValue: future })\n\t\t\t})\n\t\t\t.catch((thrown) => {\n\t\t\t\ttarget.logger.error(`💥`, `state`, key, `rejected:`, thrown)\n\t\t\t})\n\t\treturn future\n\t}\n\ttarget.valueMap.set(key, value)\n\treturn value\n}\n\nexport const readCachedValue = <T>(\n\ttoken: ReadableState<any>,\n\ttarget: Store,\n): T => {\n\tlet value = target.valueMap.get(token.key) as T\n\tif (token.type === `mutable_atom` && isChildStore(target)) {\n\t\tconst { parent } = target\n\t\tconst copiedValue = copyMutableIfNeeded(target, token, parent)\n\t\tvalue = copiedValue\n\t}\n\treturn value\n}\n\nexport const evictCachedValue = (key: string, target: Store): void => {\n\tconst currentValue = target.valueMap.get(key)\n\tif (currentValue instanceof Future) {\n\t\tconst future = currentValue\n\t\tconst selector =\n\t\t\ttarget.selectors.get(key) ?? target.readonlySelectors.get(key)\n\t\tif (selector) {\n\t\t\tfuture.use(selector.get())\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 { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\n\nexport const isAtomDefault = (store: Store, key: string): boolean => {\n\tconst core = newest(store)\n\treturn core.atomsThatAreDefault.has(key)\n}\n\nexport const markAtomAsDefault = (store: Store, key: string): void => {\n\tconst core = newest(store)\n\tcore.atomsThatAreDefault = new Set(core.atomsThatAreDefault).add(key)\n}\n\nexport const markAtomAsNotDefault = (store: Store, key: string): void => {\n\tconst core = newest(store)\n\tcore.atomsThatAreDefault = new Set(newest(store).atomsThatAreDefault)\n\tcore.atomsThatAreDefault.delete(key)\n}\n","import type {\n\tFamilyMetadata,\n\tRegularAtomOptions,\n\tRegularAtomToken,\n\tUpdateHandler,\n} from \"atom.io\"\n\nimport { type RegularAtom, setIntoStore } from \"..\"\nimport { cacheValue } from \"../caching\"\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\nimport { deposit } from \"../store\"\nimport { Subject } from \"../subject\"\nimport { subscribeToState } from \"../subscribe\"\nimport { markAtomAsDefault } from \"./is-default\"\n\nexport function createRegularAtom<T>(\n\tstore: Store,\n\toptions: RegularAtomOptions<T>,\n\tfamily: FamilyMetadata | undefined,\n): RegularAtomToken<T> {\n\tstore.logger.info(\n\t\t`🔨`,\n\t\t`atom`,\n\t\toptions.key,\n\t\t`creating in store \"${store.config.name}\"`,\n\t)\n\tconst target = newest(store)\n\tconst existing = target.atoms.get(options.key)\n\tif (existing && existing.type === `atom`) {\n\t\tstore.logger.error(\n\t\t\t`❌`,\n\t\t\t`atom`,\n\t\t\toptions.key,\n\t\t\t`Tried to create atom, but it already exists in the store.`,\n\t\t)\n\t\treturn deposit(existing)\n\t}\n\tconst subject = new Subject<{ newValue: T; oldValue: T }>()\n\tconst newAtom: RegularAtom<T> = {\n\t\t...options,\n\t\ttype: `atom`,\n\t\tinstall: (s: Store) => {\n\t\t\ts.logger.info(\n\t\t\t\t`🛠️`,\n\t\t\t\t`atom`,\n\t\t\t\toptions.key,\n\t\t\t\t`installing in store \"${s.config.name}\"`,\n\t\t\t)\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\tlet initialValue = options.default\n\tif (options.default instanceof Function) {\n\t\tinitialValue = options.default()\n\t}\n\ttarget.atoms.set(newAtom.key, newAtom)\n\tmarkAtomAsDefault(store, options.key)\n\tcacheValue(target, options.key, initialValue, subject)\n\tconst token = deposit(newAtom)\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\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\treturn token\n}\n","import type {\n\tAtomToken,\n\tMutableAtomOptions,\n\tMutableAtomToken,\n\tRegularAtomOptions,\n\tRegularAtomToken,\n} from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { Transceiver } from \"../mutable\"\nimport { createMutableAtom } from \"../mutable\"\nimport type { Store } from \"../store\"\nimport { createRegularAtom } from \"./create-regular-atom\"\n\nexport function createStandaloneAtom<T>(\n\tstore: Store,\n\toptions: RegularAtomOptions<T>,\n): RegularAtomToken<T>\n\nexport function createStandaloneAtom<\n\tT extends Transceiver<any>,\n\tJ extends Json.Serializable,\n>(store: Store, options: MutableAtomOptions<T, J>): MutableAtomToken<T, J>\n\nexport function createStandaloneAtom<T>(\n\tstore: Store,\n\toptions: MutableAtomOptions<any, any> | RegularAtomOptions<T>,\n): AtomToken<T> {\n\tconst isMutable = `mutable` in options\n\n\tif (isMutable) {\n\t\tconst state = createMutableAtom(store, options, undefined)\n\t\tstore.on.atomCreation.next(state)\n\t\treturn state\n\t}\n\tconst state = createRegularAtom(store, options, undefined)\n\tstore.on.atomCreation.next(state)\n\treturn state\n}\n","import type { AtomDisposal, AtomToken } from \"atom.io\"\n\nimport type { Store } from \"..\"\nimport { getUpdateToken, isChildStore, newest, withdraw } from \"..\"\n\nexport function disposeAtom(store: Store, atomToken: AtomToken<unknown>): void {\n\tconst target = newest(store)\n\tconst { key, family } = atomToken\n\tconst atom = withdraw(target, atomToken)\n\tif (!family) {\n\t\tstore.logger.error(`❌`, `atom`, key, `Standalone atoms cannot be disposed.`)\n\t} else {\n\t\tatom.cleanup?.()\n\t\tconst lastValue = store.valueMap.get(atom.key)\n\t\tconst atomFamily = withdraw(store, { key: family.key, type: `atom_family` })\n\n\t\tconst disposal: AtomDisposal<AtomToken<unknown>> = {\n\t\t\ttype: `state_disposal`,\n\t\t\tsubType: `atom`,\n\t\t\ttoken: atomToken,\n\t\t\tvalue: lastValue,\n\t\t}\n\n\t\tatomFamily.subject.next(disposal)\n\n\t\tconst isChild = isChildStore(target)\n\n\t\ttarget.atoms.delete(key)\n\t\ttarget.valueMap.delete(key)\n\t\ttarget.selectorAtoms.delete(key)\n\t\ttarget.atomsThatAreDefault.delete(key)\n\t\tstore.timelineTopics.delete(key)\n\n\t\tif (atomToken.type === `mutable_atom`) {\n\t\t\tconst updateToken = getUpdateToken(atomToken)\n\t\t\tdisposeAtom(store, updateToken)\n\t\t\tstore.trackers.delete(key)\n\t\t}\n\t\tstore.logger.info(`🔥`, `atom`, key, `deleted`)\n\t\tif (isChild && target.transactionMeta.phase === `building`) {\n\t\t\tconst mostRecentUpdate = target.transactionMeta.update.updates.at(-1)\n\t\t\tconst wasMoleculeDisposal = mostRecentUpdate?.type === `molecule_disposal`\n\t\t\tconst updateAlreadyCaptured =\n\t\t\t\twasMoleculeDisposal &&\n\t\t\t\tmostRecentUpdate.values.some(([k]) => k === atom.family?.key)\n\n\t\t\tif (!updateAlreadyCaptured) {\n\t\t\t\ttarget.transactionMeta.update.updates.push(disposal)\n\t\t\t}\n\t\t} else {\n\t\t\tstore.on.atomDisposal.next(atomToken)\n\t\t}\n\t}\n}\n","import type { Lineage, Transceiver, TransceiverMode } from \"atom.io/internal\"\nimport { Subject } from \"atom.io/internal\"\nimport type { Json, primitive } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\n\nexport type SetUpdateType = `add` | `clear` | `del` | `tx`\nexport type SetUpdate = `${SetUpdateType}:${string}`\nexport type NumberedSetUpdate = `${number}=${SetUpdate}`\n\nexport interface SetRTXJson<P extends primitive> extends Json.Object {\n\tmembers: P[]\n\tcache: (NumberedSetUpdate | null)[]\n\tcacheLimit: number\n\tcacheIdx: number\n\tcacheUpdateNumber: number\n}\nexport class SetRTX<P extends primitive>\n\textends Set<P>\n\timplements Transceiver<NumberedSetUpdate>, Lineage\n{\n\tpublic mode: TransceiverMode = `record`\n\tpublic readonly subject = new Subject<SetUpdate>()\n\tpublic cacheLimit = 0\n\tpublic cache: (NumberedSetUpdate | null)[] = []\n\tpublic cacheIdx = -1\n\tpublic cacheUpdateNumber = -1\n\n\tpublic constructor(values?: Iterable<P>, cacheLimit = 0) {\n\t\tsuper(values)\n\t\tif (values instanceof SetRTX) {\n\t\t\tthis.parent = values\n\t\t\tthis.cacheUpdateNumber = values.cacheUpdateNumber\n\t\t}\n\t\tif (cacheLimit) {\n\t\t\tthis.cacheLimit = cacheLimit\n\t\t\tthis.cache = new Array(cacheLimit)\n\t\t\tthis.subscribe(`auto cache`, (update) => {\n\t\t\t\tthis.cacheIdx++\n\t\t\t\tthis.cacheIdx %= this.cacheLimit\n\t\t\t\tthis.cache[this.cacheIdx] = update\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic toJSON(): SetRTXJson<P> {\n\t\treturn {\n\t\t\tmembers: [...this],\n\t\t\tcache: this.cache,\n\t\t\tcacheLimit: this.cacheLimit,\n\t\t\tcacheIdx: this.cacheIdx,\n\t\t\tcacheUpdateNumber: this.cacheUpdateNumber,\n\t\t}\n\t}\n\n\tpublic static fromJSON<P extends primitive>(json: SetRTXJson<P>): SetRTX<P> {\n\t\tconst set = new SetRTX<P>(json.members, json.cacheLimit)\n\t\tset.cache = json.cache\n\t\tset.cacheIdx = json.cacheIdx\n\t\tset.cacheUpdateNumber = json.cacheUpdateNumber\n\t\treturn set\n\t}\n\n\tpublic add(value: P): this {\n\t\tconst result = super.add(value)\n\t\tif (this.mode === `record`) {\n\t\t\tthis.cacheUpdateNumber++\n\t\t\tthis.emit(`add:${stringifyJson<P>(value)}`)\n\t\t}\n\t\treturn result\n\t}\n\n\tpublic clear(): void {\n\t\tconst capturedContents = this.mode === `record` ? [...this] : null\n\t\tsuper.clear()\n\t\tif (capturedContents) {\n\t\t\tthis.cacheUpdateNumber++\n\t\t\tthis.emit(`clear:${JSON.stringify(capturedContents)}`)\n\t\t}\n\t}\n\n\tpublic delete(value: P): boolean {\n\t\tconst result = super.delete(value)\n\t\tif (this.mode === `record`) {\n\t\t\tthis.cacheUpdateNumber++\n\t\t\tthis.emit(`del:${stringifyJson<P>(value)}`)\n\t\t}\n\t\treturn result\n\t}\n\n\tpublic readonly parent: SetRTX<P> | null\n\tpublic child: SetRTX<P> | null = null\n\tpublic transactionUpdates: SetUpdate[] | null = null\n\tpublic transaction(run: (child: SetRTX<P>) => boolean): void {\n\t\tthis.mode = `transaction`\n\t\tthis.transactionUpdates = []\n\t\tthis.child = new SetRTX(this)\n\t\tconst unsubscribe = this.child._subscribe(`transaction`, (update) => {\n\t\t\tthis.transactionUpdates?.push(update)\n\t\t})\n\t\ttry {\n\t\t\tconst shouldCommit = run(this.child)\n\t\t\tif (shouldCommit) {\n\t\t\t\tfor (const update of this.transactionUpdates) {\n\t\t\t\t\tthis.doStep(update)\n\t\t\t\t}\n\t\t\t\tthis.cacheUpdateNumber++\n\t\t\t\tthis.emit(`tx:${this.transactionUpdates.join(`;`)}`)\n\t\t\t}\n\t\t} catch (thrown) {\n\t\t\t/* eslint-disable-next-line no-console */\n\t\t\tconsole.warn(\n\t\t\t\t`Did not apply transaction to SetRTX; this error was thrown:`,\n\t\t\t\tthrown,\n\t\t\t)\n\t\t\tthrow thrown\n\t\t} finally {\n\t\t\tunsubscribe()\n\t\t\tthis.child = null\n\t\t\tthis.transactionUpdates = null\n\t\t\tthis.mode = `record`\n\t\t}\n\t}\n\n\tprotected _subscribe(\n\t\tkey: string,\n\t\tfn: (update: SetUpdate) => void,\n\t): () => void {\n\t\treturn this.subject.subscribe(key, fn)\n\t}\n\tpublic subscribe(\n\t\tkey: string,\n\t\tfn: (update: NumberedSetUpdate) => void,\n\t): () => void {\n\t\treturn this.subject.subscribe(key, (update) => {\n\t\t\tfn(`${this.cacheUpdateNumber}=${update}`)\n\t\t})\n\t}\n\n\tpublic emit(update: SetUpdate): void {\n\t\tthis.subject.next(update)\n\t}\n\n\tprivate doStep(update: SetUpdate): void {\n\t\tconst typeValueBreak = update.indexOf(`:`)\n\t\tconst type = update.substring(0, typeValueBreak) as SetUpdateType\n\t\tconst value = update.substring(typeValueBreak + 1)\n\t\tswitch (type) {\n\t\t\tcase `add`:\n\t\t\t\tthis.add(JSON.parse(value))\n\t\t\t\tbreak\n\t\t\tcase `clear`:\n\t\t\t\tthis.clear()\n\t\t\t\tbreak\n\t\t\tcase `del`:\n\t\t\t\tthis.delete(JSON.parse(value))\n\t\t\t\tbreak\n\t\t\tcase `tx`:\n\t\t\t\tfor (const subUpdate of value.split(`;`)) {\n\t\t\t\t\tthis.doStep(subUpdate as SetUpdate)\n\t\t\t\t}\n\t\t}\n\t}\n\n\tpublic getUpdateNumber(update: NumberedSetUpdate): number {\n\t\tconst breakpoint = update.indexOf(`=`)\n\t\treturn Number(update.substring(0, breakpoint))\n\t}\n\n\tpublic do(update: NumberedSetUpdate): number | `OUT_OF_RANGE` | null {\n\t\tconst breakpoint = update.indexOf(`=`)\n\t\tconst updateNumber = Number(update.substring(0, breakpoint))\n\t\tconst eventOffset = updateNumber - this.cacheUpdateNumber\n\t\tconst isFuture = eventOffset > 0\n\t\tif (isFuture) {\n\t\t\tif (eventOffset === 1) {\n\t\t\t\tthis.mode = `playback`\n\t\t\t\tconst innerUpdate = update.substring(breakpoint + 1) as SetUpdate\n\t\t\t\tthis.doStep(innerUpdate)\n\t\t\t\tthis.mode = `record`\n\t\t\t\tthis.cacheUpdateNumber = updateNumber\n\t\t\t\treturn null\n\t\t\t}\n\t\t\treturn this.cacheUpdateNumber + 1\n\t\t}\n\t\tif (Math.abs(eventOffset) < this.cacheLimit) {\n\t\t\tconst eventIdx = this.cacheIdx + eventOffset\n\t\t\tconst cachedUpdate = this.cache[eventIdx]\n\t\t\tif (cachedUpdate === update) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tthis.mode = `playback`\n\t\t\tlet done = false\n\t\t\twhile (!done) {\n\t\t\t\tthis.cacheIdx %= this.cacheLimit\n\t\t\t\tconst u = this.cache[this.cacheIdx]\n\t\t\t\tthis.cacheIdx--\n\t\t\t\tif (!u) {\n\t\t\t\t\treturn `OUT_OF_RANGE`\n\t\t\t\t}\n\t\t\t\tthis.undo(u)\n\t\t\t\tdone = this.cacheIdx === eventIdx - 1\n\t\t\t}\n\t\t\tconst innerUpdate = update.substring(breakpoint + 1) as SetUpdate\n\t\t\tthis.doStep(innerUpdate)\n\t\t\tthis.mode = `record`\n\t\t\tthis.cacheUpdateNumber = updateNumber\n\t\t\treturn null\n\t\t}\n\t\treturn `OUT_OF_RANGE`\n\t}\n\n\tpublic undoStep(update: SetUpdate): void {\n\t\tconst breakpoint = update.indexOf(`:`)\n\t\tconst type = update.substring(0, breakpoint) as SetUpdateType\n\t\tconst value = update.substring(breakpoint + 1)\n\t\tswitch (type) {\n\t\t\tcase `add`:\n\t\t\t\tthis.delete(JSON.parse(value))\n\t\t\t\tbreak\n\t\t\tcase `del`:\n\t\t\t\tthis.add(JSON.parse(value))\n\t\t\t\tbreak\n\t\t\tcase `clear`: {\n\t\t\t\tconst values = JSON.parse(value) as P[]\n\t\t\t\tfor (const v of values) this.add(v)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase `tx`: {\n\t\t\t\tconst updates = value.split(`;`) as SetUpdate[]\n\t\t\t\tfor (let i = updates.length - 1; i >= 0; i--) {\n\t\t\t\t\tthis.undoStep(updates[i])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic undo(update: NumberedSetUpdate): number | null {\n\t\tconst breakpoint = update.indexOf(`=`)\n\t\tconst updateNumber = Number(update.substring(0, breakpoint))\n\t\tif (updateNumber === this.cacheUpdateNumber) {\n\t\t\tthis.mode = `playback`\n\t\t\tconst innerUpdate = update.substring(breakpoint + 1) as SetUpdate\n\t\t\tthis.undoStep(innerUpdate)\n\t\t\tthis.mode = `record`\n\t\t\tthis.cacheUpdateNumber--\n\t\t\treturn null\n\t\t}\n\t\treturn this.cacheUpdateNumber\n\t}\n}\n","import type {\n\tCompoundTypedKey,\n\tfindState,\n\tgetState,\n\tJoinOptions,\n\tMutableAtomFamilyToken,\n\tRead,\n\tReadonlySelectorFamilyToken,\n\tRegularAtomFamilyToken,\n\tsetState,\n\tSetterToolkit,\n\tWrite,\n} from \"atom.io\"\nimport { Anarchy } from \"atom.io\"\nimport type { Canonical, Json, stringified } from \"atom.io/json\"\nimport { stringifyJson } from \"atom.io/json\"\nimport type { SetRTXJson } from \"atom.io/transceivers/set-rtx\"\nimport { SetRTX } from \"atom.io/transceivers/set-rtx\"\n\nimport { capitalize } from \"../capitalize\"\nimport {\n\tcreateReadonlySelectorFamily,\n\tcreateRegularAtomFamily,\n\tfindInStore,\n} from \"../families\"\nimport { getFromStore } from \"../get-state\"\nimport type {\n\tBaseExternalStoreConfiguration,\n\tExternalStoreConfiguration,\n} from \"../junction\"\nimport { Junction } from \"../junction\"\nimport type { Molecule } from \"../molecule\"\nimport { createMutableAtomFamily, getJsonFamily, getJsonToken } from \"../mutable\"\nimport { setIntoStore } from \"../set-state\"\nimport type { Store } from \"../store\"\nimport { IMPLICIT } from \"../store\"\n\nexport type JoinStateFamilies<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object | null,\n> = Cardinality extends `1:1`\n\t? (Content extends Json.Object\n\t\t\t? {\n\t\t\t\t\treadonly [A in ASide as `${A}EntryOf${Capitalize<BSide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\t\t[AType, Content] | null,\n\t\t\t\t\t\tBType\n\t\t\t\t\t>\n\t\t\t\t} & {\n\t\t\t\t\treadonly [B in BSide as `${B}EntryOf${Capitalize<ASide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\t\t[BType, Content] | null,\n\t\t\t\t\t\tAType\n\t\t\t\t\t>\n\t\t\t\t}\n\t\t\t: {}) & {\n\t\t\treadonly [A in ASide as `${A}KeyOf${Capitalize<BSide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\tAType | null,\n\t\t\t\tBType\n\t\t\t>\n\t\t} & {\n\t\t\treadonly [B in BSide as `${B}KeyOf${Capitalize<ASide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\tBType | null,\n\t\t\t\tAType\n\t\t\t>\n\t\t}\n\t: Cardinality extends `1:n`\n\t\t? (Content extends Json.Object\n\t\t\t\t? {\n\t\t\t\t\t\treadonly [A in ASide as `${A}EntryOf${Capitalize<BSide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\t\t\t[AType, Content] | null,\n\t\t\t\t\t\t\tBType\n\t\t\t\t\t\t>\n\t\t\t\t\t} & {\n\t\t\t\t\t\treadonly [B in BSide as `${B}EntriesOf${Capitalize<ASide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\t\t\t[BType, Content][],\n\t\t\t\t\t\t\tAType\n\t\t\t\t\t\t>\n\t\t\t\t\t}\n\t\t\t\t: {}) & {\n\t\t\t\treadonly [A in ASide as `${A}KeyOf${Capitalize<BSide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\tAType | null,\n\t\t\t\t\tBType\n\t\t\t\t>\n\t\t\t} & {\n\t\t\t\treadonly [B in BSide as `${B}KeysOf${Capitalize<ASide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\tBType[],\n\t\t\t\t\tAType\n\t\t\t\t>\n\t\t\t}\n\t\t: Cardinality extends `n:n`\n\t\t\t? (Content extends Json.Object\n\t\t\t\t\t? {\n\t\t\t\t\t\t\treadonly [A in ASide as `${A}EntriesOf${Capitalize<BSide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\t\t\t\t[AType, Content][],\n\t\t\t\t\t\t\t\tBType\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t} & {\n\t\t\t\t\t\t\treadonly [B in BSide as `${B}EntriesOf${Capitalize<ASide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\t\t\t\t[BType, Content][],\n\t\t\t\t\t\t\t\tAType\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\treadonly [A in ASide as `${A}KeysOf${Capitalize<BSide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\t\tAType[],\n\t\t\t\t\t\tBType\n\t\t\t\t\t>\n\t\t\t\t} & {\n\t\t\t\t\treadonly [B in BSide as `${B}KeysOf${Capitalize<ASide>}`]: ReadonlySelectorFamilyToken<\n\t\t\t\t\t\tBType[],\n\t\t\t\t\t\tAType\n\t\t\t\t\t>\n\t\t\t\t}\n\t\t\t: never\n\nexport class Join<\n\tconst ASide extends string,\n\tconst AType extends string,\n\tconst BSide extends string,\n\tconst BType extends string,\n\tconst Cardinality extends `1:1` | `1:n` | `n:n`,\n\tconst Content extends Json.Object | null = null,\n\tconst ContentKey extends CompoundTypedKey<\n\t\t`content`,\n\t\tASide,\n\t\tBSide\n\t> = CompoundTypedKey<`content`, ASide, BSide>,\n> {\n\tprivate toolkit: SetterToolkit\n\tpublic options: JoinOptions<ASide, AType, BSide, BType, Cardinality, Content>\n\tpublic defaultContent: Content | undefined\n\tpublic molecules: Map<string, Molecule<any>> = new Map()\n\tpublic relations: Junction<ASide, AType, BSide, BType, Content>\n\tpublic states: JoinStateFamilies<\n\t\tASide,\n\t\tAType,\n\t\tBSide,\n\t\tBType,\n\t\tCardinality,\n\t\tContent\n\t>\n\tpublic core: {\n\t\trelatedKeysAtoms: MutableAtomFamilyToken<\n\t\t\tSetRTX<string>,\n\t\t\tSetRTXJson<string>,\n\t\t\tstring\n\t\t>\n\t}\n\tpublic transact(\n\t\ttoolkit: SetterToolkit,\n\t\trun: (join: Join<ASide, AType, BSide, BType, Cardinality, Content>) => void,\n\t): void {\n\t\tconst originalToolkit = this.toolkit\n\t\tthis.toolkit = toolkit\n\t\trun(this)\n\t\tthis.toolkit = originalToolkit\n\t}\n\n\tpublic store: Store\n\tpublic realm: Anarchy\n\n\tpublic [Symbol.dispose](): void {}\n\n\tpublic constructor(\n\t\toptions: JoinOptions<ASide, AType, BSide, BType, Cardinality, Content>,\n\t\tdefaultContent: Content | undefined,\n\t\tstore: Store = IMPLICIT.STORE,\n\t) {\n\t\ttype AnyKey = AType & BType\n\n\t\tthis.store = store\n\t\tthis.realm = new Anarchy(store)\n\t\tthis.options = options\n\t\tthis.defaultContent = defaultContent\n\n\t\tthis.store.miscResources.set(`join:${options.key}`, this)\n\n\t\tthis.realm.allocate(`root`, options.key)\n\n\t\tthis.toolkit = {\n\t\t\tget: ((...ps: Parameters<typeof getState>) =>\n\t\t\t\tgetFromStore(store, ...ps)) as typeof getState,\n\t\t\tset: ((...ps: Parameters<typeof setState>) => {\n\t\t\t\tsetIntoStore(store, ...ps)\n\t\t\t}) as typeof setState,\n\t\t\tfind: ((...ps: Parameters<typeof findState>) =>\n\t\t\t\tfindInStore(store, ...ps)) as typeof findState,\n\t\t\tjson: (token) => getJsonToken(store, token),\n\t\t}\n\n\t\tconst aSide: ASide = options.between[0]\n\t\tconst bSide: BSide = options.between[1]\n\t\tconst relatedKeysAtoms = createMutableAtomFamily<\n\t\t\tSetRTX<string>,\n\t\t\tSetRTXJson<string>,\n\t\t\tstring\n\t\t>(\n\t\t\tstore,\n\t\t\t{\n\t\t\t\tkey: `${options.key}/relatedKeys`,\n\t\t\t\tdefault: () => new SetRTX(),\n\t\t\t\tmutable: true,\n\t\t\t\tfromJson: (json) => SetRTX.fromJSON(json),\n\t\t\t\ttoJson: (set) => set.toJSON(),\n\t\t\t},\n\t\t\t[`join`, `relations`],\n\t\t)\n\t\tthis.core = { relatedKeysAtoms }\n\t\tconst getRelatedKeys: Read<\n\t\t\t(key: string) => SetRTX<AType> | SetRTX<BType>\n\t\t> = ({ get }, key) => get(relatedKeysAtoms, key) as any\n\t\tconst addRelation: Write<(a: string, b: string) => void> = (\n\t\t\t{ set },\n\t\t\ta,\n\t\t\tb,\n\t\t) => {\n\t\t\tif (!this.store.molecules.has(stringifyJson(a))) {\n\t\t\t\tthis.realm.allocate(options.key, a)\n\t\t\t}\n\t\t\tset(relatedKeysAtoms, a, (aKeys) => aKeys.add(b))\n\t\t\tset(relatedKeysAtoms, b, (bKeys) => bKeys.add(a))\n\t\t}\n\t\tconst deleteRelation: Write<(a: string, b: string) => void> = (\n\t\t\t{ set },\n\t\t\ta,\n\t\t\tb,\n\t\t) => {\n\t\t\tset(relatedKeysAtoms, a, (aKeys) => {\n\t\t\t\taKeys.delete(b)\n\t\t\t\treturn aKeys\n\t\t\t})\n\t\t\tset(relatedKeysAtoms, b, (bKeys) => {\n\t\t\t\tbKeys.delete(a)\n\t\t\t\treturn bKeys\n\t\t\t})\n\t\t}\n\t\tconst replaceRelationsSafely: Write<\n\t\t\t(a: string, newRelationsOfA: string[]) => void\n\t\t> = (toolkit, a, newRelationsOfA) => {\n\t\t\tconst { find, get, set } = toolkit\n\t\t\tconst relationsOfAState = find(relatedKeysAtoms, a)\n\t\t\tconst currentRelationsOfA = get(relationsOfAState)\n\t\t\tfor (const currentRelationB of currentRelationsOfA) {\n\t\t\t\tconst remainsRelated = newRelationsOfA.includes(currentRelationB)\n\t\t\t\tif (remainsRelated) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tset(relatedKeysAtoms, currentRelationB, (relationsOfB) => {\n\t\t\t\t\trelationsOfB.delete(a)\n\t\t\t\t\treturn relationsOfB\n\t\t\t\t})\n\t\t\t}\n\t\t\tset(relationsOfAState, (relationsOfA) => {\n\t\t\t\trelationsOfA.transaction((nextRelationsOfA) => {\n\t\t\t\t\tnextRelationsOfA.clear()\n\t\t\t\t\tfor (const newRelationB of newRelationsOfA) {\n\t\t\t\t\t\tconst relationsOfB = getRelatedKeys(toolkit, newRelationB)\n\t\t\t\t\t\tconst newRelationBIsAlreadyRelated = relationsOfB.has(a as AnyKey)\n\t\t\t\t\t\tif (this.relations.cardinality === `1:n`) {\n\t\t\t\t\t\t\tconst previousOwnersToDispose: string[] = []\n\t\t\t\t\t\t\tfor (const previousOwner of relationsOfB) {\n\t\t\t\t\t\t\t\tif (previousOwner === a) {\n\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst previousOwnerRelations = getRelatedKeys(\n\t\t\t\t\t\t\t\t\ttoolkit,\n\t\t\t\t\t\t\t\t\tpreviousOwner,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tpreviousOwnerRelations.delete(newRelationB as AnyKey)\n\t\t\t\t\t\t\t\tif (previousOwnerRelations.size === 0) {\n\t\t\t\t\t\t\t\t\tpreviousOwnersToDispose.push(previousOwner)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!newRelationBIsAlreadyRelated && relationsOfB.size > 0) {\n\t\t\t\t\t\t\t\trelationsOfB.clear()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfor (const previousOwner of previousOwnersToDispose) {\n\t\t\t\t\t\t\t\tconst sorted = [newRelationB, previousOwner].sort()\n\t\t\t\t\t\t\t\tconst compositeKey = `\"${sorted[0]}:${sorted[1]}\"`\n\t\t\t\t\t\t\t\tthis.molecules.delete(compositeKey)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!newRelationBIsAlreadyRelated) {\n\t\t\t\t\t\t\trelationsOfB.add(a as AnyKey)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tnextRelationsOfA.add(newRelationB)\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\treturn relationsOfA\n\t\t\t})\n\t\t}\n\t\tconst replaceRelationsUnsafely: Write<\n\t\t\t(a: string, newRelationsOfA: string[]) => void\n\t\t> = (toolkit, a, newRelationsOfA) => {\n\t\t\tconst { set } = toolkit\n\t\t\tset(relatedKeysAtoms, a, (relationsOfA) => {\n\t\t\t\trelationsOfA.transaction((nextRelationsOfA) => {\n\t\t\t\t\tfor (const newRelationB of newRelationsOfA) {\n\t\t\t\t\t\tnextRelationsOfA.add(newRelationB)\n\t\t\t\t\t}\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\treturn relationsOfA\n\t\t\t})\n\t\t\tfor (const newRelationB of newRelationsOfA) {\n\t\t\t\tset(relatedKeysAtoms, newRelationB, (newRelationsB) => {\n\t\t\t\t\tnewRelationsB.add(a)\n\t\t\t\t\treturn newRelationsB\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn true\n\t\t}\n\t\tconst has: Read<(a: string, b?: string) => boolean> = (toolkit, a, b) => {\n\t\t\tconst aKeys = getRelatedKeys(toolkit, a)\n\t\t\treturn b ? aKeys.has(b as AnyKey) : aKeys.size > 0\n\t\t}\n\t\tconst baseExternalStoreConfiguration: BaseExternalStoreConfiguration = {\n\t\t\tgetRelatedKeys: (key) => getRelatedKeys(this.toolkit, key),\n\t\t\taddRelation: (a, b) => {\n\t\t\t\tthis.store.moleculeJoins.set(\n\t\t\t\t\ta as stringified<Canonical> /* 💥 RECONCILE */,\n\t\t\t\t\toptions.key,\n\t\t\t\t)\n\t\t\t\tthis.store.moleculeJoins.set(\n\t\t\t\t\tb as stringified<Canonical> /* 💥 RECONCILE */,\n\t\t\t\t\toptions.key,\n\t\t\t\t)\n\t\t\t\taddRelation(this.toolkit, a, b)\n\t\t\t},\n\t\t\tdeleteRelation: (a, b) => {\n\t\t\t\tdeleteRelation(this.toolkit, a, b)\n\t\t\t},\n\t\t\treplaceRelationsSafely: (a, bs) => {\n\t\t\t\treplaceRelationsSafely(this.toolkit, a, bs)\n\t\t\t},\n\t\t\treplaceRelationsUnsafely: (a, bs) => {\n\t\t\t\treplaceRelationsUnsafely(this.toolkit, a, bs)\n\t\t\t},\n\t\t\thas: (a, b) => has(this.toolkit, a, b),\n\t\t}\n\t\tlet externalStore: ExternalStoreConfiguration<Content>\n\t\tlet contentAtoms: RegularAtomFamilyToken<Content, string>\n\n\t\tif (defaultContent) {\n\t\t\tcontentAtoms = createRegularAtomFamily<Content, ContentKey>(\n\t\t\t\tstore,\n\t\t\t\t{\n\t\t\t\t\tkey: `${options.key}/content`,\n\t\t\t\t\tdefault: defaultContent,\n\t\t\t\t},\n\t\t\t\t[`join`, `content`],\n\t\t\t)\n\n\t\t\tconst getContent: Read<(key: string) => Content | null> = ({ get }, key) =>\n\t\t\t\tget(contentAtoms, key)\n\t\t\tconst setContent: Write<(key: string, content: Content) => void> = (\n\t\t\t\t{ set },\n\t\t\t\tkey,\n\t\t\t\tcontent,\n\t\t\t) => {\n\t\t\t\tset(contentAtoms, key, content)\n\t\t\t}\n\n\t\t\tconst externalStoreWithContentConfiguration = {\n\t\t\t\tgetContent: (contentKey: ContentKey) => {\n\t\t\t\t\tconst content = getContent(this.toolkit, contentKey)\n\t\t\t\t\treturn content\n\t\t\t\t},\n\t\t\t\tsetContent: (contentKey: ContentKey, content: Content) => {\n\t\t\t\t\tsetContent(this.toolkit, contentKey, content)\n\t\t\t\t},\n\t\t\t\tdeleteContent: (contentKey: ContentKey) => {\n\t\t\t\t\tthis.realm.deallocate(contentKey)\n\t\t\t\t},\n\t\t\t}\n\t\t\texternalStore = Object.assign(\n\t\t\t\tbaseExternalStoreConfiguration,\n\t\t\t\texternalStoreWithContentConfiguration,\n\t\t\t) as ExternalStoreConfiguration<Content>\n\t\t} else {\n\t\t\texternalStore =\n\t\t\t\tbaseExternalStoreConfiguration as ExternalStoreConfiguration<Content>\n\t\t}\n\t\tconst relations = new Junction<ASide, AType, BSide, BType, Content>(\n\t\t\toptions as any,\n\t\t\t{\n\t\t\t\texternalStore,\n\t\t\t\tisAType: options.isAType,\n\t\t\t\tisBType: options.isBType,\n\t\t\t\tmakeContentKey: (...args) => {\n\t\t\t\t\tconst [a, b] = args\n\t\t\t\t\tconst sorted = args.sort()\n\t\t\t\t\tconst compositeKey = `${sorted[0]}:${sorted[1]}`\n\t\t\t\t\tconst aMolecule = store.molecules.get(stringifyJson(a))\n\t\t\t\t\tconst bMolecule = store.molecules.get(stringifyJson(b))\n\t\t\t\t\tif (!aMolecule) {\n\t\t\t\t\t\tthis.realm.allocate(options.key, a)\n\t\t\t\t\t}\n\t\t\t\t\tif (!bMolecule) {\n\t\t\t\t\t\tthis.realm.allocate(options.key, b)\n\t\t\t\t\t}\n\t\t\t\t\tthis.realm.allocate(a, compositeKey, `all`)\n\t\t\t\t\tthis.realm.claim(b, compositeKey)\n\t\t\t\t\tthis.store.moleculeJoins.set(compositeKey, options.key)\n\t\t\t\t\treturn compositeKey\n\t\t\t\t},\n\t\t\t},\n\t\t)\n\n\t\tconst createSingleKeySelectorFamily = () =>\n\t\t\tcreateReadonlySelectorFamily<string | null, string>(\n\t\t\t\tstore,\n\t\t\t\t{\n\t\t\t\t\tkey: `${options.key}/singleRelatedKey`,\n\t\t\t\t\tget:\n\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t({ get }) => {\n\t\t\t\t\t\t\tconst relatedKeys = get(relatedKeysAtoms, key)\n\t\t\t\t\t\t\tfor (const relatedKey of relatedKeys) {\n\t\t\t\t\t\t\t\treturn relatedKey\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t[`join`, `keys`],\n\t\t\t)\n\t\tconst getMultipleKeySelectorFamily = () => {\n\t\t\treturn createReadonlySelectorFamily<string[], string>(\n\t\t\t\tstore,\n\t\t\t\t{\n\t\t\t\t\tkey: `${options.key}/multipleRelatedKeys`,\n\t\t\t\t\tget:\n\t\t\t\t\t\t(key) =>\n\t\t\t\t\t\t({ get }) => {\n\t\t\t\t\t\t\tconst jsonFamily = getJsonFamily(relatedKeysAtoms, store)\n\t\t\t\t\t\t\tconst json = get(jsonFamily, key)\n\t\t\t\t\t\t\treturn json.members\n\t\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t[`join`, `keys`],\n\t\t\t)\n\t\t}\n\t\tconst createSingleEntrySelectorFamily = () =>\n\t\t\tcreateReadonlySelectorFamily<[string, Content] | null, string>(\n\t\t\t\tstore,\n\t\t\t\t{\n\t\t\t\t\tkey: `${options.key}/singleRelatedEntry`,\n\t\t\t\t\tget:\n\t\t\t\t\t\t(x) =>\n\t\t\t\t\t\t({ get }) => {\n\t\t\t\t\t\t\tconst relatedKeys = get(relatedKeysAtoms, x)\n\t\t\t\t\t\t\tfor (const y of relatedKeys) {\n\t\t\t\t\t\t\t\tlet a = relations.isAType?.(x) ? x : undefined\n\t\t\t\t\t\t\t\tlet b = a === undefined ? (x as BType) : undefined\n\t\t\t\t\t\t\t\ta ??= y as AType\n\t\t\t\t\t\t\t\tb ??= y as BType\n\t\t\t\t\t\t\t\tconst contentKey = relations.makeContentKey(a, b)\n\t\t\t\t\t\t\t\tconst content = get(contentAtoms, contentKey)\n\t\t\t\t\t\t\t\treturn [y, content]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t[`join`, `entries`],\n\t\t\t)\n\t\tconst getMultipleEntrySelectorFamily = () =>\n\t\t\tcreateReadonlySelectorFamily<[string, Content][], string>(\n\t\t\t\tstore,\n\t\t\t\t{\n\t\t\t\t\tkey: `${options.key}/multipleRelatedEntries`,\n\t\t\t\t\tget:\n\t\t\t\t\t\t(x) =>\n\t\t\t\t\t\t({ get }) => {\n\t\t\t\t\t\t\tconst jsonFamily = getJsonFamily(relatedKeysAtoms, store)\n\t\t\t\t\t\t\tconst json = get(jsonFamily, x)\n\t\t\t\t\t\t\treturn json.members.map((y) => {\n\t\t\t\t\t\t\t\tlet a = relations.isAType?.(x) ? x : undefined\n\t\t\t\t\t\t\t\tlet b = a === undefined ? (x as BType) : undefined\n\t\t\t\t\t\t\t\ta ??= y as AType\n\t\t\t\t\t\t\t\tb ??= y as BType\n\t\t\t\t\t\t\t\tconst contentKey = relations.makeContentKey(a, b)\n\t\t\t\t\t\t\t\tconst content = get(contentAtoms, contentKey)\n\t\t\t\t\t\t\t\treturn [y, content]\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t[`join`, `entries`],\n\t\t\t)\n\n\t\tswitch (options.cardinality) {\n\t\t\tcase `1:1`: {\n\t\t\t\tconst singleRelatedKeySelectors = createSingleKeySelectorFamily()\n\t\t\t\tconst stateKeyA = `${aSide}KeyOf${capitalize(bSide)}` as const\n\t\t\t\tconst stateKeyB = `${bSide}KeyOf${capitalize(aSide)}` as const\n\t\t\t\tconst baseStates = {\n\t\t\t\t\t[stateKeyA]: singleRelatedKeySelectors,\n\t\t\t\t\t[stateKeyB]: singleRelatedKeySelectors,\n\t\t\t\t} as JoinStateFamilies<ASide, AType, BSide, BType, Cardinality, Content>\n\t\t\t\tlet states: JoinStateFamilies<\n\t\t\t\t\tASide,\n\t\t\t\t\tAType,\n\t\t\t\t\tBSide,\n\t\t\t\t\tBType,\n\t\t\t\t\tCardinality,\n\t\t\t\t\tContent\n\t\t\t\t>\n\t\t\t\tif (defaultContent) {\n\t\t\t\t\tconst singleEntrySelectors = createSingleEntrySelectorFamily()\n\t\t\t\t\tconst entriesStateKeyA = `${aSide}EntryOf${capitalize(bSide)}` as const\n\t\t\t\t\tconst entriesStateKeyB = `${bSide}EntryOf${capitalize(aSide)}` as const\n\t\t\t\t\tconst contentStates = {\n\t\t\t\t\t\t[entriesStateKeyA]: singleEntrySelectors,\n\t\t\t\t\t\t[entriesStateKeyB]: singleEntrySelectors,\n\t\t\t\t\t}\n\t\t\t\t\tstates = Object.assign(baseStates, contentStates)\n\t\t\t\t} else {\n\t\t\t\t\tstates = baseStates\n\t\t\t\t}\n\t\t\t\tthis.relations = relations\n\t\t\t\tthis.states = states\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase `1:n`: {\n\t\t\t\tconst singleRelatedKeySelectors = createSingleKeySelectorFamily()\n\t\t\t\tconst multipleRelatedKeysSelectors = getMultipleKeySelectorFamily()\n\t\t\t\tconst stateKeyA = `${aSide}KeyOf${capitalize(bSide)}` as const\n\t\t\t\tconst stateKeyB = `${bSide}KeysOf${capitalize(aSide)}` as const\n\t\t\t\tconst baseStates = {\n\t\t\t\t\t[stateKeyA]: singleRelatedKeySelectors,\n\t\t\t\t\t[stateKeyB]: multipleRelatedKeysSelectors,\n\t\t\t\t} as JoinStateFamilies<ASide, AType, BSide, BType, Cardinality, Content>\n\t\t\t\tlet states: JoinStateFamilies<\n\t\t\t\t\tASide,\n\t\t\t\t\tAType,\n\t\t\t\t\tBSide,\n\t\t\t\t\tBType,\n\t\t\t\t\tCardinality,\n\t\t\t\t\tContent\n\t\t\t\t>\n\t\t\t\tif (defaultContent) {\n\t\t\t\t\tconst singleRelatedEntrySelectors = createSingleEntrySelectorFamily()\n\t\t\t\t\tconst multipleRelatedEntriesSelectors =\n\t\t\t\t\t\tgetMultipleEntrySelectorFamily()\n\t\t\t\t\tconst entriesStateKeyA = `${aSide}EntryOf${capitalize(bSide)}` as const\n\t\t\t\t\tconst entriesStateKeyB = `${bSide}EntriesOf${capitalize(\n\t\t\t\t\t\taSide,\n\t\t\t\t\t)}` as const\n\t\t\t\t\tconst contentStates = {\n\t\t\t\t\t\t[entriesStateKeyA]: singleRelatedEntrySelectors,\n\t\t\t\t\t\t[entriesStateKeyB]: multipleRelatedEntriesSelectors,\n\t\t\t\t\t}\n\t\t\t\t\tstates = Object.assign(baseStates, contentStates)\n\t\t\t\t} else {\n\t\t\t\t\tstates = baseStates\n\t\t\t\t}\n\t\t\t\tthis.relations = relations\n\t\t\t\tthis.states = states\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase `n:n`: {\n\t\t\t\tconst multipleRelatedKeysSelectors = getMultipleKeySelectorFamily()\n\t\t\t\tconst stateKeyA = `${aSide}KeysOf${capitalize(bSide)}` as const\n\t\t\t\tconst stateKeyB = `${bSide}KeysOf${capitalize(aSide)}` as const\n\t\t\t\tconst baseStates = {\n\t\t\t\t\t[stateKeyA]: multipleRelatedKeysSelectors,\n\t\t\t\t\t[stateKeyB]: multipleRelatedKeysSelectors,\n\t\t\t\t} as JoinStateFamilies<ASide, AType, BSide, BType, Cardinality, Content>\n\t\t\t\tlet states: JoinStateFamilies<\n\t\t\t\t\tASide,\n\t\t\t\t\tAType,\n\t\t\t\t\tBSide,\n\t\t\t\t\tBType,\n\t\t\t\t\tCardinality,\n\t\t\t\t\tContent\n\t\t\t\t>\n\t\t\t\tif (defaultContent) {\n\t\t\t\t\tconst multipleRelatedEntriesSelectors =\n\t\t\t\t\t\tgetMultipleEntrySelectorFamily()\n\t\t\t\t\tconst entriesStateKeyA = `${aSide}EntriesOf${capitalize(\n\t\t\t\t\t\tbSide,\n\t\t\t\t\t)}` as const\n\t\t\t\t\tconst entriesStateKeyB = `${bSide}EntriesOf${capitalize(\n\t\t\t\t\t\taSide,\n\t\t\t\t\t)}` as const\n\t\t\t\t\tconst contentStates = {\n\t\t\t\t\t\t[entriesStateKeyA]: multipleRelatedEntriesSelectors,\n\t\t\t\t\t\t[entriesStateKeyB]: multipleRelatedEntriesSelectors,\n\t\t\t\t\t}\n\t\t\t\t\tstates = Object.assign(baseStates, contentStates)\n\t\t\t\t} else {\n\t\t\t\t\tstates = baseStates\n\t\t\t\t}\n\t\t\t\tthis.relations = relations\n\t\t\t\tthis.states = states\n\t\t\t}\n\t\t}\n\t}\n}\n","import type { JoinToken } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nimport { IMPLICIT, type Store } from \"../store\"\nimport { Join } from \"./join-internal\"\n\nexport function getJoin<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object | null,\n>(\n\ttoken: JoinToken<ASide, AType, BSide, BType, Cardinality, Content>,\n\tstore: Store,\n): Join<ASide, AType, BSide, BType, Cardinality, Content> {\n\tlet myJoin = store.joins.get(token.key)\n\tif (myJoin === undefined) {\n\t\tconst rootJoinMap = IMPLICIT.STORE.joins\n\t\tconst rootJoin = rootJoinMap.get(token.key)\n\t\tif (rootJoin === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`Join \"${token.key}\" not found in store \"${store.config.name}\"`,\n\t\t\t)\n\t\t}\n\t\tmyJoin = new Join(rootJoin.options, rootJoin.defaultContent, store)\n\t\tstore.joins.set(token.key, myJoin)\n\t}\n\treturn myJoin\n}\n","import type { JoinToken } from \"atom.io\"\nimport type { Json } from \"atom.io/json\"\n\nimport type { Junction } from \"../junction\"\nimport { newest } from \"../lineage\"\nimport type { Store } from \"../store\"\nimport { isChildStore } from \"../transaction\"\nimport { getJoin } from \"./get-join\"\n\nexport function editRelationsInStore<\n\tASide extends string,\n\tAType extends string,\n\tBSide extends string,\n\tBType extends string,\n\tCardinality extends `1:1` | `1:n` | `n:n`,\n\tContent extends Json.Object | null,\n>(\n\ttoken: JoinToken<ASide, AType, BSide, BType, Cardinality, Content>,\n\tchange: (relations: Junction<ASide, AType, BSide, BType, Content>) => void,\n\tstore: Store,\n): void {\n\tconst myJoin = getJoin(token, store)\n\tconst target = newest(store)\n\tif (isChildStore(target)) {\n\t\tconst { toolkit } = target.transactionMeta\n\t\tmyJoin.transact(toolkit, ({ relations }) => {\n\t\t\tchange(relations)\n\t\t})\n\t} else {\n\t\tchange(myJoin.relations)\n\t}\n}\n","import type { JoinToken, MutableAtomFamilyToken } from \"atom.io\"\nimport type { SetRTX, SetRTXJson } from \"atom.io/transceivers/set-rtx\"\n\nimport type { Store } from \"../store\"\nimport { getJoin } from \"./get-join\"\n\nexport function getInternalRelationsFromStore(\n\ttoken: JoinToken<any, any, any, any, any, any>,\n\tstore: Store,\n): MutableAtomFamilyToken<SetRTX<string>, SetRTXJson<string>, string> {\n\tconst myJoin = getJoin(token, store)\n\tconst family = myJoin.core.relatedKeysAtoms\n\treturn family\n}\n","export type ReservedIntrospectionKey = `🔍 ${string}`\n\nexport function isReservedIntrospectionKey(\n\tvalue: string,\n): value is ReservedIntrospectionKey {\n\treturn value.startsWith(`🔍 `)\n}\n","import type { Flat, Refinement } from \"atom.io/internal\"\nimport type { Json } from \"atom.io/json\"\n\nexport type ClassSignature = abstract new (...args: any) => any\n\nexport type RefinementStrategy = ClassSignature | Refinement<unknown, any>\n\nexport type Supported<Refine extends RefinementStrategy> =\n\tRefine extends Refinement<unknown, infer T>\n\t\t? T\n\t\t: Refine extends ClassSignature\n\t\t\t? InstanceType<Refine>\n\t\t\t: never\n\nexport type RefinementSupport = Record<string, RefinementStrategy>\n\nexport class Refinery<SupportedTypes extends RefinementSupport> {\n\tpublic supported: SupportedTypes\n\n\tpublic constructor(supported: SupportedTypes) {\n\t\tthis.supported = supported\n\t}\n\n\tpublic refine<T>(input: T):\n\t\t| Flat<{\n\t\t\t\t[K in keyof SupportedTypes]: T extends Supported<SupportedTypes[K]>\n\t\t\t\t\t? {\n\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t}\n\t\t\t\t\t: Supported<SupportedTypes[K]> extends T\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\ttype: K\n\t\t\t\t\t\t\t\tdata: Supported<SupportedTypes[K]>\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: never\n\t\t }>[keyof SupportedTypes]\n\t\t| (T extends Supported<SupportedTypes[keyof SupportedTypes]>\n\t\t\t\t? never\n\t\t\t\t: null) {\n\t\tfor (const [key, refiner] of Object.entries(this.supported)) {\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\t// @ts-expect-error that's the point\n\t\t\t\t\trefiner(input) === true &&\n\t\t\t\t\trefiner !== Boolean\n\t\t\t\t) {\n\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t}\n\t\t\t} catch (_) {\n\t\t\t\ttry {\n\t\t\t\t\tif (input instanceof refiner) {\n\t\t\t\t\t\treturn { type: key, data: input } as any\n\t\t\t\t\t}\n\t\t\t\t} catch (__) {}\n\t\t\t}\n\t\t}\n\t\treturn null as any\n\t}\n}\n\nexport const primitiveRefinery = new Refinery({\n\tnumber: (input: unknown): input is number => typeof input === `number`,\n\tstring: (input: unknown): input is string => typeof input === `string`,\n\tboolean: (input: unknown): input is boolean => typeof input === `boolean`,\n\tnull: (input: unknown): input is null => input === null,\n})\n\nexport function isPlainObject(input: unknown): input is Json.Tree.Object {\n\tif (!input) {\n\t\treturn false\n\t}\n\tconst prototype = Object.getPrototypeOf(input)\n\treturn prototype === Object.prototype\n}\n\nexport const jsonTreeRefinery = new Refinery({\n\tobject: isPlainObject,\n\tarray: (input: unknown): input is Json.Tree.Array => Array.isArray(input),\n})\n\nexport const jsonRefinery = new Refinery({\n\t...primitiveRefinery.supported,\n\t...jsonTreeRefinery.supported,\n})\n\nexport type JsonType = keyof typeof jsonRefinery.supported\n\nexport const discoverType = (\n\tinput: unknown,\n): JsonType | `Map` | `Set` | `undefined` | (string & {}) => {\n\tif (input === undefined) {\n\t\treturn `undefined`\n\t}\n\tconst refined = jsonRefinery.refine(input)\n\tif (refined) {\n\t\treturn refined.type\n\t}\n\treturn Object.getPrototypeOf(input).constructor.name\n}\n","import { isPlainObject } from \"./refinery\"\n\n// if you found what you were looking for, return true and break\nexport type InspectionResult = Partial<{\n\tpathComplete: true\n\tjobComplete: true\n}>\nexport type InspectNode = (\n\tpath: string[],\n\tnode: unknown,\n) => InspectionResult | void\n\nexport const sprawl = (\n\ttree: Array<unknown> | object,\n\tinspector: InspectNode,\n): void => {\n\tconst walk = (path: string[], node: unknown): InspectionResult => {\n\t\tconst inspect = (p: string[], n: unknown): InspectionResult | null => {\n\t\t\t// console.log(parent)\n\t\t\tconst result = inspector(p, n)\n\t\t\tif (result) return result\n\t\t\treturn null\n\t\t}\n\t\tconst result = inspect(path, node)\n\t\tif (result?.jobComplete ?? result?.pathComplete) {\n\t\t\treturn result\n\t\t}\n\t\tconst childEntries = Array.isArray(node)\n\t\t\t? node.map((v, i) => [i, v])\n\t\t\t: isPlainObject(node)\n\t\t\t\t? Object.entries(node)\n\t\t\t\t: []\n\t\tfor (const [k, v] of childEntries) {\n\t\t\tconst subResult = walk([...path, k], v)\n\t\t\tif (subResult?.jobComplete) {\n\t\t\t\treturn subResult\n\t\t\t}\n\t\t}\n\t\treturn {}\n\t}\n\twalk([], tree)\n}\n","import type { Json } from \"atom.io/json\"\n\nimport type { Refinery, Supported } from \"./refinery\"\nimport { discoverType, jsonTreeRefinery, primitiveRefinery } from \"./refinery\"\nimport { sprawl } from \"./sprawl\"\n\nexport function diffNumber(a: number, b: number): Delta {\n\tconst sign = a < b ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a - b)} (${a} → ${b})`,\n\t}\n}\n\nexport function diffString(a: string, b: string): Delta {\n\tconst sign = a.length < b.length ? `+` : `-`\n\treturn {\n\t\tsummary: `${sign}${Math.abs(a.length - b.length)} (\"${a}\" → \"${b}\")`,\n\t}\n}\n\nexport function diffBoolean(a: boolean, b: boolean): Delta {\n\treturn {\n\t\tsummary: `${a} → ${b}`,\n\t}\n}\n\nexport function diffObject(\n\ta: Json.Tree.Object,\n\tb: Json.Tree.Object,\n\trecurse: Diff<unknown>,\n): Delta {\n\tlet summary = ``\n\tconst added: Delta[`added`] = []\n\tconst removed: Delta[`removed`] = []\n\tconst changed: Delta[`changed`] = []\n\n\tsprawl(a, (path, nodeA) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeB = b[key]\n\t\t\tif (nodeB === undefined) {\n\t\t\t\tremoved.push([key, JSON.stringify(nodeA)])\n\t\t\t} else {\n\t\t\t\tconst delta = recurse(nodeA, nodeB)\n\t\t\t\tif (delta.summary !== `No Change`) {\n\t\t\t\t\tchanged.push([key, delta])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tsprawl(b, (path, nodeB) => {\n\t\tlet key: string\n\t\tfor (key of path) {\n\t\t\tconst nodeA = a[key]\n\t\t\tif (nodeA === undefined) {\n\t\t\t\tadded.push([key, JSON.stringify(nodeB)])\n\t\t\t}\n\t\t}\n\t})\n\n\tsummary = `~${changed.length} +${added.length} -${removed.length}`\n\n\treturn {\n\t\tsummary,\n\t\tadded,\n\t\tremoved,\n\t\tchanged,\n\t}\n}\n\nexport function diffArray(\n\ta: Json.Tree.Array,\n\tb: Json.Tree.Array,\n\trecurse: Diff<unknown>,\n): Delta {\n\treturn diffObject(a as any, b as any, recurse)\n}\n\ntype Delta = {\n\tsummary: string\n\tadded?: [path: string, addedStringifiedValue: string][]\n\tremoved?: [path: string, removedStringifiedValue: string][]\n\tchanged?: [path: string, delta: Delta][]\n}\n\ntype Diff<T> = (a: T, b: T) => Delta\ntype DiffTree<T> = (a: T, b: T, recurse: Differ<any, any>[`diff`]) => Delta\n\nexport class Differ<\n\tLeaf extends Record<string, any>,\n\tTree extends Record<string, any>,\n> {\n\tpublic leafRefinery: Refinery<Leaf>\n\tpublic treeRefinery: Refinery<Tree>\n\tpublic leafDiffers: { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> }\n\tpublic treeDiffers: { [KT in keyof Tree]: DiffTree<Supported<Tree[KT]>> }\n\n\tpublic constructor(\n\t\tleafRefinery: Refinery<Leaf>,\n\t\ttreeRefinery: Refinery<Tree>,\n\t\tdiffFunctions: {\n\t\t\t[KT in keyof Tree]: DiffTree<Supported<Tree[KT]>>\n\t\t} & { [KL in keyof Leaf]: Diff<Supported<Leaf[KL]>> },\n\t) {\n\t\tthis.leafRefinery = leafRefinery\n\t\tthis.treeRefinery = treeRefinery\n\t\tthis.leafDiffers = {} as any\n\t\tthis.treeDiffers = {} as any\n\t\tfor (const key of Object.keys(leafRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.leafDiffers[key as keyof Leaf] = diffFunction\n\t\t}\n\t\tfor (const key of Object.keys(treeRefinery.supported)) {\n\t\t\tconst diffFunction = diffFunctions[key]\n\t\t\tthis.treeDiffers[key as keyof Tree] = diffFunction\n\t\t}\n\t}\n\n\tpublic diff(a: unknown, b: unknown): Delta {\n\t\tif (a === b) {\n\t\t\treturn { summary: `No Change` }\n\t\t}\n\n\t\tconst aRefined = this.leafRefinery.refine(a) ?? this.treeRefinery.refine(a)\n\t\tconst bRefined = this.leafRefinery.refine(b) ?? this.treeRefinery.refine(b)\n\n\t\tif (aRefined !== null && bRefined !== null) {\n\t\t\tif (aRefined.type === bRefined.type) {\n\t\t\t\tif (aRefined.type in this.leafDiffers) {\n\t\t\t\t\tconst delta = this.leafDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t\tif (aRefined.type in this.treeDiffers) {\n\t\t\t\t\tconst delta = this.treeDiffers[aRefined.type](\n\t\t\t\t\t\taRefined.data,\n\t\t\t\t\t\tbRefined.data,\n\t\t\t\t\t\t(x, y) => this.diff(x, y),\n\t\t\t\t\t)\n\t\t\t\t\treturn delta\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst typeA = discoverType(a)\n\t\tconst typeB = discoverType(b)\n\t\tif (typeA === typeB) {\n\t\t\treturn {\n\t\t\t\tsummary: `${typeA} → ${typeB}`,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tsummary: `Type change: ${typeA} → ${typeB}`,\n\t\t}\n\t}\n}\n\nexport const prettyJson = new Differ(primitiveRefinery, jsonTreeRefinery, {\n\tnumber: diffNumber,\n\tstring: diffString,\n\tboolean: diffBoolean,\n\tnull: () => ({ summary: `No Change` }),\n\tobject: diffObject,\n\tarray: diffArray,\n})\n","import type { MutableAtomToken } from \"atom.io\"\nimport { atom, getInternalRelations, join, selectorFamily } from \"atom.io\"\nimport type { SetRTXJson } from \"atom.io/transceivers/set-rtx\"\nimport { SetRTX } from \"atom.io/transceivers/set-rtx\"\n\nexport const usersInThisRoomIndex = atom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `usersInRoomIndex`,\n\tmutable: true,\n\tdefault: () => new SetRTX<string>(),\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\n\nexport const roomIndex = atom<SetRTX<string>, SetRTXJson<string>>({\n\tkey: `roomIndex`,\n\tdefault: () => new SetRTX<string>(),\n\tmutable: true,\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\n\nexport type UserInRoomMeta = {\n\tenteredAtEpoch: number\n}\nexport const DEFAULT_USER_IN_ROOM_META: UserInRoomMeta = {\n\tenteredAtEpoch: 0,\n}\nexport const usersInRooms = join(\n\t{\n\t\tkey: `usersInRooms`,\n\t\tbetween: [`room`, `user`],\n\t\tcardinality: `1:n`,\n\t\tisAType: (input): input is string => typeof input === `string`,\n\t\tisBType: (input): input is string => typeof input === `string`,\n\t},\n\tDEFAULT_USER_IN_ROOM_META,\n)\n\nexport const usersInMyRoomView = selectorFamily<\n\tMutableAtomToken<SetRTX<string>, SetRTXJson<string>>[],\n\tstring\n>({\n\tkey: `usersInMyRoomView`,\n\tget:\n\t\t(myUsername) =>\n\t\t({ find }) => {\n\t\t\tconst usersInRoomsAtoms = getInternalRelations(usersInRooms)\n\t\t\tconst myRoomIndex = find(usersInRoomsAtoms, myUsername)\n\t\t\treturn [myRoomIndex]\n\t\t},\n})\n","import type { Json, stringified } from \"atom.io/json\"\n\nimport type { Socket } from \"..\"\n\nexport type Events = Json.Object<string, Json.Serializable[]>\n\nexport type StringifiedEvent<\n\tKey extends string,\n\tParams extends Json.Serializable[],\n> = stringified<[Key, ...Params]>\n\nexport interface EventBuffer<\n\tKey extends string,\n\tParams extends Json.Serializable[],\n> extends Buffer {\n\ttoString(): StringifiedEvent<Key, Params>\n}\n\nexport class CustomSocket<I extends Events, O extends Events> implements Socket {\n\tprotected listeners: Map<keyof O, Set<(...args: Json.Array) => void>>\n\tprotected globalListeners: Set<(event: string, ...args: Json.Array) => void>\n\tprotected handleEvent<Event extends keyof I>(\n\t\tevent: string,\n\t\t...args: I[Event]\n\t): void {\n\t\tfor (const listener of this.globalListeners) {\n\t\t\tlistener(event, ...args)\n\t\t}\n\t\tconst listeners = this.listeners.get(event)\n\t\tif (listeners) {\n\t\t\tfor (const listener of listeners) {\n\t\t\t\tlistener(...args)\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic id = `no_id_retrieved`\n\tpublic emit: <Event extends keyof I>(\n\t\tevent: Event,\n\t\t...args: I[Event]\n\t) => CustomSocket<I, O>\n\n\tpublic constructor(\n\t\temit: <Event extends keyof I>(\n\t\t\tevent: Event,\n\t\t\t...args: I[Event]\n\t\t) => CustomSocket<I, O>,\n\t) {\n\t\tthis.emit = emit\n\t\tthis.listeners = new Map()\n\t\tthis.globalListeners = new Set()\n\t}\n\n\tpublic on<Event extends keyof O>(\n\t\tevent: Event,\n\t\tlistener: (...args: O[Event]) => void,\n\t): this {\n\t\tconst listeners = this.listeners.get(event)\n\t\tif (listeners) {\n\t\t\tlisteners.add(listener)\n\t\t} else {\n\t\t\tthis.listeners.set(event, new Set([listener]))\n\t\t}\n\t\treturn this\n\t}\n\n\tpublic onAny(listener: (event: string, ...args: Json.Array) => void): this {\n\t\tthis.globalListeners.add(listener)\n\t\treturn this\n\t}\n\n\tpublic off<Event extends keyof O>(\n\t\tevent: Event,\n\t\tlistener?: (...args: O[Event]) => void,\n\t): this {\n\t\tconst listeners = this.listeners.get(event)\n\t\tif (listeners) {\n\t\t\tif (listener) {\n\t\t\t\tlisteners.delete(listener)\n\t\t\t} else {\n\t\t\t\tthis.listeners.delete(event)\n\t\t\t}\n\t\t}\n\t\treturn this\n\t}\n\n\tpublic offAny(listener: (event: string, ...args: Json.Array) => void): this {\n\t\tthis.globalListeners.delete(listener)\n\t\treturn this\n\t}\n}\n","import type { ChildProcessWithoutNullStreams } from \"node:child_process\"\n\nimport type { Json } from \"atom.io/json\"\nimport { parseJson } from \"atom.io/json\"\n\nimport type { EventBuffer, Events } from \"./custom-socket\"\nimport { CustomSocket } from \"./custom-socket\"\n\n/* eslint-disable no-console */\n\nexport class ChildSocket<\n\tI extends Events,\n\tO extends Events,\n> extends CustomSocket<I, O> {\n\tprotected incompleteData = ``\n\tprotected unprocessedEvents: string[] = []\n\tprotected incompleteLog = ``\n\tprotected unprocessedLogs: string[] = []\n\n\tpublic id = `#####`\n\n\tpublic process: ChildProcessWithoutNullStreams\n\tpublic key: string\n\tpublic logger: Pick<Console, `error` | `info` | `warn`>\n\n\tprotected handleLog(arg: Json.Serializable): void {\n\t\tif (Array.isArray(arg)) {\n\t\t\tconst [level, ...rest] = arg\n\t\t\tswitch (level) {\n\t\t\t\tcase `i`:\n\t\t\t\t\tthis.logger.info(...rest)\n\t\t\t\t\tbreak\n\t\t\t\tcase `w`:\n\t\t\t\t\tthis.logger.warn(...rest)\n\t\t\t\t\tbreak\n\t\t\t\tcase `e`:\n\t\t\t\t\tthis.logger.error(...rest)\n\t\t\t\t\tbreak\n\t\t\t\tdefault:\n\t\t\t\t\treturn\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic constructor(\n\t\tprocess: ChildProcessWithoutNullStreams,\n\t\tkey: string,\n\t\tlogger?: Pick<Console, `error` | `info` | `warn`>,\n\t) {\n\t\tsuper((event, ...args) => {\n\t\t\tconst stringifiedEvent = JSON.stringify([event, ...args]) + `\\x03`\n\t\t\tconst errorHandler = (err: { code: string }) => {\n\t\t\t\tif (err.code === `EPIPE`) {\n\t\t\t\t\tconsole.error(`EPIPE error during write`, this.process.stdin)\n\t\t\t\t}\n\t\t\t\tthis.process.stdin.removeListener(`error`, errorHandler)\n\t\t\t}\n\n\t\t\tthis.process.stdin.once(`error`, errorHandler)\n\t\t\tthis.process.stdin.write(stringifiedEvent)\n\n\t\t\treturn this\n\t\t})\n\t\tthis.process = process\n\t\tthis.key = key\n\t\tthis.logger = logger ?? {\n\t\t\tinfo: (...args: unknown[]) => {\n\t\t\t\tconsole.info(this.id, this.key, ...args)\n\t\t\t},\n\t\t\twarn: (...args: unknown[]) => {\n\t\t\t\tconsole.warn(this.id, this.key, ...args)\n\t\t\t},\n\t\t\terror: (...args: unknown[]) => {\n\t\t\t\tconsole.error(this.id, this.key, ...args)\n\t\t\t},\n\t\t}\n\t\tthis.process.stdout.on(\n\t\t\t`data`,\n\t\t\t<Event extends keyof I>(buffer: EventBuffer<string, I[Event]>) => {\n\t\t\t\tconst chunk = buffer.toString()\n\n\t\t\t\tif (chunk === `ALIVE`) {\n\t\t\t\t\t// console.log(chunk)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.unprocessedEvents.push(...chunk.split(`\\x03`))\n\t\t\t\t// console.log(`🤓`, chunk.length)\n\t\t\t\t// console.log(`🤓`, this.unprocessedEvents.length)\n\t\t\t\t// console.log(`🤓`, ...this.unprocessedEvents.map((x) => x.length))\n\t\t\t\tconst newInput = this.unprocessedEvents.shift()\n\t\t\t\tthis.incompleteData += newInput ?? ``\n\t\t\t\ttry {\n\t\t\t\t\tif (this.incompleteData.startsWith(`error`)) {\n\t\t\t\t\t\tconsole.log(`❗`, this.incompleteData)\n\t\t\t\t\t}\n\t\t\t\t\tlet parsedEvent = parseJson(this.incompleteData)\n\t\t\t\t\tthis.handleEvent(...(parsedEvent as [string, ...I[keyof I]]))\n\t\t\t\t\twhile (this.unprocessedEvents.length > 0) {\n\t\t\t\t\t\tconst event = this.unprocessedEvents.shift()\n\t\t\t\t\t\tif (event) {\n\t\t\t\t\t\t\tif (this.unprocessedEvents.length === 0) {\n\t\t\t\t\t\t\t\tthis.incompleteData = event\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tparsedEvent = parseJson(event)\n\t\t\t\t\t\t\tthis.handleEvent(...(parsedEvent as [string, ...I[keyof I]]))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.incompleteData = ``\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.warn(`⚠️----------------⚠️`)\n\t\t\t\t\tconsole.warn(this.incompleteData)\n\t\t\t\t\tconsole.warn(`⚠️----------------⚠️`)\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t}\n\t\t\t},\n\t\t)\n\t\tthis.process.stderr.on(`data`, (buf) => {\n\t\t\tconst chunk = buf.toString()\n\t\t\tthis.unprocessedLogs.push(...chunk.split(`\\x03`))\n\t\t\t// console.log(`🤫`, chunk.length)\n\t\t\t// console.log(`🤫`, this.unprocessedLogs.length)\n\t\t\t// console.log(`🤫`, ...this.unprocessedLogs.map((x) => x.length))\n\t\t\tconst newInput = this.unprocessedLogs.shift()\n\t\t\tthis.incompleteLog += newInput ?? ``\n\t\t\ttry {\n\t\t\t\tlet parsedLog = parseJson(this.incompleteLog)\n\t\t\t\t// console.log(`🤫`, parsedLog)\n\t\t\t\tthis.handleLog(parsedLog)\n\t\t\t\twhile (this.unprocessedLogs.length > 0) {\n\t\t\t\t\tthis.incompleteLog = this.unprocessedLogs.shift() ?? ``\n\t\t\t\t\tif (this.incompleteLog) {\n\t\t\t\t\t\tparsedLog = parseJson(this.incompleteLog)\n\t\t\t\t\t\tthis.handleLog(parsedLog)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(`❌❌❌`)\n\t\t\t\tconsole.error(this.incompleteLog)\n\t\t\t\tconsole.error(error)\n\t\t\t\tconsole.error(`❌❌❌️`)\n\t\t\t}\n\t\t})\n\t\tif (process.pid) {\n\t\t\tthis.id = process.pid.toString()\n\t\t}\n\t}\n}\n","import type { ChildProcessWithoutNullStreams } from \"node:child_process\"\nimport { spawn } from \"node:child_process\"\n\nimport type { Loadable } from \"atom.io\"\nimport { atomFamily, selectorFamily } from \"atom.io\"\n\nimport { ChildSocket } from \"../ipc-sockets\"\n\nexport type RoomArguments =\n\t| [script: string, options: string[]]\n\t| [script: string]\n\nexport const roomArgumentsAtoms = atomFamily<RoomArguments, string>({\n\tkey: `roomArguments`,\n\tdefault: [`echo`, [`Hello World!`]],\n})\n\nexport const roomSelectors = selectorFamily<\n\tLoadable<ChildSocket<any, any>>,\n\tstring\n>({\n\tkey: `room`,\n\tget:\n\t\t(roomId) =>\n\t\tasync ({ get, find }) => {\n\t\t\tconst argumentsState = find(roomArgumentsAtoms, roomId)\n\t\t\tconst args = get(argumentsState)\n\t\t\tconst [script, options] = args\n\t\t\tconst child = await new Promise<ChildProcessWithoutNullStreams>(\n\t\t\t\t(resolve) => {\n\t\t\t\t\tconst room = spawn(script, options, { env: process.env })\n\t\t\t\t\tconst resolver = (data: Buffer) => {\n\t\t\t\t\t\tif (data.toString() === `ALIVE`) {\n\t\t\t\t\t\t\troom.stdout.off(`data`, resolver)\n\t\t\t\t\t\t\tresolve(room)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\troom.stdout.on(`data`, resolver)\n\t\t\t\t},\n\t\t\t)\n\t\t\treturn new ChildSocket(child, roomId)\n\t\t},\n})\n","import type { Loadable } from \"atom.io\"\nimport * as AtomIO from \"atom.io\"\nimport { editRelationsInStore } from \"atom.io/internal\"\nimport type { UserInRoomMeta } from \"atom.io/realtime\"\nimport { roomIndex, usersInRooms } from \"atom.io/realtime\"\n\nimport type { ChildSocket } from \"../ipc-sockets\"\nimport type { RoomArguments } from \"./server-room-external-store\"\nimport { roomArgumentsAtoms, roomSelectors } from \"./server-room-external-store\"\n\nexport const createRoomTX = AtomIO.transaction<\n\t(\n\t\troomId: string,\n\t\tscript: string,\n\t\toptions?: string[],\n\t) => Loadable<ChildSocket<any, any>>\n>({\n\tkey: `createRoom`,\n\tdo: ({ get, set, find }, roomId, script, options) => {\n\t\tconst args: RoomArguments = options ? [script, options] : [script]\n\t\tconst roomArgumentsState = find(roomArgumentsAtoms, roomId)\n\t\tset(roomArgumentsState, args)\n\t\tset(roomIndex, (s) => s.add(roomId))\n\t\tconst roomState = find(roomSelectors, roomId)\n\t\tconst room = get(roomState)\n\t\treturn room\n\t},\n})\nexport type CreateRoomIO = AtomIO.TransactionIO<typeof createRoomTX>\n\nexport const joinRoomTX = AtomIO.transaction<\n\t(roomId: string, userId: string, enteredAtEpoch: number) => UserInRoomMeta\n>({\n\tkey: `joinRoom`,\n\tdo: (tools, roomId, userId, enteredAtEpoch) => {\n\t\tconst meta = { enteredAtEpoch }\n\t\teditRelationsInStore(\n\t\t\tusersInRooms,\n\t\t\t(relations) => {\n\t\t\t\trelations.set({ room: roomId, user: userId }, meta)\n\t\t\t},\n\t\t\ttools.env().store,\n\t\t)\n\t\treturn meta\n\t},\n})\nexport type JoinRoomIO = AtomIO.TransactionIO<typeof joinRoomTX>\n\nexport const leaveRoomTX = AtomIO.transaction<\n\t(roomId: string, userId: string) => void\n>({\n\tkey: `leaveRoom`,\n\tdo: (tools, roomId, userId) => {\n\t\teditRelationsInStore(\n\t\t\tusersInRooms,\n\t\t\t(relations) => {\n\t\t\t\trelations.delete({ room: roomId, user: userId })\n\t\t\t},\n\t\t\ttools.env().store,\n\t\t)\n\t},\n})\nexport type LeaveRoomIO = AtomIO.TransactionIO<typeof leaveRoomTX>\n\nexport const destroyRoomTX = AtomIO.transaction<(roomId: string) => void>({\n\tkey: `destroyRoom`,\n\tdo: (tools, roomId) => {\n\t\teditRelationsInStore(\n\t\t\tusersInRooms,\n\t\t\t(relations) => {\n\t\t\t\trelations.delete({ room: roomId })\n\t\t\t},\n\t\t\ttools.env().store,\n\t\t)\n\t\ttools.set(roomIndex, (s) => (s.delete(roomId), s))\n\t},\n})\n","import type { TransactionUpdate, TransactionUpdateContent } from \"atom.io\"\nimport { atomFamily } from \"atom.io\"\n\nimport type { UserKey } from \"./server-user-store\"\n\n// export const completeUpdateAtoms = atomFamily<\n// \tTransactionUpdate<any> | null,\n// \tstring\n// >({\n// \tkey: `completeUpdate`,\n// \tdefault: null,\n// })\n\nexport function redactTransactionUpdateContent(\n\tvisibleStateKeys: string[],\n\tupdates: TransactionUpdateContent[],\n): TransactionUpdateContent[] {\n\treturn updates\n\t\t.map((update): TransactionUpdateContent => {\n\t\t\tswitch (update.type) {\n\t\t\t\tcase `transaction_update`: {\n\t\t\t\t\tconst redacted = redactTransactionUpdateContent(\n\t\t\t\t\t\tvisibleStateKeys,\n\t\t\t\t\t\tupdate.updates,\n\t\t\t\t\t)\n\t\t\t\t\treturn { ...update, updates: redacted }\n\t\t\t\t}\n\t\t\t\tcase `atom_update`:\n\t\t\t\tcase `selector_update`:\n\t\t\t\tcase `molecule_creation`:\n\t\t\t\tcase `molecule_disposal`:\n\t\t\t\tcase `molecule_transfer`:\n\t\t\t\tcase `state_creation`:\n\t\t\t\tcase `state_disposal`:\n\t\t\t\t\treturn update\n\t\t\t}\n\t\t})\n\t\t.filter((update) => {\n\t\t\tswitch (update.type) {\n\t\t\t\tcase `atom_update`:\n\t\t\t\tcase `selector_update`:\n\t\t\t\t\treturn visibleStateKeys.includes(update.key)\n\t\t\t\tcase `state_creation`:\n\t\t\t\tcase `state_disposal`:\n\t\t\t\t\treturn visibleStateKeys.includes(update.token.key)\n\t\t\t\tcase `molecule_creation`:\n\t\t\t\tcase `transaction_update`:\n\t\t\t\tcase `molecule_disposal`:\n\t\t\t\tcase `molecule_transfer`:\n\t\t\t\t\treturn true\n\t\t\t}\n\t\t})\n}\n\nexport const redactorAtoms = atomFamily<\n\t{\n\t\tocclude: (updates: TransactionUpdateContent[]) => TransactionUpdateContent[]\n\t},\n\tUserKey\n>({\n\tkey: `redactor`,\n\tdefault: { occlude: (updates) => updates },\n})\n// export const redactedUpdateSelectors = selectorFamily<\n// \tTransactionUpdate<any> | null,\n// \t[transactionKey: string, updateId: string]\n// >({\n// \tkey: `redactedUpdate`,\n// \tget:\n// \t\t([transactionKey, updateId]) =>\n// \t\t({ get, find }) => {\n// \t\t\tconst update = get(find(completeUpdateAtoms, updateId))\n// \t\t\tconst { filter } = get(find(transactionRedactorAtoms, transactionKey))\n\n// \t\t\tif (update && filter) {\n// \t\t\t\treturn { ...update, updates: filter(update.updates) }\n// \t\t\t}\n// \t\t\treturn null\n// \t\t},\n// })\n\nexport type ContinuitySyncTransactionUpdate = Pick<\n\tTransactionUpdate<any>,\n\t`epoch` | `id` | `key` | `output` | `updates`\n>\nexport const userUnacknowledgedQueues = atomFamily<\n\tContinuitySyncTransactionUpdate[],\n\tUserKey\n>({\n\tkey: `unacknowledgedUpdates`,\n\tdefault: () => [],\n})\n","import type { Hierarchy } from \"atom.io\"\nimport { atom, atomFamily, join } from \"atom.io\"\nimport type { SetRTXJson } from \"atom.io/transceivers/set-rtx\"\nimport { SetRTX } from \"atom.io/transceivers/set-rtx\"\n\nimport type { Socket } from \"..\"\n\nexport type SocketKey = `socket::${string}`\nexport type UserKey = `user::${string}`\nexport type RoomKey = `room::${string}`\n\nexport type SocketSystemHierarchy = Hierarchy<\n\t[\n\t\t{\n\t\t\tabove: `root`\n\t\t\tbelow: [UserKey, SocketKey, RoomKey]\n\t\t},\n\t]\n>\n\nexport const socketAtoms = atomFamily<Socket | null, SocketKey>({\n\tkey: `sockets`,\n\tdefault: null,\n})\n\nexport const socketIndex = atom<SetRTX<SocketKey>, SetRTXJson<SocketKey>>({\n\tkey: `socketsIndex`,\n\tmutable: true,\n\tdefault: () => new SetRTX(),\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\nexport const userIndex = atom<SetRTX<UserKey>, SetRTXJson<UserKey>>({\n\tkey: `usersIndex`,\n\tmutable: true,\n\tdefault: () => new SetRTX(),\n\ttoJson: (set) => set.toJSON(),\n\tfromJson: (json) => SetRTX.fromJSON(json),\n})\nexport const usersOfSockets = join({\n\tkey: `usersOfSockets`,\n\tbetween: [`user`, `socket`],\n\tcardinality: `1:1`,\n\tisAType: (s): s is UserKey => s.startsWith(`user::`),\n\tisBType: (s): s is SocketKey => s.startsWith(`socket::`),\n})\n","import { createEnv } from \"@t3-oss/env-core\"\nimport { z } from \"zod\"\n\nexport const env = createEnv({\n\tserver: { FLIGHTDECK_SECRET: z.string().optional() },\n\tclientPrefix: `NEVER`,\n\tclient: {},\n\truntimeEnv: import.meta.env as Record<string, string>,\n\temptyStringAsUndefined: true,\n})\n","import { execSync, spawn } from \"node:child_process\"\nimport type { Server } from \"node:http\"\nimport { createServer } from \"node:http\"\nimport { homedir } from \"node:os\"\nimport { resolve } from \"node:path\"\nimport { inspect } from \"node:util\"\n\nimport { Future } from \"atom.io/internal\"\nimport { discoverType } from \"atom.io/introspection\"\nimport { fromEntries, toEntries } from \"atom.io/json\"\nimport { ChildSocket } from \"atom.io/realtime-server\"\nimport { CronJob } from \"cron\"\nimport { FilesystemStorage } from \"safedeposit\"\nimport { z } from \"zod\"\n\nimport type { LnavFormat } from \"../gen/lnav-format-schema.gen\"\nimport { env } from \"./flightdeck.env\"\n\nexport const FLIGHTDECK_SETUP_PHASES = [`downloaded`, `installed`] as const\n\nexport type FlightDeckSetupPhase = (typeof FLIGHTDECK_SETUP_PHASES)[number]\n\nexport const FLIGHTDECK_UPDATE_PHASES = [`notified`, `confirmed`] as const\n\nexport type FlightDeckUpdatePhase = (typeof FLIGHTDECK_UPDATE_PHASES)[number]\n\nexport function isVersionNumber(version: string): boolean {\n\treturn (\n\t\t/^\\d+\\.\\d+\\.\\d+$/.test(version) || !Number.isNaN(Number.parseFloat(version))\n\t)\n}\n\nexport type FlightDeckOptions<S extends string = string> = {\n\tpackageName: string\n\tservices: { [service in S]: { run: string; waitFor: boolean } }\n\tscripts: {\n\t\tdownload: string\n\t\tinstall: string\n\t\tcheckAvailability?: string\n\t}\n\tport?: number | undefined\n\tflightdeckRootDir?: string | undefined\n\tjsonLogging?: boolean | undefined\n}\n\nexport class FlightDeck<S extends string = string> {\n\tpublic readonly options: FlightDeckOptions<S>\n\tprotected safety = 0\n\n\tprotected storage: FilesystemStorage<{\n\t\tsetupPhase: FlightDeckSetupPhase\n\t\tupdatePhase: FlightDeckUpdatePhase\n\t\tupdateAwaitedVersion: string\n\t}>\n\tprotected webhookServer: Server\n\tprotected services: {\n\t\t[service in S]: ChildSocket<\n\t\t\t{ timeToStop: []; updatesReady: [] },\n\t\t\t{ readyToUpdate: []; alive: [] }\n\t\t> | null\n\t}\n\tprotected serviceIdx: { readonly [service in S]: number }\n\tpublic defaultServicesReadyToUpdate: { readonly [service in S]: boolean }\n\tpublic servicesReadyToUpdate: { [service in S]: boolean }\n\tpublic autoRespawnDeadServices: boolean\n\n\tprotected logger: Pick<Console, `error` | `info` | `warn`>\n\tprotected serviceLoggers: {\n\t\treadonly [service in S]: FlightDeckLogger\n\t}\n\n\tprotected updateAvailabilityChecker: CronJob | null = null\n\n\tpublic servicesLive: Future<void>[]\n\tpublic servicesDead: Future<void>[]\n\tpublic live = new Future(() => {})\n\tpublic dead = new Future(() => {})\n\n\tprotected restartTimes: number[] = []\n\n\tpublic constructor(options: FlightDeckOptions<S>) {\n\t\tthis.options = options\n\t\tconst { FLIGHTDECK_SECRET } = env\n\t\tconst { flightdeckRootDir = resolve(homedir(), `.flightdeck`) } = options\n\t\tconst port = options.port ?? 8080\n\t\tconst origin = `http://localhost:${port}`\n\n\t\tconst servicesEntries = toEntries(options.services)\n\t\tthis.services = fromEntries(\n\t\t\tservicesEntries.map(([serviceName]) => [serviceName, null]),\n\t\t)\n\t\tthis.serviceIdx = fromEntries(\n\t\t\tservicesEntries.map(([serviceName], idx) => [serviceName, idx]),\n\t\t)\n\t\tthis.defaultServicesReadyToUpdate = fromEntries(\n\t\t\tservicesEntries.map(([serviceName, { waitFor }]) => [\n\t\t\t\tserviceName,\n\t\t\t\t!waitFor,\n\t\t\t]),\n\t\t)\n\t\tthis.servicesReadyToUpdate = { ...this.defaultServicesReadyToUpdate }\n\t\tthis.autoRespawnDeadServices = true\n\n\t\tthis.logger = new FlightDeckLogger(\n\t\t\tthis.options.packageName,\n\t\t\tprocess.pid,\n\t\t\tundefined,\n\t\t\t{ jsonLogging: this.options.jsonLogging ?? false },\n\t\t)\n\t\tthis.serviceLoggers = fromEntries(\n\t\t\tservicesEntries.map(([serviceName]) => [\n\t\t\t\tserviceName,\n\t\t\t\tnew FlightDeckLogger(\n\t\t\t\t\tthis.options.packageName,\n\t\t\t\t\tprocess.pid,\n\t\t\t\t\tserviceName,\n\t\t\t\t\t{ jsonLogging: this.options.jsonLogging ?? false },\n\t\t\t\t),\n\t\t\t]),\n\t\t)\n\n\t\tthis.servicesLive = servicesEntries.map(() => new Future(() => {}))\n\t\tthis.servicesDead = servicesEntries.map(() => new Future(() => {}))\n\t\tthis.live.use(Promise.all(this.servicesLive))\n\t\tthis.dead.use(Promise.all(this.servicesDead))\n\n\t\tthis.storage = new FilesystemStorage({\n\t\t\tpath: resolve(flightdeckRootDir, `storage`, options.packageName),\n\t\t})\n\n\t\tif (FLIGHTDECK_SECRET === undefined) {\n\t\t\tthis.logger.warn(\n\t\t\t\t`No FLIGHTDECK_SECRET environment variable found. FlightDeck will not run an update server.`,\n\t\t\t)\n\t\t} else {\n\t\t\tcreateServer((req, res) => {\n\t\t\t\tlet data: Uint8Array[] = []\n\t\t\t\treq\n\t\t\t\t\t.on(`data`, (chunk) => {\n\t\t\t\t\t\tdata.push(chunk instanceof Buffer ? chunk : Buffer.from(chunk))\n\t\t\t\t\t})\n\t\t\t\t\t.on(`end`, () => {\n\t\t\t\t\t\tconst authHeader = req.headers.authorization\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tif (typeof req.url === `undefined`) throw 400\n\t\t\t\t\t\t\tconst expectedAuthHeader = `Bearer ${FLIGHTDECK_SECRET}`\n\t\t\t\t\t\t\tif (authHeader !== `Bearer ${FLIGHTDECK_SECRET}`) {\n\t\t\t\t\t\t\t\tthis.logger.info(\n\t\t\t\t\t\t\t\t\t`Unauthorized: needed \\`${expectedAuthHeader}\\`, got \\`${authHeader}\\``,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tthrow 401\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst url = new URL(req.url, origin)\n\t\t\t\t\t\t\tthis.logger.info(req.method, url.pathname)\n\n\t\t\t\t\t\t\tconst versionForeignInput = Buffer.concat(data).toString()\n\t\t\t\t\t\t\tif (!isVersionNumber(versionForeignInput)) {\n\t\t\t\t\t\t\t\tthrow 400\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tres.writeHead(200)\n\t\t\t\t\t\t\tres.end()\n\n\t\t\t\t\t\t\tthis.storage.setItem(`updatePhase`, `notified`)\n\t\t\t\t\t\t\tthis.storage.setItem(`updateAwaitedVersion`, versionForeignInput)\n\t\t\t\t\t\t\tconst { checkAvailability } = options.scripts\n\t\t\t\t\t\t\tif (checkAvailability) {\n\t\t\t\t\t\t\t\tthis.updateAvailabilityChecker?.stop()\n\t\t\t\t\t\t\t\tthis.seekUpdate(versionForeignInput)\n\t\t\t\t\t\t\t\tconst updatePhase = this.storage.getItem(`updatePhase`)\n\t\t\t\t\t\t\t\tthis.logger.info(`> storage(\"updatePhase\") >`, updatePhase)\n\t\t\t\t\t\t\t\tif (updatePhase === `notified`) {\n\t\t\t\t\t\t\t\t\tthis.updateAvailabilityChecker = new CronJob(\n\t\t\t\t\t\t\t\t\t\t`30 * * * * *`,\n\t\t\t\t\t\t\t\t\t\t() => {\n\t\t\t\t\t\t\t\t\t\t\tthis.seekUpdate(versionForeignInput)\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tthis.updateAvailabilityChecker.start()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.downloadPackage()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} catch (thrown) {\n\t\t\t\t\t\t\tthis.logger.error(thrown, req.url)\n\t\t\t\t\t\t\tif (typeof thrown === `number`) {\n\t\t\t\t\t\t\t\tres.writeHead(thrown)\n\t\t\t\t\t\t\t\tres.end()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\tdata = []\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t}).listen(port, () => {\n\t\t\t\tthis.logger.info(`Server started on port ${port}`)\n\t\t\t})\n\t\t}\n\n\t\tthis.startAllServices()\n\t\t\t.then(() => {\n\t\t\t\tthis.logger.info(`All services started.`)\n\t\t\t})\n\t\t\t.catch((thrown) => {\n\t\t\t\tif (thrown instanceof Error) {\n\t\t\t\t\tthis.logger.error(`Failed to start all services:`, thrown.message)\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\tprotected seekUpdate(version: string): void {\n\t\tthis.logger.info(`Checking for updates...`)\n\t\tconst { checkAvailability } = this.options.scripts\n\t\tif (!checkAvailability) {\n\t\t\tthis.logger.info(`No checkAvailability script found.`)\n\t\t\treturn\n\t\t}\n\t\ttry {\n\t\t\tconst out = execSync(`${checkAvailability} ${version}`)\n\t\t\tthis.logger.info(`Check stdout:`, out.toString())\n\t\t\tthis.updateAvailabilityChecker?.stop()\n\t\t\tthis.storage.setItem(`updatePhase`, `confirmed`)\n\t\t\tthis.downloadPackage()\n\t\t\tthis.announceUpdate()\n\t\t} catch (thrown) {\n\t\t\tif (thrown instanceof Error) {\n\t\t\t\tthis.logger.error(`Check failed:`, thrown.message)\n\t\t\t} else {\n\t\t\t\tconst thrownType = discoverType(thrown)\n\t\t\t\tthis.logger.error(`Check threw`, thrownType, thrown)\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected announceUpdate(): void {\n\t\tfor (const entry of toEntries(this.services)) {\n\t\t\tconst [serviceName, service] = entry\n\t\t\tif (service) {\n\t\t\t\tif (this.options.services[serviceName].waitFor) {\n\t\t\t\t\tservice.emit(`updatesReady`)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.startService(serviceName)\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected tryUpdate(): void {\n\t\tif (toEntries(this.servicesReadyToUpdate).every(([, isReady]) => isReady)) {\n\t\t\tthis.logger.info(`All services are ready to update.`)\n\t\t\tthis.stopAllServices()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.logger.info(`All services stopped; starting up fresh...`)\n\t\t\t\t\tthis.startAllServices()\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tthis.logger.info(`All services started; we're back online.`)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((thrown) => {\n\t\t\t\t\t\t\tif (thrown instanceof Error) {\n\t\t\t\t\t\t\t\tthis.logger.error(\n\t\t\t\t\t\t\t\t\t`Failed to start all services:`,\n\t\t\t\t\t\t\t\t\tthrown.message,\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})\n\t\t\t\t.catch((thrown) => {\n\t\t\t\t\tif (thrown instanceof Error) {\n\t\t\t\t\t\tthis.logger.error(`Failed to stop all services:`, thrown.message)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t}\n\n\tprotected startAllServices(): Future<unknown> {\n\t\tthis.logger.info(`Starting all services...`)\n\t\tthis.autoRespawnDeadServices = true\n\t\tconst setupPhase = this.storage.getItem(`setupPhase`)\n\t\tthis.logger.info(`> storage(\"setupPhase\") >`, setupPhase)\n\t\tswitch (setupPhase) {\n\t\t\tcase null:\n\t\t\t\tthis.logger.info(`Starting from scratch.`)\n\t\t\t\tthis.downloadPackage()\n\t\t\t\tthis.installPackage()\n\t\t\t\treturn this.startAllServices()\n\t\t\tcase `downloaded`:\n\t\t\t\tthis.logger.info(`Found package downloaded but not installed.`)\n\t\t\t\tthis.installPackage()\n\t\t\t\treturn this.startAllServices()\n\t\t\tcase `installed`: {\n\t\t\t\tfor (const [serviceName] of toEntries(this.services)) {\n\t\t\t\t\tthis.startService(serviceName)\n\t\t\t\t}\n\t\t\t\treturn this.live\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected startService(serviceName: S): void {\n\t\tthis.logger.info(\n\t\t\t`Starting service ${this.options.packageName}::${serviceName}, try ${this.safety}/2...`,\n\t\t)\n\t\tif (this.safety >= 2) {\n\t\t\tthrow new Error(`Out of tries...`)\n\t\t}\n\t\tthis.safety++\n\n\t\tconst [exe, ...args] = this.options.services[serviceName].run.split(` `)\n\t\tconst serviceProcess = spawn(exe, args, {\n\t\t\tcwd: this.options.flightdeckRootDir,\n\t\t\tenv: import.meta.env as Record<string, string>,\n\t\t})\n\t\tconst serviceLogger = this.serviceLoggers[serviceName]\n\t\tconst service = (this.services[serviceName] = new ChildSocket(\n\t\t\tserviceProcess,\n\t\t\t`${this.options.packageName}::${serviceName}`,\n\t\t\tserviceLogger,\n\t\t))\n\t\tserviceLogger.processCode = service.process.pid ?? -1\n\t\tthis.services[serviceName].onAny((...messages) => {\n\t\t\tserviceLogger.info(`💬`, ...messages)\n\t\t})\n\t\tthis.services[serviceName].on(`readyToUpdate`, () => {\n\t\t\tthis.logger.info(`Service \"${serviceName}\" is ready to update.`)\n\t\t\tthis.servicesReadyToUpdate[serviceName] = true\n\t\t\tthis.tryUpdate()\n\t\t})\n\t\tthis.services[serviceName].on(`alive`, () => {\n\t\t\tthis.servicesLive[this.serviceIdx[serviceName]].use(Promise.resolve())\n\t\t\tthis.servicesDead[this.serviceIdx[serviceName]] = new Future(() => {})\n\t\t\tif (this.dead.done) {\n\t\t\t\tthis.dead = new Future(() => {})\n\t\t\t}\n\t\t\tthis.dead.use(Promise.all(this.servicesDead))\n\t\t})\n\t\tthis.services[serviceName].process.once(`close`, (exitCode) => {\n\t\t\tthis.logger.info(\n\t\t\t\t`Auto-respawn saw \"${serviceName}\" exit with code ${exitCode}`,\n\t\t\t)\n\t\t\tthis.services[serviceName] = null\n\t\t\tif (!this.autoRespawnDeadServices) {\n\t\t\t\tthis.logger.info(`Auto-respawn is off; \"${serviceName}\" rests.`)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst updatePhase = this.storage.getItem(`updatePhase`)\n\t\t\tthis.logger.info(`> storage(\"updatePhase\") >`, updatePhase)\n\t\t\tconst updatesAreReady = updatePhase === `confirmed`\n\t\t\tif (updatesAreReady) {\n\t\t\t\tthis.serviceLoggers[serviceName].info(`Updating before startup...`)\n\t\t\t\tthis.restartTimes = []\n\t\t\t\tthis.installPackage()\n\t\t\t\tthis.startService(serviceName)\n\t\t\t} else {\n\t\t\t\tconst now = Date.now()\n\t\t\t\tconst fiveMinutesAgo = now - 5 * 60 * 1000\n\t\t\t\tthis.restartTimes = this.restartTimes.filter(\n\t\t\t\t\t(time) => time > fiveMinutesAgo,\n\t\t\t\t)\n\t\t\t\tthis.restartTimes.push(now)\n\n\t\t\t\tif (this.restartTimes.length < 5) {\n\t\t\t\t\tthis.serviceLoggers[serviceName].info(`Crashed. Restarting...`)\n\t\t\t\t\tthis.startService(serviceName)\n\t\t\t\t} else {\n\t\t\t\t\tthis.serviceLoggers[serviceName].info(\n\t\t\t\t\t\t`Crashed 5 times in 5 minutes. Not restarting.`,\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tthis.safety = 0\n\t}\n\n\tprotected downloadPackage(): void {\n\t\tthis.logger.info(`Downloading...`)\n\t\ttry {\n\t\t\tconst out = execSync(this.options.scripts.download)\n\t\t\tthis.logger.info(`Download stdout:`, out.toString())\n\t\t\tthis.storage.setItem(`setupPhase`, `downloaded`)\n\t\t\tthis.logger.info(`Downloaded!`)\n\t\t} catch (thrown) {\n\t\t\tif (thrown instanceof Error) {\n\t\t\t\tthis.logger.error(`Failed to get the latest release: ${thrown.message}`)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t}\n\n\tprotected installPackage(): void {\n\t\tthis.logger.info(`Installing...`)\n\n\t\ttry {\n\t\t\tconst out = execSync(this.options.scripts.install)\n\t\t\tthis.logger.info(`Install stdout:`, out.toString())\n\t\t\tthis.storage.setItem(`setupPhase`, `installed`)\n\t\t\tthis.logger.info(`Installed!`)\n\t\t} catch (thrown) {\n\t\t\tif (thrown instanceof Error) {\n\t\t\t\tthis.logger.error(`Failed to get the latest release: ${thrown.message}`)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t}\n\n\tpublic stopAllServices(): Future<unknown> {\n\t\tthis.logger.info(`Stopping all services... auto-respawn disabled.`)\n\t\tthis.autoRespawnDeadServices = false\n\t\tfor (const [serviceName] of toEntries(this.services)) {\n\t\t\tthis.stopService(serviceName)\n\t\t}\n\t\treturn this.dead\n\t}\n\n\tpublic stopService(serviceName: S): void {\n\t\tconst service = this.services[serviceName]\n\t\tif (service) {\n\t\t\tthis.logger.info(`Stopping service \"${serviceName}\"...`)\n\t\t\tthis.servicesDead[this.serviceIdx[serviceName]].use(\n\t\t\t\tnew Promise((pass) => {\n\t\t\t\t\tservice.emit(`timeToStop`)\n\t\t\t\t\tservice.process.once(`close`, (exitCode) => {\n\t\t\t\t\t\tthis.logger.info(\n\t\t\t\t\t\t\t`Stopped service \"${serviceName}\"; exited with code ${exitCode}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t\tthis.services[serviceName] = null\n\t\t\t\t\t\tpass()\n\t\t\t\t\t})\n\t\t\t\t}),\n\t\t\t)\n\t\t\tthis.dead.use(Promise.all(this.servicesDead))\n\t\t\tthis.servicesLive[this.serviceIdx[serviceName]] = new Future(() => {})\n\t\t\tif (this.live.done) {\n\t\t\t\tthis.live = new Future(() => {})\n\t\t\t}\n\t\t\tthis.live.use(Promise.all(this.servicesLive))\n\t\t} else {\n\t\t\tthis.serviceLoggers[serviceName].error(\n\t\t\t\t`Tried to stop service, but it wasn't running.`,\n\t\t\t)\n\t\t}\n\t}\n}\n\nexport const FLIGHTDECK_INFO = `info`\nexport const FLIGHTDECK_WARN = `warn`\nexport const FLIGHTDECK_ERROR = `ERR!`\n\nexport const flightDeckLogSchema = z.object({\n\tlevel: z.union([\n\t\tz.literal(FLIGHTDECK_INFO),\n\t\tz.literal(FLIGHTDECK_WARN),\n\t\tz.literal(FLIGHTDECK_ERROR),\n\t]),\n\ttimestamp: z.number(),\n\tpackage: z.string(),\n\tservice: z.string().optional(),\n\tprocess: z.number(),\n\tbody: z.string(),\n})\nexport type FlightDeckLog = z.infer<typeof flightDeckLogSchema>\n\nconst LINE_FORMAT = `line-format` satisfies keyof LnavFormat\nconst VALUE = `value` satisfies keyof LnavFormat\n\nexport type LnavFormatVisualComponent = Exclude<\n\tExclude<LnavFormat[`line-format`], undefined>[number],\n\tstring\n>\n\nexport type LnavFormatBreakdown = Exclude<LnavFormat[`value`], undefined>\nexport type MemberOf<T> = T[keyof T]\nexport type LnavFormatValueDefinition = MemberOf<LnavFormatBreakdown>\n\nexport type FlightDeckFormat = {\n\t[LINE_FORMAT]: (\n\t\t| string\n\t\t| (LnavFormatVisualComponent & {\n\t\t\t\tfield: keyof FlightDeckLog | `__level__` | `__timestamp__`\n\t\t })\n\t)[]\n\t[VALUE]: {\n\t\t[K in keyof FlightDeckLog]: LnavFormatValueDefinition & {\n\t\t\tkind: FlightDeckLog[K] extends number | undefined\n\t\t\t\t? `integer`\n\t\t\t\t: FlightDeckLog[K] extends string | undefined\n\t\t\t\t\t? `string`\n\t\t\t\t\t: never\n\t\t}\n\t}\n}\n\nexport const FLIGHTDECK_LNAV_FORMAT = {\n\ttitle: `FlightDeck Log`,\n\tdescription: `Format for events logged by the FlightDeck process manager.`,\n\t\"file-type\": `json`,\n\t\"timestamp-field\": `timestamp`,\n\t\"timestamp-divisor\": 1000,\n\t\"module-field\": `package`,\n\t\"opid-field\": `service`,\n\t\"level-field\": `level`,\n\tlevel: {\n\t\tinfo: FLIGHTDECK_INFO,\n\t\twarning: FLIGHTDECK_WARN,\n\t\terror: FLIGHTDECK_ERROR,\n\t},\n\n\t[LINE_FORMAT]: [\n\t\t{\n\t\t\tfield: `level`,\n\t\t},\n\t\t{\n\t\t\tprefix: ` `,\n\t\t\tfield: `__timestamp__`,\n\t\t\t\"timestamp-format\": `%Y-%m-%dT%H:%M:%S.%L%Z`,\n\t\t},\n\t\t{\n\t\t\tprefix: ` `,\n\t\t\tfield: `process`,\n\t\t\t\"min-width\": 5,\n\t\t},\n\t\t{\n\t\t\tprefix: `:`,\n\t\t\tfield: `package`,\n\t\t},\n\t\t{\n\t\t\tprefix: `:`,\n\t\t\tfield: `service`,\n\t\t\t\"default-value\": ``,\n\t\t},\n\t\t{\n\t\t\tprefix: `: `,\n\t\t\tfield: `body`,\n\t\t},\n\t],\n\n\t[VALUE]: {\n\t\ttimestamp: {\n\t\t\tkind: `integer`,\n\t\t},\n\t\tlevel: {\n\t\t\tkind: `string`,\n\t\t},\n\t\tpackage: {\n\t\t\tkind: `string`,\n\t\t},\n\t\tservice: {\n\t\t\tkind: `string`,\n\t\t},\n\t\tprocess: {\n\t\t\tkind: `integer`,\n\t\t},\n\t\tbody: {\n\t\t\tkind: `string`,\n\t\t},\n\t},\n} as const satisfies FlightDeckFormat & LnavFormat\n\nexport class FlightDeckLogger\n\timplements Pick<Console, `error` | `info` | `warn`>\n{\n\tpublic readonly packageName: string\n\tpublic readonly serviceName?: string\n\tpublic readonly jsonLogging: boolean\n\tpublic processCode: number\n\tpublic constructor(\n\t\tpackageName: string,\n\t\tprocessCode: number,\n\t\tserviceName?: string,\n\t\toptions?: { jsonLogging: boolean },\n\t) {\n\t\tthis.packageName = packageName\n\t\tif (serviceName) {\n\t\t\tthis.serviceName = serviceName\n\t\t}\n\t\tthis.processCode = processCode\n\t\tthis.jsonLogging = options?.jsonLogging ?? false\n\t}\n\tprotected log(\n\t\tlevel:\n\t\t\t| typeof FLIGHTDECK_ERROR\n\t\t\t| typeof FLIGHTDECK_INFO\n\t\t\t| typeof FLIGHTDECK_WARN,\n\t\t...messages: unknown[]\n\t): void {\n\t\tif (this.jsonLogging) {\n\t\t\tlet body = messages\n\t\t\t\t.map((message) =>\n\t\t\t\t\ttypeof message === `string`\n\t\t\t\t\t\t? message\n\t\t\t\t\t\t: inspect(message, false, null, true),\n\t\t\t\t)\n\t\t\t\t.join(` `)\n\t\t\tif (body.includes(`\\n`)) {\n\t\t\t\tbody = `\\n ${body.split(`\\n`).join(`\\n `)}`\n\t\t\t}\n\t\t\tconst log: FlightDeckLog = {\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t\tlevel,\n\t\t\t\tprocess: this.processCode,\n\t\t\t\tpackage: this.packageName,\n\t\t\t\tbody,\n\t\t\t}\n\t\t\tif (this.serviceName) {\n\t\t\t\tlog.service = this.serviceName\n\t\t\t}\n\t\t\tprocess.stdout.write(JSON.stringify(log) + `\\n`)\n\t\t} else {\n\t\t\tconst source = this.serviceName\n\t\t\t\t? `${this.packageName}:${this.serviceName}`\n\t\t\t\t: this.packageName\n\t\t\tswitch (level) {\n\t\t\t\tcase FLIGHTDECK_INFO:\n\t\t\t\t\tconsole.log(`${source}:`, ...messages)\n\t\t\t\t\tbreak\n\t\t\t\tcase FLIGHTDECK_WARN:\n\t\t\t\t\tconsole.warn(`${source}:`, ...messages)\n\t\t\t\t\tbreak\n\t\t\t\tcase FLIGHTDECK_ERROR:\n\t\t\t\t\tconsole.error(`${source}:`, ...messages)\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}\n\tpublic info(...messages: unknown[]): void {\n\t\tthis.log(FLIGHTDECK_INFO, ...messages)\n\t}\n\n\tpublic warn(...messages: unknown[]): void {\n\t\tthis.log(FLIGHTDECK_WARN, ...messages)\n\t}\n\n\tpublic error(...messages: unknown[]): void {\n\t\tthis.log(FLIGHTDECK_ERROR, ...messages)\n\t}\n}\n"]}
|