narraleaf-react
Version:
A React visual novel player framework
38 lines (37 loc) • 1.84 kB
TypeScript
import { EmptyObject } from "../game/nlcore/elements/transition/type";
type ConfigHandler<T, U> = (config: T) => U;
type ConfigHandlersDataType<T extends Record<string, any>> = {
[K in keyof T]?: any;
};
export type MergeConfig<Raw extends Record<string, any>, Handlers extends ConfigHandlersDataType<Raw> = Record<string, any>> = {
[K in keyof Raw]: K extends keyof Handlers ? Handlers[K] : Raw[K];
};
export type ConfigHandlers<Raw extends Record<string, any>, Handlers extends ConfigHandlersDataType<Raw>> = {
[K in keyof Raw]?: ConfigHandler<Raw[K], Handlers[K]>;
};
export declare class ConfigConstructor<Raw extends Record<string, any>, Handlers extends ConfigHandlersDataType<Raw> = EmptyObject> {
private defaultConfig;
private readonly handlers;
constructor(defaultConfig: Raw, handlers?: ConfigHandlers<Raw, Handlers>);
create(config?: Partial<Raw>): Config<Raw, Handlers>;
copy(): ConfigConstructor<Raw, Handlers>;
keys(): (keyof Raw)[];
getDefaultConfig(): Raw;
private mergeWithDefaultConfig;
private mergeValue;
private isPlainObject;
private applyHandler;
}
export declare class Config<Raw extends Record<string, any>, Handlers extends ConfigHandlersDataType<Raw> = EmptyObject> {
private config;
constructor(config: MergeConfig<Raw, Handlers>);
get(): MergeConfig<Raw, Handlers>;
copy(): Config<Raw, Handlers>;
join<T extends Record<string, any>>(config: T | Config<T, any>): Config<Omit<Raw, keyof T> & T, Handlers>;
extract<T extends Extract<keyof MergeConfig<Raw, Handlers>, string>>(keys: T[]): [
picked: Config<Pick<MergeConfig<Raw, Handlers>, T>, Handlers>,
rest: Config<Omit<MergeConfig<Raw, Handlers>, T>, Handlers>
];
assign(config: Partial<MergeConfig<Raw, Handlers>>): Config<Raw, Handlers>;
}
export {};