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; }