config/validator: add some validation methods.

This commit is contained in:
Christopher Jeffrey 2017-05-13 02:39:03 -07:00
parent 677d85de1c
commit af0ab46f21
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
2 changed files with 112 additions and 8 deletions

View File

@ -284,17 +284,88 @@ Config.prototype.num = function num(key, fallback) {
if (typeof value !== 'string') {
if (typeof value !== 'number')
throw new Error(key + ' must be a string.');
throw new Error(key + ' must be a positive integer.');
return value;
}
if (!/^\d+$/.test(value))
throw new Error(key + ' must be a number.');
throw new Error(key + ' must be a positive integer.');
value = parseInt(value, 10);
if (!isFinite(value))
throw new Error(key + ' must be a number.');
throw new Error(key + ' must be a positive integer.');
return value;
};
/**
* Get a config option (as a float).
* @param {String} key
* @param {Object?} fallback
* @returns {Number|null}
*/
Config.prototype.flt = function flt(key, fallback) {
var value = this.get(key);
if (fallback === undefined)
fallback = null;
if (value === null)
return fallback;
if (typeof value !== 'string') {
if (typeof value !== 'number')
throw new Error(key + ' must be a float.');
return value;
}
if (!/^\d*(?:\.\d*)?$/.test(value))
throw new Error(key + ' must be a float.');
value = parseFloat(value);
if (!isFinite(value))
throw new Error(key + ' must be a float.');
return value;
};
/**
* Get a value (as a satoshi number or btc string).
* @param {String} key
* @param {Object?} fallback
* @returns {Number|null}
*/
Config.prototype.amt = function amt(key, fallback) {
var value = this.get(key);
if (fallback === undefined)
fallback = null;
if (value === null)
return fallback;
if (typeof value !== 'string') {
if (typeof value !== 'number')
throw new Error(key + ' must be an amount.');
return value;
}
if (!/^\d+(\.\d{0,8})?$/.test(value))
throw new Error(key + ' must be an amount.');
value = parseFloat(value);
if (!isFinite(value))
throw new Error(key + ' must be an amount.');
value *= 1e8;
if (value % 1 !== 0 || value < 0 || value > 0x1fffffffffffff)
throw new Error(key + ' must be an amount (uint64).');
return value;
};

View File

@ -153,6 +153,39 @@ Validator.prototype.num = function num(key, fallback) {
return value;
};
/**
* Get a value (as a number).
* @param {String} key
* @param {Object?} fallback
* @returns {Number|null}
*/
Validator.prototype.flt = function flt(key, fallback) {
var value = this.get(key);
if (fallback === undefined)
fallback = null;
if (value === null)
return fallback;
if (typeof value !== 'string') {
if (typeof value !== 'number')
throw new ValidationError(fmt(key) + ' must be a float.');
return value;
}
if (!/^\d*(?:\.\d*)?$/.test(value))
throw new ValidationError(fmt(key) + ' must be a float.');
value = parseFloat(value);
if (!isFinite(value))
throw new ValidationError(fmt(key) + ' must be a float.');
return value;
};
/**
* Get a value (as a uint32).
* @param {String} key
@ -259,22 +292,22 @@ Validator.prototype.amt = function amt(key, fallback) {
if (typeof value !== 'string') {
if (typeof value !== 'number')
throw new ValidationError(fmt(key) + ' must be a number.');
throw new ValidationError(fmt(key) + ' must be an amount.');
return value;
}
if (!/^\d+(\.\d{0,8})?$/.test(value))
throw new ValidationError(fmt(key) + ' must be a number.');
throw new ValidationError(fmt(key) + ' must be an amount.');
value = parseFloat(value);
if (!isFinite(value))
throw new ValidationError(fmt(key) + ' must be a number.');
throw new ValidationError(fmt(key) + ' must be an amount.');
value *= 1e8;
if (value % 1 !== 0 || value < 0 || value > 0x1fffffffffffff)
throw new ValidationError(fmt(key) + ' must be a uint64.');
throw new ValidationError(fmt(key) + ' must be an amount (uint64).');
return value;
};
@ -298,7 +331,7 @@ Validator.prototype.btc = function btc(key, fallback) {
value *= 1e8;
if (value % 1 !== 0 || value < 0 || value > 0x1fffffffffffff)
throw new ValidationError(fmt(key) + ' must be a uint64.');
throw new ValidationError(fmt(key) + ' must be a btc float (uint64).');
return value;
};