@altostra/core
Version:
Core library for shared types and logic
50 lines (49 loc) • 2.57 kB
TypeScript
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 {};