@quenk/preconditions
Version:
Make data satisfy constraints before using.
86 lines • 2.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toString = exports.isString = exports.nonEmpty = exports.split = exports.trim = exports.lower = exports.lowercase = exports.upper = exports.uppercase = exports.range = exports.minLength = exports.maxLength = exports.pattern = exports.matches = void 0;
const type_1 = require("@quenk/noni/lib/data/type");
const result_1 = require("./result");
/**
* matches tests if the value satisfies a regular expression.
*/
const matches = (pattern) => {
let regex = (0, type_1.isString)(pattern) ? new RegExp(pattern) : pattern;
return (value) => !regex.test(value)
? (0, result_1.fail)('matches', value, {
pattern: pattern.toString()
})
: (0, result_1.succeed)(value);
};
exports.matches = matches;
exports.pattern = exports.matches;
/**
* maxLength test.
*/
const maxLength = (target) => (value) => value.length > target
? (0, result_1.fail)('maxLength', value, { target, value })
: (0, result_1.succeed)(value);
exports.maxLength = maxLength;
/**
* minLength test.
*/
const minLength = (target) => (value) => value.length < target
? (0, result_1.fail)('minLength', value, { target, value })
: (0, result_1.succeed)(value);
exports.minLength = minLength;
/**
* range tests whether the length of string falls within a range.
*/
const range = (min, max) => (value) => value.length < min
? (0, result_1.fail)('range.min', value, { min, max, value })
: value.length > max
? (0, result_1.fail)('range.max', value, { min, max, value })
: (0, result_1.succeed)(value);
exports.range = range;
/**
* uppercase transforms a string into uppercase
*/
const uppercase = (value) => (0, result_1.succeed)(value.toUpperCase());
exports.uppercase = uppercase;
exports.upper = exports.uppercase;
/**
* lowercase transforms a string into lowercase
*/
const lowercase = (value) => (0, result_1.succeed)(value.toLowerCase());
exports.lowercase = lowercase;
exports.lower = exports.lowercase;
/**
* trim the whitespace from a string.
*/
const trim = (value) => (0, result_1.succeed)(value.trim());
exports.trim = trim;
/**
* split a string into an array.
*/
const split = (token) => (value) => {
let val = value === '' || value === token ? [] : value.split(token);
return (0, result_1.succeed)(val);
};
exports.split = split;
/**
* nonEmpty rejects empty strings.
*/
const nonEmpty = (value) => value === ''
? (0, result_1.fail)('nonEmpty', value)
: (0, result_1.succeed)(value);
exports.nonEmpty = nonEmpty;
/**
* isString tests if a value is a string.
*/
const isString = (a) => typeof a === 'string'
? (0, result_1.succeed)(a)
: (0, result_1.fail)('isString', a);
exports.isString = isString;
/**
* toString casts a value into a string.
*/
const toString = (a) => (0, result_1.succeed)(a == null ? '' : String(a));
exports.toString = toString;
//# sourceMappingURL=string.js.map