ow
Version:
Function argument validation for humans
90 lines (83 loc) • 3.49 kB
JavaScript
import { Predicate } from './predicate.js';
export class TypedArrayPredicate extends Predicate {
typeName;
/**
@hidden
*/
constructor(type, options, validators) {
super(type, options, validators);
this.typeName = type;
}
/**
Test a typed array to have a specific byte length.
@param byteLength - The byte length of the typed array.
*/
byteLength(byteLength) {
return this.addValidator({
message: (value, label) => `Expected ${label} to have byte length of \`${byteLength}\`, got \`${value.byteLength}\``,
validator: value => value.byteLength === byteLength,
});
}
/**
Test a typed array to have a minimum byte length.
@param byteLength - The minimum byte length of the typed array.
*/
minByteLength(byteLength) {
return this.addValidator({
message: (value, label) => `Expected ${label} to have a minimum byte length of \`${byteLength}\`, got \`${value.byteLength}\``,
validator: value => value.byteLength >= byteLength,
negatedMessage: (value, label) => `Expected ${label} to have a maximum byte length of \`${byteLength - 1}\`, got \`${value.byteLength}\``,
});
}
/**
Test a typed array to have a minimum byte length.
@param length - The minimum byte length of the typed array.
*/
maxByteLength(byteLength) {
return this.addValidator({
message: (value, label) => `Expected ${label} to have a maximum byte length of \`${byteLength}\`, got \`${value.byteLength}\``,
validator: value => value.byteLength <= byteLength,
negatedMessage: (value, label) => `Expected ${label} to have a minimum byte length of \`${byteLength + 1}\`, got \`${value.byteLength}\``,
});
}
/**
Test a typed array to have a specific length.
@param length - The length of the typed array.
*/
length(length) {
return this.addValidator({
message: (value, label) => `Expected ${label} to have length \`${length}\`, got \`${value.length}\``,
validator: value => value.length === length,
});
}
/**
Test a typed array to have a minimum length.
@param length - The minimum length of the typed array.
*/
minLength(length) {
return this.addValidator({
message: (value, label) => `Expected ${label} to have a minimum length of \`${length}\`, got \`${value.length}\``,
validator: value => value.length >= length,
negatedMessage: (value, label) => `Expected ${label} to have a maximum length of \`${length - 1}\`, got \`${value.length}\``,
});
}
/**
Test a typed array to have a maximum length.
@param length - The maximum length of the typed array.
*/
maxLength(length) {
return this.addValidator({
message: (value, label) => `Expected ${label} to have a maximum length of \`${length}\`, got \`${value.length}\``,
validator: value => value.length <= length,
negatedMessage: (value, label) => `Expected ${label} to have a minimum length of \`${length + 1}\`, got \`${value.length}\``,
});
}
/**
@hidden
*/
withValidators(validators) {
// eslint-disable-next-line @typescript-eslint/naming-convention
const Constructor = this.constructor;
return new Constructor(this.typeName, this.options, validators);
}
}