UNPKG

@altostra/core

Version:

Core library for shared types and logic

50 lines (49 loc) 2.57 kB
import type { Dict, Key } from "../../common/Types"; import type { Configuration, ConfigurationKey, SettingsType } from "./Common"; export declare const SETTINGS_OPTIONS: unique symbol; export interface OverridingProperty<T> { value: T; $overrides: boolean; } export declare type MaybeOverride<T> = OverridingProperty<T> | T; export declare type RawSettingProp<T extends object, TKey extends ConfigurationKey<T>> = MaybeOverride<TKey extends keyof T ? T[TKey] : string>; export declare type RawSettings<T extends object> = { [K in ConfigurationKey<T>]: RawSettingProp<T, K>; }; export declare function isOverridingSetting<T>(val: OverridingProperty<T> | T): val is OverridingProperty<T>; export interface WrapperFactoryParamsBase<T extends object> { type: SettingsType; settings: RawSettings<T>; keys: Set<Key>; } export interface DefaultWrapperFactoryParams<T extends object> extends WrapperFactoryParamsBase<T> { type: 'default'; } export interface GlobalWrapperFactoryParams<T extends object> extends WrapperFactoryParamsBase<T> { type: 'global'; } export interface ProjectWrapperFactoryParams<T extends object> extends WrapperFactoryParamsBase<T> { type: 'project'; globals: RawSettings<T>; overriddenKeys: (namespace: string, key: Key) => boolean; } export declare type WrapperFactorParams<T extends object> = DefaultWrapperFactoryParams<T> | GlobalWrapperFactoryParams<T> | ProjectWrapperFactoryParams<T>; interface WrappedSettingsData<T extends object> { wrapper: Configuration<T>; isOverride: (namespace: string, key: ConfigurationKey<T>) => boolean; getSettingType: (key: ConfigurationKey<T>) => SettingsType; deleteKey: (key: keyof T) => void; getNamespace: (key: ConfigurationKey<T>) => string; refreshSettings: (config: Record<string, unknown>) => void; } export declare const NAMESPACE_DELIMITER = "::"; export declare function isNamespace(key: Key): boolean; export interface SettingsWrapperStrategy { default<T extends object>(params: DefaultWrapperFactoryParams<T>): WrappedSettingsData<T>; global<T extends object>(params: GlobalWrapperFactoryParams<T>): WrappedSettingsData<T>; project<T extends object>(params: ProjectWrapperFactoryParams<T>): WrappedSettingsData<T>; } export declare function isOwnProperty(obj: object, key: Key): boolean; export declare function getWrappedSettingsData<T extends object>(params: WrapperFactorParams<T>): WrappedSettingsData<T>; export declare function mkCache<T>(factory: (key: string, cache: Dict<T>) => T): (key: string) => T; export {};