event_request
Version:
A Backend Server
408 lines (358 loc) • 8.39 kB
JavaScript
// Container
let assert = {};
/**
* @brief Gets the type of the value
*
* @param {*} value
*
* @return {String}
*/
function getType( value ) {
return typeof value;
}
/**
* @brief Gets the array of the value
*
* @param {*} value
*
* @return {Number}
*/
function getLength( value ) {
if ( value === undefined )
return -1;
if ( Array.isArray( value ) )
return value.length;
if( getType( value ) === 'number' )
return value;
if( getType( value ) === 'string' )
return value.length;
if ( getType( value ) === 'object' )
return Object.keys( value ).length;
return -1;
}
/**
* @var RegExp EMAIL_REGEX
*/
const EMAIL_REGEX = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
/**
* @brief Assert if the two values are equal ignoring type coercion
*
* @param {*} actual
* @param {*} expected
*
* @return {Boolean}
*/
assert.assertEqual = ( actual, expected ) => {
return actual == expected;
};
/**
* @brief Assert if the two values are equal acknowledges type coercion
*
* @param {*} actual
* @param {*} expected
*
* @return {Boolean}
*/
assert.assertStrictEqual = ( actual, expected ) => {
return actual === expected;
};
/**
* @brief Assert if the two values are NOT equal ignoring type coercion
*
* @param {*} actual
* @param {*} expected
*
* @return {Boolean}
*/
assert.assertNotEqual = ( actual, expected ) => {
return actual != expected;
};
/**
* @brief Assert if the two values are NOT equal acknowledges type coercion
*
* @param {*} actual
* @param {*} expected
*
* @return {Boolean}
*/
assert.assertStrictNotEqual = ( actual, expected ) => {
return actual !== expected;
};
/**
* @brief Assert that the given value is a string
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertIsString = ( actual ) => {
return assert.assertIsInternalType( actual, 'string' );
};
/**
* @brief Assert that the given value is NOT a string
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertNotString = ( actual ) => {
return assert.assertNotInternalType( actual, 'string' );
};
/**
* @brief Assert that the given value is a number
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertIsNumeric = ( actual ) => {
const check = Number( actual );
return ! isNaN( check ) && actual === check;
};
/**
* @brief Asserts that the given value is NOT a number
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertNotNumeric = ( actual ) => {
return isNaN( Number( actual ) );
};
/**
* @brief Asserts that the given value is an array
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertIsArray = ( actual ) => {
return Array.isArray( actual );
};
/**
* @brief Asserts that the given value is NOT an array
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertNotArray = ( actual ) => {
return ! Array.isArray( actual );
};
/**
* @brief Assert that the given value is empty
*
* @details Will check for an empty String, empty Object or empty Array
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertIsEmpty = ( actual ) => {
return actual === null
|| actual === undefined
|| actual === ''
|| ( getType( actual ) === 'object' && Object.keys( actual ).length === 0 )
|| ( Array.isArray( actual ) && actual.length === 0 );
};
/**
* @brief Assert that the given value is empty
*
* @details Will check for a non empty String, non empty Object and non empty Array
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertNotEmpty = ( actual ) => {
if ( actual === undefined || actual === null )
return false;
if ( Array.isArray( actual ) )
return actual.length > 0;
if ( getType( actual ) === 'object' )
return Object.keys( actual ).length > 0;
return actual !== '';
};
/**
* @brief Assert that the given value is a Date Object or a value that can be cast to a date
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertIsDate = ( actual ) => {
return ! isNaN( Date.parse( actual ) );
};
/**
* @brief Assert that the given value is a Date Object
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertIsDateObject = ( actual ) => {
return actual instanceof Date;
};
/**
* @brief Assert that the given value is NOT a Date Object or a value that can be cast to a date
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertNotDate = ( actual ) => {
return isNaN( Date.parse( actual ) );
};
/**
* @brief Assert that the given value is NOT a Date Object
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertNotDateObject = ( actual ) => {
return ! ( actual instanceof Date );
};
/**
* @brief Assert that the given value is the given internal type like: string, number, array etc
*
* @param {*} actual
* @param {String} internalType
*
* @return {Boolean}
*/
assert.assertIsInternalType = ( actual, internalType ) => {
return getType( actual ) === internalType;
};
/**
* @brief Assert that the given value is NOT the given internal type like: string, number, array etc
*
* @param {*} actual
* @param {String} internalType
*
* @return {Boolean}
*/
assert.assertNotInternalType = ( actual, internalType ) => {
return getType( actual ) !== internalType;
};
/**
* @brief Asserts that the given value is a valid email address
*
* @param {String} actual
*
* @return {Boolean}
*/
assert.assertIsValidEmail = ( actual ) => {
return EMAIL_REGEX.test( String( actual ).toLowerCase() );
};
/**
* @brief Asserts that the given value is NOT a valid email address
*
* @param {String} actual
*
* @return {Boolean}
*/
assert.assertNotValidEmail = ( actual ) => {
return ! EMAIL_REGEX.test( String( actual ).toLowerCase() );
};
/**
* @brief Asserts that the given value is bigger than the given comparator
*
* @param {*} actual
* @param {*} comparator
*
* @return {Boolean}
*/
assert.assertBiggerThan = ( actual, comparator ) => {
return getLength( actual ) > getLength( comparator );
};
/**
* @brief Asserts that the given value is bigger or equal in regards to the given comparator
*
* @param {*} actual
* @param {*} comparator
*
* @return {Boolean}
*/
assert.assertBiggerOrEqual = ( actual, comparator ) => {
return getLength( actual ) >= getLength( comparator );
};
/**
* @brief Asserts that the given value is smaller than the given comparator
*
* @param {*} actual
* @param {*} comparator
*
* @return {Boolean}
*/
assert.assertSmallerThan = ( actual, comparator ) => {
return getLength( actual ) < getLength( comparator );
};
/**
* @brief Asserts that the given value is smaller or equal in regards to the given comparator
*
* @param {*} actual
* @param {*} comparator
*
* @return {Boolean}
*/
assert.assertSmallerOrEqual = ( actual, comparator ) => {
return getLength( actual ) <= getLength( comparator );
};
/**
* @brief Assert that the given value is a Boolean
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertIsBoolean = ( actual ) => {
return assert.assertIsInternalType( actual, 'boolean' )
? true
: assert.assertTrue( actual ) || assert.assertFalse( actual );
};
/**
* @brief Assert that the given value is NOT a Boolean
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertNotBoolean = ( actual ) => {
return assert.assertNotInternalType( actual, 'boolean' );
};
/**
* @brief Asserts that the given value is or casts to TRUE
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertTrue = ( actual ) => {
if ( assert.assertIsInternalType( actual, 'boolean' ) )
return actual === true;
if ( assert.assertIsInternalType( actual, 'number' ) )
return actual === 1;
if ( assert.assertIsInternalType( actual, 'string' ) )
return actual === 'true' || actual === '1';
return false;
};
/**
* @brief Asserts that the given value is or casts to FALSE
*
* @param {*} actual
*
* @return {Boolean}
*/
assert.assertFalse = ( actual ) => {
if ( assert.assertIsInternalType( actual, 'boolean' ) )
return actual === false;
if ( assert.assertIsInternalType( actual, 'number' ) )
return actual === 0;
if ( assert.assertIsInternalType( actual, 'string' ) )
return actual === 'false' || actual === '0';
return false;
};
assert.getLength = getLength;
module.exports = assert;
;