Skip to content

Commit

Permalink
new isNullOrUndefined function 馃帺
Browse files Browse the repository at this point in the history
  • Loading branch information
mesqueeb committed Dec 21, 2019
1 parent 85e9abd commit 447efbc
Show file tree
Hide file tree
Showing 7 changed files with 77 additions and 22 deletions.
9 changes: 9 additions & 0 deletions .prettierrc
@@ -0,0 +1,9 @@
{
"printWidth": 100,
"tabWidth": 2,
"singleQuote": true,
"trailingComma": "es5",
"semi": false,
"bracketSpacing": true,
"quoteProps": "consistent"
}
20 changes: 15 additions & 5 deletions dist/index.cjs.js
Expand Up @@ -38,7 +38,7 @@ function isNull(payload) {
function isPlainObject(payload) {
if (getType(payload) !== 'Object')
return false;
return (payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype);
return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;
}
/**
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
Expand Down Expand Up @@ -124,7 +124,7 @@ function isEmptyString(payload) {
* @returns {payload is number}
*/
function isNumber(payload) {
return (getType(payload) === 'Number' && !isNaN(payload));
return getType(payload) === 'Number' && !isNaN(payload);
}
/**
* Returns whether the payload is a boolean
Expand All @@ -151,7 +151,7 @@ function isRegExp(payload) {
* @returns {payload is symbol}
*/
function isSymbol(payload) {
return (getType(payload) === 'Symbol');
return getType(payload) === 'Symbol';
}
/**
* Returns whether the payload is a date, and that the date is Valid
Expand All @@ -160,7 +160,7 @@ function isSymbol(payload) {
* @returns {payload is Date}
*/
function isDate(payload) {
return (getType(payload) === 'Date' && !isNaN(payload));
return getType(payload) === 'Date' && !isNaN(payload);
}
/**
* Returns whether the payload is a blob
Expand Down Expand Up @@ -194,6 +194,15 @@ function isPrimitive(payload) {
isString(payload) ||
isSymbol(payload));
}
/**
* Returns true whether the payload is null or undefined
*
* @param {*} payload
* @returns {(payload is null | undefined)}
*/
function isNullOrUndefined(payload) {
return isNull(payload) || isUndefined(payload);
}
/**
* Does a generic check to check that the given payload is of a given type.
* In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);
Expand All @@ -214,7 +223,7 @@ function isType(payload, type) {
}
// Classes usually have names (as functions usually have names)
var name = type.name;
return (getType(payload) === name) || Boolean(payload && (payload.constructor === type));
return getType(payload) === name || Boolean(payload && payload.constructor === type);
}

exports.getType = getType;
Expand All @@ -228,6 +237,7 @@ exports.isFile = isFile;
exports.isFullString = isFullString;
exports.isFunction = isFunction;
exports.isNull = isNull;
exports.isNullOrUndefined = isNullOrUndefined;
exports.isNumber = isNumber;
exports.isObject = isObject;
exports.isObjectLike = isObjectLike;
Expand Down
21 changes: 15 additions & 6 deletions dist/index.esm.js
Expand Up @@ -34,7 +34,7 @@ function isNull(payload) {
function isPlainObject(payload) {
if (getType(payload) !== 'Object')
return false;
return (payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype);
return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype;
}
/**
* Returns whether the payload is a plain JavaScript object (excluding special classes or objects with other prototypes)
Expand Down Expand Up @@ -120,7 +120,7 @@ function isEmptyString(payload) {
* @returns {payload is number}
*/
function isNumber(payload) {
return (getType(payload) === 'Number' && !isNaN(payload));
return getType(payload) === 'Number' && !isNaN(payload);
}
/**
* Returns whether the payload is a boolean
Expand All @@ -147,7 +147,7 @@ function isRegExp(payload) {
* @returns {payload is symbol}
*/
function isSymbol(payload) {
return (getType(payload) === 'Symbol');
return getType(payload) === 'Symbol';
}
/**
* Returns whether the payload is a date, and that the date is Valid
Expand All @@ -156,7 +156,7 @@ function isSymbol(payload) {
* @returns {payload is Date}
*/
function isDate(payload) {
return (getType(payload) === 'Date' && !isNaN(payload));
return getType(payload) === 'Date' && !isNaN(payload);
}
/**
* Returns whether the payload is a blob
Expand Down Expand Up @@ -190,6 +190,15 @@ function isPrimitive(payload) {
isString(payload) ||
isSymbol(payload));
}
/**
* Returns true whether the payload is null or undefined
*
* @param {*} payload
* @returns {(payload is null | undefined)}
*/
function isNullOrUndefined(payload) {
return isNull(payload) || isUndefined(payload);
}
/**
* Does a generic check to check that the given payload is of a given type.
* In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);
Expand All @@ -210,7 +219,7 @@ function isType(payload, type) {
}
// Classes usually have names (as functions usually have names)
var name = type.name;
return (getType(payload) === name) || Boolean(payload && (payload.constructor === type));
return getType(payload) === name || Boolean(payload && payload.constructor === type);
}

export { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyString, isFile, isFullString, isFunction, isNull, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isRegExp, isString, isSymbol, isType, isUndefined };
export { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyString, isFile, isFullString, isFunction, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isPlainObject, isPrimitive, isRegExp, isString, isSymbol, isType, isUndefined };
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "is-what",
"version": "3.4.0",
"version": "3.5.0",
"description": "JS type check (TypeScript supported) functions like `isPlainObject() isArray()` etc. A simple & small integration.",
"main": "dist/index.cjs.js",
"module": "dist/index.esm.js",
Expand Down
30 changes: 21 additions & 9 deletions src/index.ts
Expand Up @@ -34,9 +34,9 @@ export function isNull (payload: any): payload is null {
* @param {*} payload
* @returns {payload is {[key: string]: any}}
*/
export function isPlainObject (payload: any): payload is {[key: string]: any} {
export function isPlainObject (payload: any): payload is { [key: string]: any } {
if (getType(payload) !== 'Object') return false
return (payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype)
return payload.constructor === Object && Object.getPrototypeOf(payload) === Object.prototype
}

/**
Expand All @@ -45,7 +45,7 @@ export function isPlainObject (payload: any): payload is {[key: string]: any} {
* @param {*} payload
* @returns {payload is {[key: string]: any}}
*/
export function isObject (payload: any): payload is {[key: string]: any} {
export function isObject (payload: any): payload is { [key: string]: any } {
return isPlainObject(payload)
}

Expand All @@ -55,7 +55,7 @@ export function isObject (payload: any): payload is {[key: string]: any} {
* @param {*} payload
* @returns {payload is {[key: string]: any}}
*/
export function isAnyObject (payload: any): payload is {[key: string]: any} {
export function isAnyObject (payload: any): payload is { [key: string]: any } {
return getType(payload) === 'Object'
}

Expand Down Expand Up @@ -131,7 +131,7 @@ export function isEmptyString (payload: any): payload is string {
* @returns {payload is number}
*/
export function isNumber (payload: any): payload is number {
return (getType(payload) === 'Number' && !isNaN(payload))
return getType(payload) === 'Number' && !isNaN(payload)
}

/**
Expand Down Expand Up @@ -161,7 +161,7 @@ export function isRegExp (payload: any): payload is RegExp {
* @returns {payload is symbol}
*/
export function isSymbol (payload: any): payload is symbol {
return (getType(payload) === 'Symbol')
return getType(payload) === 'Symbol'
}

/**
Expand All @@ -171,7 +171,7 @@ export function isSymbol (payload: any): payload is symbol {
* @returns {payload is Date}
*/
export function isDate (payload: any): payload is Date {
return (getType(payload) === 'Date' && !isNaN(payload))
return getType(payload) === 'Date' && !isNaN(payload)
}

/**
Expand Down Expand Up @@ -200,7 +200,9 @@ export function isFile (payload: any): payload is File {
* @param {*} payload
* @returns {(payload is boolean | null | undefined | number | string | symbol)}
*/
export function isPrimitive (payload: any): payload is boolean | null | undefined | number | string | symbol {
export function isPrimitive (
payload: any
): payload is boolean | null | undefined | number | string | symbol {
return (
isBoolean(payload) ||
isNull(payload) ||
Expand All @@ -211,6 +213,16 @@ export function isPrimitive (payload: any): payload is boolean | null | undefine
)
}

/**
* Returns true whether the payload is null or undefined
*
* @param {*} payload
* @returns {(payload is null | undefined)}
*/
export function isNullOrUndefined (payload: any): payload is null | undefined {
return isNull(payload) || isUndefined(payload)
}

/**
* Does a generic check to check that the given payload is of a given type.
* In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);
Expand All @@ -231,5 +243,5 @@ export function isType<T extends Function> (payload: any, type: T): payload is T
}
// Classes usually have names (as functions usually have names)
const name: string | undefined | null = (<any>type).name
return (getType(payload) === name) || Boolean(payload && (payload.constructor === type))
return getType(payload) === name || Boolean(payload && payload.constructor === type)
}
10 changes: 9 additions & 1 deletion test/index.test.js
Expand Up @@ -4,6 +4,7 @@ import {
isAnyObject,
isUndefined,
isNull,
isNullOrUndefined,
isFunction,
isArray,
isString,
Expand All @@ -23,6 +24,8 @@ import {
test('Basic true tests', () => {
expect(isUndefined(undefined)).toBe(true)
expect(isNull(null)).toBe(true)
expect(isNullOrUndefined(null)).toBe(true)
expect(isNullOrUndefined(undefined)).toBe(true)
expect(isObject({})).toBe(true)
expect(isObject(new Object())).toBe(true)
expect(isFunction(_ => {})).toBe(true)
Expand Down Expand Up @@ -59,6 +62,7 @@ test('Basic false tests', () => {
expect(isBoolean(NaN)).toBe(false)
expect(isRegExp(NaN)).toBe(false)
expect(isSymbol(NaN)).toBe(false)
expect(isNullOrUndefined(NaN)).toBe(false)
})

test('Primitive tests', () => {
Expand Down Expand Up @@ -131,7 +135,11 @@ test('isObject vs isAnyObject', () => {
class MyClass2 {}
const myClass2 = new MyClass()
const mySpecialObject = {}
Object.setPrototypeOf(mySpecialObject, {toDate: function () { return new Date() }})
Object.setPrototypeOf(mySpecialObject, {
toDate: function () {
return new Date()
},
})
// IS OBJECT
// plain object
expect(isObject({})).toBe(true)
Expand Down
7 changes: 7 additions & 0 deletions types/index.d.ts
Expand Up @@ -149,6 +149,13 @@ export declare function isFile(payload: any): payload is File;
* @returns {(payload is boolean | null | undefined | number | string | symbol)}
*/
export declare function isPrimitive(payload: any): payload is boolean | null | undefined | number | string | symbol;
/**
* Returns true whether the payload is null or undefined
*
* @param {*} payload
* @returns {(payload is null | undefined)}
*/
export declare function isNullOrUndefined(payload: any): payload is null | undefined;
/**
* Does a generic check to check that the given payload is of a given type.
* In cases like Number, it will return true for NaN as NaN is a Number (thanks javascript!);
Expand Down

0 comments on commit 447efbc

Please sign in to comment.