import type { AtomLifecycleEvent, FamilyMetadata, MutableAtomFamilyToken, MutableAtomToken, ReadonlyHeldSelectorFamilyToken, ReadonlyHeldSelectorToken, ReadonlyPureSelectorFamilyToken, ReadonlyPureSelectorToken, RegularAtomFamilyToken, RegularAtomToken, StateUpdate, WritableHeldSelectorFamilyToken, WritableHeldSelectorToken, WritablePureSelectorFamilyToken, WritablePureSelectorToken, } from "atom.io" import type { Canonical } from "atom.io/foundations/canonical" import type { Subject } from "atom.io/foundations/subject" import type { Flat } from "atom.io/foundations/type-utils" import type { InternalRole } from "./atom/index.ts" import type { ConstructorOf, Transceiver } from "./mutable/index.ts" import type { Store } from "./store/index.ts" import type { Timeline, TimelineFamily } from "./timeline/index.ts" import type { RootStore, Transaction } from "./transaction/index.ts" import type { Ctor } from "./utility-types.ts" export type AtomIOState = { key: string family?: FamilyMetadata install: (store: RootStore) => void subject: Subject> } export type RegularAtom = Flat< AtomIOState & { type: `atom` default: T | (() => T) cleanup?: () => void internalRoles?: InternalRole[] catch?: readonly Ctor[] __T?: T __E?: E } > export type MutableAtom> = Flat< AtomIOState & { type: `mutable_atom` class: ConstructorOf cleanup?: () => void __T?: T } > export type Atom = | RegularAtom | (T extends Transceiver ? MutableAtom : never) export type WritableHeldSelector = Flat< AtomIOState & { type: `writable_held_selector` const: T getFrom: (target: Store) => T setSelf: (newValue: T) => void __T?: T } > export type ReadonlyHeldSelector = Flat< AtomIOState & { type: `readonly_held_selector` const: T getFrom: (target: Store) => T __T?: T } > export type WritablePureSelector = Flat< AtomIOState & { type: `writable_pure_selector` getFrom: (target: Store) => E | T setSelf: (newValue: T) => void catch?: readonly Ctor[] __T?: T __E?: E } > export type ReadonlyPureSelector = Flat< AtomIOState & { type: `readonly_pure_selector` getFrom: (target: Store) => E | T catch?: readonly Ctor[] __T?: T __E?: E } > export type ReadonlySelector = | ReadonlyHeldSelector | ReadonlyPureSelector export type WritableSelector = | WritableHeldSelector | WritablePureSelector export type HeldSelector = ReadonlyHeldSelector | WritableHeldSelector export type PureSelector = | ReadonlyPureSelector | WritablePureSelector export type Selector = | ReadonlyHeldSelector | ReadonlyPureSelector | WritableHeldSelector | WritablePureSelector export type WritableState = Atom | WritableSelector export type ReadableState = Atom | Selector // dprint-ignore export type RegularAtomFamily = Flat< RegularAtomFamilyToken & { create: (key: Key) => RegularAtomToken default: T | ((key: K) => T) install: (store: RootStore) => void internalRoles: string[] | undefined subject: Subject>> } > export type MutableAtomFamily< T extends Transceiver, K extends Canonical, > = Flat< MutableAtomFamilyToken & { create: (key: Key) => MutableAtomToken class: ConstructorOf install: (store: RootStore) => void internalRoles: string[] | undefined subject: Subject>> } > export type AtomFamily = | MutableAtomFamily ? T : never, K> | RegularAtomFamily export type WritablePureSelectorFamily = Flat< WritablePureSelectorFamilyToken & { create: (key: Key) => WritablePureSelectorToken default: (key: K) => T install: (store: RootStore) => void internalRoles: string[] | undefined } > export type WritableHeldSelectorFamily = Flat< WritableHeldSelectorFamilyToken & { create: (key: Key) => WritableHeldSelectorToken default: (key: K) => T install: (store: RootStore) => void internalRoles: string[] | undefined } > export type ReadonlyPureSelectorFamily = Flat< ReadonlyPureSelectorFamilyToken & { create: (key: Key) => ReadonlyPureSelectorToken default: (key: K) => T install: (store: RootStore) => void internalRoles: string[] | undefined } > export type ReadonlyHeldSelectorFamily = Flat< ReadonlyHeldSelectorFamilyToken & { create: (key: Key) => ReadonlyHeldSelectorToken default: (key: K) => T install: (store: RootStore) => void internalRoles: string[] | undefined } > export type PureSelectorFamily = | ReadonlyPureSelectorFamily | WritablePureSelectorFamily export type HeldSelectorFamily = | ReadonlyHeldSelectorFamily | WritableHeldSelectorFamily export type ReadonlySelectorFamily = | ReadonlyHeldSelectorFamily | ReadonlyPureSelectorFamily export type WritableSelectorFamily = | WritableHeldSelectorFamily | WritablePureSelectorFamily export type SelectorFamily = | HeldSelectorFamily | PureSelectorFamily export type WritableFamily = | AtomFamily | WritableSelectorFamily export type ReadableFamily = | AtomFamily | SelectorFamily export type AtomIOInternalResource = | ReadableFamily | ReadableState | Timeline | TimelineFamily | Transaction