UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

277 lines (276 loc) 18.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { cloneDeep as cloneDeepExt } from 'lodash'; import { isObservable, of, from } from 'rxjs'; /** * @param {?} array * @param {?} mapper * @return {?} */ export function map(array, mapper) { if (array) { return array.map(mapper); } return array; } /** * @param {?} array * @param {?} iteratee * @return {?} */ export function filter(array, iteratee) { if (array) { return array.filter(iteratee); } return array; } /** * @param {?} array * @return {?} */ export function isArray(array) { return Array.isArray(array); } /** * @param {?} howManyTimes * @param {?} iteratee * @return {?} */ export function times(howManyTimes, iteratee) { /** @type {?} */ const res = []; /** @type {?} */ let index = -1; while (++index < howManyTimes) { res.push(iteratee(index)); } return res; } /** * @param {?} array * @param {?} iteratee * @return {?} */ export function forEach(array, iteratee) { if (array) { array.forEach(iteratee); } } /** * @param {?} array * @param {?} iteratee * @return {?} */ export function remove(array, iteratee) { /** @type {?} */ let deletedItems = []; if (array) { /** @type {?} */ let index = array.length; while (index--) { /** @type {?} */ const item = array[index]; if (iteratee(item, index)) { array.splice(index, 1); deletedItems.push(item); } } } return deletedItems; } /** * @param {?} array * @param {?} index * @return {?} */ export function removeAtIndex(array, index) { if (array) { array.splice(index, 1); } } /** * @param {?} object * @param {?} path * @param {?=} defaultVal * @return {?} */ export function get(object, path, defaultVal) { /** @type {?} */ const _path = Array.isArray(path) ? path : path.split('.').filter((index) => index.length); if (!_path.length) { return object === undefined ? defaultVal : object; } return get(object[_path.shift()], _path, defaultVal); } /** * @param {?} array * @param {?} finder * @return {?} */ export function find(array, finder) { if (array) { return array.find(finder); } return undefined; } /** * @param {?} value * @param {?} maxLength * @return {?} */ export function truncate(value, maxLength) { if (value) { return value.substring(0, maxLength); } return value; } /** * @param {?} items * @param {?} what * @return {?} */ export function indexOf(items, what) { if (items) { return items.indexOf(what); } return -1; } /** * @param {...?} arrays * @return {?} */ export function concat(...arrays) { /** @type {?} */ let newArray = []; arrays.forEach((array) => { newArray = newArray.concat(array); }); return newArray; } /** * @param {?} str * @param {?} reg * @param {?} newVal * @return {?} */ export function replace(str, reg, newVal) { if (str) { return str.replace(reg, newVal); } return str; } /** * @param {?} array * @param {?} key * @param {?} asc * @return {?} */ export function orderBy(array, key, asc) { /** @type {?} */ const order = asc === 'asc' ? -1 : 1; array.sort((a, b) => { if (!a[key] && !b[key]) { return 0; } else if (a[key] && !b[key]) { return -1; } else if (!a[key] && b[key]) { return 1; } else if (a[key] < b[key]) { return order; } else if (a[key] > b[key]) { return -order; } return 0; }); return array; } /** * @param {?} array * @param {?} key * @param {?} asc * @return {?} */ export function orderByWithoutCase(array, key, asc) { /** @type {?} */ const order = asc === 'asc' ? -1 : 1; array.sort((a, b) => { if (!a[key] && !b[key]) { return 0; } else if (a[key] && !b[key]) { return -1; } else if (!a[key] && b[key]) { return 1; } /** @type {?} */ const value1 = a[key].toLowerCase(); /** @type {?} */ const value2 = b[key].toLowerCase(); if (value1 < value2) { return order; } else if (value1 > value2) { return -order; } return 0; }); return array; } /** * @param {?} object * @return {?} */ export function cloneDeep(object) { return cloneDeepExt(object); } /** * @param {?} item * @return {?} */ export function isEmpty(item) { return item == null || item.length === 0; } /** * @param {?} val * @return {?} */ export function isObject(val) { return typeof val === 'object'; } /** * @param {?} items * @param {?} separator * @return {?} */ export function join(items, separator) { if (items) { return items.join(separator); } return items; } /** * @template T * @param {?} obs * @return {?} */ export function observe(obs) { if (isObservable(obs)) { return obs; } else if (obs instanceof Promise) { return from(obs); } else { return of(/** @type {?} */ (obs)); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bhc2ktbmd0b29scy9saWIvIiwic291cmNlcyI6WyJsaWIvbmF0aXZlLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsSUFBSSxZQUFZLEVBQUMsTUFBTyxRQUFRLENBQUE7QUFDbEQsT0FBTyxFQUFjLFlBQVksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFFMUQsTUFBTSxjQUFjLEtBQWlCLEVBQUUsTUFBMkM7SUFDaEYsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzFCO0lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUNkOzs7Ozs7QUFFRCxNQUFNLGlCQUFpQixLQUFpQixFQUFFLFFBQTZDO0lBQ3JGLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUMvQjtJQUNELE1BQU0sQ0FBQyxLQUFLLENBQUM7Q0FDZDs7Ozs7QUFFRCxNQUFNLGtCQUFrQixLQUFVO0lBQ2hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQzdCOzs7Ozs7QUFFRCxNQUFNLGdCQUFnQixZQUFvQixFQUFFLFFBQThCOztJQUN4RSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7O0lBQ2YsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDZixPQUFPLEVBQUUsS0FBSyxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDM0I7SUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDO0NB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TSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQjtJQUFDLElBQUksQ0FBQyxDQUFDO1FBQ04sTUFBTSxDQUFDLEVBQUUsbUJBQU0sR0FBRyxFQUFDLENBQUM7S0FDckI7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsb25lRGVlcCBhcyBjbG9uZURlZXBFeHR9ICBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBpc09ic2VydmFibGUsIG9mLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXAoYXJyYXk6IEFycmF5PGFueT4sIG1hcHBlcjogKHZhbHVlOiBhbnksIGluZGV4PzogbnVtYmVyKSA9PiBhbnkpIHtcbiAgaWYgKGFycmF5KSB7XG4gICAgcmV0dXJuIGFycmF5Lm1hcChtYXBwZXIpO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihhcnJheTogQXJyYXk8YW55PiwgaXRlcmF0ZWU6ICh2YWx1ZTogYW55LCBpbmRleD86IG51bWJlcikgPT4gYW55KSB7XG4gIGlmIChhcnJheSkge1xuICAgIHJldHVybiBhcnJheS5maWx0ZXIoaXRlcmF0ZWUpO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkoYXJyYXk6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShhcnJheSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lcyhob3dNYW55VGltZXM6IG51bWJlciwgaXRlcmF0ZWU6ICh2YWx1ZT86IGFueSkgPT4gYW55KSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBsZXQgaW5kZXggPSAtMTtcbiAgd2hpbGUgKCsraW5kZXggPCBob3dNYW55VGltZXMpIHtcbiAgICByZXMucHVzaChpdGVyYXRlZShpbmRleCkpO1xuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoKGFycmF5OiBBcnJheTxhbnk+LCBpdGVyYXRlZTogKHZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IGFueSkge1xuICBpZiAoYXJyYXkpIHtcbiAgICBhcnJheS5mb3JFYWNoKGl0ZXJhdGVlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlKGFycmF5OiBBcnJheTxhbnk+LCBpdGVyYXRlZTogKHZhbHVlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IGFueSkge1xuICBsZXQgZGVsZXRlZEl0ZW1zID0gW107XG4gIGlmIChhcnJheSkge1xuICAgIGxldCBpbmRleCA9IGFycmF5Lmxlbmd0aDtcbiAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgY29uc3QgaXRlbSA9IGFycmF5W2luZGV4XTtcbiAgICAgIGlmIChpdGVyYXRlZShpdGVtLCBpbmRleCkpIHtcbiAgICAgICAgYXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgZGVsZXRlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBkZWxldGVkSXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBdEluZGV4KGFycmF5OiBBcnJheTxhbnk+LCBpbmRleDogbnVtYmVyKSB7XG4gIGlmIChhcnJheSkge1xuICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChvYmplY3Q6IGFueSwgcGF0aDogYW55LCBkZWZhdWx0VmFsPzogYW55KTogYW55IHtcbiAgY29uc3QgX3BhdGggPSBBcnJheS5pc0FycmF5KHBhdGgpXG4gICAgPyBwYXRoXG4gICAgOiBwYXRoLnNwbGl0KCcuJykuZmlsdGVyKChpbmRleDogYW55KSA9PiBpbmRleC5sZW5ndGgpXG5cbiAgaWYgKCFfcGF0aC5sZW5ndGgpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsIDogb2JqZWN0XG4gIH1cblxuICByZXR1cm4gZ2V0KG9iamVjdFtfcGF0aC5zaGlmdCgpXSwgX3BhdGgsIGRlZmF1bHRWYWwpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheTogQXJyYXk8YW55PiwgZmluZGVyOiAodmFsdWU6IGFueSwgaW5kZXg6IG51bWJlciwgb2JqOiBhbnlbXSkgPT4gYm9vbGVhbikge1xuICBpZiAoYXJyYXkpIHtcbiAgICByZXR1cm4gYXJyYXkuZmluZChmaW5kZXIpO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnVuY2F0ZSh2YWx1ZTogc3RyaW5nLCBtYXhMZW5ndGg6IG51bWJlcikge1xuICBpZiAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIG1heExlbmd0aClcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGl0ZW1zOiBhbnksIHdoYXQ6IGFueSkge1xuICBpZiAoaXRlbXMpIHtcbiAgICByZXR1cm4gaXRlbXMuaW5kZXhPZih3aGF0KTtcbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoLi4uYXJyYXlzOiBhbnlbXSkge1xuICBsZXQgbmV3QXJyYXk6IEFycmF5PGFueT4gPSBbXTtcbiAgYXJyYXlzLmZvckVhY2goKGFycmF5KSA9PiB7XG4gICAgbmV3QXJyYXkgPSBuZXdBcnJheS5jb25jYXQoYXJyYXkpO1xuICB9KTtcbiAgcmV0dXJuIG5ld0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShzdHI6IHN0cmluZywgcmVnOiBSZWdFeHAsIG5ld1ZhbDogc3RyaW5nKSB7XG4gIGlmIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UocmVnLCBuZXdWYWwpO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcmRlckJ5KGFycmF5OiBBcnJheTxhbnk+LCBrZXk6IHN0cmluZywgYXNjOiAnYXNjJyB8ICdkZXNjJykge1xuICBjb25zdCBvcmRlciA9IGFzYyA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gIGFycmF5LnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoIWFba2V5XSAmJiAhYltrZXldKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKGFba2V5XSAmJiAhYltrZXldKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfSBlbHNlIGlmICghYVtrZXldICYmIGJba2V5XSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfSBlbHNlIGlmIChhW2tleV0gPCBiW2tleV0pIHtcbiAgICAgIHJldHVybiBvcmRlcjtcbiAgICB9IGVsc2UgaWYgKGFba2V5XSA+IGJba2V5XSkge1xuICAgICAgcmV0dXJuIC1vcmRlcjtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvcmRlckJ5V2l0aG91dENhc2UoYXJyYXk6IEFycmF5PGFueT4sIGtleTogc3RyaW5nLCBhc2M6ICdhc2MnIHwgJ2Rlc2MnKSB7XG4gIGNvbnN0IG9yZGVyID0gYXNjID09PSAnYXNjJyA/IC0xIDogMTtcbiAgYXJyYXkuc29ydCgoYSwgYikgPT4ge1xuXG4gICAgaWYgKCFhW2tleV0gJiYgIWJba2V5XSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmIChhW2tleV0gJiYgIWJba2V5XSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gZWxzZSBpZiAoIWFba2V5XSAmJiBiW2tleV0pIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlMSA9IGFba2V5XS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHZhbHVlMiA9IGJba2V5XS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh2YWx1ZTEgPCB2YWx1ZTIpIHtcbiAgICAgIHJldHVybiBvcmRlcjtcbiAgICB9IGVsc2UgaWYgKHZhbHVlMSA+IHZhbHVlMikge1xuICAgICAgcmV0dXJuIC1vcmRlcjtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0pO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZURlZXAob2JqZWN0OiBhbnkpIHtcbiAgcmV0dXJuIGNsb25lRGVlcEV4dChvYmplY3QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eShpdGVtOiBhbnkpIHtcbiAgcmV0dXJuIGl0ZW0gPT0gbnVsbCB8fCBpdGVtLmxlbmd0aCA9PT0gMFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsOiBhbnkpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gam9pbihpdGVtczogQXJyYXk8YW55Piwgc2VwYXJhdG9yOiBzdHJpbmcpIHtcbiAgaWYgKGl0ZW1zKSB7XG4gICAgcmV0dXJuIGl0ZW1zLmpvaW4oc2VwYXJhdG9yKTtcbiAgfVxuICByZXR1cm4gaXRlbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlPFQ+KG9iczogUHJvbWlzZTxUPiB8IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgaWYgKGlzT2JzZXJ2YWJsZShvYnMpKSB7XG4gICAgcmV0dXJuIG9icztcbiAgfSBlbHNlIGlmIChvYnMgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgcmV0dXJuIGZyb20ob2JzKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2YoPGFueT5vYnMpO1xuICB9XG59XG4iXX0=