UNPKG

cf-common-lib

Version:

Object Validators and Utilities

335 lines 22 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; var PropagatorUtilService = /** @class */ (function () { function PropagatorUtilService() { } /** * @param {?} objects * @param {?} keyName * @param {?} value * @param {?} ignoreCase * @return {?} */ PropagatorUtilService.prototype.findInObjectsArrayFromKey = /** * @param {?} objects * @param {?} keyName * @param {?} value * @param {?} ignoreCase * @return {?} */ function (objects, keyName, value, ignoreCase) { if (ignoreCase) { return objects.find((/** * @param {?} item * @return {?} */ function (item) { return item[keyName].toLowerCase() == value.toLowerCase(); })); } return objects.find((/** * @param {?} item * @return {?} */ function (item) { return item[keyName] == value; })); }; ; /** * @param {?} objects * @param {?} keyName * @return {?} */ PropagatorUtilService.prototype.extractKeysFromObjectsList = /** * @param {?} objects * @param {?} keyName * @return {?} */ function (objects, keyName) { return objects.map((/** * @param {?} item * @return {?} */ function (item) { return item[keyName]; })); }; ; /** * @param {?} objects * @param {?} key * @param {?} value * @return {?} */ PropagatorUtilService.prototype.objectArrayIndexOf = /** * @param {?} objects * @param {?} key * @param {?} value * @return {?} */ function (objects, key, value) { return this.extractKeysFromObjectsList(objects, key).indexOf(value); }; ; /** * @param {?} objects * @param {?} key * @param {?} value * @return {?} */ PropagatorUtilService.prototype.objectArrayFindFromKey = /** * @param {?} objects * @param {?} key * @param {?} value * @return {?} */ function (objects, key, value) { /** @type {?} */ var index = this.extractKeysFromObjectsList(objects, key).indexOf(value); if (index === -1) { return; } return objects[index]; }; ; /** * @param {?} objects * @param {?} keyName * @param {?} value * @return {?} */ PropagatorUtilService.prototype.filterInObjectsArrayFromKey = /** * @param {?} objects * @param {?} keyName * @param {?} value * @return {?} */ function (objects, keyName, value) { return objects.filter((/** * @param {?} item * @return {?} */ function (item) { return item[keyName] === value; })); }; ; /** * @param {?} objects * @param {?} keys * @param {?} keyName * @return {?} */ PropagatorUtilService.prototype.filterObjectsFromKeys = /** * @param {?} objects * @param {?} keys * @param {?} keyName * @return {?} */ function (objects, keys, keyName) { return objects.filter((/** * @param {?} item * @return {?} */ function (item) { return keys.indexOf(item[keyName]) !== -1; })); }; ; /** * @param {?} _arr * @return {?} */ PropagatorUtilService.prototype.flattenArray = /** * @param {?} _arr * @return {?} */ function (_arr) { return _flattenArray(_arr); /** * @param {?} _arr * @return {?} */ function _flattenArray(_arr) { return _arr.reduce((/** * @param {?} _acc * @param {?} _value * @return {?} */ function (_acc, _value) { return Array.isArray(_value) ? _acc.concat(_flattenArray(_value)) : _acc.concat(_value); }), []); } }; /** * @param {?} callback * @param {...?} urls * @return {?} */ PropagatorUtilService.prototype.jsCssScriptInjector = /** * @param {?} callback * @param {...?} urls * @return {?} */ function (callback) { var urls = []; for (var _i = 1; _i < arguments.length; _i++) { urls[_i - 1] = arguments[_i]; } /** @type {?} */ var _count = 0; /** @type {?} */ var _element; this.flattenArray(urls).forEach((/** * @param {?} _url * @return {?} */ function (_url) { if (_url.endsWith(".js")) { _element = document.createElement('script'); _element.src = _url; _element.type = 'text/javascript'; _element.async = true; } if (_url.endsWith(".css")) { _element = document.createElement('link'); _element.rel = "stylesheet"; _element.href = _url; } if (callback) { _element.addEventListener("load", (/** * @return {?} */ function () { _count++; if (_count == urls.length) { callback(urls); } })); } document.getElementsByTagName('head')[0].appendChild(_element); })); }; /** * @param {?} x * @param {?} y * @return {?} */ PropagatorUtilService.prototype.isObjectsEqual = /** * @param {?} x * @param {?} y * @return {?} */ function (x, y) { return _objectEquals(x, y); /** * @param {?} x * @param {?} y * @return {?} */ function _objectEquals(x, y) { if (x === null || x === undefined || y === null || y === undefined) { return x === y; } // after this just checking type of one would be enough if (x.constructor !== y.constructor) { return false; } // if they are functions, they should exactly refer to same one (because of closures) if (x instanceof Function) { return x === y; } // if they are regexps, they should exactly refer to same one (it is hard to better equality check on current ES) if (x instanceof RegExp) { return x === y; } if (x === y || x.valueOf() === y.valueOf()) { return true; } if (Array.isArray(x) && x.length !== y.length) { return false; } // if they are dates, they must had equal valueOf if (x instanceof Date) { return false; } // if they are strictly equal, they both need to be object at least if (!(x instanceof Object)) { return false; } if (!(y instanceof Object)) { return false; } // recursive object equality check /** @type {?} */ var p = Object.keys(x); return Object.keys(y).every((/** * @param {?} i * @return {?} */ function (i) { return p.indexOf(i) !== -1; })) && p.every((/** * @param {?} i * @return {?} */ function (i) { return _objectEquals(x[i], y[i]); })); } }; /** * @param {?} _exclude * @param {?} _list * @return {?} */ PropagatorUtilService.prototype.excludeValuesFromObjectList = /** * @param {?} _exclude * @param {?} _list * @return {?} */ function (_exclude, _list) { return _excludeValuesFromObjectList(_exclude, _list); /** * @param {?} _exclude * @param {?} _list * @return {?} */ function _excludeValuesFromObjectList(_exclude, _list) { /** @type {?} */ var temp = []; for (var _ex in _exclude) { _exclude[_ex].forEach((/** * @param {?} _item * @return {?} */ function (_item) { temp = _list.filter((/** * @param {?} book * @return {?} */ function (book) { return book[_ex] != _item; })); _list = temp; })); } return _list; } }; PropagatorUtilService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ PropagatorUtilService.ctorParameters = function () { return []; }; /** @nocollapse */ PropagatorUtilService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function PropagatorUtilService_Factory() { return new PropagatorUtilService(); }, token: PropagatorUtilService, providedIn: "root" }); return PropagatorUtilService; }()); export { PropagatorUtilService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGFnYXRvci11dGlsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jZi1jb21tb24tbGliLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL3Byb3BhZ2F0b3ItdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQztJQUtJO0lBQWdCLENBQUM7Ozs7Ozs7O0lBRWpCLHlEQUF5Qjs7Ozs7OztJQUF6QixVQUEyQixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVO1FBQy9ELElBQUksVUFBVSxFQUFHO1lBQ2hCLE9BQU8sT0FBTyxDQUFDLElBQUk7Ozs7WUFBRSxVQUFBLElBQUk7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFFLE9BQU8sQ0FBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM3RCxDQUFDLEVBQUMsQ0FBQztTQUNIO1FBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSTs7OztRQUFFLFVBQUEsSUFBSTtZQUN4QixPQUFPLElBQUksQ0FBRSxPQUFPLENBQUUsSUFBSSxLQUFLLENBQUM7UUFDakMsQ0FBQyxFQUFDLENBQUM7SUFDSixDQUFDO0lBQUEsQ0FBQzs7Ozs7O0lBR0gsMERBQTBCOzs7OztJQUExQixVQUE0QixPQUFPLEVBQUcsT0FBTztRQUM1QyxPQUFPLE9BQU8sQ0FBQyxHQUFHOzs7O1FBQUUsVUFBQSxJQUFJO1lBQ3ZCLE9BQU8sSUFBSSxDQUFFLE9BQU8sQ0FBRSxDQUFDO1FBQ3hCLENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQztJQUFBLENBQUM7Ozs7Ozs7SUFHRixrREFBa0I7Ozs7OztJQUFsQixVQUFvQixPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUs7UUFDdEMsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBRSxDQUFDLE9BQU8sQ0FBRSxLQUFL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NUIsQ0FBQyxFQUFDLENBQUM7b0JBQ0gsS0FBSyxHQUFHLElBQUksQ0FBRTtnQkFDZixDQUFDLEVBQUMsQ0FBQzthQUNIO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZCxDQUFDO0lBRUYsQ0FBQzs7Z0JBakpELFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7O2dDQUpEO0NBdUpDLEFBckpELElBcUpDO1NBbEpZLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUHJvcGFnYXRvclV0aWxTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBmaW5kSW5PYmplY3RzQXJyYXlGcm9tS2V5KCBvYmplY3RzLCBrZXlOYW1lLCB2YWx1ZSwgaWdub3JlQ2FzZSApIHtcblx0XHRcdGlmKCBpZ25vcmVDYXNlICkge1xuXHRcdFx0XHRyZXR1cm4gb2JqZWN0cy5maW5kKCBpdGVtID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gaXRlbVsga2V5TmFtZSBdLnRvTG93ZXJDYXNlKCkgPT0gdmFsdWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0fSk7XHRcblx0XHRcdH0gXG5cdFx0XHRyZXR1cm4gb2JqZWN0cy5maW5kKCBpdGVtID0+e1xuXHRcdFx0XHRyZXR1cm4gaXRlbVsga2V5TmFtZSBdID09IHZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXG5cdGV4dHJhY3RLZXlzRnJvbU9iamVjdHNMaXN0KCBvYmplY3RzICwga2V5TmFtZSApIHtcblx0XHRyZXR1cm4gb2JqZWN0cy5tYXAoIGl0ZW0gPT4ge1xuXHRcdFx0cmV0dXJuIGl0ZW1bIGtleU5hbWUgXTtcblx0XHR9KTtcblx0fTtcblxuXG5cdG9iamVjdEFycmF5SW5kZXhPZiggb2JqZWN0cywga2V5LCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gdGhpcy5leHRyYWN0S2V5c0Zyb21PYmplY3RzTGlzdCggb2JqZWN0cywga2V5ICkuaW5kZXhPZiggdmFsdWUgKTtcblx0fTtcblxuXHRvYmplY3RBcnJheUZpbmRGcm9tS2V5KCBvYmplY3RzLCBrZXksIHZhbHVlICkge1xuXHRcdGxldCAgaW5kZXggPSB0aGlzLmV4dHJhY3RLZXlzRnJvbU9iamVjdHNMaXN0KCBvYmplY3RzLCBrZXkgKS5pbmRleE9mKCB2YWx1ZSApO1xuXHRcdGlmKCBpbmRleCA9PT0gLTEgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHJldHVybiBvYmplY3RzWyBpbmRleCBdO1xuXHR9O1xuXG5cdGZpbHRlckluT2JqZWN0c0FycmF5RnJvbUtleSggb2JqZWN0cywga2V5TmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gb2JqZWN0cy5maWx0ZXIoaXRlbSA9PiB7XG5cdFx0XHRcdHJldHVybiBpdGVtWyBrZXlOYW1lIF0gPT09IHZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0fTtcblxuXHRmaWx0ZXJPYmplY3RzRnJvbUtleXMoIG9iamVjdHMsIGtleXMsIGtleU5hbWUgKSB7XG5cdFx0XHRyZXR1cm4gb2JqZWN0cy5maWx0ZXIoIGl0ZW0gPT4ge1xuXHRcdFx0XHRyZXR1cm4ga2V5cy5pbmRleE9mKCBpdGVtWyBrZXlOYW1lIF0pICE9PSAtMTtcblx0XHRcdH0pO1xuICAgIH07XG4gICAgXG5cdGZsYXR0ZW5BcnJheShfYXJyKXsgXG5cblx0XHRyZXR1cm4gX2ZsYXR0ZW5BcnJheShfYXJyKTtcblxuICAgICAgICBmdW5jdGlvbiBfZmxhdHRlbkFycmF5KF9hcnIpe1xuICAgICAgICAgICAgcmV0dXJuIF9hcnIucmVkdWNlKGZ1bmN0aW9uKF9hY2MsIF92YWx1ZSl7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShfdmFsdWUpIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBfYWNjLmNvbmNhdChfZmxhdHRlbkFycmF5KF92YWx1ZSkpXG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF9hY2MuY29uY2F0KF92YWx1ZSk7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgIH0gXG4gICAgICAgXG4gICAgICAgIFxuXHR9XG5cdFxuXHRqc0Nzc1NjcmlwdEluamVjdG9yKGNhbGxiYWNrLCAuLi51cmxzKSB7XG4gICAgICAgIGxldCBfY291bnQgPSAwO1xuICAgICAgICBsZXQgX2VsZW1lbnQ7IFxuIFxuICAgICAgICB0aGlzLmZsYXR0ZW5BcnJheSh1cmxzKS5mb3JFYWNoKF91cmwgPT4geyAgXG4gICAgICAgICAgICBpZihfdXJsLmVuZHNXaXRoKFwiLmpzXCIpKSB7XG4gICAgICAgICAgICAgICAgX2VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgICAgICBfZWxlbWVudC5zcmMgPSBfdXJsO1xuICAgICAgICAgICAgICAgIF9lbGVtZW50LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICAgICAgICBfZWxlbWVudC5hc3luYyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihfdXJsLmVuZHNXaXRoKFwiLmNzc1wiKSkge1xuICAgICAgICAgICAgICAgIF9lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpOyBcbiAgICAgICAgICAgICAgICBfZWxlbWVudC5yZWwgPSBcInN0eWxlc2hlZXRcIjtcbiAgICAgICAgICAgICAgICBfZWxlbWVudC5ocmVmID0gX3VybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGNhbGxiYWNrKSB7IFxuICAgICAgICAgICAgICAgIF9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICBfY291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgaWYoX2NvdW50PT11cmxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodXJscyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoX2VsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuXHRcdH1cblx0XHRcblxuXHRpc09iamVjdHNFcXVhbCh4LCB5KXtcblxuXHRcdHJldHVybiBfb2JqZWN0RXF1YWxzKHgsIHkpIDtcblx0XHRcblx0XHRmdW5jdGlvbiBfb2JqZWN0RXF1YWxzKHgsIHkpIHsgIFxuXHRcdFx0aWYgKHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkIHx8IHkgPT09IG51bGwgfHwgeSA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB4ID09PSB5OyB9XG5cdFx0XHQvLyBhZnRlciB0aGlzIGp1c3QgY2hlY2tpbmcgdHlwZSBvZiBvbmUgd291bGQgYmUgZW5vdWdoXG5cdFx0XHRpZiAoeC5jb25zdHJ1Y3RvciAhPT0geS5jb25zdHJ1Y3RvcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdC8vIGlmIHRoZXkgYXJlIGZ1bmN0aW9ucywgdGhleSBzaG91bGQgZXhhY3RseSByZWZlciB0byBzYW1lIG9uZSAoYmVjYXVzZSBvZiBjbG9zdXJlcylcblx0XHRcdGlmICh4IGluc3RhbmNlb2YgRnVuY3Rpb24pIHsgcmV0dXJuIHggPT09IHk7IH1cblx0XHRcdC8vIGlmIHRoZXkgYXJlIHJlZ2V4cHMsIHRoZXkgc2hvdWxkIGV4YWN0bHkgcmVmZXIgdG8gc2FtZSBvbmUgKGl0IGlzIGhhcmQgdG8gYmV0dGVyIGVxdWFsaXR5IGNoZWNrIG9uIGN1cnJlbnQgRVMpXG5cdFx0XHRpZiAoeCBpbnN0YW5jZW9mIFJlZ0V4cCkgeyByZXR1cm4geCA9PT0geTsgfVxuXHRcdFx0aWYgKHggPT09IHkgfHwgeC52YWx1ZU9mKCkgPT09IHkudmFsdWVPZigpKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh4KSAmJiB4Lmxlbmd0aCAhPT0geS5sZW5ndGgpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XG5cdFx0XHQvLyBpZiB0aGV5IGFyZSBkYXRlcywgdGhleSBtdXN0IGhhZCBlcXVhbCB2YWx1ZU9mXG5cdFx0XHRpZiAoeCBpbnN0YW5jZW9mIERhdGUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0XG5cdFx0XHQvLyBpZiB0aGV5IGFyZSBzdHJpY3RseSBlcXVhbCwgdGhleSBib3RoIG5lZWQgdG8gYmUgb2JqZWN0IGF0IGxlYXN0XG5cdFx0XHRpZiAoISh4IGluc3RhbmNlb2YgT2JqZWN0KSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRcdGlmICghKHkgaW5zdGFuY2VvZiBPYmplY3QpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdFxuXHRcdFx0Ly8gcmVjdXJzaXZlIG9iamVjdCBlcXVhbGl0eSBjaGVja1xuXHRcdFx0dmFyIHAgPSBPYmplY3Qua2V5cyh4KTtcblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyh5KS5ldmVyeShmdW5jdGlvbiAoaSkgeyByZXR1cm4gcC5pbmRleE9mKGkpICE9PSAtMTsgfSkgJiZcblx0XHRcdFx0cC5ldmVyeShmdW5jdGlvbiAoaSkgeyByZXR1cm4gX29iamVjdEVxdWFscyh4W2ldLCB5W2ldKTsgfSk7XG5cdFx0fVxuXHR9XG5cblxuXHRleGNsdWRlVmFsdWVzRnJvbU9iamVjdExpc3QoX2V4Y2x1ZGUsIF9saXN0KXtcblxuXHRcdHJldHVybiBfZXhjbHVkZVZhbHVlc0Zyb21PYmplY3RMaXN0KF9leGNsdWRlLCBfbGlzdClcblxuXHRcdGZ1bmN0aW9uIF9leGNsdWRlVmFsdWVzRnJvbU9iamVjdExpc3QoX2V4Y2x1ZGUsIF9saXN0KXtcblx0XHRcdGxldCB0ZW1wID0gW107XG5cdFx0XHRmb3IodmFyIF9leCBpbiBfZXhjbHVkZSl7IFxuXHRcdFx0XHRfZXhjbHVkZVtfZXhdLmZvckVhY2goZnVuY3Rpb24oX2l0ZW0peyBcblx0XHRcdFx0XHR0ZW1wID0gX2xpc3QuZmlsdGVyKGZ1bmN0aW9uKGJvb2speyAgXG5cdFx0XHRcdFx0XHRyZXR1cm4gYm9va1tfZXhdICE9IF9pdGVtIDsgXG5cdFx0XHRcdFx0fSk7ICAgXG5cdFx0XHRcdFx0X2xpc3QgPSB0ZW1wIDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9IFxuXHRcdFx0cmV0dXJuIF9saXN0O1xuXHRcdH1cblxuXHR9XG5cblx0XG5cbn1cbiJdfQ==