import { Store } from '@zedux/core' import { AtomInstance } from '../classes/instances/AtomInstance' import { AtomInstanceBase } from '../classes/instances/AtomInstanceBase' import { AtomTemplateBase } from '../classes/templates/AtomTemplateBase' import { AtomApi } from '../classes/AtomApi' export type AtomApiGenericsPartial> = Omit< AnyAtomApiGenerics, keyof G > & G export type AnyAtomApiGenerics = { [K in keyof AtomGenerics]: any } export type AnyAtomGenerics = { [K in keyof AtomGenerics]: any } export type AnyAtomApi | 'any' = 'any'> = AtomApi ? AtomApiGenericsPartial : any> export type AnyAtomInstance | 'any' = 'any'> = AtomInstance ? AtomGenericsPartial : any> export type AnyAtomTemplate | 'any' = 'any'> = AtomTemplateBase< G extends Partial ? AtomGenericsPartial : any, AnyAtomInstance > export type AtomApiGenerics = Omit & { Store: Store | undefined } export type AtomGenericsToAtomApiGenerics = Omit< G, 'Params' | 'Store' > & { Store: G['Store'] | undefined } export interface AtomGenerics { Exports: Record Params: any[] Promise: AtomApiPromise State: any Store: Store } export type AtomGenericsPartial> = Omit< AnyAtomGenerics, keyof G > & G export type AtomApiPromise = Promise | undefined export type AtomExportsType< A extends AnyAtomApi | AnyAtomTemplate | AnyAtomInstance > = A extends AtomTemplateBase ? G['Exports'] : A extends AtomInstance ? G['Exports'] : A extends AtomApi ? G['Exports'] : never export type AtomInstanceType = A extends AtomTemplateBase ? T : never export type AtomParamsType = A extends AtomTemplateBase> ? G['Params'] : A extends AtomInstance ? G['Params'] : never export type AtomPromiseType< A extends AnyAtomApi | AnyAtomTemplate | AnyAtomInstance > = A extends AtomTemplateBase> ? G['Promise'] : A extends AtomInstance ? G['Promise'] : A extends AtomApi ? G['Promise'] : never export type AtomStateType< A extends AnyAtomApi | AnyAtomTemplate | AnyAtomInstance > = A extends AtomTemplateBase> ? G['State'] : A extends AtomInstance ? G['State'] : A extends AtomApi ? G['State'] : never export type AtomStoreType< A extends AnyAtomApi | AnyAtomTemplate | AnyAtomInstance > = A extends AtomTemplateBase> ? G['Store'] : A extends AtomInstance ? G['Store'] : A extends AtomApi ? G['Store'] : never export type AtomTemplateType< A extends AtomInstanceBase>> > = A extends AtomInstanceBase ? T : never