validator.js-asserts
Version:
A set of extra asserts for validator.js.
79 lines (57 loc) • 1.64 kB
JavaScript
;
/**
* Module dependencies.
*/
const { Assert: BaseAssert, Violation } = require('validator.js');
const BigNumberAssert = require('./big-number-assert');
const _ = require('lodash');
let BigNumber;
/**
* Optional peer dependencies.
*/
try {
BigNumber = require('bignumber.js');
// eslint-disable-next-line no-empty
} catch {}
/**
* Export `BigNumberGreaterThanAssert`.
*/
module.exports = function bigNumberGreaterThanAssert(threshold, { validateSignificantDigits = true } = {}) {
if (!BigNumber) {
throw new Error('BigNumber is not installed');
}
/**
* Extend `Assert` with `BigNumberAssert`.
*/
const Assert = BaseAssert.extend({ BigNumber: BigNumberAssert });
/**
* Class name.
*/
this.__class__ = 'BigNumberGreaterThan';
if (typeof threshold === 'undefined') {
throw new Error('A threshold value is required.');
}
Assert.bigNumber({ validateSignificantDigits }).validate(threshold);
this.threshold = new BigNumber(threshold);
/**
* Validation algorithm.
*/
this.validate = value => {
try {
Assert.bigNumber({ validateSignificantDigits }).validate(value);
const number = new BigNumber(value);
if (!number.isGreaterThan(this.threshold)) {
throw new Error();
}
} catch (e) {
const context = { threshold: this.threshold.toString() };
const message = e.message || _.get(e, 'violation.message');
if (message && message.startsWith('[BigNumber Error]')) {
context.message = message;
}
throw new Violation(this, value, context);
}
return true;
};
return this;
};