import { readInstance } from '../classes/EvaluationStack' /** * injectAtomGetters * * An injector that returns an AtomGetters object. The returned AtomGetters * dynamically register dependencies for the current atom instance when called * synchronously during atom evaluation. * * ```ts * const exampleAtom = atom('example', () => { * const { ecosystem, get, getInstance } = injectAtomGetters() * const dynamicVal = get(myAtom) // registers a dynamic graph edge * const instance = getInstance(myAtom) // registers a static graph edge * const fromEcosystem = ecosystem.get(myAtom) // doesn't register anything * * injectEffect(() => { * const dynamicVal2 = get(myAtom) // doesn't register anything * const instance2 = getInstance(myAtom) // doesn't register anything * const fromEcosystem2 = ecosystem.get(myAtom) // doesn't register anything * }, []) // no need to pass AtomGetters as deps; they're stable references * }) * ``` * * @see AtomGetters */ export const injectAtomGetters = () => { const instance = readInstance() return instance.ecosystem._evaluationStack.atomGetters }