UNPKG

ensure-type

Version:

Ensure runtime type safety and perform type coercion if needed.

231 lines (176 loc) 7.4 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var ensureArray = function ensureArray(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; if (value === undefined || value === null) { return [].concat(defaultValue); } return Array.isArray(value) ? value : [].concat(value); }; var ensureBigInt = function ensureBigInt(value, defaultValue) { var _defaultValue; if (!(typeof BigInt === 'function' && typeof BigInt(0) === 'bigint')) { throw new Error('BigInt is not defined'); } defaultValue = (_defaultValue = defaultValue) !== null && _defaultValue !== void 0 ? _defaultValue : BigInt(0); if (value === undefined || value === null) { return ensureBigInt(defaultValue); } if (typeof value === 'bigint') { return value; } try { // A `BigInt` is created by appending `n` to the end of an integer literal or by calling the function `BigInt()`. value = BigInt(value); // big integer coercible value } catch (e) { value = ensureBigInt(defaultValue); } return value; }; var ensureBoolean = function ensureBoolean(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; if (value === undefined || value === null) { return Boolean(defaultValue); } return typeof value === 'boolean' ? value : Boolean(value); // boolean coercible value }; var ensureFunction = function ensureFunction(value, defaultValue) { var _defaultValue; defaultValue = (_defaultValue = defaultValue) !== null && _defaultValue !== void 0 ? _defaultValue : function () {}; if (value === undefined || value === null) { return ensureFunction(defaultValue); } return typeof value === 'function' ? value : ensureFunction(defaultValue); }; /** * The trunc() function returns the integer part of a number by removing any fractional digits. */ var trunc = function trunc(v) { return v < 0 ? Math.ceil(v) : Math.floor(v); }; var ensureNumber = function ensureNumber(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (value === undefined || value === null) { return ensureNumber(defaultValue); } value = Number(value); // number coercible value if (Number.isNaN(value)) { return ensureNumber(defaultValue); } return value; }; var ensureNegativeNumber = function ensureNegativeNumber(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -0; return Math.min(ensureNumber(value, defaultValue), -0); }; var ensurePositiveNumber = function ensurePositiveNumber(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; return Math.max(ensureNumber(value, defaultValue), 0); }; var ensureFiniteNumber = function ensureFiniteNumber(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; value = ensureNumber(value, defaultValue); // Determines whether the passed value is a finite number if (typeof value === 'number' && isFinite(value)) { return value; } return ensureFiniteNumber(defaultValue); }; var ensureNegativeFiniteNumber = function ensureNegativeFiniteNumber(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -0; return Math.min(ensureFiniteNumber(value, defaultValue), -0); }; var ensurePositiveFiniteNumber = function ensurePositiveFiniteNumber(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; return Math.max(ensureFiniteNumber(value, defaultValue), 0); }; var ensureInteger = function ensureInteger(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; value = ensureFiniteNumber(value, defaultValue); return trunc(value); }; /** * An integer is negative if it is less than zero. */ var ensureNegativeInteger = function ensureNegativeInteger(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1; return Math.min(ensureInteger(value, defaultValue), -1); }; /** * An integer is positive if it is greater than zero. */ var ensurePositiveInteger = function ensurePositiveInteger(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; return Math.max(ensureInteger(value, defaultValue), 1); }; /** * A non-negative integer is an integer that is either zero or positive. */ var ensureNonNegativeInteger = function ensureNonNegativeInteger(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; return Math.max(ensureInteger(value, defaultValue), 0); }; /** * A non-positive integer is an integer that is either zero or negative. */ var ensureNonPositiveInteger = function ensureNonPositiveInteger(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -0; return Math.min(ensureInteger(value, defaultValue), -0); }; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /** * @param {any} obj The object to inspect. * @returns {boolean} True if the argument appears to be a plain object. */ var isPlainObject = function isPlainObject(obj) { if (_typeof(obj) !== 'object' || obj === null) { return false; } var proto = obj; while (Object.getPrototypeOf(proto) !== null) { proto = Object.getPrototypeOf(proto); } return Object.getPrototypeOf(obj) === proto; }; var ensurePlainObject = function ensurePlainObject(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (value === undefined || value === null) { return ensurePlainObject(defaultValue); } return isPlainObject(value) ? value : ensurePlainObject(defaultValue); }; var ensureString = function ensureString(value) { var defaultValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; if (value === undefined || value === null) { return String(defaultValue); } return typeof value === 'string' ? value : String(value); // string coercible value }; exports.ensureArray = ensureArray; exports.ensureBigInt = ensureBigInt; exports.ensureBoolean = ensureBoolean; exports.ensureFiniteNumber = ensureFiniteNumber; exports.ensureFunction = ensureFunction; exports.ensureInteger = ensureInteger; exports.ensureNegativeFiniteNumber = ensureNegativeFiniteNumber; exports.ensureNegativeInteger = ensureNegativeInteger; exports.ensureNegativeNumber = ensureNegativeNumber; exports.ensureNonNegativeInteger = ensureNonNegativeInteger; exports.ensureNonPositiveInteger = ensureNonPositiveInteger; exports.ensureNumber = ensureNumber; exports.ensurePlainObject = ensurePlainObject; exports.ensurePositiveFiniteNumber = ensurePositiveFiniteNumber; exports.ensurePositiveInteger = ensurePositiveInteger; exports.ensurePositiveNumber = ensurePositiveNumber; exports.ensureString = ensureString;