/** * DataType Tools Module ... * a module for manipulate and detect supported data types in node js ... * * Maintainer * * Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com) */ // //#region Constants ... /** * all supported data types ... */ const DataTypes = { Null: 'null', Date: 'date', Array: 'array', Object: 'object', String: 'string', Number: 'number', Unknown: 'unknown', Boolean: 'boolean', Function: 'function', Undefined: 'undefined', }; //#endregion // //#region Actions ... /** * detect type of a content ... * * @param {any} value the content which going to check ... * @returns */ function getType(value) { // const type = typeof value; // let result = DataTypes.Unknown; let dateIdentifier = '[object Date]'; let constructor = value && value.constructor ? value.constructor.toString() : ''; // switch (type) { // case 'undefined': result = DataTypes.Undefined; break; // case 'boolean': result = DataTypes.Boolean; break; // case 'string': result = DataTypes.String; break; // case 'number': result = DataTypes.Number; break; // case 'function': result = DataTypes.Function; break; // case 'object': // // Null ... if (value === null) { result = DataTypes.Null; } else // // Array ... if (Array.isArray(value)) { result = DataTypes.Array; } else // // Data ... if ( value instanceof Date || isFunction(value.getMonth) || constructor.includes(dateIdentifier) || Object.prototype.toString.call(value) === dateIdentifier ) { result = DataTypes.Date; } else // // Object ... { result = DataTypes.Object; } break; // default: result = DataTypes.Unknown; break; } // return result; } /** * retrieve an object constructor ... * * @param {any} value the content which going to check ... * @returns */ function getConstructor(value) { // const result = value && value.constructor ? value.constructor.toString() : ''; // return result; } /** * retrieve an object prototype ... * * @param {any} value the content which going to check ... * @returns */ function getPrototype(value) { // const result = value ? Object.prototype.toString.call(value) : ''; // return result; } /** * check an object is null or not ... * * @param {any} value the content which going to check ... * @returns */ function isNull(value) { return getType(value) === DataTypes.Null; } /** * check an object is undefined or not ... * * @param {any} value the content which going to check ... * @returns */ function isUndefined(value) { return getType(value) === DataTypes.Undefined; } /** * check an object is null or undefined or not ... * * @param {any} value the content which going to check ... * @returns */ function isNullOrUndefined(value) { return isNull(value) || isUndefined(value); } /** * check an object is a date or not ... * * @param {any} value the content which going to check ... * @returns */ function isDate(value) { return getType(value) === DataTypes.Date; } /** * check an object is number or not ... * * @param {any} value the content which going to check ... * @returns */ function isNumber(value) { return getType(value) === DataTypes.Number; } /** * check an object is string or not ... * * @param {any} value the content which going to check ... * @returns */ function isString(value) { return getType(value) === DataTypes.String; } /** * check an object is boolean or not ... * * @param {any} value the content which going to check ... * @returns */ function isBoolean(value) { return getType(value) === DataTypes.Boolean; } /** * check an object is an Array or not ... * * @param {any} value the content which going to check ... * @returns */ function isArray(value) { return getType(value) === DataTypes.Array; } /** * check an object is and Object or not ... * * @param {any} value the content which going to check ... * @returns */ function isObject(value) { return getType(value) === DataTypes.Object; } /** * check an object is a Function or not ... * * @param {any} value the content which going to check ... * @returns */ function isFunction(value) { return getType(value) === DataTypes.Function; } //#endregion // //#region Module Exports ... module.exports = { // DataTypes, // getType, getConstructor, getPrototype, isNull, isUndefined, isNullOrUndefined, isDate, isNumber, isString, isBoolean, isArray, isObject, isFunction, } //#endregion