Spaces:
Running
Running
import { Config, ResolvableTo, ThemeConfig } from './types/config' | |
import { DefaultTheme } from './types/generated/default-theme' | |
import { DefaultColors } from './types/generated/colors' | |
type ResolvedConfig<T extends Config> = Omit<T, 'theme'> & { | |
theme: MergeThemes< | |
UnwrapResolvables<Omit<T['theme'], 'extend'>>, | |
T['theme'] extends { extend: infer TExtend } ? UnwrapResolvables<TExtend> : {} | |
> | |
} | |
type UnwrapResolvables<T> = { | |
[K in keyof T]: T[K] extends ResolvableTo<infer R> ? R : T[K] | |
} | |
type ThemeConfigResolved = UnwrapResolvables<ThemeConfig> | |
type DefaultThemeFull = DefaultTheme & { colors: DefaultColors } | |
type MergeThemes<Overrides extends object, Extensions extends object> = { | |
[K in keyof ThemeConfigResolved | keyof Overrides]: (K extends keyof Overrides | |
? Overrides[K] | |
: K extends keyof DefaultThemeFull | |
? DefaultThemeFull[K] | |
: K extends keyof ThemeConfigResolved | |
? ThemeConfigResolved[K] | |
: never) & | |
(K extends keyof Extensions ? Extensions[K] : {}) | |
} | |
declare function resolveConfig<T extends Config>(config: T): ResolvedConfig<T> | |
export = resolveConfig | |