ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
166 lines • 26 kB
JavaScript
import { OFormValue } from '../components/form/o-form-value';
import { Codes } from './codes';
import { SQLTypes } from './sqltypes';
import { Util } from './util';
export class ServiceUtils {
static getParentKeysFromExpandableContainer(parentKeysObject, expandableContainer, route, checkRouteParamsRecursive = true) {
const result = {};
const ownKeys = Object.keys(parentKeysObject || {});
const dataComponent = expandableContainer ? expandableContainer.data : {};
const existsData = Object.keys(dataComponent).length > 0;
const routeParams = route ? ServiceUtils.getRouteParams(route.snapshot, checkRouteParamsRecursive) : {};
const existsRouteParams = Object.keys(routeParams).length > 0;
if (existsData || existsRouteParams) {
ownKeys.forEach(ownKey => {
const keyValue = parentKeysObject[ownKey];
let value;
if (dataComponent.hasOwnProperty(keyValue)) {
value = dataComponent[keyValue];
}
else if (routeParams.hasOwnProperty(keyValue)) {
value = routeParams[keyValue];
}
if (Util.isDefined(value)) {
switch (typeof (value)) {
case 'string':
if (value.trim().length > 0) {
result[ownKey] = value.trim();
}
break;
case 'number':
if (!isNaN(value)) {
result[ownKey] = value;
}
break;
}
}
});
}
return result;
}
static getParentKeysFromForm(parentKeysObject, form, route, checkRouteParamsRecursive = true) {
const result = {};
const ownKeys = Object.keys(parentKeysObject || {});
const formComponents = form ? form.getComponents() : {};
const existsComponents = Object.keys(formComponents).length > 0;
const formDataProperties = form ? form.getDataValues() : {};
const existsProperties = Object.keys(formDataProperties).length > 0;
const urlData = form ? form.getFormNavigation().getFilterFromUrlParams() : {};
const existsUrlData = Object.keys(urlData).length > 0;
if (existsUrlData) {
form.keysArray.forEach((key, i) => {
if (urlData.hasOwnProperty(key)) {
urlData[key] = SQLTypes.parseUsingSQLType(urlData[key], form.keysSqlTypesArray[i]);
}
});
}
const routeParams = route ? ServiceUtils.getRouteParams(route.snapshot, checkRouteParamsRecursive) : {};
const existsRouteParams = Object.keys(routeParams).length > 0;
if (existsComponents || existsProperties || existsUrlData || existsRouteParams) {
ownKeys.forEach(ownKey => {
const keyValue = parentKeysObject[ownKey];
const isEquivObject = Util.isObject(keyValue);
const formFieldAttr = isEquivObject ? Object.keys(keyValue)[0] : keyValue;
let currentData;
if (formComponents.hasOwnProperty(formFieldAttr)) {
const component = formComponents[formFieldAttr];
if ('getSelectedRecord' in component && isEquivObject) {
currentData = (component.getSelectedRecord() || {})[keyValue[formFieldAttr]];
}
else {
currentData = component.getValue();
}
}
else if (formDataProperties.hasOwnProperty(formFieldAttr)) {
const formPropValue = formDataProperties[formFieldAttr];
currentData = formPropValue instanceof OFormValue ? formPropValue.value : formPropValue;
}
else if (urlData.hasOwnProperty(formFieldAttr)) {
currentData = urlData[formFieldAttr];
}
else if (routeParams.hasOwnProperty(formFieldAttr)) {
currentData = routeParams[formFieldAttr];
}
if (Util.isDefined(currentData)) {
switch (typeof (currentData)) {
case 'string':
if (currentData.trim().length > 0) {
result[ownKey] = currentData.trim();
}
break;
case 'number':
if (!isNaN(currentData)) {
result[ownKey] = currentData;
}
break;
}
}
});
}
return result;
}
static filterContainsAllParentKeys(parentKeysFilter, parentKeys) {
const pkKeys = Object.keys(parentKeys);
if ((pkKeys.length > 0) && Util.isDefined(parentKeysFilter)) {
const parentKeysFilterKeys = Object.keys(parentKeysFilter);
return pkKeys.every(a => parentKeysFilterKeys.indexOf(a) !== -1);
}
return true;
}
static getFilterUsingParentKeys(parentItem, parentKeysObject) {
const filter = {};
const ownKeys = Object.keys(parentKeysObject);
if (ownKeys.length > 0 && Util.isDefined(parentItem)) {
ownKeys.forEach(ownKey => {
const parentKey = parentKeysObject[ownKey];
if (parentItem.hasOwnProperty(parentKey)) {
let currentData = parentItem[parentKey];
if (currentData instanceof OFormValue) {
currentData = currentData.value;
}
filter[ownKey] = currentData;
}
});
}
return filter;
}
static getArrayProperties(array, properties) {
const result = array.map(item => {
return ServiceUtils.getObjectProperties(item, properties);
});
return result;
}
static getObjectProperties(object, properties) {
const objectProperties = {};
properties.forEach(key => {
objectProperties[key] = object[key];
});
return objectProperties;
}
static parseSortColumns(sortColumns) {
const sortColArray = [];
if (sortColumns) {
const cols = Util.parseArray(sortColumns);
cols.forEach(col => {
const colDef = col.split(Codes.TYPE_SEPARATOR);
if (colDef.length > 0) {
const colName = colDef[0];
const colSort = colDef[1] || Codes.ASC_SORT;
sortColArray.push({
columnName: colName,
ascendent: colSort === Codes.ASC_SORT
});
}
});
}
return sortColArray;
}
static getRouteParams(route, recursive) {
let params = { ...route.params };
if (recursive && route.parent) {
params = { ...this.getRouteParams(route.parent, recursive), ...params };
}
return params;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi91dGlsL3NlcnZpY2UudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzdELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRTlCLE1BQU0sT0FBTyxZQUFZO0lBRXZCLE1BQU0sQ0FBQyxvQ0FBb0MsQ0FBQyxnQkFBd0IsRUFBRSxtQkFBa0QsRUFBRSxLQUFzQixFQUFFLDRCQUFxQyxJQUFJO1FBQ3pMLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sYUFBYSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFekQsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hHLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRTlELElBQUksVUFBVSxJQUFJLGlC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Q0FBQztRQUNqQyxJQUFJLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzdCLE1BQU0sR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7U0FDekU7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9leHBhbmRhYmxlLWNvbnRhaW5lci9vLWV4cGFuZGFibGUtY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPRm9ybVZhbHVlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9mb3JtL28tZm9ybS12YWx1ZSc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZm9ybS9vLWZvcm0uY29tcG9uZW50JztcbmltcG9ydCB7IFNRTE9yZGVyIH0gZnJvbSAnLi4vdHlwZXMvc3FsLW9yZGVyLnR5cGUnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuL2NvZGVzJztcbmltcG9ydCB7IFNRTFR5cGVzIH0gZnJvbSAnLi9zcWx0eXBlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IGNsYXNzIFNlcnZpY2VVdGlscyB7XG5cbiAgc3RhdGljIGdldFBhcmVudEtleXNGcm9tRXhwYW5kYWJsZUNvbnRhaW5lcihwYXJlbnRLZXlzT2JqZWN0OiBvYmplY3QsIGV4cGFuZGFibGVDb250YWluZXI6IE9FeHBhbmRhYmxlQ29udGFpbmVyQ29tcG9uZW50LCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLCBjaGVja1JvdXRlUGFyYW1zUmVjdXJzaXZlOiBib29sZWFuID0gdHJ1ZSk6IHt9IHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCBvd25LZXlzID0gT2JqZWN0LmtleXMocGFyZW50S2V5c09iamVjdCB8fCB7fSk7XG5cbiAgICBjb25zdCBkYXRhQ29tcG9uZW50ID0gZXhwYW5kYWJsZUNvbnRhaW5lciA/IGV4cGFuZGFibGVDb250YWluZXIuZGF0YSA6IHt9O1xuICAgIGNvbnN0IGV4aXN0c0RhdGEgPSBPYmplY3Qua2V5cyhkYXRhQ29tcG9uZW50KS5sZW5ndGggPiAwO1xuXG4gICAgY29uc3Qgcm91dGVQYXJhbXMgPSByb3V0ZSA/IFNlcnZpY2VVdGlscy5nZXRSb3V0ZVBhcmFtcyhyb3V0ZS5zbmFwc2hvdCwgY2hlY2tSb3V0ZVBhcmFtc1JlY3Vyc2l2ZSkgOiB7fTtcbiAgICBjb25zdCBleGlzdHNSb3V0ZVBhcmFtcyA9IE9iamVjdC5rZXlzKHJvdXRlUGFyYW1zKS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKGV4aXN0c0RhdGEgfHwgZXhpc3RzUm91dGVQYXJhbXMpIHtcbiAgICAgIG93bktleXMuZm9yRWFjaChvd25LZXkgPT4ge1xuICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IHBhcmVudEtleXNPYmplY3Rbb3duS2V5XTtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICBpZiAoZGF0YUNvbXBvbmVudC5oYXNPd25Qcm9wZXJ0eShrZXlWYWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IGRhdGFDb21wb25lbnRba2V5VmFsdWVdO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdXRlUGFyYW1zLmhhc093blByb3BlcnR5KGtleVZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gcm91dGVQYXJhbXNba2V5VmFsdWVdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiAodmFsdWUpKSB7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICBpZiAodmFsdWUudHJpbSgpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbb3duS2V5XSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W293bktleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGdldFBhcmVudEtleXNGcm9tRm9ybShwYXJlbnRLZXlzT2JqZWN0OiBvYmplY3QsIGZvcm06IE9Gb3JtQ29tcG9uZW50LCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLCBjaGVja1JvdXRlUGFyYW1zUmVjdXJzaXZlOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGNvbnN0IG93bktleXMgPSBPYmplY3Qua2V5cyhwYXJlbnRLZXlzT2JqZWN0IHx8IHt9KTtcblxuICAgIGNvbnN0IGZvcm1Db21wb25lbnRzID0gZm9ybSA/IGZvcm0uZ2V0Q29tcG9uZW50cygpIDoge307XG4gICAgY29uc3QgZXhpc3RzQ29tcG9uZW50cyA9IE9iamVjdC5rZXlzKGZvcm1Db21wb25lbnRzKS5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgZm9ybURhdGFQcm9wZXJ0aWVzID0gZm9ybSA/IGZvcm0uZ2V0RGF0YVZhbHVlcygpIDoge307XG4gICAgY29uc3QgZXhpc3RzUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGZvcm1EYXRhUHJvcGVydGllcykubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IHVybERhdGEgPSBmb3JtID8gZm9ybS5nZXRGb3JtTmF2aWdhdGlvbigpLmdldEZpbHRlckZyb21VcmxQYXJhbXMoKSA6IHt9O1xuICAgIGNvbnN0IGV4aXN0c1VybERhdGEgPSBPYmplY3Qua2V5cyh1cmxEYXRhKS5sZW5ndGggPiAwO1xuICAgIGlmIChleGlzdHNVcmxEYXRhKSB7XG4gICAgICBmb3JtLmtleXNBcnJheS5mb3JFYWNoKChrZXk6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGlmICh1cmxEYXRhLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB1cmxEYXRhW2tleV0gPSBTUUxUeXBlcy5wYXJzZVVzaW5nU1FMVHlwZSh1cmxEYXRhW2tleV0sIGZvcm0ua2V5c1NxbFR5cGVzQXJyYXlbaV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByb3V0ZVBhcmFtcyA9IHJvdXRlID8gU2VydmljZVV0aWxzLmdldFJvdXRlUGFyYW1zKHJvdXRlLnNuYXBzaG90LCBjaGVja1JvdXRlUGFyYW1zUmVjdXJzaXZlKSA6IHt9O1xuICAgIGNvbnN0IGV4aXN0c1JvdXRlUGFyYW1zID0gT2JqZWN0LmtleXMocm91dGVQYXJhbXMpLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoZXhpc3RzQ29tcG9uZW50cyB8fCBleGlzdHNQcm9wZXJ0aWVzIHx8IGV4aXN0c1VybERhdGEgfHwgZXhpc3RzUm91dGVQYXJhbXMpIHtcbiAgICAgIG93bktleXMuZm9yRWFjaChvd25LZXkgPT4ge1xuICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IHBhcmVudEtleXNPYmplY3Rbb3duS2V5XTtcbiAgICAgICAgLy8gUGFyZW50IGtleSBlcXVpdmFsZW5jZSBtYXkgYmUgYW4gb2JqZWN0XG4gICAgICAgIGNvbnN0IGlzRXF1aXZPYmplY3QgPSBVdGlsLmlzT2JqZWN0KGtleVZhbHVlKTtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkQXR0ciA9IGlzRXF1aXZPYmplY3QgPyBPYmplY3Qua2V5cyhrZXlWYWx1ZSlbMF0gOiBrZXlWYWx1ZTtcbiAgICAgICAgbGV0IGN1cnJlbnREYXRhO1xuICAgICAgICBpZiAoZm9ybUNvbXBvbmVudHMuaGFzT3duUHJvcGVydHkoZm9ybUZpZWxkQXR0cikpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBmb3JtQ29tcG9uZW50c1tmb3JtRmllbGRBdHRyXTtcbiAgICAgICAgICAvLyBJcyBzZXJ2aWNlIGNvbXBvbmVudCAoY29tYm8sIGxpc3RwaWNrZXIsIHJhZGlvKVxuICAgICAgICAgIGlmICgnZ2V0U2VsZWN0ZWRSZWNvcmQnIGluIGNvbXBvbmVudCAmJiBpc0VxdWl2T2JqZWN0KSB7XG4gICAgICAgICAgICBjdXJyZW50RGF0YSA9ICgoY29tcG9uZW50IGFzIGFueSkuZ2V0U2VsZWN0ZWRSZWNvcmQoKSB8fCB7fSlba2V5VmFsdWVbZm9ybUZpZWxkQXR0cl1dO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50RGF0YSA9IGNvbXBvbmVudC5nZXRWYWx1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmb3JtRGF0YVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoZm9ybUZpZWxkQXR0cikpIHtcbiAgICAgICAgICBjb25zdCBmb3JtUHJvcFZhbHVlID0gZm9ybURhdGFQcm9wZXJ0aWVzW2Zvcm1GaWVsZEF0dHJdO1xuICAgICAgICAgIGN1cnJlbnREYXRhID0gZm9ybVByb3BWYWx1ZSBpbnN0YW5jZW9mIE9Gb3JtVmFsdWUgPyBmb3JtUHJvcFZhbHVlLnZhbHVlIDogZm9ybVByb3BWYWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cmxEYXRhLmhhc093blByb3BlcnR5KGZvcm1GaWVsZEF0dHIpKSB7XG4gICAgICAgICAgY3VycmVudERhdGEgPSB1cmxEYXRhW2Zvcm1GaWVsZEF0dHJdO1xuICAgICAgICB9IGVsc2UgaWYgKHJvdXRlUGFyYW1zLmhhc093blByb3BlcnR5KGZvcm1GaWVsZEF0dHIpKSB7XG4gICAgICAgICAgY3VycmVudERhdGEgPSByb3V0ZVBhcmFtc1tmb3JtRmllbGRBdHRyXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoY3VycmVudERhdGEpKSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgKGN1cnJlbnREYXRhKSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnREYXRhLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W293bktleV0gPSBjdXJyZW50RGF0YS50cmltKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICBpZiAoIWlzTmFOKGN1cnJlbnREYXRhKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtvd25LZXldID0gY3VycmVudERhdGE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBmaWx0ZXJDb250YWluc0FsbFBhcmVudEtleXMocGFyZW50S2V5c0ZpbHRlciwgcGFyZW50S2V5cyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHBrS2V5cyA9IE9iamVjdC5rZXlzKHBhcmVudEtleXMpO1xuICAgIGlmICgocGtLZXlzLmxlbmd0aCA+IDApICYmIFV0aWwuaXNEZWZpbmVkKHBhcmVudEtleXNGaWx0ZXIpKSB7XG4gICAgICBjb25zdCBwYXJlbnRLZXlzRmlsdGVyS2V5cyA9IE9iamVjdC5rZXlzKHBhcmVudEtleXNGaWx0ZXIpO1xuICAgICAgcmV0dXJuIHBrS2V5cy5ldmVyeShhID0+IHBhcmVudEtleXNGaWx0ZXJLZXlzLmluZGV4T2YoYSkgIT09IC0xKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0RmlsdGVyVXNpbmdQYXJlbnRLZXlzKHBhcmVudEl0ZW06IGFueSwgcGFyZW50S2V5c09iamVjdDogb2JqZWN0KSB7XG4gICAgY29uc3QgZmlsdGVyID0ge307XG4gICAgY29uc3Qgb3duS2V5cyA9IE9iamVjdC5rZXlzKHBhcmVudEtleXNPYmplY3QpO1xuICAgIGlmIChvd25LZXlzLmxlbmd0aCA+IDAgJiYgVXRpbC5pc0RlZmluZWQocGFyZW50SXRlbSkpIHtcbiAgICAgIG93bktleXMuZm9yRWFjaChvd25LZXkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnRLZXkgPSBwYXJlbnRLZXlzT2JqZWN0W293bktleV07XG4gICAgICAgIGlmIChwYXJlbnRJdGVtLmhhc093blByb3BlcnR5KHBhcmVudEtleSkpIHtcbiAgICAgICAgICBsZXQgY3VycmVudERhdGEgPSBwYXJlbnRJdGVtW3BhcmVudEtleV07XG4gICAgICAgICAgaWYgKGN1cnJlbnREYXRhIGluc3RhbmNlb2YgT0Zvcm1WYWx1ZSkge1xuICAgICAgICAgICAgY3VycmVudERhdGEgPSBjdXJyZW50RGF0YS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlsdGVyW293bktleV0gPSBjdXJyZW50RGF0YTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0QXJyYXlQcm9wZXJ0aWVzKGFycmF5OiBhbnlbXSwgcHJvcGVydGllczogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXJyYXkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIFNlcnZpY2VVdGlscy5nZXRPYmplY3RQcm9wZXJ0aWVzKGl0ZW0sIHByb3BlcnRpZXMpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0T2JqZWN0UHJvcGVydGllcyhvYmplY3Q6IGFueSwgcHJvcGVydGllczogYW55W10pOiBhbnkge1xuICAgIGNvbnN0IG9iamVjdFByb3BlcnRpZXMgPSB7fTtcbiAgICBwcm9wZXJ0aWVzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIG9iamVjdFByb3BlcnRpZXNba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH0pO1xuICAgIHJldHVybiBvYmplY3RQcm9wZXJ0aWVzO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlU29ydENvbHVtbnMoc29ydENvbHVtbnM6IHN0cmluZyk6IEFycmF5PFNRTE9yZGVyPiB7XG4gICAgY29uc3Qgc29ydENvbEFycmF5ID0gW107XG4gICAgaWYgKHNvcnRDb2x1bW5zKSB7XG4gICAgICBjb25zdCBjb2xzID0gVXRpbC5wYXJzZUFycmF5KHNvcnRDb2x1bW5zKTtcbiAgICAgIGNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICBjb25zdCBjb2xEZWYgPSBjb2wuc3BsaXQoQ29kZXMuVFlQRV9TRVBBUkFUT1IpO1xuICAgICAgICBpZiAoY29sRGVmLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBjb2xOYW1lID0gY29sRGVmWzBdO1xuICAgICAgICAgIGNvbnN0IGNvbFNvcnQgPSBjb2xEZWZbMV0gfHwgQ29kZXMuQVNDX1NPUlQ7XG4gICAgICAgICAgc29ydENvbEFycmF5LnB1c2goe1xuICAgICAgICAgICAgY29sdW1uTmFtZTogY29sTmFtZSxcbiAgICAgICAgICAgIGFzY2VuZGVudDogY29sU29ydCA9PT0gQ29kZXMuQVNDX1NPUlRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzb3J0Q29sQXJyYXk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwYXJhbXMgb2YgdGhlIHByb3ZpZGVkIHJvdXRlLlxuICAgKiBQYXJhbXMgZnJvbSBwYXJlbnQgcm91dGVzIGFyZSByZXBsYWNlZCBieSBjaGlsZCByb3V0ZSBwYXJhbSB2YWx1ZXMgaWYgcmVwZWF0ZWQuXG4gICAqIEBwYXJhbSByb3V0ZSB0aGUgcm91dGVcbiAgICogQHBhcmFtIHJlY3Vyc2l2ZSBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHJvdXRlIHBhcmFtcyBmcm9tIHJvdXRlIGFuY2VzdG9ycy5cbiAgICogQHJldHVybnMgcGFyYW1zIGNvbnRhaW5pbmcgYWxsIHRoZSByb3V0ZSBwYXJhbWV0ZXJzXG4gICAqL1xuICBzdGF0aWMgZ2V0Um91dGVQYXJhbXMocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHJlY3Vyc2l2ZTogYm9vbGVhbik6IG9iamVjdCB7XG4gICAgbGV0IHBhcmFtcyA9IHsgLi4ucm91dGUucGFyYW1zIH07XG4gICAgaWYgKHJlY3Vyc2l2ZSAmJiByb3V0ZS5wYXJlbnQpIHtcbiAgICAgIHBhcmFtcyA9IHsgLi4udGhpcy5nZXRSb3V0ZVBhcmFtcyhyb3V0ZS5wYXJlbnQsIHJlY3Vyc2l2ZSksIC4uLnBhcmFtcyB9O1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbn1cbiJdfQ==