@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
JavaScript
/**
* @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=