Last active
May 6, 2016 10:24
-
-
Save Zorgatone/49a2b1a81c8848626162a2f5aa47df0a to your computer and use it in GitHub Desktop.
Type Utils (for AngularJS 1.x) v1.0.0 - a collection of useful type filters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! | |
* Type Utils (for AngularJS 1.x) v1.0.0 - a collection of useful type filters | |
* transpile ES2015 (ES6) with BabelJS | |
* Copyright 2015 Zorgatone; Licensed MIT | |
*/ | |
export function isTypeFilter() { | |
return (val, type) => type === typeof val; | |
} | |
export function isFunctionFilter(isTypeFilter) { | |
return val => isTypeFilter(val, "function"); | |
} | |
export function isSymbolFilter(isTypeFilter) { | |
return val => isTypeFilter(val, "symbol"); | |
} | |
export function isBooleanFilter(isTypeFilter) { | |
return (val, isTrue = false) => | |
(isTrue === true) | |
? true === val | |
: isTypeFilter(val, "boolean"); | |
} | |
export function isStringFilter(isTypeFilter) { | |
return (val, notEmpty = false) => | |
(notEmpty === true) | |
? (isTypeFilter(val, "string") || val instanceof String) && 0 < val.length | |
: isTypeFilter(val, "string") || val instanceof String; | |
} | |
export function isObjectFilter(isObjectFilter) { | |
return (val, notNull = false) => | |
(notNull === true) | |
? null !== val && isTypeFilter(val, "object") | |
: isTypeFilter(val, "object"); | |
} | |
export function isArrayFilter() { | |
return (val, notEmpty = false) => | |
(notEmpty === true) | |
? Array.isArray(val) && 0 < val.length | |
: Array.isArray(val); | |
} | |
export function isDateFilter() { | |
return (val, isValid = false) => | |
(isValid === true) | |
? "[object Date]" === Object.prototype.toString.call(val) | |
: val instanceof Date; | |
} | |
export function isRegExpFilter() { | |
return val => val instanceof RegExp; | |
} | |
export function isUndefinedFilter(isTypeFilter) { | |
return val => isTypeFilter(val, "undefined"); | |
} | |
export function isNullFilter() { | |
return val => null === val; | |
} | |
export function isNullOrUndefinedFilter(isUndefinedFilter, isNullFilter) { | |
return val => isUndefinedFilter(val) || isNullFilter(val); | |
} | |
export function isNumberFilter(isTypeFilter) { | |
return (val, notNaN = false) => | |
(notNaN === true) | |
? !Number.isNaN(val) && (isTypeFilter(val, "number") || val instanceof Number) | |
: isTypeFilter(val, "number") || val instanceof Number; | |
} | |
export function isFiniteNumberFilter() { // valueOf is for the Number class | |
return val => Number.isFinite(val.valueOf()); | |
} | |
export function isInfiniteFilter() { | |
return val => { | |
val = val.valueOf(); // valueOf is for the Number class | |
return Infinity === val || -Infinity === val; | |
} | |
} | |
export function isPositiveZeroFilter() { | |
return num => Object.is(+0, num); | |
} | |
export function isNegativeZeroFilter() { | |
return num => Object.is(-0, num); | |
} | |
export function isPositiveNumberFilter(isNumberFilter) { | |
return (val, orZero = false) => | |
isNumberFilter(val, true) && | |
((orZero === true) | |
? val >= 0 | |
: val > 0) | |
} | |
export function isNegativeNumberFilter(isNumberFilter) { | |
return (val, orZero = false) => | |
isNumberFilter(val, true) && | |
((orZero === true) | |
? val <= 0 | |
: val < 0) | |
} | |
export function isDivisibleNumberFilter(isNumberFilter) { | |
return (num1, num2) => | |
isNumberFilter(num1, true) && isNumberFilter(num2, true) && | |
0 === num1 % num2; | |
} | |
export function isEvenNumberFilter(isDivisibleNumberFilter) { | |
return val => isDivisibleNumberFilter(val, 2); | |
} | |
export function isOddNumberFilter(isEvenNumberFilter) { | |
return val => !isEvenNumberFilter(val); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Example usage
You need to register the filters with angular: