declarative-js
Version:
_declarative-js_ is modern JavaScript library, that helps to: - tackle array transformation with built in JavaScript array api (e.g. `array.filter(toBe.unique())`), - provide a type-level solution for representing optional values instead of null referen
204 lines (203 loc) • 7.26 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
/**
* Functions to be used in {@link Array.prototype.filter} as a callback.
* @see https://pavel-surinin.github.io/declarativejs/#/?id=filters
*/
var toBe;
(function (toBe) {
/**
* Function to be used in {@link Array.prototype.filter} as a callback.
* Filters out items that are not present ({@code undefined} and {@code null}) in array
*
* @returns {boolean}
* @see https://pavel-surinin.github.io/declarativejs/#/?id=tobepresent
*/
function present(value) {
return value != undefined;
}
toBe.present = present;
/**
* Function to be used in {@link Array.prototype.filter} as a callback.
* Filters out items that are empty
*
* @returns {boolean}
* @see https://pavel-surinin.github.io/declarativejs/#/?id=tobenotempty
*/
function notEmpty(value) {
return value != undefined
&& (Array.isArray(value) ? value.length !== 0 : true)
&& (typeof value === 'string' ? value !== '' : true);
}
toBe.notEmpty = notEmpty;
/**
* Function to be used in {@link Array.prototype.filter} as a callback.
* Filters out items, that are not equal to provided item in parameters.
* Objects are compared to be deep equal.
*
* @returns {function}
* @see https://pavel-surinin.github.io/declarativejs/#/?id=tobeequal
*/
function equal(valueToMatch) {
return function _equal(value) {
return fast_deep_equal_1.default(valueToMatch, value);
};
}
toBe.equal = equal;
/**
* Function to be used in {@link Array.prototype.filter} as a callback.
* Filters out items, that are equal to provided item in parameters.
* Objects are compared to be deep equal.
*
* @returns {function}
* @see https://pavel-surinin.github.io/declarativejs/#/?id=tobenotequal
*/
function notEqual(valueToMatch) {
return function _notEqual(value) {
return !fast_deep_equal_1.default(valueToMatch, value);
};
}
toBe.notEqual = notEqual;
/**
* Function to be used in {@link Array.prototype.filter} as a callback.
* Determines uniqueness of an objects in array. Be aware that if value
* is not primitive, deep object equality will be checked to determine
* uniqueness.
*
* @returns () => {boolean}
* @see https://pavel-surinin.github.io/declarativejs/#/?id=tobeunique
*/
function unique() {
var set = new Set();
return function _unique(value) {
var check = value;
if (typeof value === 'object') {
check = JSON.stringify(value);
}
if (!set.has(check)) {
set.add(check);
return true;
}
return false;
};
}
toBe.unique = unique;
function uniqueBy(toComparableProp) {
var set = new Set();
if (typeof toComparableProp === 'string') {
return function _uniqueBy(value) {
var check = value[toComparableProp];
if (set.has(check)) {
return false;
}
else {
set.add(check);
return true;
}
};
}
else if (typeof toComparableProp === 'function') {
return function _uniqueBy(value) {
var check = toComparableProp(value);
if (set.has(check)) {
return false;
}
else {
set.add(check);
return true;
}
};
}
else {
// tslint:disable-next-line:max-line-length
throw new Error("toBe.uniqueBy expected to have as a parameter string or function, instead got " + typeof toComparableProp);
}
}
toBe.uniqueBy = uniqueBy;
/**
* @deprecated use Filter object
*/
function takeWhile(predicate) {
var is = false;
return function _takeWhile(value, index) {
if (index === 0 || is) {
is = predicate(value);
return is;
}
return is;
};
}
toBe.takeWhile = takeWhile;
})(toBe = exports.toBe || (exports.toBe = {}));
/**
* Functions to be used in {@link Array.prototype.filter} as a callback.
* @see https://pavel-surinin.github.io/declarativejs/#/?id=filters
*/
var Filter;
(function (Filter) {
/**
* Function to be used in {@link Array} filter function as a callback.
* It will pass items from array, while predicate matches. When predicate
* returns {@code false} none of the items will pass.
*
* @param {function} predicate callback function that returns boolean
* @see https://pavel-surinin.github.io/declarativejs/#/?id=takewhile
* @deprecated use Filters object
*/
function takeWhile(predicate) {
var is = false;
return function _takeWhile(value, index) {
if (index === 0 || is) {
is = predicate(value);
return is;
}
return is;
};
}
Filter.takeWhile = takeWhile;
/**
* Function to be used in {@link Array} filter function as a callback.
* It will skip items from array, while predicate matches. When predicate
* returns {@code false}, other items will be returned form that point.
*
* @param {function} predicate callback function that returns boolean
* @see https://pavel-surinin.github.io/declarativejs/#/?id=skipwhile
*/
function skipWhile(predicate) {
var is = false;
return function _skipWhile(value, index) {
if (index === 0 || !is) {
is = !predicate(value);
return is;
}
return is;
};
}
Filter.skipWhile = skipWhile;
/**
* Skips an element, if predicate is resolving to false or
* an error occurred, predicate will also resolve to false.
* Error will be catched
* @param {function} predicate to filter elements
* @param {function} onError callback to be called on error occurred
* @see https://pavel-surinin.github.io/declarativejs/#/?id=skiponerror
*/
function skipOnError(predicate, onError) {
return function _skipOnError(value, index) {
try {
return predicate(value);
}
catch (e) {
if (onError) {
onError(e, value, index);
}
return false;
}
};
}
Filter.skipOnError = skipOnError;
})(Filter = exports.Filter || (exports.Filter = {}));