@logic-pad/core
Version:
110 lines (109 loc) • 4.13 kB
TypeScript
import GridData from './grid.js';
import { Color, Comparison, Direction, DirectionToggle, Orientation, OrientationToggle, Position, Wrapping } from './primitives.js';
import { ControlLine } from './rules/musicControlLine.js';
export declare enum ConfigType {
Boolean = "boolean",
NullableBoolean = "nullableBoolean",
Number = "number",
NullableNumber = "nullableNumber",
String = "string",
Color = "color",
Comparison = "comparison",
Wrapping = "wrapping",
Direction = "direction",
DirectionToggle = "directionToggle",
Orientation = "orientation",
OrientationToggle = "orientationToggle",
Tile = "tile",
Grid = "grid",
NullableGrid = "nullableGrid",
Icon = "icon",
ControlLines = "controlLines",
NullableNote = "nullableNote",
SolvePath = "solvePath"
}
export interface Config<T> {
readonly type: ConfigType;
readonly field: string;
readonly description: string;
readonly default: T;
readonly configurable: boolean;
}
export interface BooleanConfig extends Config<boolean> {
readonly type: ConfigType.Boolean;
}
export interface NullableBooleanConfig extends Config<boolean | null> {
readonly type: ConfigType.NullableBoolean;
}
export interface NumberConfig extends Config<number> {
readonly type: ConfigType.Number;
readonly min?: number;
readonly max?: number;
readonly step?: number;
}
export interface NullableNumberConfig extends Config<number | null> {
readonly type: ConfigType.NullableNumber;
readonly min?: number;
readonly max?: number;
readonly step?: number;
}
export interface StringConfig extends Config<string> {
readonly type: ConfigType.String;
readonly maxLength?: number;
readonly placeholder?: string;
}
export interface ColorConfig extends Config<Color> {
readonly type: ConfigType.Color;
readonly allowGray: boolean;
}
export interface ComparisonConfig extends Config<Comparison> {
readonly type: ConfigType.Comparison;
}
export interface WrappingConfig extends Config<Wrapping> {
readonly type: ConfigType.Wrapping;
}
export interface DirectionConfig extends Config<Direction> {
readonly type: ConfigType.Direction;
}
export interface DirectionToggleConfig extends Config<DirectionToggle> {
readonly type: ConfigType.DirectionToggle;
}
export interface OrientationConfig extends Config<Orientation> {
readonly type: ConfigType.Orientation;
}
export interface OrientationToggleConfig extends Config<OrientationToggle> {
readonly type: ConfigType.OrientationToggle;
}
export interface TileConfig extends Config<GridData> {
readonly type: ConfigType.Tile;
readonly resizable: boolean;
}
export interface GridConfig extends Config<GridData> {
readonly type: ConfigType.Grid;
}
export interface NullableGridConfig extends Config<GridData | null> {
readonly type: ConfigType.NullableGrid;
readonly nonNullDefault: GridData;
}
export interface IconConfig extends Config<string> {
readonly type: ConfigType.Icon;
}
export interface ControlLinesConfig extends Config<ControlLine[]> {
readonly type: ConfigType.ControlLines;
}
export interface NullableNoteConfig extends Config<string | null> {
readonly type: ConfigType.NullableNote;
}
export interface SolvePathConfig extends Config<Position[]> {
readonly type: ConfigType.SolvePath;
}
export type AnyConfig = BooleanConfig | NullableBooleanConfig | NumberConfig | NullableNumberConfig | StringConfig | ColorConfig | ComparisonConfig | WrappingConfig | DirectionConfig | DirectionToggleConfig | OrientationConfig | OrientationToggleConfig | TileConfig | GridConfig | NullableGridConfig | IconConfig | ControlLinesConfig | NullableNoteConfig | SolvePathConfig;
/**
* Compare two config values for equality, using an appropriate method for the config type.
*
* @param type The type of the config.
* @param a The first value to compare.
* @param b The second value to compare.
* @returns Whether the two values are equal.
*/
export declare function configEquals<C extends AnyConfig>(type: C['type'], a: C['default'], b: C['default']): boolean;