| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import {DataType} from '../data-type.js';
- import {DataParsingError} from '../errors/index.js';
- /**
- * Boolean type parser.
- *
- * @param {*} value
- * @param {object} schema
- * @param {object|undefined} options
- * @returns {*}
- */
- export function booleanTypeParser(value, schema, options) {
- // если тип не соответствует логическому
- // значению, то преобразование пропускается
- if (schema.type !== DataType.BOOLEAN) {
- return value;
- }
- // если значение является логическим,
- // то преобразование пропускается
- if (typeof value === 'boolean') {
- return value;
- }
- // если значение является строкой,
- // то выполняется попытка преобразования
- if (typeof value === 'string') {
- value = value.trim();
- if (value === '1') return true;
- if (value === '0') return false;
- if (value === 'true') return true;
- if (value === 'false') return false;
- }
- // если значение является числом,
- // то выполняется попытка преобразования
- else if (typeof value === 'number') {
- if (value === 1) return true;
- if (value === 0) return false;
- }
- // если значение не определено,
- // то преобразование пропускается
- if (value == null) {
- return value;
- }
- // если преобразовать значение не удалось,
- // то выбрасывается ошибка
- if (!options || !options.noParsingErrors) {
- const sourcePath = options && options.sourcePath;
- const dataType = schema.type || DataType.ANY;
- throw new DataParsingError(value, dataType, sourcePath);
- }
- // если установлен флаг бесшумной работы,
- // то значение возвращается без изменений
- return value;
- }
|