44 lines
1.5 KiB
SCSS
44 lines
1.5 KiB
SCSS
|
|
@use 'sass:list';
|
||
|
|
@use 'sass:meta';
|
||
|
|
|
||
|
|
/// Validates that the object's type matches any of the expected types.
|
||
|
|
/// @param {any} $obj The object to test
|
||
|
|
/// @param {List} $types The expected types
|
||
|
|
/// @return {String} null if no error, else the unexpected type.
|
||
|
|
@function validate-type($obj, $types...) {
|
||
|
|
$result: meta.type-of($obj);
|
||
|
|
// A zero-length list is the same as a zero-length map.
|
||
|
|
@if ($result == list and list.index($types, map) and list.length($obj) == 0) {
|
||
|
|
@return null;
|
||
|
|
}
|
||
|
|
@return if(list.index($types, $result), null, $result);
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Validates that a list contains only values from the allowed list of values.
|
||
|
|
/// @param {List} $list The list to test
|
||
|
|
/// @param {List} $allowed The allowed values
|
||
|
|
/// @return {List} null if no error, else the list of non-allowed values.
|
||
|
|
@function validate-allowed-values($list, $allowed...) {
|
||
|
|
$invalid: ();
|
||
|
|
@each $element in $list {
|
||
|
|
@if not list.index($allowed, $element) {
|
||
|
|
$invalid: list.append($invalid, $element);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
@return if(list.length($invalid) > 0, $invalid, null);
|
||
|
|
}
|
||
|
|
|
||
|
|
/// Validates that a list contains all values from the required list of values.
|
||
|
|
/// @param {List} $list The list to test
|
||
|
|
/// @param {List} $required The required values
|
||
|
|
/// @return {List} null if no error, else the list of missing values.
|
||
|
|
@function validate-required-values($list, $required...) {
|
||
|
|
$invalid: ();
|
||
|
|
@each $element in $required {
|
||
|
|
@if not list.index($list, $element) {
|
||
|
|
$invalid: list.append($invalid, $element);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
@return if(list.length($invalid) > 0, $invalid, null);
|
||
|
|
}
|