UNPKG

@zedux/stores

Version:

The legacy composable store model of Zedux

60 lines (59 loc) 4.47 kB
import { AnyNonNullishValue, AtomGenerics as NewAtomGenerics, AtomGetters, AtomSelectorOrConfig, AtomTemplateBase, GraphNode, Prettify } from '@zedux/atoms'; import { Store } from '@zedux/core'; import { AtomInstance } from './AtomInstance'; import { AtomApi } from './AtomApi'; export type AnyAtomApiGenerics = { [K in keyof AtomGenerics]: any; }; export type AnyAtomGenerics<G extends Partial<AtomGenerics> = AnyNonNullishValue> = Prettify<Omit<{ [K in keyof AtomGenerics]: any; }, keyof G> & G>; export type AnyAtomApi<G extends Partial<AtomApiGenerics> | 'any' = 'any'> = AtomApi<G extends Partial<AtomApiGenerics> ? AtomApiGenericsPartial<G> : any>; export type AnyStoreAtomInstance<G extends Partial<AtomGenerics> | 'any' = 'any'> = AtomInstance<G extends Partial<AtomGenerics> ? { Template: AnyStoreAtomTemplate<G>; } & AnyAtomGenerics<G> : any>; export type AnyStoreAtomTemplate<G extends Partial<AtomGenerics> | 'any' = 'any'> = AtomTemplateBase<G extends Partial<AtomGenerics> ? { Node: AnyStoreAtomInstance<G>; } & AnyAtomGenerics<G> : any>; export type AtomApiGenerics = Pick<AtomGenerics, 'Exports' | 'Promise' | 'State'> & { Store: Store<any> | undefined; }; export type AtomApiGenericsPartial<G extends Partial<AtomApiGenerics>> = Omit<AnyAtomApiGenerics, keyof G> & G; export type AtomGenericsToAtomApiGenerics<G extends Pick<AtomGenerics, 'Events' | 'Exports' | 'Promise' | 'State' | 'Store'>> = Pick<G, 'Exports' | 'Promise' | 'State'> & { Store: G['Store'] | undefined; }; export interface AtomGenerics extends NewAtomGenerics { Store: Store<any>; } export type AtomApiPromise = Promise<any> | undefined; export type AtomEventsType<A extends AnyAtomApi | AnyStoreAtomTemplate | GraphNode> = A extends AtomTemplateBase<infer G> ? G['Events'] : A extends GraphNode<infer G> ? G extends { Events: infer Events; } ? Events : never : never; export type AtomExportsType<A extends AnyAtomApi | AnyStoreAtomTemplate | GraphNode> = A extends AtomTemplateBase<infer G> ? G['Exports'] : A extends GraphNode<infer G> ? G extends { Exports: infer Exports; } ? Exports : never : A extends AtomApi<infer G> ? G['Exports'] : never; export type AtomInstanceType<A extends AnyStoreAtomTemplate> = A extends AtomTemplateBase<infer G> ? G extends { Node: infer Node; } ? Node : GraphNode<G> : never; export type AtomParamsType<A extends AnyStoreAtomTemplate | GraphNode | AtomSelectorOrConfig> = A extends AtomTemplateBase<infer G> ? G['Params'] : A extends GraphNode<infer G> ? G extends { Params: infer Params; } ? Params : never : A extends AtomSelectorOrConfig<any, infer Params> ? Params : never; export type AtomPromiseType<A extends AnyAtomApi | AnyStoreAtomTemplate | GraphNode> = A extends AtomTemplateBase<infer G> ? G['Promise'] : A extends GraphNode<infer G> ? G extends { Promise: infer Promise; } ? Promise : never : A extends AtomApi<infer G> ? G['Promise'] : never; export type AtomStateFactory<G extends Pick<AtomGenerics, 'Events' | 'Exports' | 'Params' | 'Promise' | 'State' | 'Store'>> = (...params: G['Params']) => AtomApi<AtomGenericsToAtomApiGenerics<G>> | G['Store'] | G['State']; export type AtomValueOrFactory<G extends Pick<AtomGenerics, 'Events' | 'Exports' | 'Params' | 'Promise' | 'State' | 'Store'>> = AtomStateFactory<G> | G['Store'] | G['State']; export type AtomStateType<A extends AnyAtomApi | AnyStoreAtomTemplate | AtomSelectorOrConfig | GraphNode> = A extends AtomTemplateBase<infer G> ? G['State'] : A extends GraphNode<infer G> ? G['State'] : A extends AtomApi<infer G> ? G['State'] : A extends AtomSelectorOrConfig<infer State> ? State : never; export type AtomStoreType<A extends AnyAtomApi | AnyStoreAtomTemplate | GraphNode> = A extends AtomTemplateBase<infer G> ? G extends { Store: infer Store; } ? Store : never : A extends GraphNode<infer G> ? G extends { Store: infer Store; } ? Store : never : A extends AtomApi<infer G> ? G['Store'] : never; export type AtomTemplateType<A extends GraphNode> = A extends GraphNode<infer G> ? G extends { Template: infer Template; } ? Template : G extends AtomGenerics ? AtomTemplateBase<G> : never : never; export type IonStateFactory<G extends Omit<AtomGenerics, 'Node' | 'Template'>> = (getters: AtomGetters, ...params: G['Params']) => AtomApi<AtomGenericsToAtomApiGenerics<G>> | G['Store'] | G['State']; export type SelectorGenerics = Pick<AtomGenerics, 'State'> & { Params: any[]; Template: AtomSelectorOrConfig; };