'use strict'; /** * Is this value defined and not null? * @private */ const defined = function (val) { return typeof val !== 'undefined' && val !== null; }; /** * Is this value an object? * @private */ const object = function (val) { return typeof val === 'object'; }; /** * Is this value a plain object? * @private */ const plainObject = function (val) { return object(val) && Object.prototype.toString.call(val) === '[object Object]'; }; /** * Is this value a function? * @private */ const fn = function (val) { return typeof val === 'function'; }; /** * Is this value a boolean? * @private */ const bool = function (val) { return typeof val === 'boolean'; }; /** * Is this value a Buffer object? * @private */ const buffer = function (val) { return object(val) && val instanceof Buffer; }; /** * Is this value a non-empty string? * @private */ const string = function (val) { return typeof val === 'string' && val.length > 0; }; /** * Is this value a real number? * @private */ const number = function (val) { return typeof val === 'number' && !Number.isNaN(val); }; /** * Is this value an integer? * @private */ const integer = function (val) { return number(val) && val % 1 === 0; }; /** * Is this value within an inclusive given range? * @private */ const inRange = function (val, min, max) { return val >= min && val <= max; }; /** * Is this value within the elements of an array? * @private */ const inArray = function (val, list) { return list.indexOf(val) !== -1; }; /** * Create an Error with a message relating to an invalid parameter. * * @param {String} name - parameter name. * @param {String} expected - description of the type/value/range expected. * @param {*} actual - the value received. * @returns {Error} Containing the formatted message. * @private */ const invalidParameterError = function (name, expected, actual) { return new Error( `Expected ${expected} for ${name} but received ${actual} of type ${typeof actual}` ); }; module.exports = { defined: defined, object: object, plainObject: plainObject, fn: fn, bool: bool, buffer: buffer, string: string, number: number, integer: integer, inRange: inRange, inArray: inArray, invalidParameterError: invalidParameterError };