validata
Version:
Type safe data validation and sanitization
47 lines • 2.02 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.maybeAsNumber = exports.asNumber = exports.maybeNumber = exports.isNumber = exports.empty = void 0;
const common_1 = require("./common");
const types_1 = require("./types");
const empty = (value) => {
return value === '' || value === null || value === undefined || typeof value === 'number' && Number.isNaN(value);
};
exports.empty = empty;
const check = (value) => {
return typeof value === 'number' && !Number.isNaN(value);
};
const convert = (value) => {
if (Array.isArray(value))
return undefined;
const converted = Number(value);
if (!Number.isNaN(converted))
return converted;
return undefined;
};
const coerce = (options) => (next) => (value, path) => {
if (!options)
return next(value, path);
let coerced = value;
if (options.coerceMin !== undefined && coerced < options.coerceMin) {
coerced = options.coerceMin;
}
if (options.coerceMax !== undefined && coerced > options.coerceMax) {
coerced = options.coerceMax;
}
return next(coerced, path);
};
const validate = (value, path, options) => {
const result = (0, common_1.basicValidation)(value, path, options);
if (options.min !== undefined && value < options.min) {
result.issues.push(types_1.Issue.forPath(path, value, 'min', { min: options.min }));
}
if (options.max !== undefined && value > options.max) {
result.issues.push(types_1.Issue.forPath(path, value, 'max', { max: options.max }));
}
return result;
};
exports.isNumber = (0, common_1.createIsCheck)('number', check, coerce, validate);
exports.maybeNumber = (0, common_1.createMaybeCheck)('number', check, coerce, validate, exports.empty);
exports.asNumber = (0, common_1.createAsCheck)('number', check, convert, coerce, validate);
exports.maybeAsNumber = (0, common_1.createMaybeAsCheck)('number', check, convert, coerce, validate, exports.empty);
//# sourceMappingURL=number.js.map
;