README
validation-suite
Superset of @tmurphree/validation-predicates and @tmurphree/validation-error-messages.
Why and usage
Makes input validation faster by removing unnecesssry typing.
// The following line checks for type 'string' and zero length and returns undefined if the check passes.
// If the checks fail, it throws one of:
// * 'username is not a string.'
// * 'username is zero length.'
// The second argument tells the error message what variable name to use; if omitted, 'input' is used.
checkIsPopulatedString(username, 'username');
// returns undefined or throws 'hasAdog is not a boolean.'
checkIsBoolean(hasAdog, 'hasAdog');
// uses the default variable name 'input', so returns undefined or throws 'input is not an integer.'
checkIsInteger(foo);
Change log
Installation
npm install --save validation-suite
In addition to the check functions
predicates
All of the true / false tests from @tmurphree/validation-predicates.
Allows you to not throw an error (or throw a completely different error).
errorMessages
Everything from @tmurphree/validation-error-messages.
strict mode
Turns on strict mode in @tmurphree/validation-predicates and @tmurphree/validation-error-messages.
// strict mode on
// const vs = require('@tmurphree/validation-suite').strict;
// strict mode off
const vs = require('@tmurphree/validation-suite');
const { predicates } = vs;
// const predicates = vs.predicates;
const { errorMessages } = vs;
// const errorMessages = vs.errorMessages;
// throws built-in error message
vs.checkIsString(username);
if (predicates.isInteger(userId)) {
throw new Error('some custom error message');
}
// don't throw
if (!(predicates.isObjectLike(x, template))) {
console.error(errorMessages.makeIsObjectLikeMessage(x, template));
}
Functions
All functions do the same thing:
- Return
undefined
if the validation passes. - Throw an Error is the validation fails.
The name of the function in this library appends 'check' to the name of the validation function in @tmurphree/validation-predicates. For example, checkIsArray uses the isArray validation function. checkIsDateBefore uses the isDateBefore validation function. etc.
- Parameters not in brackets are required.
- Parameters in brackets are optional.
- 'x' in the parameters list is the thing you want to test.
- 'variableName' in the parameters list always defaults to 'input'. It can be used to make the error messages more semantic.
- The bullet points below the syntax text are the error messages that are thrown.
checkisArray
checkIsArray(x, [variableName])
- input is not an array.
checkisBigInt
checkIsBigInt(x, [variableName])
- input is not a BigInt.
checkIsBoolean
checkIsBoolean(x, [variableName])
- input is not a boolean.
checkIsDate
checkIsDate(x, [variableName])
- input is not a date.
checkIsDateAfter
Alias of checkIsDateGreaterThan.
checkIsDateBefore
Alias of checkIsDateLessThan.
checkIsDateGreaterThan
Checks that a date is greater than (after) another date.
checkIsDateGreaterThan(x, someDate, [variableName])
If someDate is not a date:
- The date to check against is not a date.
Else:
- input is not a date.
- input is not a date after someDate.toISOString().
e.g. 'input is not a date after 2099-10-02T00:00:00.000Z.'
checkIsDateLessThan
Checks that a date is less than (before) another date.
checkIsDateLessThan(x, someDate, [variableName])
If someDate is not a date:
- The date to check against is not a date.
Else:
- input is not a date.
- input is not a date before someDate.toISOString().
e.g. 'input is not a date before 2099-10-02T00:00:00.000Z.'
checkIsFloat
x is a number (see checkIsNumber) and has a nonzero decimal. e.g. 5.0 is NOT a float, but 5.01 is.
checkIsFloat(x, [variableName])
- input is not a floating point number.
checkIsFunction
checkIsFunction(x, [variableName])
- input is not a function.
checkIsInteger
x is a number (see checkIsNumber) and has a zero-value decimal. e.g. 5 and 5.0 are both integers, but 5.01 is NOT.
checkIsInteger(x, [variableName])
- input is not an integer.
checkIsIsoDateTimeString
x is a string and matches a subset of the ISO 8601 date time string format. See the documentation https://github.com/tmurphree/validation-predicates.
checkIsIsoDateTimeString(x, [variableName])
- input is not an ISO date time string in a supported layout. See the documentation https://github.com/tmurphree/validation-predicates.
checkIsNull
checkIsNull(x, [variableName])
- input is not null.
checkIsNullOrUndefined
The checks in the root of this library check for something positive. E.g. checkIsArray passes if the input is an array. The same applies here: this function passes if the input is null or undefined. Consider using vs.not.checkIsNotNullOrUndefined
if this is not what you want.
checkIsNullOrUndefined(x, [variableName])
- input is not null or undefined.
checkIsNumber
Fails for NaN.
checkIsNumber(x, [variableName])
- input is not a number or is NaN.
checkIsNumberGreaterThan
checkIsNumberGreaterThan(x, someNumber, [variableName])
If someNumber is not a number:
- The number to check against is not a number or is NaN.
Else:
- input is not a number or is NaN.
- input is not a number greater than someNumber.
e.g. 'input is not a number greater than 42.'
checkIsNumberLessThan
checkIsNumberLessThan(x, someNumber, [variableName])
If someNumber is not a number:
- The number to check against is not a number or is NaN.
Else:
- input is not a number or is NaN.
- input is not a number less than someNumber.
e.g. 'input is not a number less than 42.'
checkIsObject
Fails for null.
x is an object per the definition in 'typeof' EXCEPT that it returns false for null. Basically, this means it isn't another known type of primitive and is not null. See MDN.
checkIsObject(x, [variableName])
- input is not an object or is null.
checkIsObjectLike
x is an object and has exactly the same own properties as template (by default).
If options.allowExtraProps is true, x can have more properties than template.
See https://github.com/tmurphree/validation-predicates. Everything, even the strict mode guidance, is exactly the same.
isObjectLike(x, template, [variableName], [options={ allowExtraProps: false, checkType: false, debug: false }])
If template is not an object:
- The template object is not an object or is null.
'foo' in the following examples is the pertinent property name.
Else:
- input is not an object.
- input is missing at least property foo.
- input has at least one additional property foo.
When options.checkType
= true (the default in strict mode):
- input.foo is type actualType and expected type expectedType.
e.g. 'input.foo is type string and expected type number.'
checkIsObjectWithExpectedProps
checkIsObjectWithExpectedProps(x, expectedProperties, [variableName])
If expectedProperties is not an array, is an empty array, or has an non-string values:
- expectedProperties is not an array of strings.
'foo' in the following examples is the pertinent property name.
Else:
- input is not an object.
- input is missing at least property foo.
checkIsPopulatedArray
checkIsPopulatedArray(x, [variableName])
- input is not an array.
- input is a zero-length array.
checkIsPopulatedObject
checkIsPopulatedObject(x, [variableName])
- input is not an object or is null.
- input is an object with no non-inherited properties.
checkIsPopulatedString
checkIsPopulatedString(x, [variableName])
- input is not a string.
- input is a zero-length string.
checkIsString
checkIsString(x, [variableName])
- input is not a string.
checkIsSymbol
checkIsSymbol(x, [variableName])
- input is not a symbol.
checkIsUndefined
checkIsUndefined(x, [variableName])
- input is not undefined.
checkIsZeroLength
checkIsZeroLength(x, [variableName])
- input does not have a length property, or that property does not equal zero.
"not" functions
Check for a negative. In a separate namespace because it's very hard to differentiate checkIsNullOrUndefined
and checkIsNotNullOrUndefined
. It's easier differentiate vs.checkIsNullOrUndefined
and vs.not.checkIsNotNullOrUndefined
.
// use with 'vs.not'
const vs = require('@tmurphree/validation-suite');
vs.not.checkIsNotNullOrUndefined(userId);
not.checkIsNotNullOrUndefined
vs.not.checkIsNotNullOrUndefined(userId);
- input is null
- input is undefined