From 02332a54afaab836824dccb4126c802139323200 Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Sun, 10 Dec 2017 18:59:49 +0100 Subject: [PATCH] feat: add isFalsy Ref #66 --- src/index.d.ts | 6 ++++++ src/index.js | 1 + src/isFalsy.js | 29 +++++++++++++++++++++++++++++ src/isTruthy.js | 2 +- test/isFalsy.js | 31 +++++++++++++++++++++++++++++++ 5 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 src/isFalsy.js create mode 100644 test/isFalsy.js diff --git a/src/index.d.ts b/src/index.d.ts index e10ee1d3f3..b563ef453f 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -633,6 +633,12 @@ declare namespace RamdaAdjunct { */ isTruthy(val: any): boolean; + /** + * A falsy value is a value that translates to false when evaluated in a Boolean context. + * Falsy values are `false`, `0`, `""`, `null`, `undefined`, and `NaN`. + */ + isFalsy(val: any): boolean; + /** * Identity type. */ diff --git a/src/index.js b/src/index.js index 99a068b9c9..0abc2d960c 100644 --- a/src/index.js +++ b/src/index.js @@ -60,6 +60,7 @@ export { default as isNotPair } from './isNotPair'; export { default as isThenable } from './isThenable'; export { default as isPromise } from './isPromise'; export { default as isTruthy } from './isTruthy'; +export { default as isFalsy } from './isFalsy'; // Function export { default as stubUndefined } from './stubUndefined'; export { default as stubNull } from './stubNull'; diff --git a/src/isFalsy.js b/src/isFalsy.js new file mode 100644 index 0000000000..1824c3b9e8 --- /dev/null +++ b/src/isFalsy.js @@ -0,0 +1,29 @@ +import { complement } from 'ramda'; + +import isTruthy from './isTruthy'; + + +/** + * A falsy value is a value that translates to false when evaluated in a Boolean context. + * Falsy values are `false`, `0`, `""`, `null`, `undefined`, and `NaN`. + * + * @func isFalsy + * @memberOf RA + * @since {@link https://char0n.github.io/ramda-adjunct/2.2.0|v2.2..0} + * @category Type + * @sig * -> Boolean + * @param {*} val The value to test + * @return {Boolean} + * @see {@link https://developer.mozilla.org/en-US/docs/Glossary/Falsy|falsy}, {@link RA.isTruthy|isTruthy} + * @example + * + * RA.isFalsy(false); // => true + * RA.isFalsy(0); // => true + * RA.isFalsy(''); // => true + * RA.isFalsy(null); // => true + * RA.isFalsy(undefined); // => true + * RA.isFalsy(NaN); // => true + */ +const isFalsy = complement(isTruthy); + +export default isFalsy; diff --git a/src/isTruthy.js b/src/isTruthy.js index 66bae13c14..e81169062c 100644 --- a/src/isTruthy.js +++ b/src/isTruthy.js @@ -13,7 +13,7 @@ import { pipe, equals } from 'ramda'; * @sig * -> Boolean * @param {*} val The value to test * @return {Boolean} - * @see {@link RA.isFalsy|isFalsy} + * @see {@link https://developer.mozilla.org/en-US/docs/Glossary/Truthy|truthy}, {@link RA.isFalsy|isFalsy} * @example * * RA.isTruthy({}); // => true diff --git a/test/isFalsy.js b/test/isFalsy.js new file mode 100644 index 0000000000..f23657be83 --- /dev/null +++ b/test/isFalsy.js @@ -0,0 +1,31 @@ +import * as RA from '../src/index'; +import eq from './shared/eq'; +import Symbol from './shared/Symbol'; +import args from './shared/arguments'; + + +describe('isFalsy', function() { + it('tests a value for `falsy`', function() { + eq(RA.isFalsy(false), true); + eq(RA.isFalsy(0), true); + eq(RA.isFalsy(''), true); + eq(RA.isFalsy(null), true); + eq(RA.isFalsy(undefined), true); + eq(RA.isFalsy(NaN), true); + + eq(RA.isFalsy('abc'), false); + eq(RA.isFalsy(Object('abc')), false); + eq(RA.isFalsy(args), false); + eq(RA.isFalsy([1, 2, 3]), false); + eq(RA.isFalsy(new Date()), false); + eq(RA.isFalsy(new Error()), false); + eq(RA.isFalsy(Array.prototype.slice), false); + eq(RA.isFalsy({ 0: 1, length: 1 }), false); + eq(RA.isFalsy(1), false); + eq(RA.isFalsy(/x/), false); + eq(RA.isFalsy(Symbol), RA.isUndefined(Symbol)); + eq(RA.isFalsy({}), false); + eq(RA.isFalsy([]), false); + eq(RA.isFalsy(Infinity), false); + }); +});