@lunaeme/circe-core
Version:
Circe :: Angular Core Services and Tools
167 lines • 19 kB
JavaScript
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';
let ToolService = class ToolService {
constructor() {
this.months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
}
static getValueFromMultiLevelObject(object, key, separator) {
const _separator = separator || '.';
if (object[key] !== undefined) {
return object[key];
}
try {
return key.split(_separator).reduce((obj, index) => {
return obj[index];
}, object);
}
catch (e) {
if (e instanceof TypeError) {
return undefined;
}
else {
throw e;
}
}
}
static setValueInMultiLevelObject(object, key, value, separator) {
const _separator = separator || '.';
return key.split(_separator).reduce((o, i) => {
if (o && typeof o[i] === 'object') {
return o[i];
}
if (o && i in o) {
o[i] = value;
return o;
}
}, object);
}
static waitFor(milliseconds) {
const _now = Date.now();
let _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.
*/
static repeatedValuesInArray(values, unique) {
const _unique = (unique === undefined) ? true : unique;
return (_unique) ? Array.from(new Set(values)) : values.filter((e, i) => values.indexOf(e) !== i);
}
static checkLastChar(text, char) {
if (text && text[text.length - 1] !== char) {
return `${text}${char}`;
}
return text;
}
static hexToRgb(hex) {
const _output = hex
.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, (m, r, g, b) => '#' + r + r + g + g + b + b)
.substring(1)
.match(/.{2}/g);
return _output.map((e) => parseInt(e, 16));
}
static rgbToHex(r, g, b) {
const _output = [r, g, b].map((e) => {
const _hex = e.toString(16);
return (_hex.length === 1) ? `0${_hex}` : _hex;
});
return _output.join('');
}
/**
* generateUuid
* @description
* Generates a new uuid using uuid dependency.
*/
static generateUuid() {
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.
*/
static checkArray(array, filled = true) {
const _checkStructure = (!!array && Array.isArray(array));
if (filled) {
return (_checkStructure && !!array.length);
}
return _checkStructure;
}
/**
* @deprecated
*/
static getValueFromDotedKey(object, dotedKey, separator) {
const _separator = separator || '.';
if (object[dotedKey] !== undefined) {
return object[dotedKey];
}
try {
return dotedKey.split(_separator).reduce((obj, index) => {
return obj[index];
}, object);
}
catch (e) {
if (e instanceof TypeError) {
return undefined;
}
else {
throw e;
}
}
}
/**
* @deprecated
*/
static formatString(text) {
if (isNaN(Number(text))) {
return _startCase(text);
}
else {
return text;
}
}
identifier(index, item) {
let _output = (typeof item === 'string') ? item : index;
['code', 'id', 'param', 'key'].forEach((e) => {
if (item.hasOwnProperty(e)) {
_output = item[e];
return;
}
});
return _output;
}
stringTransform(text, transformType) {
const _transformType = transformType || ccStringTransform.start;
let _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);
export { ToolService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGx1bmFlbWUvY2lyY2UtY29yZS8iLCJzb3VyY2VzIjpbImxpYi90b29sL3Rvb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxJQUFJLFVBQVUsRUFBRSxTQUFTLElBQUksVUFBVSxFQUFFLFNBQVMsSUFBSSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbkcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQWdCLGlCQUFpQixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBRTVFLElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVc7SUFHcEM7UUFGTyxXQUFNLEdBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyRyxDQUFDO0lBRVQsTUFBTSxDQUFDLDRCQUE0QixDQUFDLE1BQVcsRUFBRSxHQUFXLEVBQUUsU0FBa0I7UUFDckYsTUFBTSxVQUFVLEdBQUcsU0FBUyxJQUFJLEdBQUcsQ0FBQztRQUNwQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDN0IsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEI7UUFDRCxJQUFJO1lBQ0YsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVEsRUFBRSxLQUFVLEVBQUUsRUFBRTtnQkFDM0QsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ1o7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxZQUFZLFNBQVMsRUFBRTtnQkFDMUIsT0FBTyxTQUFTLENBQUM7YUFDbEI7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLENBQUM7YUFDVDtTQUNGO0lBQ0gsQ0FBQztJQUVNLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxNQUFXLEVBQUUsR0FBVyxFQUFFLEtBQVUsRUFBRSxTQUFrQjtRQUMvRixNQUFNLFVBQVUsR0FBVyxTQUFTLElBQUksR0FBRyxDQUFDO1FBQzVDLE9BQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBUyxFQUFFLEVBQUU7WUFDekQsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUNqQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNiO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxDQUFDO2FBQ1Y7UUFDSCxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDYixDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFvQjtRQUN4QyxNQUFNLElBQUksR0FBVyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxRQUFRLEdBQVksS0FBSyxDQUFDO1FBQzlCLEdBQUc7WUFDRCxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxJQUFJLFlBQVksQ0FBQyxDQUFDO1NBQ2hELFFBQVEsQ0FBQyxRQUFRLEVBQUU7SUFDdEIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUEyQixFQUFFLE1BQWdCO1FBQy9FLE1BQU0sT0FBTyxHQUFZLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNoRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQWUsRUFBRSxDQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUgsQ0FBQztJQUVNLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDcEQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLENBQUM7U0FDekI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQVc7UUFDaEMsTUFBTSxPQUFPLEdBQWtCLEdBQUc7YUFDL0IsT0FBTyxDQUNOLGtDQUFrQyxFQUNsQyxDQUFDLENBQVMsRUFBRSxDQUFTLEVBQUUsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUM1RTthQUNBLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDWixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVNLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxDQUFTO1FBQ3BELE1BQU0sT0FBTyxHQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBUyxFQUFFLEVBQUU7WUFDekQsTUFBTSxJQUFJLEdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFlBQVk7UUFDeEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWlCLEVBQUUsU0FBa0IsSUFBSTtRQUNoRSxNQUFNLGVBQWUsR0FBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25FLElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLG9CQUFvQixDQUFDLE1BQVcsRUFBRSxRQUFnQixFQUFFLFNBQWtCO1FBQ2xGLE1BQU0sVUFBVSxHQUFHLFNBQVMsSUFBSSxHQUFHLENBQUM7UUFFcEMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQ2xDLE9BQU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3pCO1FBQ0QsSUFBSTtZQUNGLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3RELE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNaO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsWUFBWSxTQUFTLEVBQUU7Z0JBQzFCLE9BQU8sU0FBUyxDQUFDO2FBQ2xCO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxDQUFDO2FBQ1Q7U0FDRjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBWTtRQUNyQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUN2QixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN6QjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFTSxVQUFVLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDeEMsSUFBSSxPQUFPLEdBQVEsQ0FBQyxPQUFPLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDN0QsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUNuRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFCLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xCLE9BQU87YUFDUjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxJQUFZLEVBQUUsYUFBaUM7UUFDcEUsTUFBTSxjQUFjLEdBQXNCLGFBQWEsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7UUFDbkYsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDO1FBQzNCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ3ZCLFFBQVEsY0FBYyxFQUFFO2dCQUN0QixLQUFLLGlCQUFpQixDQUFDLEtBQUs7b0JBQzFCLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzNCLE1BQU07Z0JBQ1IsS0FBSyxpQkFBaUIsQ0FBQyxLQUFLO29CQUMxQixPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzQixNQUFNO2dCQUNSLEtBQUssaUJBQWlCLENBQUMsS0FBSztvQkFDMUIsT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0IsTUFBTTthQUNUO1NBQ0Y7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YsQ0FBQTtBQXhLMEIsV0FBVztJQUFyQyxVQUFVLEVBQUU7R0FBYyxXQUFXLENBd0tyQztTQXhLMEIsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHN0YXJ0Q2FzZSBhcyBfc3RhcnRDYXNlLCBjYW1lbENhc2UgYXMgX2NhbWVsQ2FzZSwga2ViYWJDYXNlIGFzIF9rZWJhYkNhc2UgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IENjU2luZ2xlRGF0YSwgY2NTdHJpbmdUcmFuc2Zvcm0sIENjU3RyaW5nVHJhbnNmb3JtIH0gZnJvbSAnLi4vX3R5cGVzL2RhdGEudHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpIGV4cG9ydCBjbGFzcyBUb29sU2VydmljZSB7XG4gIHB1YmxpYyBtb250aHM6IEFycmF5PHN0cmluZz4gPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ107XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VmFsdWVGcm9tTXVsdGlMZXZlbE9iamVjdChvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcsIHNlcGFyYXRvcj86IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgX3NlcGFyYXRvciA9IHNlcGFyYXRvciB8fCAnLic7XG4gICAgaWYgKG9iamVjdFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBrZXkuc3BsaXQoX3NlcGFyYXRvcikucmVkdWNlKChvYmo6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gb2JqW2luZGV4XTtcbiAgICAgIH0sIG9iamVjdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBUeXBlRXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHN0YXRpYyBzZXRWYWx1ZUluTXVsdGlMZXZlbE9iamVjdChvYmplY3Q6IGFueSwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIHNlcGFyYXRvcj86IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgX3NlcGFyYXRvcjogc3RyaW5nID0gc2VwYXJhdG9yIHx8ICcuJztcbiAgICByZXR1cm4gIGtleS5zcGxpdChfc2VwYXJhdG9yKS5yZWR1Y2UoKG86IGFueSwgaTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAobyAmJiB0eXBlb2Ygb1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG9baV07XG4gICAgICB9XG4gICAgICBpZiAobyAmJiBpIGluIG8pIHtcbiAgICAgICAgb1tpXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gbztcbiAgICAgIH1cbiAgICB9LCBvYmplY3QpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyB3YWl0Rm9yKG1pbGxpc2Vjb25kczogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgX25vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgX3RpbWVPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBkbyB7XG4gICAgICBfdGltZU91dCA9IChEYXRlLm5vdygpIC0gX25vdyA+PSBtaWxsaXNlY29uZHMpO1xuICAgIH0gd2hpbGUgKCFfdGltZU91dCk7XG4gIH1cblxuICAvKipcbiAgICogcmVwZWF0ZWRWYWx1ZXNJbkFycmF5XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGFycmF5IG9mIHVuaXF1ZXMgdmFsdWVzIGlmIHBhcmFtZXRlciBcInVuaXF1ZVwiIGlzIHRydWU7IG9yIHJldHVybnNcbiAgICogYW4gYXJyYXkgb2YgT05MWSByZXBlYXRlZCB2YWx1ZXMgKHVuaXF1ZSB2YWx1ZXMgYXJlIGRpc2NhcmRlZCkgaWYgdW5pcXVlIGlzIGZhbHNlLlxuICAgKiBEZWZhdWx0IHZhbHVlIHBvciBwYXJhbWV0ZXIgdW5pcXVlIGlzIHRydWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlcGVhdGVkVmFsdWVzSW5BcnJheSh2YWx1ZXM6IEFycmF5PENjU2luZ2xlRGF0YT4sIHVuaXF1ZT86IGJvb2xlYW4pOiBBcnJheTxDY1NpbmdsZURhdGE+IHtcbiAgICBjb25zdCBfdW5pcXVlOiBib29sZWFuID0gKHVuaXF1ZSA9PT0gdW5kZWZpbmVkKSA/IHRydWUgOiB1bmlxdWU7XG4gICAgcmV0dXJuIChfdW5pcXVlKSA/IEFycmF5LmZyb20obmV3IFNldCh2YWx1ZXMpKSA6IHZhbHVlcy5maWx0ZXIoKGU6IENjU2luZ2xlRGF0YSwgaTogbnVtYmVyKSA9PiB2YWx1ZXMuaW5kZXhPZihlKSAhPT0gaSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNoZWNrTGFzdENoYXIodGV4dDogc3RyaW5nLCBjaGFyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0ZXh0ICYmIHRleHRbdGV4dC5sZW5ndGggLSAxXSAhPT0gY2hhcikge1xuICAgICAgcmV0dXJuIGAke3RleHR9JHtjaGFyfWA7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0O1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBoZXhUb1JnYihoZXg6IHN0cmluZyk6IEFycmF5PG51bWJlcj4ge1xuICAgIGNvbnN0IF9vdXRwdXQ6IEFycmF5PHN0cmluZz4gPSBoZXhcbiAgICAgIC5yZXBsYWNlKFxuICAgICAgICAvXiM/KFthLWZcXGRdKShbYS1mXFxkXSkoW2EtZlxcZF0pJC9pLFxuICAgICAgICAobTogc3RyaW5nLCByOiBzdHJpbmcsIGc6IHN0cmluZywgYjogc3RyaW5nKSA9PiAnIycgKyByICsgciArIGcgKyBnICsgYiArIGJcbiAgICAgIClcbiAgICAgIC5zdWJzdHJpbmcoMSlcbiAgICAgIC5tYXRjaCgvLnsyfS9nKTtcbiAgICByZXR1cm4gX291dHB1dC5tYXAoKGU6IHN0cmluZykgPT4gcGFyc2VJbnQoZSwgMTYpKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgcmdiVG9IZXgocjogbnVtYmVyLCBnOiBudW1iZXIsIGI6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgX291dHB1dDogQXJyYXk8c3RyaW5nPiA9IFtyLCBnLCBiXS5tYXAoKGU6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgX2hleDogc3RyaW5nID0gZS50b1N0cmluZygxNik7XG4gICAgICByZXR1cm4gKF9oZXgubGVuZ3RoID09PSAxKSA/IGAwJHtfaGV4fWAgOiBfaGV4O1xuICAgIH0pO1xuICAgIHJldHVybiBfb3V0cHV0LmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIGdlbmVyYXRlVXVpZFxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogR2VuZXJhdGVzIGEgbmV3IHV1aWQgdXNpbmcgdXVpZCBkZXBlbmRlbmN5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZVV1aWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdjQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja0FycmF5XG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBSZXR1cm5zIHRydWUgaWYgcGFyYW1ldGVyIGdpdmVuIFwiYXJyYXlcIiBpcyBhbiBhcnJheSwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2U7XG4gICAqIElmIG9wdGlvbmFsIHBhcmFtZXRlciBcImZpbGxlZFwiIGlzIGdpdmVuLCB0aGVuIHRoaXMgbWV0aG9kIGNoZWNrcyB0aGUgYXJyYXkgaXMgbm90IGVtcHR5LlxuICAgKiBEZWZhdWx0IHZhbHVlIGZvciBcImZpbGxlZFwiIGlzIHRydWUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNoZWNrQXJyYXkoYXJyYXk6IEFycmF5PGFueT4sIGZpbGxlZDogYm9vbGVhbiA9IHRydWUpOiBib29sZWFuIHtcbiAgICBjb25zdCBfY2hlY2tTdHJ1Y3R1cmU6IGJvb2xlYW4gPSAoISFhcnJheSAmJiBBcnJheS5pc0FycmF5KGFycmF5KSk7XG4gICAgaWYgKGZpbGxlZCkge1xuICAgICAgcmV0dXJuIChfY2hlY2tTdHJ1Y3R1cmUgJiYgISFhcnJheS5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gX2NoZWNrU3RydWN0dXJlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldFZhbHVlRnJvbURvdGVkS2V5KG9iamVjdDogYW55LCBkb3RlZEtleTogc3RyaW5nLCBzZXBhcmF0b3I/OiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IF9zZXBhcmF0b3IgPSBzZXBhcmF0b3IgfHwgJy4nO1xuXG4gICAgaWYgKG9iamVjdFtkb3RlZEtleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9iamVjdFtkb3RlZEtleV07XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZG90ZWRLZXkuc3BsaXQoX3NlcGFyYXRvcikucmVkdWNlKChvYmosIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiBvYmpbaW5kZXhdO1xuICAgICAgfSwgb2JqZWN0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFR5cGVFcnJvcikge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZm9ybWF0U3RyaW5nKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKGlzTmFOKE51bWJlcih0ZXh0KSkpIHtcbiAgICAgIHJldHVybiBfc3RhcnRDYXNlKHRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaWRlbnRpZmllcihpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpOiBhbnkge1xuICAgIGxldCBfb3V0cHV0OiBhbnkgPSAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSA/IGl0ZW0gOiBpbmRleDtcbiAgICBbJ2NvZGUnLCAnaWQnLCAncGFyYW0nLCAna2V5J10uZm9yRWFjaCgoZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXRlbS5oYXNPd25Qcm9wZXJ0eShlKSkge1xuICAgICAgICBfb3V0cHV0ID0gaXRlbVtlXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBfb3V0cHV0O1xuICB9XG5cbiAgcHVibGljIHN0cmluZ1RyYW5zZm9ybSh0ZXh0OiBzdHJpbmcsIHRyYW5zZm9ybVR5cGU/OiBDY1N0cmluZ1RyYW5zZm9ybSk6IHN0cmluZyB7XG4gICAgY29uc3QgX3RyYW5zZm9ybVR5cGU6IENjU3RyaW5nVHJhbnNmb3JtID0gdHJhbnNmb3JtVHlwZSB8fCBjY1N0cmluZ1RyYW5zZm9ybS5zdGFydDtcbiAgICBsZXQgX291dHB1dDogc3RyaW5nID0gdGV4dDtcbiAgICBpZiAoaXNOYU4oTnVtYmVyKHRleHQpKSkge1xuICAgICAgc3dpdGNoIChfdHJhbnNmb3JtVHlwZSkge1xuICAgICAgICBjYXNlIGNjU3RyaW5nVHJhbnNmb3JtLnN0YXJ0OlxuICAgICAgICAgIF9vdXRwdXQgPSBfc3RhcnRDYXNlKHRleHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGNjU3RyaW5nVHJhbnNmb3JtLmNhbWVsOlxuICAgICAgICAgIF9vdXRwdXQgPSBfY2FtZWxDYXNlKHRleHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIGNjU3RyaW5nVHJhbnNmb3JtLmtlYmFiOlxuICAgICAgICAgIF9vdXRwdXQgPSBfa2ViYWJDYXNlKHRleHQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX291dHB1dDtcbiAgfVxufVxuIl19