UNPKG

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
"use strict"; 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 = {}));