You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
956 B
25 lines
956 B
// @flow
|
|
|
|
import ValidationError from '../error/validation_error.js';
|
|
import {unbundle} from '../util/unbundle_jsonlint.js';
|
|
|
|
import type {ValidationOptions} from './validate.js';
|
|
|
|
export default function validateEnum(options: ValidationOptions): Array<ValidationError> {
|
|
const key = options.key;
|
|
const value = options.value;
|
|
const valueSpec = options.valueSpec;
|
|
const errors = [];
|
|
|
|
if (Array.isArray(valueSpec.values)) { // <=v7
|
|
if (valueSpec.values.indexOf(unbundle(value)) === -1) {
|
|
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)) === -1) {
|
|
errors.push(new ValidationError(key, value, `expected one of [${Object.keys(valueSpec.values).join(', ')}], ${JSON.stringify(value)} found`));
|
|
}
|
|
}
|
|
return errors;
|
|
}
|