268 lines
5.3 KiB
JavaScript
268 lines
5.3 KiB
JavaScript
/**
|
|
* DataType Tools Module ...
|
|
* a module for manipulate and detect supported data types in node js ...
|
|
*
|
|
* Maintainer
|
|
*
|
|
* Hadi Khazaee Asl <https://saherelm.ir> (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
|