import type { AtomFamilyToken, AtomIOToken, AtomToken, MutableAtomFamilyToken, MutableAtomToken, ReadableFamilyToken, ReadableToken, ReadonlyPureSelectorFamilyToken, ReadonlyPureSelectorToken, RegularAtomFamilyToken, RegularAtomToken, SelectorFamilyToken, SelectorToken, TimelineFamilyToken, TimelineManageable, TimelineToken, TransactionToken, WritableFamilyToken, WritablePureSelectorFamilyToken, WritablePureSelectorToken, WritableToken, } from "atom.io" import type { Canonical } from "atom.io/foundations/canonical" import type { Transceiver } from "../mutable/index.ts" import type { Atom, AtomFamily, AtomIOInternalResource, MutableAtom, MutableAtomFamily, ReadableFamily, ReadableState, ReadonlyPureSelector, ReadonlyPureSelectorFamily, RegularAtom, RegularAtomFamily, Selector, SelectorFamily, WritableFamily, WritablePureSelector, WritablePureSelectorFamily, WritableState, } from "../state-types.ts" import type { Timeline, TimelineFamily } from "../timeline/index.ts" import type { Transaction } from "../transaction/index.ts" import type { Fn } from "../utility-types.ts" export function deposit( state: RegularAtom, ): RegularAtomToken export function deposit>( state: MutableAtom, ): MutableAtomToken export function deposit(state: Atom): AtomToken export function deposit( state: WritablePureSelector, ): WritablePureSelectorToken export function deposit( state: ReadonlyPureSelector, ): ReadonlyPureSelectorToken export function deposit(state: Selector): SelectorToken export function deposit( state: WritableState, ): WritableToken export function deposit( state: ReadableState, ): ReadableToken export function deposit( state: RegularAtomFamily, ): RegularAtomFamilyToken export function deposit< T extends Transceiver, K extends Canonical, >(state: MutableAtomFamily): MutableAtomFamilyToken export function deposit( state: AtomFamily, ): AtomFamilyToken export function deposit( state: WritablePureSelectorFamily, ): WritablePureSelectorFamilyToken export function deposit( state: ReadonlyPureSelectorFamily, ): ReadonlyPureSelectorFamilyToken export function deposit( state: SelectorFamily, ): SelectorFamilyToken export function deposit( state: WritableFamily, ): WritableFamilyToken export function deposit( state: ReadableFamily, ): ReadableFamilyToken export function deposit(state: Transaction): TransactionToken export function deposit( state: TimelineFamily, ): TimelineFamilyToken export function deposit( state: Timeline, ): TimelineToken export function deposit(resource: AtomIOInternalResource): AtomIOToken export function deposit(state: AtomIOInternalResource): AtomIOToken { const token = { key: state.key, type: state.type, } as any if (`family` in state) { token.family = state.family } return token }