UNPKG

@ema/js-base-library

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.

272 lines 16.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; var Util = /** @class */ (function () { function Util() { } /** * @param {?} arr * @param {?} value * @return {?} */ Util.arrayRemoveValue = /** * @param {?} arr * @param {?} value * @return {?} */ function (arr, value) { // todo: implement for complex objects /** @type {?} */ var arr2 = arr.filter((/** * @param {?} ele * @return {?} */ function (ele) { return ele != value; })); return arr2; // ex: var result = arrayRemove(array, 'myRemoveString'); }; /** * @param {?} arr * @return {?} */ Util.arraySetUnique = /** * @param {?} arr * @return {?} */ function (arr) { /** @type {?} */ var obj = {}; for (var a = 0; a < arr.length; a++) obj[arr[a]] = true; /** @type {?} */ var resultarr = []; for (var o in obj) resultarr.push(o); return resultarr; }; /** * @param {?} o * @return {?} */ Util.castToType = /** * @param {?} o * @return {?} */ function (o) { /** @type {?} */ var value = o; if (Number(value) && value !== "true" && value !== "false") { value = Number(value); } if (value === "0") { value = 0; } if (value === "true") { value = true; } if (value === "false") { value = false; } return value; }; /** * @param {?} obj * @return {?} */ Util.copy = /** * @param {?} obj * @return {?} */ function (obj) { return JSON.parse(JSON.stringify(obj)); }; /** * @param {?} url * @return {?} */ Util.fetchJson = /** * @param {?} url * @return {?} */ function (url) { return tslib_1.__awaiter(this, void 0, void 0, function () { var response, json; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, fetch(url).catch((/** * @param {?} error * @return {?} */ function (error) { console.error(error); }))]; case 1: response = _a.sent(); return [4 /*yield*/, response.json()]; case 2: json = _a.sent(); return [2 /*return*/, json]; } }); }); }; /** * @param {?} jsonString * @return {?} */ Util.tryParseJSON = /** * @param {?} jsonString * @return {?} */ function (jsonString) { try { /** @type {?} */ var o = JSON.parse(jsonString); if (o && typeof o === "object") { return o; } } catch (e) { } return false; }; ; /** * Returns the global object of the environment the application is running in (browser, node, web worker, or frame) */ /** * Returns the global object of the environment the application is running in (browser, node, web worker, or frame) * @return {?} */ Util.getGlobal = /** * Returns the global object of the environment the application is running in (browser, node, web worker, or frame) * @return {?} */ function () { // the only reliable means to get the global object is // `Function('return this')()` // However, this causes CSP violations in Chrome apps. if (typeof self !== 'undefined') { return self; } if (typeof window !== 'undefined') { return window; } // @ts-ignore if (typeof global !== 'undefined') { return global; } throw new Error('unable to locate global object'); }; ; /** * Returns the current date as milliseconds since midnight Jan 1, 1970. */ /** * Returns the current date as milliseconds since midnight Jan 1, 1970. * @param {?=} date * @return {?} */ Util.getTimeStamp = /** * Returns the current date as milliseconds since midnight Jan 1, 1970. * @param {?=} date * @return {?} */ function (date) { if (date === void 0) { date = null; } if (date) { if (typeof date === 'string') { return Math.round(+new Date(date)); } else { return Math.round(+date); } } else { return Math.round(+new Date()); } }; /** * Returns the current date as seconds since midnight Jan 1, 1970. */ /** * Returns the current date as seconds since midnight Jan 1, 1970. * @param {?=} date * @return {?} */ Util.getUnixTimeStamp = /** * Returns the current date as seconds since midnight Jan 1, 1970. * @param {?=} date * @return {?} */ function (date) { if (date === void 0) { date = null; } return Math.floor(Util.getTimeStamp(date) / 1000); }; /** * Returns a UUID. */ /** * Returns a UUID. * @return {?} */ Util.getUUID = /** * Returns a UUID. * @return {?} */ function () { /** @type {?} */ var d = new Date().getTime(); /** @type {?} */ var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (/** * @param {?} c * @return {?} */ function (c) { /** @type {?} */ var r = (d + Math.random() * 16) % 16 | 0; d = Math.floor(d / 16); return (c === 'x' ? r : (r & 0x7 | 0x8)).toString(16); })); return uuid; }; /** * Checks if the application is running in a browser. */ /** * Checks if the application is running in a browser. * @return {?} */ Util.isBrowser = /** * Checks if the application is running in a browser. * @return {?} */ function () { return typeof window !== 'undefined'; }; /** * Checks if the application is running in a browser and online. */ /** * Checks if the application is running in a browser and online. * @return {?} */ Util.isOnline = /** * Checks if the application is running in a browser and online. * @return {?} */ function () { if (typeof window !== 'undefined' && window.navigator.onLine) { return true; } else { return false; } }; return Util; }()); export { Util }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BlbWEvanMtYmFzZS1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL3V0aWxzL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtJQUFBO0lBc0hBLENBQUM7Ozs7OztJQXBIVSxxQkFBZ0I7Ozs7O0lBQXZCLFVBQXdCLEdBQVUsRUFBRSxLQUFLOzs7WUFFakMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNOzs7O1FBQUMsVUFBUyxHQUFHO1lBQzlCLE9BQU8sR0FBRyxJQUFJLEtBQUssQ0FBQztRQUN4QixDQUFDLEVBQUM7UUFDRixPQUFPLElBQUksQ0FBQztRQUNaLHlEQUF5RDtJQUM3RCxDQUFDOzs7OztJQUVNLG1CQUFjOzs7O0lBQXJCLFVBQXNCLEdBQUc7O1lBQ2pCLEdBQUcsR0FBRyxFQUFFO1FBQ1osS0FBSSxJQUFJLENBQUMsR0FBQyxDQUFDLEVBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxFQUFFO1lBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQzs7WUFDM0MsU0FBUyxHQUFHLEVBQUU7UUFDbEIsS0FBSSxJQUFJLENBQUMsSUFBSSxHQUFHO1lBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDOzs7OztJQUVNLGVBQVU7Ozs7SUFBakIsVUFBa0IsQ0FBTTs7WUFDaEIsS0FBSyxHQUFHLENBQUM7UUFDYixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssTUFBTSxJQUFJLEtBQUssS0FBSyxPQUFPLEVBQUU7WUFBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQUM7UUFDcEYsSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO1lBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUFDO1FBQy9CLElB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SSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQzNDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN2QixPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxFQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHOzs7OztJQUNJLGNBQVM7Ozs7SUFBaEI7UUFDSSxPQUFPLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0ksYUFBUTs7OztJQUFmO1FBQ0ksSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDMUQsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNO1lBQ0gsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRUwsV0FBQztBQUFELENBQUMsQUF0SEQsSUFzSEMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVXRpbCB7XG5cbiAgICBzdGF0aWMgYXJyYXlSZW1vdmVWYWx1ZShhcnI6IGFueVtdLCB2YWx1ZSkge1xuICAgICAgICAvLyB0b2RvOiBpbXBsZW1lbnQgZm9yIGNvbXBsZXggb2JqZWN0c1xuICAgICAgICBsZXQgYXJyMiA9IGFyci5maWx0ZXIoZnVuY3Rpb24oZWxlKXtcbiAgICAgICAgICAgIHJldHVybiBlbGUgIT0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYXJyMjtcbiAgICAgICAgLy8gZXg6IHZhciByZXN1bHQgPSBhcnJheVJlbW92ZShhcnJheSwgJ215UmVtb3ZlU3RyaW5nJyk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFycmF5U2V0VW5pcXVlKGFycikge1xuICAgICAgICBsZXQgb2JqID0ge307XG4gICAgICAgIGZvcihsZXQgYT0wO2E8YXJyLmxlbmd0aDthKyspIG9ialthcnJbYV1dPXRydWU7XG4gICAgICAgIGxldCByZXN1bHRhcnIgPSBbXTtcbiAgICAgICAgZm9yKGxldCBvIGluIG9iaikgcmVzdWx0YXJyLnB1c2gobyk7XG4gICAgICAgIHJldHVybiByZXN1bHRhcnI7XG4gICAgfVxuXG4gICAgc3RhdGljIGNhc3RUb1R5cGUobzogYW55KSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG87XG4gICAgICAgIGlmIChOdW1iZXIodmFsdWUpICYmIHZhbHVlICE9PSBcInRydWVcIiAmJiB2YWx1ZSAhPT0gXCJmYWxzZVwiKSB7dmFsdWUgPSBOdW1iZXIodmFsdWUpO31cbiAgICAgICAgaWYgKHZhbHVlID09PSBcIjBcIikge3ZhbHVlID0gMDt9XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJ0cnVlXCIpIHt2YWx1ZSA9IHRydWU7fVxuICAgICAgICBpZiAodmFsdWUgPT09IFwiZmFsc2VcIikge3ZhbHVlID0gZmFsc2U7fVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgc3RhdGljIGNvcHkob2JqKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBmZXRjaEpzb24odXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IGZldGNoKHVybCkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIHJldHVybiBqc29uO1xuICAgIH1cblxuICAgIHN0YXRpYyB0cnlQYXJzZUpTT04oanNvblN0cmluZyl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgbyA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gICAgICAgICAgICBpZiAobyAmJiB0eXBlb2YgbyA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7IH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBnbG9iYWwgb2JqZWN0IG9mIHRoZSBlbnZpcm9ubWVudCB0aGUgYXBwbGljYXRpb24gaXMgcnVubmluZyBpbiAoYnJvd3Nlciwgbm9kZSwgd2ViIHdvcmtlciwgb3IgZnJhbWUpXG4gICAgICovXG4gICAgc3RhdGljIGdldEdsb2JhbCgpIHtcbiAgICAgICAgLy8gdGhlIG9ubHkgcmVsaWFibGUgbWVhbnMgdG8gZ2V0IHRoZSBnbG9iYWwgb2JqZWN0IGlzXG4gICAgICAgIC8vIGBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpYFxuICAgICAgICAvLyBIb3dldmVyLCB0aGlzIGNhdXNlcyBDU1AgdmlvbGF0aW9ucyBpbiBDaHJvbWUgYXBwcy5cbiAgICAgICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gc2VsZjsgfVxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuIHdpbmRvdzsgfVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZ2xvYmFsOyB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGxvY2F0ZSBnbG9iYWwgb2JqZWN0Jyk7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZGF0ZSBhcyBtaWxsaXNlY29uZHMgc2luY2UgbWlkbmlnaHQgSmFuIDEsIDE5NzAuXG4gICAgICovXG4gICAgc3RhdGljIGdldFRpbWVTdGFtcChkYXRlOiBhbnkgPSBudWxsKSB7XG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoK25ldyBEYXRlKGRhdGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoK2RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoK25ldyBEYXRlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBkYXRlIGFzIHNlY29uZHMgc2luY2UgbWlkbmlnaHQgSmFuIDEsIDE5NzAuXG4gICAgICovXG4gICAgc3RhdGljIGdldFVuaXhUaW1lU3RhbXAoZGF0ZTogYW55ID0gbnVsbCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihVdGlsLmdldFRpbWVTdGFtcChkYXRlKSAvIDEwMDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBVVUlELlxuICAgICAqL1xuICAgIHN0YXRpYyBnZXRVVUlEKCkge1xuICAgICAgICBsZXQgZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCB1dWlkID0gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICBjb25zdCByID0gKGQgKyBNYXRoLnJhbmRvbSgpICogMTYpICUgMTYgfCAwO1xuICAgICAgICAgICAgZCA9IE1hdGguZmxvb3IoZCAvIDE2KTtcbiAgICAgICAgICAgIHJldHVybiAoYyA9PT0gJ3gnID8gciA6IChyICYgMHg3IHwgMHg4KSkudG9TdHJpbmcoMTYpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHV1aWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIGEgYnJvd3Nlci5cbiAgICAgKi9cbiAgICBzdGF0aWMgaXNCcm93c2VyKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIGEgYnJvd3NlciBhbmQgb25saW5lLlxuICAgICAqL1xuICAgIHN0YXRpYyBpc09ubGluZSgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3Iub25MaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19