mtrl 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/badge/config.d.ts +2 -2
- package/dist/components/bottom-sheet/bottom-sheet.js +1 -1
- package/dist/components/bottom-sheet/config.d.ts +2 -2
- package/dist/components/bottom-sheet/features/drag.d.ts +2 -2
- package/dist/components/bottom-sheet/features/drag.js +1 -1
- package/dist/components/button/api.d.ts +3 -3
- package/dist/components/button/button.d.ts +1 -1
- package/dist/components/button/config.d.ts +2 -2
- package/dist/components/button/features/progress.d.ts +17 -5
- package/dist/components/button-group/config.d.ts +20 -0
- package/dist/components/card/api.d.ts +10 -1
- package/dist/components/card/api.js +6 -1
- package/dist/components/card/card.js +1 -1
- package/dist/components/card/config.d.ts +15 -9
- package/dist/components/card/features.d.ts +2 -1
- package/dist/components/card/types.d.ts +5 -4
- package/dist/components/carousel/config.d.ts +2 -2
- package/dist/components/checkbox/config.d.ts +2 -2
- package/dist/components/checkbox/types.d.ts +15 -16
- package/dist/components/chips/api.d.ts +6 -6
- package/dist/components/chips/chip/api.d.ts +2 -2
- package/dist/components/chips/chip/config.d.ts +6 -7
- package/dist/components/chips/config.d.ts +2 -2
- package/dist/components/chips/features/dom.js +0 -1
- package/dist/components/chips/types.d.ts +12 -1
- package/dist/components/datepicker/api.d.ts +5 -2
- package/dist/components/datepicker/config.d.ts +16 -13
- package/dist/components/datepicker/datepicker.js +10 -4
- package/dist/components/datepicker/render.d.ts +14 -6
- package/dist/components/datepicker/render.js +1 -1
- package/dist/components/datepicker/types.d.ts +51 -3
- package/dist/components/dialog/api.d.ts +1 -1
- package/dist/components/dialog/config.d.ts +3 -4
- package/dist/components/dialog/config.js +1 -1
- package/dist/components/dialog/features.js +1 -1
- package/dist/components/dialog/types.d.ts +1 -1
- package/dist/components/divider/features.js +2 -0
- package/dist/components/drawer/api.d.ts +3 -3
- package/dist/components/drawer/config.d.ts +2 -2
- package/dist/components/drawer/drawer.d.ts +1 -1
- package/dist/components/drawer/features/headline.d.ts +12 -2
- package/dist/components/drawer/features/items.d.ts +17 -3
- package/dist/components/drawer/features/state.d.ts +14 -2
- package/dist/components/extended-fab/api.d.ts +12 -4
- package/dist/components/extended-fab/api.js +12 -0
- package/dist/components/extended-fab/config.d.ts +10 -10
- package/dist/components/extended-fab/types.d.ts +4 -2
- package/dist/components/fab/api.d.ts +9 -2
- package/dist/components/fab/api.js +12 -0
- package/dist/components/fab/config.d.ts +8 -8
- package/dist/components/fab/types.d.ts +2 -1
- package/dist/components/icon-button/config.d.ts +2 -2
- package/dist/components/icon-button/features/toggle.d.ts +1 -5
- package/dist/components/icon-button/types.d.ts +6 -0
- package/dist/components/list/api.d.ts +18 -18
- package/dist/components/list/config.d.ts +6 -3
- package/dist/components/list/config.js +6 -7
- package/dist/components/list/features/renderer.js +2 -2
- package/dist/components/list/list.d.ts +20 -1
- package/dist/components/list/types.d.ts +32 -32
- package/dist/components/loading-indicator/config.d.ts +2 -2
- package/dist/components/loading-indicator/types.d.ts +3 -1
- package/dist/components/menu/api.d.ts +6 -5
- package/dist/components/menu/config.d.ts +2 -2
- package/dist/components/menu/features/keyboard.d.ts +19 -9
- package/dist/components/menu/types.d.ts +25 -9
- package/dist/components/navigation/config.d.ts +2 -2
- package/dist/components/navigation/features/controller.d.ts +1 -3
- package/dist/components/navigation/features/items.d.ts +1 -2
- package/dist/components/navigation/system/core.d.ts +6 -6
- package/dist/components/navigation/system/events.d.ts +3 -3
- package/dist/components/navigation/system/mobile.d.ts +6 -6
- package/dist/components/navigation/system/state.d.ts +3 -3
- package/dist/components/navigation/system/types.d.ts +43 -11
- package/dist/components/navigation/types.d.ts +15 -6
- package/dist/components/progress/api.js +0 -1
- package/dist/components/progress/config.d.ts +2 -2
- package/dist/components/progress/features/canvas.d.ts +14 -5
- package/dist/components/progress/features/state.d.ts +1 -2
- package/dist/components/progress/types.d.ts +1 -1
- package/dist/components/radios/config.d.ts +2 -2
- package/dist/components/search/api.js +4 -4
- package/dist/components/search/config.d.ts +2 -2
- package/dist/components/search/features/suggestions.d.ts +1 -3
- package/dist/components/search/features/suggestions.js +5 -5
- package/dist/components/search/search.js +1 -1
- package/dist/components/segmented-button/config.d.ts +1 -5
- package/dist/components/segmented-button/config.js +1 -1
- package/dist/components/select/api.d.ts +2 -2
- package/dist/components/select/features.d.ts +2 -2
- package/dist/components/select/features.js +2 -1
- package/dist/components/select/types.d.ts +38 -21
- package/dist/components/side-sheet/config.d.ts +2 -2
- package/dist/components/slider/api.d.ts +6 -6
- package/dist/components/slider/config.d.ts +2 -2
- package/dist/components/slider/types.d.ts +2 -2
- package/dist/components/snackbar/config.d.ts +2 -2
- package/dist/components/snackbar/features.d.ts +3 -3
- package/dist/components/snackbar/position.d.ts +1 -1
- package/dist/components/snackbar/types.d.ts +5 -6
- package/dist/components/split-button/api.js +1 -3
- package/dist/components/split-button/config.d.ts +2 -2
- package/dist/components/split-button/features/buttons.d.ts +3 -2
- package/dist/components/split-button/features/menu.d.ts +3 -2
- package/dist/components/split-button/types.d.ts +13 -2
- package/dist/components/switch/config.d.ts +2 -2
- package/dist/components/switch/types.d.ts +0 -1
- package/dist/components/tabs/api.d.ts +8 -5
- package/dist/components/tabs/config.d.ts +9 -1
- package/dist/components/tabs/features.d.ts +7 -11
- package/dist/components/tabs/features.js +2 -1
- package/dist/components/tabs/indicator.js +4 -2
- package/dist/components/tabs/responsive.js +2 -1
- package/dist/components/tabs/tab-api.d.ts +11 -5
- package/dist/components/tabs/tab-api.js +1 -1
- package/dist/components/tabs/tab.js +9 -1
- package/dist/components/tabs/types.d.ts +9 -2
- package/dist/components/tabs/utils.d.ts +14 -3
- package/dist/components/textfield/api.d.ts +1 -1
- package/dist/components/textfield/config.d.ts +2 -2
- package/dist/components/textfield/features/error.d.ts +1 -2
- package/dist/components/textfield/features/leading-icon.d.ts +1 -2
- package/dist/components/textfield/features/prefix-text.d.ts +1 -2
- package/dist/components/textfield/features/suffix-text.d.ts +1 -2
- package/dist/components/textfield/features/supporting-text.d.ts +1 -2
- package/dist/components/textfield/features/trailing-icon.d.ts +1 -2
- package/dist/components/textfield/types.d.ts +0 -2
- package/dist/components/timepicker/api.d.ts +5 -4
- package/dist/components/timepicker/config.d.ts +14 -11
- package/dist/components/tooltip/config.d.ts +2 -2
- package/dist/components/tooltip/tooltip.d.ts +1 -1
- package/dist/core/compose/base.d.ts +2 -2
- package/dist/core/compose/base.js +1 -1
- package/dist/core/compose/component.d.ts +13 -4
- package/dist/core/compose/component.js +1 -1
- package/dist/core/compose/features/badge.d.ts +3 -4
- package/dist/core/compose/features/badge.js +1 -1
- package/dist/core/compose/features/checkable.d.ts +3 -4
- package/dist/core/compose/features/debounce.d.ts +2 -3
- package/dist/core/compose/features/disabled.d.ts +1 -2
- package/dist/core/compose/features/events.d.ts +4 -3
- package/dist/core/compose/features/icon.d.ts +1 -5
- package/dist/core/compose/features/input.d.ts +2 -3
- package/dist/core/compose/features/lifecycle.d.ts +2 -2
- package/dist/core/compose/features/lifecycle.js +3 -3
- package/dist/core/compose/features/position.d.ts +1 -2
- package/dist/core/compose/features/ripple.d.ts +1 -2
- package/dist/core/compose/features/size.d.ts +1 -2
- package/dist/core/compose/features/style.d.ts +1 -2
- package/dist/core/compose/features/text.d.ts +1 -5
- package/dist/core/compose/features/textinput.d.ts +2 -3
- package/dist/core/compose/features/textlabel.d.ts +1 -2
- package/dist/core/compose/features/throttle.d.ts +1 -2
- package/dist/core/compose/features/track.d.ts +0 -1
- package/dist/core/compose/features/variant.d.ts +1 -2
- package/dist/core/compose/index.d.ts +1 -1
- package/dist/core/compose/pipe.d.ts +43 -3
- package/dist/core/compose/pipe.js +6 -2
- package/dist/core/compose/utils/type-guards.d.ts +4 -4
- package/dist/core/compose/utils/type-guards.js +1 -1
- package/dist/core/config/component.d.ts +12 -9
- package/dist/core/config/global.d.ts +12 -8
- package/dist/core/config.d.ts +1 -1
- package/dist/core/dom/attributes.d.ts +6 -6
- package/dist/core/dom/attributes.js +3 -2
- package/dist/core/dom/create.d.ts +27 -10
- package/dist/core/dom/create.js +0 -24
- package/dist/core/dom/utils.d.ts +1 -1
- package/dist/core/state/emitter.d.ts +2 -2
- package/dist/core/state/events.d.ts +3 -3
- package/dist/core/state/lifecycle.d.ts +0 -1
- package/dist/core/state/store.d.ts +3 -3
- package/dist/core/utils/object.d.ts +2 -2
- package/dist/core/utils/performance.d.ts +3 -3
- package/dist/core/utils/validate.d.ts +6 -6
- package/dist/core/utils/validate.js +13 -12
- package/dist/index.cjs +12 -12
- package/dist/package.json +1 -1
- package/dist/styles/badge.css +2 -2
- package/dist/styles/base.css +2 -2
- package/dist/styles/bottom-app-bar.css +2 -2
- package/dist/styles/bottom-sheet.css +2 -2
- package/dist/styles/button-group.css +2 -2
- package/dist/styles/button.css +2 -2
- package/dist/styles/card.css +2 -2
- package/dist/styles/carousel.css +2 -2
- package/dist/styles/checkbox.css +2 -2
- package/dist/styles/chips.css +2 -2
- package/dist/styles/dialog.css +2 -2
- package/dist/styles/divider.css +2 -2
- package/dist/styles/drawer.css +2 -2
- package/dist/styles/extended-fab.css +2 -2
- package/dist/styles/fab.css +2 -2
- package/dist/styles/icon-button.css +2 -2
- package/dist/styles/list.css +2 -2
- package/dist/styles/loading-indicator.css +2 -2
- package/dist/styles/menu.css +2 -2
- package/dist/styles/navigation-rail.css +2 -2
- package/dist/styles/navigation.css +2 -2
- package/dist/styles/progress.css +2 -2
- package/dist/styles/radios.css +2 -2
- package/dist/styles/search.css +2 -2
- package/dist/styles/segmented-button.css +2 -2
- package/dist/styles/select.css +2 -2
- package/dist/styles/side-sheet.css +2 -2
- package/dist/styles/slider.css +2 -2
- package/dist/styles/snackbar.css +2 -2
- package/dist/styles/split-button.css +2 -2
- package/dist/styles/switch.css +2 -2
- package/dist/styles/tabs.css +2 -2
- package/dist/styles/textfield.css +2 -2
- package/dist/styles/timepicker.css +2 -2
- package/dist/styles/tooltip.css +2 -0
- package/dist/styles/tooltip.d.ts +1 -0
- package/dist/styles/tooltip.js +2 -0
- package/dist/styles/top-app-bar.css +2 -2
- package/dist/styles/utilities.css +2 -2
- package/dist/styles.css +2 -2
- package/dist/themes/autumn.css +1 -1
- package/dist/themes/baseline.css +1 -1
- package/dist/themes/brownbeige.css +1 -1
- package/dist/themes/browngreen.css +1 -1
- package/dist/themes/desert.css +1 -1
- package/dist/themes/forest.css +1 -1
- package/dist/themes/highcontrast.css +1 -1
- package/dist/themes/legacy.css +1 -1
- package/dist/themes/material.css +1 -1
- package/dist/themes/ocean.css +1 -1
- package/dist/themes/sageivory.css +1 -1
- package/dist/themes/spring.css +1 -1
- package/dist/themes/summer.css +1 -1
- package/dist/themes/sunset.css +1 -1
- package/dist/themes/tealcaramel.css +1 -1
- package/dist/themes/winter.css +1 -1
- package/package.json +2 -2
- package/src/styles/abstract/_mixins.scss +5 -1
- package/src/styles/components/_checkbox.scss +27 -7
- package/src/styles/components/_chips.scss +13 -13
- package/src/styles/components/_datepicker.scss +5 -5
- package/src/styles/components/_dialog.scss +2 -2
- package/src/styles/components/_radios.scss +30 -30
- package/src/styles/components/_switch.scss +36 -26
- package/src/styles/components/_tabs.scss +59 -58
- package/src/styles/components/_timepicker.scss +3 -3
- package/src/styles/main.scss +1 -0
package/dist/core/dom/utils.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export { normalizeClasses } from "./classes.js";
|
|
|
6
6
|
* @param attributes - Element attributes
|
|
7
7
|
* @returns Created element
|
|
8
8
|
*/
|
|
9
|
-
export declare const createElement: <T extends HTMLElement>(tag: string, attributes?: Record<string,
|
|
9
|
+
export declare const createElement: <T extends HTMLElement>(tag: string, attributes?: Record<string, unknown>) => T;
|
|
10
10
|
/**
|
|
11
11
|
* Sets inline styles on an element
|
|
12
12
|
*
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* Type definition for event callback functions
|
|
6
6
|
*/
|
|
7
|
-
export type EventCallback = (...args:
|
|
7
|
+
export type EventCallback = (...args: never[]) => void;
|
|
8
8
|
/**
|
|
9
9
|
* Interface for the event emitter
|
|
10
10
|
*/
|
|
@@ -27,7 +27,7 @@ export interface Emitter {
|
|
|
27
27
|
* @param event - Event name
|
|
28
28
|
* @param args - Event arguments
|
|
29
29
|
*/
|
|
30
|
-
emit(event: string, ...args:
|
|
30
|
+
emit(event: string, ...args: unknown[]): void;
|
|
31
31
|
/**
|
|
32
32
|
* Clear all event listeners
|
|
33
33
|
*/
|
|
@@ -8,14 +8,14 @@ export interface EventManagerState {
|
|
|
8
8
|
* @param handler - Event handler
|
|
9
9
|
* @returns EventManagerState instance for chaining
|
|
10
10
|
*/
|
|
11
|
-
on: (event: string, handler: (...args:
|
|
11
|
+
on: (event: string, handler: (...args: never[]) => void) => EventManagerState;
|
|
12
12
|
/**
|
|
13
13
|
* Removes an event listener
|
|
14
14
|
* @param event - Event name
|
|
15
15
|
* @param handler - Event handler
|
|
16
16
|
* @returns EventManagerState instance for chaining
|
|
17
17
|
*/
|
|
18
|
-
off: (event: string, handler: (...args:
|
|
18
|
+
off: (event: string, handler: (...args: never[]) => void) => EventManagerState;
|
|
19
19
|
/**
|
|
20
20
|
* Removes all event listeners and cleans up
|
|
21
21
|
*/
|
|
@@ -24,7 +24,7 @@ export interface EventManagerState {
|
|
|
24
24
|
* Gets all active handlers
|
|
25
25
|
* @returns Map of event names to handlers
|
|
26
26
|
*/
|
|
27
|
-
getHandlers: () => Map<(...args:
|
|
27
|
+
getHandlers: () => Map<(...args: never[]) => void, string>;
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Creates an event manager for a component
|
|
@@ -64,7 +64,7 @@ export interface Store<T> {
|
|
|
64
64
|
* @param options - Store options
|
|
65
65
|
* @returns State store interface
|
|
66
66
|
*/
|
|
67
|
-
export declare const createStore: <T extends
|
|
67
|
+
export declare const createStore: <T extends object>(initialState?: T, options?: StoreOptions<T>) => Store<T>;
|
|
68
68
|
/**
|
|
69
69
|
* Example middleware that logs state changes
|
|
70
70
|
*
|
|
@@ -72,11 +72,11 @@ export declare const createStore: <T extends Record<string, any>>(initialState?:
|
|
|
72
72
|
* @param oldState - Previous state before change
|
|
73
73
|
* @returns Processed state (unchanged in this middleware)
|
|
74
74
|
*/
|
|
75
|
-
export declare const loggingMiddleware: <T extends
|
|
75
|
+
export declare const loggingMiddleware: <T extends object>(newState: T, oldState: T) => T;
|
|
76
76
|
/**
|
|
77
77
|
* Creates a derived state selector for filtering objects
|
|
78
78
|
*
|
|
79
79
|
* @param predicate - Filter predicate function
|
|
80
80
|
* @returns Computation function for derived state
|
|
81
81
|
*/
|
|
82
|
-
export declare const deriveFiltered: <T>(predicate: (value:
|
|
82
|
+
export declare const deriveFiltered: <T>(predicate: (value: T, key: string) => boolean) => (state: Record<string, T>) => Record<string, T>;
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* @param value - The value to check
|
|
4
4
|
* @returns true if the value is a plain object
|
|
5
5
|
*/
|
|
6
|
-
export declare const isObject: (value: unknown) => value is Record<string,
|
|
6
|
+
export declare const isObject: (value: unknown) => value is Record<string, unknown>;
|
|
7
7
|
/**
|
|
8
8
|
* Accesses a nested property of an object using a string path
|
|
9
9
|
* @param obj - The object to traverse
|
|
10
10
|
* @param path - The property path (e.g. 'user.address.street')
|
|
11
11
|
* @returns The value at the specified path or undefined if not found
|
|
12
12
|
*/
|
|
13
|
-
export declare const byString: <T extends
|
|
13
|
+
export declare const byString: <T extends object, R = unknown>(obj: T, path: string) => R | undefined;
|
|
@@ -27,7 +27,7 @@ export type Cancellable<F> = F & {
|
|
|
27
27
|
*
|
|
28
28
|
* window.addEventListener('scroll', throttledScroll);
|
|
29
29
|
*/
|
|
30
|
-
export declare const throttle: <T extends (...args:
|
|
30
|
+
export declare const throttle: <T extends (...args: never[]) => unknown>(fn: T, wait: number, options?: {
|
|
31
31
|
leading?: boolean;
|
|
32
32
|
trailing?: boolean;
|
|
33
33
|
}) => Cancellable<(...args: Parameters<T>) => void>;
|
|
@@ -56,7 +56,7 @@ export declare const throttle: <T extends (...args: any[]) => any>(fn: T, wait:
|
|
|
56
56
|
* debouncedSearch(e.target.value);
|
|
57
57
|
* });
|
|
58
58
|
*/
|
|
59
|
-
export declare const debounce: <T extends (...args:
|
|
59
|
+
export declare const debounce: <T extends (...args: never[]) => unknown>(fn: T, wait: number, options?: {
|
|
60
60
|
leading?: boolean;
|
|
61
61
|
maxWait?: number;
|
|
62
62
|
}) => Cancellable<(...args: Parameters<T>) => void>;
|
|
@@ -79,4 +79,4 @@ export declare const debounce: <T extends (...args: any[]) => any>(fn: T, wait:
|
|
|
79
79
|
* button1.addEventListener('click', initApp);
|
|
80
80
|
* button2.addEventListener('click', initApp);
|
|
81
81
|
*/
|
|
82
|
-
export declare const once: <T extends (...args:
|
|
82
|
+
export declare const once: <T extends (...args: never[]) => unknown>(fn: T) => ((...args: Parameters<T>) => ReturnType<T>);
|
|
@@ -25,7 +25,7 @@ export interface ValidationRule {
|
|
|
25
25
|
/**
|
|
26
26
|
* Allowed values (enum)
|
|
27
27
|
*/
|
|
28
|
-
enum?:
|
|
28
|
+
enum?: unknown[];
|
|
29
29
|
/**
|
|
30
30
|
* Minimum string length
|
|
31
31
|
*/
|
|
@@ -37,11 +37,11 @@ export interface ValidationRule {
|
|
|
37
37
|
/**
|
|
38
38
|
* Default value
|
|
39
39
|
*/
|
|
40
|
-
default?:
|
|
40
|
+
default?: unknown;
|
|
41
41
|
/**
|
|
42
42
|
* Custom validator function
|
|
43
43
|
*/
|
|
44
|
-
validator
|
|
44
|
+
validator?(value: unknown): boolean | string;
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
47
|
* Validation schema type
|
|
@@ -54,7 +54,7 @@ export type ValidationSchema = Record<string, ValidationRule>;
|
|
|
54
54
|
* @param schema - Validation schema
|
|
55
55
|
* @throws Error if validation fails
|
|
56
56
|
*/
|
|
57
|
-
export declare const validateConfig: (config:
|
|
57
|
+
export declare const validateConfig: (config: object, schema: ValidationSchema) => void;
|
|
58
58
|
/**
|
|
59
59
|
* Validates a single value against a rule
|
|
60
60
|
*
|
|
@@ -62,7 +62,7 @@ export declare const validateConfig: (config: Record<string, any>, schema: Valid
|
|
|
62
62
|
* @param rule - Validation rule
|
|
63
63
|
* @returns Validation result (true if valid, error message if invalid)
|
|
64
64
|
*/
|
|
65
|
-
export declare const validateValue: (value:
|
|
65
|
+
export declare const validateValue: (value: unknown, rule: ValidationRule) => true | string;
|
|
66
66
|
/**
|
|
67
67
|
* Applies default values from schema to config
|
|
68
68
|
*
|
|
@@ -70,4 +70,4 @@ export declare const validateValue: (value: any, rule: ValidationRule) => true |
|
|
|
70
70
|
* @param schema - Validation schema with defaults
|
|
71
71
|
* @returns Configuration with defaults applied
|
|
72
72
|
*/
|
|
73
|
-
export declare const applyDefaults: <T extends
|
|
73
|
+
export declare const applyDefaults: <T extends object>(config: T, schema: ValidationSchema) => T;
|
|
@@ -1,47 +1,48 @@
|
|
|
1
1
|
export const validateConfig = (config, schema) => {
|
|
2
2
|
const errors = [];
|
|
3
|
+
const values = config;
|
|
3
4
|
Object.entries(schema).forEach(([key, rule]) => {
|
|
4
|
-
if (rule.required &&
|
|
5
|
+
if (rule.required && values[key] === undefined) {
|
|
5
6
|
errors.push(`Missing required field: ${key}`);
|
|
6
7
|
}
|
|
7
|
-
if (
|
|
8
|
+
if (values[key] !== undefined) {
|
|
8
9
|
if (rule.type) {
|
|
9
|
-
const actualType = typeof
|
|
10
|
+
const actualType = typeof values[key];
|
|
10
11
|
if (actualType !== rule.type) {
|
|
11
12
|
errors.push(`Invalid type for ${key}: expected ${rule.type}, got ${actualType}`);
|
|
12
13
|
}
|
|
13
14
|
}
|
|
14
|
-
if (typeof
|
|
15
|
-
if (rule.minimum !== undefined &&
|
|
15
|
+
if (typeof values[key] === 'number') {
|
|
16
|
+
if (rule.minimum !== undefined && values[key] < rule.minimum) {
|
|
16
17
|
errors.push(`Value for ${key} is too small: minimum is ${rule.minimum}`);
|
|
17
18
|
}
|
|
18
|
-
if (rule.maximum !== undefined &&
|
|
19
|
+
if (rule.maximum !== undefined && values[key] > rule.maximum) {
|
|
19
20
|
errors.push(`Value for ${key} is too large: maximum is ${rule.maximum}`);
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
|
-
if (typeof
|
|
23
|
-
if (rule.minLength !== undefined &&
|
|
23
|
+
if (typeof values[key] === 'string') {
|
|
24
|
+
if (rule.minLength !== undefined && values[key].length < rule.minLength) {
|
|
24
25
|
errors.push(`String for ${key} is too short: minimum length is ${rule.minLength}`);
|
|
25
26
|
}
|
|
26
|
-
if (rule.maxLength !== undefined &&
|
|
27
|
+
if (rule.maxLength !== undefined && values[key].length > rule.maxLength) {
|
|
27
28
|
errors.push(`String for ${key} is too long: maximum length is ${rule.maxLength}`);
|
|
28
29
|
}
|
|
29
30
|
if (rule.pattern) {
|
|
30
31
|
const pattern = rule.pattern instanceof RegExp
|
|
31
32
|
? rule.pattern
|
|
32
33
|
: new RegExp(rule.pattern);
|
|
33
|
-
if (!pattern.test(
|
|
34
|
+
if (!pattern.test(values[key])) {
|
|
34
35
|
errors.push(`Invalid format for ${key}: must match pattern ${pattern}`);
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
if (rule.enum) {
|
|
39
|
-
if (!rule.enum.includes(
|
|
40
|
+
if (!rule.enum.includes(values[key])) {
|
|
40
41
|
errors.push(`Invalid value for ${key}. Must be one of: ${rule.enum.join(', ')}`);
|
|
41
42
|
}
|
|
42
43
|
}
|
|
43
44
|
if (rule.validator) {
|
|
44
|
-
const result = rule.validator(
|
|
45
|
+
const result = rule.validator(values[key]);
|
|
45
46
|
if (result === false) {
|
|
46
47
|
errors.push(`Invalid value for ${key}`);
|
|
47
48
|
}
|