import { newest } from "./lineage.ts" import type { Store } from "./store/index.ts" export type AtomKey = string & { __atomKey?: never; __brand?: T } export type SelectorKey = string & { __selectorKey?: never; __brand?: T } export type ReadonlySelectorKey = string & { __readonlySelectorKey?: never __brand?: T } export const isAtomKey = (store: Store, key: string): key is AtomKey => newest(store).atoms.has(key) export const isSelectorKey = ( store: Store, key: string, ): key is SelectorKey => newest(store).writableSelectors.has(key) export const isReadonlySelectorKey = ( store: Store, key: string, ): key is ReadonlySelectorKey => newest(store).readonlySelectors.has(key) export type StateKey = AtomKey | ReadonlySelectorKey | SelectorKey export const isStateKey = ( store: Store, key: string, ): key is StateKey => isAtomKey(store, key) || isSelectorKey(store, key) || isReadonlySelectorKey(store, key)