UNPKG

@lunaeme/circe-core

Version:
169 lines 19.4 kB
import { __decorate } from "tslib"; import { Injectable } from '@angular/core'; import { startCase as _startCase, camelCase as _camelCase, kebabCase as _kebabCase } from 'lodash'; import { v4 } from 'uuid'; import { ccStringTransform } from '../_types/data.types'; var ToolService = /** @class */ (function () { function ToolService() { this.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; } ToolService.getValueFromMultiLevelObject = function (object, key, separator) { var _separator = separator || '.'; if (object[key] !== undefined) { return object[key]; } try { return key.split(_separator).reduce(function (obj, index) { return obj[index]; }, object); } catch (e) { if (e instanceof TypeError) { return undefined; } else { throw e; } } }; ToolService.setValueInMultiLevelObject = function (object, key, value, separator) { var _separator = separator || '.'; return key.split(_separator).reduce(function (o, i) { if (o && typeof o[i] === 'object') { return o[i]; } if (o && i in o) { o[i] = value; return o; } }, object); }; ToolService.waitFor = function (milliseconds) { var _now = Date.now(); var _timeOut = false; do { _timeOut = (Date.now() - _now >= milliseconds); } while (!_timeOut); }; /** * repeatedValuesInArray * @description * This method returns an array of uniques values if parameter "unique" is true; or returns * an array of ONLY repeated values (unique values are discarded) if unique is false. * Default value por parameter unique is true. */ ToolService.repeatedValuesInArray = function (values, unique) { var _unique = (unique === undefined) ? true : unique; return (_unique) ? Array.from(new Set(values)) : values.filter(function (e, i) { return values.indexOf(e) !== i; }); }; ToolService.checkLastChar = function (text, char) { if (text && text[text.length - 1] !== char) { return "" + text + char; } return text; }; ToolService.hexToRgb = function (hex) { var _output = hex .replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, function (m, r, g, b) { return '#' + r + r + g + g + b + b; }) .substring(1) .match(/.{2}/g); return _output.map(function (e) { return parseInt(e, 16); }); }; ToolService.rgbToHex = function (r, g, b) { var _output = [r, g, b].map(function (e) { var _hex = e.toString(16); return (_hex.length === 1) ? "0" + _hex : _hex; }); return _output.join(''); }; /** * generateUuid * @description * Generates a new uuid using uuid dependency. */ ToolService.generateUuid = function () { return v4(); }; /** * checkArray * @description * Returns true if parameter given "array" is an array, otherwise returns false; * If optional parameter "filled" is given, then this method checks the array is not empty. * Default value for "filled" is true. */ ToolService.checkArray = function (array, filled) { if (filled === void 0) { filled = true; } var _checkStructure = (!!array && Array.isArray(array)); if (filled) { return (_checkStructure && !!array.length); } return _checkStructure; }; /** * @deprecated */ ToolService.getValueFromDotedKey = function (object, dotedKey, separator) { var _separator = separator || '.'; if (object[dotedKey] !== undefined) { return object[dotedKey]; } try { return dotedKey.split(_separator).reduce(function (obj, index) { return obj[index]; }, object); } catch (e) { if (e instanceof TypeError) { return undefined; } else { throw e; } } }; /** * @deprecated */ ToolService.formatString = function (text) { if (isNaN(Number(text))) { return _startCase(text); } else { return text; } }; ToolService.prototype.identifier = function (index, item) { var _output = (typeof item === 'string') ? item : index; ['code', 'id', 'param', 'key'].forEach(function (e) { if (item.hasOwnProperty(e)) { _output = item[e]; return; } }); return _output; }; ToolService.prototype.stringTransform = function (text, transformType) { var _transformType = transformType || ccStringTransform.start; var _output = text; if (isNaN(Number(text))) { switch (_transformType) { case ccStringTransform.start: _output = _startCase(text); break; case ccStringTransform.camel: _output = _camelCase(text); break; case ccStringTransform.kebab: _output = _kebabCase(text); break; } } return _output; }; ToolService = __decorate([ Injectable() ], ToolService); return ToolService; }()); export { ToolService }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGx1bmFlbWUvY2lyY2UtY29yZS8iLCJzb3VyY2VzIjpbImxpYi90b29sL3Rvb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxJQUFJLFVBQVUsRUFBRSxTQUFTLElBQUksVUFBVSxFQUFFLFNBQVMsSUFBSSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQWdCLGlCQUFpQixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBRTVFO0lBR1o7UUFGTyxXQUFNLEdBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyRyxDQUFDO0lBRUYsd0NBQTRCLEdBQTFDLFVBQTJDLE1BQVcsRUFBRSxHQUFXLEVBQUUsU0FBa0I7UUFDckYsSUFBTSxVQUFVLEdBQUcsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUNwQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDN0IsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEI7UUFDRCxJQUFJO1lBQ0YsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFDLEdBQVEsRUFBRSxLQUFVO2dCQUN2RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDWjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFD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RTtnQkFDdEIsS0FBSyxpQkFBaUIsQ0FBQyxLQUFLO29CQUMxQixPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzQixNQUFNO2dCQUNSLEtBQUssaUJBQWlCLENBQUMsS0FBSztvQkFDMUIsT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0IsTUFBTTtnQkFDUixLQUFLLGlCQUFpQixDQUFDLEtBQUs7b0JBQzFCLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNCLE1BQU07YUFDVDtTQUNGO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQXZLd0IsV0FBVztRQUFyQyxVQUFVLEVBQUU7T0FBYyxXQUFXLENBd0tyQztJQUFELGtCQUFDO0NBQUEsQUF4S2EsSUF3S2I7U0F4SzBCLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzdGFydENhc2UgYXMgX3N0YXJ0Q2FzZSwgY2FtZWxDYXNlIGFzIF9jYW1lbENhc2UsIGtlYmFiQ2FzZSBhcyBfa2ViYWJDYXNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBDY1NpbmdsZURhdGEsIGNjU3RyaW5nVHJhbnNmb3JtLCBDY1N0cmluZ1RyYW5zZm9ybSB9IGZyb20gJy4uL190eXBlcy9kYXRhLnR5cGVzJztcblxuQEluamVjdGFibGUoKSBleHBvcnQgY2xhc3MgVG9vbFNlcnZpY2Uge1xuICBwdWJsaWMgbW9udGhzOiBBcnJheTxzdHJpbmc+ID0gWydKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYyddO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgc3RhdGljIGdldFZhbHVlRnJvbU11bHRpTGV2ZWxPYmplY3Qob2JqZWN0OiBhbnksIGtleTogc3RyaW5nLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IF9zZXBhcmF0b3IgPSBzZXBhcmF0b3IgfHwgJy4nO1xuICAgIGlmIChvYmplY3Rba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb2JqZWN0W2tleV07XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4ga2V5LnNwbGl0KF9zZXBhcmF0b3IpLnJlZHVjZSgob2JqOiBhbnksIGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgcmV0dXJuIG9ialtpbmRleF07XG4gICAgICB9LCBvYmplY3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc2V0VmFsdWVJbk11bHRpTGV2ZWxPYmplY3Qob2JqZWN0OiBhbnksIGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IF9zZXBhcmF0b3I6IHN0cmluZyA9IHNlcGFyYXRvciB8fCAnLic7XG4gICAgcmV0dXJuICBrZXkuc3BsaXQoX3NlcGFyYXRvcikucmVkdWNlKChvOiBhbnksIGk6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKG8gJiYgdHlwZW9mIG9baV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBvW2ldO1xuICAgICAgfVxuICAgICAgaWYgKG8gJiYgaSBpbiBvKSB7XG4gICAgICAgIG9baV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIG87XG4gICAgICB9XG4gICAgfSwgb2JqZWN0KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgd2FpdEZvcihtaWxsaXNlY29uZHM6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IF9ub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gICAgbGV0IF90aW1lT3V0OiBib29sZWFuID0gZmFsc2U7XG4gICAgZG8ge1xuICAgICAgX3RpbWVPdXQgPSAoRGF0ZS5ub3coKSAtIF9ub3cgPj0gbWlsbGlzZWNvbmRzKTtcbiAgICB9IHdoaWxlICghX3RpbWVPdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIHJlcGVhdGVkVmFsdWVzSW5BcnJheVxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiB1bmlxdWVzIHZhbHVlcyBpZiBwYXJhbWV0ZXIgXCJ1bmlxdWVcIiBpcyB0cnVlOyBvciByZXR1cm5zXG4gICAqIGFuIGFycmF5IG9mIE9OTFkgcmVwZWF0ZWQgdmFsdWVzICh1bmlxdWUgdmFsdWVzIGFyZSBkaXNjYXJkZWQpIGlmIHVuaXF1ZSBpcyBmYWxzZS5cbiAgICogRGVmYXVsdCB2YWx1ZSBwb3IgcGFyYW1ldGVyIHVuaXF1ZSBpcyB0cnVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZXBlYXRlZFZhbHVlc0luQXJyYXkodmFsdWVzOiBBcnJheTxDY1NpbmdsZURhdGE+LCB1bmlxdWU/OiBib29sZWFuKTogQXJyYXk8Q2NTaW5nbGVEYXRhPiB7XG4gICAgY29uc3QgX3VuaXF1ZTogYm9vbGVhbiA9ICh1bmlxdWUgPT09IHVuZGVmaW5lZCkgPyB0cnVlIDogdW5pcXVlO1xuICAgIHJldHVybiAoX3VuaXF1ZSkgPyBBcnJheS5mcm9tKG5ldyBTZXQodmFsdWVzKSkgOiB2YWx1ZXMuZmlsdGVyKChlOiBDY1NpbmdsZURhdGEsIGk6IG51bWJlcikgPT4gdmFsdWVzLmluZGV4T2YoZSkgIT09IGkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjaGVja0xhc3RDaGFyKHRleHQ6IHN0cmluZywgY2hhcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGV4dCAmJiB0ZXh0W3RleHQubGVuZ3RoIC0gMV0gIT09IGNoYXIpIHtcbiAgICAgIHJldHVybiBgJHt0ZXh0fSR7Y2hhcn1gO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaGV4VG9SZ2IoaGV4OiBzdHJpbmcpOiBBcnJheTxudW1iZXI+IHtcbiAgICBjb25zdCBfb3V0cHV0OiBBcnJheTxzdHJpbmc+ID0gaGV4XG4gICAgICAucmVwbGFjZShcbiAgICAgICAgL14jPyhbYS1mXFxkXSkoW2EtZlxcZF0pKFthLWZcXGRdKSQvaSxcbiAgICAgICAgKG06IHN0cmluZywgcjogc3RyaW5nLCBnOiBzdHJpbmcsIGI6IHN0cmluZykgPT4gJyMnICsgciArIHIgKyBnICsgZyArIGIgKyBiXG4gICAgICApXG4gICAgICAuc3Vic3RyaW5nKDEpXG4gICAgICAubWF0Y2goLy57Mn0vZyk7XG4gICAgcmV0dXJuIF9vdXRwdXQubWFwKChlOiBzdHJpbmcpID0+IHBhcnNlSW50KGUsIDE2KSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHJnYlRvSGV4KHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IF9vdXRwdXQ6IEFycmF5PHN0cmluZz4gPSBbciwgZywgYl0ubWFwKChlOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IF9oZXg6IHN0cmluZyA9IGUudG9TdHJpbmcoMTYpO1xuICAgICAgcmV0dXJuIChfaGV4Lmxlbmd0aCA9PT0gMSkgPyBgMCR7X2hleH1gIDogX2hleDtcbiAgICB9KTtcbiAgICByZXR1cm4gX291dHB1dC5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBnZW5lcmF0ZVV1aWRcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdlbmVyYXRlcyBhIG5ldyB1dWlkIHVzaW5nIHV1aWQgZGVwZW5kZW5jeS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2VuZXJhdGVVdWlkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHY0KCk7XG4gIH1cblxuICAvKipcbiAgICogY2hlY2tBcnJheVxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogUmV0dXJucyB0cnVlIGlmIHBhcmFtZXRlciBnaXZlbiBcImFycmF5XCIgaXMgYW4gYXJyYXksIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlO1xuICAgKiBJZiBvcHRpb25hbCBwYXJhbWV0ZXIgXCJmaWxsZWRcIiBpcyBnaXZlbiwgdGhlbiB0aGlzIG1ldGhvZCBjaGVja3MgdGhlIGFycmF5IGlzIG5vdCBlbXB0eS5cbiAgICogRGVmYXVsdCB2YWx1ZSBmb3IgXCJmaWxsZWRcIiBpcyB0cnVlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjaGVja0FycmF5KGFycmF5OiBBcnJheTxhbnk+LCBmaWxsZWQ6IGJvb2xlYW4gPSB0cnVlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgX2NoZWNrU3RydWN0dXJlOiBib29sZWFuID0gKCEhYXJyYXkgJiYgQXJyYXkuaXNBcnJheShhcnJheSkpO1xuICAgIGlmIChmaWxsZWQpIHtcbiAgICAgIHJldHVybiAoX2NoZWNrU3RydWN0dXJlICYmICEhYXJyYXkubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIF9jaGVja1N0cnVjdHVyZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRWYWx1ZUZyb21Eb3RlZEtleShvYmplY3Q6IGFueSwgZG90ZWRLZXk6IHN0cmluZywgc2VwYXJhdG9yPzogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBfc2VwYXJhdG9yID0gc2VwYXJhdG9yIHx8ICcuJztcblxuICAgIGlmIChvYmplY3RbZG90ZWRLZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvYmplY3RbZG90ZWRLZXldO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRvdGVkS2V5LnNwbGl0KF9zZXBhcmF0b3IpLnJlZHVjZSgob2JqLCBpbmRleCkgPT4ge1xuICAgICAgICByZXR1cm4gb2JqW2luZGV4XTtcbiAgICAgIH0sIG9iamVjdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZvcm1hdFN0cmluZyh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChpc05hTihOdW1iZXIodGV4dCkpKSB7XG4gICAgICByZXR1cm4gX3N0YXJ0Q2FzZSh0ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlkZW50aWZpZXIoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KTogYW55IHtcbiAgICBsZXQgX291dHB1dDogYW55ID0gKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykgPyBpdGVtIDogaW5kZXg7XG4gICAgWydjb2RlJywgJ2lkJywgJ3BhcmFtJywgJ2tleSddLmZvckVhY2goKGU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGl0ZW0uaGFzT3duUHJvcGVydHkoZSkpIHtcbiAgICAgICAgX291dHB1dCA9IGl0ZW1bZV07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gX291dHB1dDtcbiAgfVxuXG4gIHB1YmxpYyBzdHJpbmdUcmFuc2Zvcm0odGV4dDogc3RyaW5nLCB0cmFuc2Zvcm1UeXBlPzogQ2NTdHJpbmdUcmFuc2Zvcm0pOiBzdHJpbmcge1xuICAgIGNvbnN0IF90cmFuc2Zvcm1UeXBlOiBDY1N0cmluZ1RyYW5zZm9ybSA9IHRyYW5zZm9ybVR5cGUgfHwgY2NTdHJpbmdUcmFuc2Zvcm0uc3RhcnQ7XG4gICAgbGV0IF9vdXRwdXQ6IHN0cmluZyA9IHRleHQ7XG4gICAgaWYgKGlzTmFOKE51bWJlcih0ZXh0KSkpIHtcbiAgICAgIHN3aXRjaCAoX3RyYW5zZm9ybVR5cGUpIHtcbiAgICAgICAgY2FzZSBjY1N0cmluZ1RyYW5zZm9ybS5zdGFydDpcbiAgICAgICAgICBfb3V0cHV0ID0gX3N0YXJ0Q2FzZSh0ZXh0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjY1N0cmluZ1RyYW5zZm9ybS5jYW1lbDpcbiAgICAgICAgICBfb3V0cHV0ID0gX2NhbWVsQ2FzZSh0ZXh0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBjY1N0cmluZ1RyYW5zZm9ybS5rZWJhYjpcbiAgICAgICAgICBfb3V0cHV0ID0gX2tlYmFiQ2FzZSh0ZXh0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIF9vdXRwdXQ7XG4gIH1cbn1cbiJdfQ==