(theme: Partial<Theme> | null | undefined)
| 194 | } |
| 195 | |
| 196 | export function validateTheme(theme: Partial<Theme> | null | undefined): ThemeValidationResult { |
| 197 | if (!isPlainObject(theme)) { |
| 198 | return {errors: ['Theme is not a plain object'], theme: DEFAULT_THEME}; |
| 199 | } |
| 200 | |
| 201 | const {validateProperty, errors} = createValidator(); |
| 202 | validateProperty(theme, 'mode', isOneOf(0, 1), DEFAULT_THEME); |
| 203 | validateProperty(theme, 'brightness', isNumberBetween(0, 200), DEFAULT_THEME); |
| 204 | validateProperty(theme, 'contrast', isNumberBetween(0, 200), DEFAULT_THEME); |
| 205 | validateProperty(theme, 'grayscale', isNumberBetween(0, 100), DEFAULT_THEME); |
| 206 | validateProperty(theme, 'sepia', isNumberBetween(0, 100), DEFAULT_THEME); |
| 207 | validateProperty(theme, 'useFont', isBoolean, DEFAULT_THEME); |
| 208 | validateProperty(theme, 'fontFamily', isNonEmptyString, DEFAULT_THEME); |
| 209 | validateProperty(theme, 'textStroke', isNumberBetween(0, 1), DEFAULT_THEME); |
| 210 | validateProperty(theme, 'engine', isOneOf('dynamicTheme', 'staticTheme', 'cssFilter', 'svgFilter'), DEFAULT_THEME); |
| 211 | validateProperty(theme, 'stylesheet', isString, DEFAULT_THEME); |
| 212 | validateProperty(theme, 'darkSchemeBackgroundColor', isRegExpMatch(/^#[0-9a-f]{6}$/i), DEFAULT_THEME); |
| 213 | validateProperty(theme, 'darkSchemeTextColor', isRegExpMatch(/^#[0-9a-f]{6}$/i), DEFAULT_THEME); |
| 214 | validateProperty(theme, 'lightSchemeBackgroundColor', isRegExpMatch(/^#[0-9a-f]{6}$/i), DEFAULT_THEME); |
| 215 | validateProperty(theme, 'lightSchemeTextColor', isRegExpMatch(/^#[0-9a-f]{6}$/i), DEFAULT_THEME); |
| 216 | validateProperty(theme, 'scrollbarColor', (x: any) => x === '' || isRegExpMatch(/^(auto)|(#[0-9a-f]{6})$/i)(x), DEFAULT_THEME); |
| 217 | validateProperty(theme, 'selectionColor', isRegExpMatch(/^(auto)|(#[0-9a-f]{6})$/i), DEFAULT_THEME); |
| 218 | validateProperty(theme, 'styleSystemControls', isBoolean, DEFAULT_THEME); |
| 219 | validateProperty(theme, 'lightColorScheme', isNonEmptyString, DEFAULT_THEME); |
| 220 | validateProperty(theme, 'darkColorScheme', isNonEmptyString, DEFAULT_THEME); |
| 221 | validateProperty(theme, 'immediateModify', isBoolean, DEFAULT_THEME); |
| 222 | |
| 223 | return {errors, theme}; |
| 224 | } |
no test coverage detected