@mapbox/mapbox-gl-style-spec
Version:
a specification for mapbox gl styles
31 lines (25 loc) • 1.21 kB
text/typescript
import ValidationError from '../error/validation_error';
import {unbundle} from '../util/unbundle_jsonlint';
import type {EnumPropertySpecification} from '../style-spec';
type EnumValidatorOptions = {
key: string;
value: unknown;
valueSpec: EnumPropertySpecification | {values: unknown[] | {[_: string]: unknown}};
};
export default function validateEnum(options: EnumValidatorOptions): ValidationError[] {
const key = options.key;
const value = options.value;
const valueSpec = options.valueSpec;
const errors: ValidationError[] = [];
if (Array.isArray(valueSpec.values)) { // <=v7
if (valueSpec.values.indexOf(unbundle(value)) === -1) {
// eslint-disable-next-line @typescript-eslint/no-base-to-string
errors.push(new ValidationError(key, value, `expected one of [${valueSpec.values.join(', ')}], ${JSON.stringify(value)} found`));
}
} else { // >=v8
if (Object.keys(valueSpec.values).indexOf(unbundle(value) as string) === -1) {
errors.push(new ValidationError(key, value, `expected one of [${Object.keys(valueSpec.values).join(', ')}], ${JSON.stringify(value)} found`));
}
}
return errors;
}