UNPKG

@zedux/atoms

Version:

A Molecular State Engine for React

112 lines (107 loc) 2.64 kB
import { Store, StoreStateType } from '@zedux/core' import { AtomConfig, AtomApiPromise, AtomValueOrFactory, PromiseState, } from '../types/index' import { AtomTemplate } from '../classes/templates/AtomTemplate' import { AtomApi } from '../classes/AtomApi' export const atom: { // Query Atoms < State = any, Params extends any[] = [], Exports extends Record<string, any> = Record<string, never> >( key: string, value: (...params: Params) => AtomApi<{ Exports: Exports Promise: any State: Promise<State> Store: undefined }>, config?: AtomConfig<State> ): AtomTemplate<{ State: PromiseState<State> Params: Params Exports: Exports Store: Store<PromiseState<State>> Promise: Promise<State> }> // Custom Stores < StoreType extends Store<any> = Store<any>, Params extends any[] = [], Exports extends Record<string, any> = Record<string, never>, PromiseType extends AtomApiPromise = undefined >( key: string, value: (...params: Params) => | StoreType | AtomApi<{ Exports: Exports Promise: PromiseType State: StoreStateType<Store> Store: StoreType }>, config?: AtomConfig<StoreStateType<StoreType>> ): AtomTemplate<{ State: StoreStateType<StoreType> Params: Params Exports: Exports Store: StoreType Promise: PromiseType }> // Catch-all < State = any, Params extends any[] = [], Exports extends Record<string, any> = Record<string, never>, StoreType extends Store<State> = Store<State>, PromiseType extends AtomApiPromise = undefined >( key: string, value: AtomValueOrFactory<{ Exports: Exports Params: Params Promise: PromiseType State: State Store: StoreType }>, config?: AtomConfig<State> ): AtomTemplate<{ Exports: Exports Params: Params Promise: PromiseType State: State Store: StoreType }> } = < State = any, Params extends any[] = [], Exports extends Record<string, any> = Record<string, never>, StoreType extends Store<State> = Store<State>, PromiseType extends AtomApiPromise = undefined >( key: string, value: AtomValueOrFactory<{ Exports: Exports Params: Params Promise: PromiseType State: State Store: StoreType }>, config?: AtomConfig<State> ) => { if (DEV && !key) { throw new TypeError('Zedux: All atoms must have a key') } return new AtomTemplate<{ State: State Params: Params Exports: Exports Store: StoreType Promise: PromiseType }>(key, value, config) }