@mediusinc/mng-commons-audit 5.5.0-rc.1 → 5.5.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/api/models/entityChange.mjs +1 -1
- package/esm2022/lib/api/models/guiEntityModel.mjs +1 -1
- package/esm2022/lib/api/models/guiPropertyModel.mjs +1 -1
- package/esm2022/lib/api/models/guiPropertyType.mjs +1 -14
- package/esm2022/lib/api/models/guiRelationModel.mjs +1 -12
- package/esm2022/lib/api/models/revEntityWithChangesDto.mjs +1 -1
- package/esm2022/lib/api/models/revEntityWithStateDto.mjs +1 -1
- package/esm2022/lib/api/models/revisionType.mjs +1 -14
- package/esm2022/lib/api/services/audit-revisions-api.service.mjs +4 -5
- package/esm2022/lib/components/entity-changes-field/entity-changes-field.component.mjs +31 -20
- package/esm2022/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.mjs +39 -32
- package/esm2022/lib/components/pages/revisions/audit-revisions.page.component.mjs +17 -15
- package/esm2022/lib/helpers/descriptor.mjs +136 -0
- package/esm2022/lib/helpers/entity-changes.mjs +42 -0
- package/esm2022/lib/helpers/i18n.mjs +14 -0
- package/fesm2022/mediusinc-mng-commons-audit.mjs +282 -325
- package/fesm2022/mediusinc-mng-commons-audit.mjs.map +1 -1
- package/lib/api/models/entityChange.d.ts +0 -11
- package/lib/api/models/guiEntityModel.d.ts +0 -11
- package/lib/api/models/guiPropertyModel.d.ts +0 -11
- package/lib/api/models/guiRelationModel.d.ts +0 -11
- package/lib/api/models/revEntityWithChangesDto.d.ts +0 -11
- package/lib/api/models/revEntityWithStateDto.d.ts +0 -11
- package/lib/components/entity-changes-field/entity-changes-field.component.d.ts +5 -8
- package/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.d.ts +8 -15
- package/lib/components/pages/revisions/audit-revisions.page.component.d.ts +5 -7
- package/lib/helpers/descriptor.d.ts +10 -0
- package/lib/helpers/entity-changes.d.ts +5 -0
- package/lib/helpers/i18n.d.ts +3 -0
- package/package.json +2 -2
- package/version-info.json +5 -5
- package/esm2022/lib/utils/audit.util.mjs +0 -227
- package/lib/utils/audit.util.d.ts +0 -22
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
import { HttpParams } from '@angular/common/http';
|
|
2
|
-
import { TypeRegistry, dataListParamsToUrlQuery } from '@mediusinc/mng-commons/core';
|
|
3
|
-
import { lookupDataProvider } from '@mediusinc/mng-commons/form/api';
|
|
4
|
-
import { enumModelGeneric } from '@mediusinc/mng-commons/model';
|
|
5
|
-
import { GuiPropertyTypeDto } from '../api/models/guiPropertyType';
|
|
6
|
-
import { RevisionTypeDto, revisionTypeEnum } from '../api/models/revisionType';
|
|
7
|
-
export class AuditUtil {
|
|
8
|
-
static { this._dateRegex = /\d{4}-[01]\d-[0-3]\d/; }
|
|
9
|
-
static addColumnsFromModel(descriptor, properties, modelType = undefined, addFilters = true, addSorts = true) {
|
|
10
|
-
for (const property of properties) {
|
|
11
|
-
if (!property.resolvedPropertyName) {
|
|
12
|
-
continue;
|
|
13
|
-
}
|
|
14
|
-
const isEnum = property.propertyType === GuiPropertyTypeDto.Enum;
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
16
|
-
let column = null;
|
|
17
|
-
if (isEnum) {
|
|
18
|
-
if (!property.possibleEnumValues) {
|
|
19
|
-
continue;
|
|
20
|
-
}
|
|
21
|
-
const enumModel = AuditUtil.findEnum(property);
|
|
22
|
-
if (enumModel) {
|
|
23
|
-
column = descriptor.addColumnEnum(property.resolvedPropertyName, enumModel);
|
|
24
|
-
if (addFilters) {
|
|
25
|
-
descriptor.addFilterLookupEnum(column.property, enumModel, property.possibleEnumValues);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
column = descriptor.addColumnUnsafe(property.resolvedPropertyName);
|
|
30
|
-
if (addFilters) {
|
|
31
|
-
descriptor.addFilterLookupUnsafe(column.property, lookupDataProvider().withLookup(() => property.possibleEnumValues ?? []));
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
else if (property.propertyType === GuiPropertyTypeDto.Number) {
|
|
36
|
-
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asNumber();
|
|
37
|
-
}
|
|
38
|
-
else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
|
|
39
|
-
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asBoolean();
|
|
40
|
-
}
|
|
41
|
-
else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
|
|
42
|
-
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy');
|
|
43
|
-
}
|
|
44
|
-
else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
|
|
45
|
-
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy HH:mm');
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
// string / wildcard
|
|
49
|
-
column = descriptor.addColumnUnsafe(property.resolvedPropertyName).withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
50
|
-
}
|
|
51
|
-
if (modelType) {
|
|
52
|
-
column.withGetter((value, item) => item?.[modelType]?.[property.resolvedPropertyName]);
|
|
53
|
-
}
|
|
54
|
-
column.withTitle(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
55
|
-
if (!isEnum && addFilters) {
|
|
56
|
-
descriptor.addFilterFromColumnDescriptorUnsafe(column);
|
|
57
|
-
}
|
|
58
|
-
if (addSorts) {
|
|
59
|
-
descriptor.withSortUnsafe(column.property);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return descriptor;
|
|
63
|
-
}
|
|
64
|
-
static getPropertyTitleKey(property, modelType = undefined) {
|
|
65
|
-
if (modelType === 'revEntity') {
|
|
66
|
-
return 'MngRevEntity.properties.' + property.resolvedPropertyName;
|
|
67
|
-
}
|
|
68
|
-
return property.resolvedPropertyName ?? '';
|
|
69
|
-
}
|
|
70
|
-
static addFieldsFromModel(descriptor, properties, modelType = 'revEntity') {
|
|
71
|
-
for (const property of properties) {
|
|
72
|
-
if (!property.resolvedPropertyName) {
|
|
73
|
-
continue;
|
|
74
|
-
}
|
|
75
|
-
const fieldPrepend = `${modelType}.`;
|
|
76
|
-
if (property.propertyType === GuiPropertyTypeDto.Enum) {
|
|
77
|
-
const enumModel = AuditUtil.findEnum(property);
|
|
78
|
-
if (enumModel) {
|
|
79
|
-
if (!property.possibleEnumValues) {
|
|
80
|
-
continue;
|
|
81
|
-
}
|
|
82
|
-
descriptor.addFieldLookupEnum((fieldPrepend + property.resolvedPropertyName), enumModel, property.possibleEnumValues).withDisabled();
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).withLabel(AuditUtil.getPropertyTitleKey(property, modelType));
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
else if (property.propertyType === GuiPropertyTypeDto.Number) {
|
|
89
|
-
descriptor
|
|
90
|
-
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
91
|
-
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
92
|
-
.asNumber()
|
|
93
|
-
.withDisabled();
|
|
94
|
-
}
|
|
95
|
-
else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
|
|
96
|
-
descriptor
|
|
97
|
-
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
98
|
-
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
99
|
-
.withDisabled();
|
|
100
|
-
}
|
|
101
|
-
else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
|
|
102
|
-
descriptor
|
|
103
|
-
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
104
|
-
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
105
|
-
.asDatePicker({ format: 'dd. MMM yyyy' })
|
|
106
|
-
.withDisabled();
|
|
107
|
-
}
|
|
108
|
-
else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
|
|
109
|
-
descriptor
|
|
110
|
-
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
111
|
-
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
112
|
-
.asDatePicker({
|
|
113
|
-
format: 'dd. MM yy',
|
|
114
|
-
showTime: true,
|
|
115
|
-
showSeconds: false
|
|
116
|
-
})
|
|
117
|
-
.withDisabled();
|
|
118
|
-
}
|
|
119
|
-
else {
|
|
120
|
-
// string / wildcard
|
|
121
|
-
descriptor
|
|
122
|
-
.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName)
|
|
123
|
-
.withLabel(AuditUtil.getPropertyTitleKey(property, modelType))
|
|
124
|
-
.withDisabled();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
return descriptor;
|
|
128
|
-
}
|
|
129
|
-
static buildDescriptorForEntityRevision(descriptor, revModel, entityModel) {
|
|
130
|
-
const revType = descriptor.addColumnEnum('revType', revisionTypeEnum).withTitle('MngEntityRevisionChangeState.properties.revType');
|
|
131
|
-
descriptor.addFieldLookupEnum('revType', revisionTypeEnum).withLabel('MngEntityRevisionChangeState.properties.revType');
|
|
132
|
-
descriptor.table.addFilterFromColumnDescriptorUnsafe(revType);
|
|
133
|
-
if (revModel.properties) {
|
|
134
|
-
AuditUtil.addColumnsFromModel(descriptor.table, revModel.properties, 'revEntity');
|
|
135
|
-
AuditUtil.addFieldsFromModel(descriptor.detailsEditor, revModel.properties, 'revEntity');
|
|
136
|
-
}
|
|
137
|
-
if (entityModel.properties) {
|
|
138
|
-
AuditUtil.addColumnsFromModel(descriptor.table, entityModel.properties, 'entityState');
|
|
139
|
-
AuditUtil.addFieldsFromModel(descriptor.detailsEditor, entityModel.properties, 'entityState');
|
|
140
|
-
}
|
|
141
|
-
return descriptor;
|
|
142
|
-
}
|
|
143
|
-
static findEnum(property) {
|
|
144
|
-
if (!property.enumClassSimpleName) {
|
|
145
|
-
return undefined;
|
|
146
|
-
}
|
|
147
|
-
let i18n = property.enumClassSimpleName;
|
|
148
|
-
let enumType = TypeRegistry.get().findEnum(i18n);
|
|
149
|
-
if (!enumType) {
|
|
150
|
-
i18n = property.enumClassSimpleName + 'Dto';
|
|
151
|
-
enumType = TypeRegistry.get().findEnum(i18n);
|
|
152
|
-
}
|
|
153
|
-
if (!enumType && Array.isArray(property.possibleEnumValues)) {
|
|
154
|
-
i18n = null;
|
|
155
|
-
enumType = property.possibleEnumValues?.reduce((acc, v) => {
|
|
156
|
-
const constName = v
|
|
157
|
-
.split('_')
|
|
158
|
-
.map(s => (s.length > 1 ? s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase() : s))
|
|
159
|
-
.join('');
|
|
160
|
-
if (constName !== v) {
|
|
161
|
-
acc[constName] = v;
|
|
162
|
-
}
|
|
163
|
-
acc[v] = constName;
|
|
164
|
-
return acc;
|
|
165
|
-
}, {});
|
|
166
|
-
}
|
|
167
|
-
return enumModelGeneric(enumType, i18n);
|
|
168
|
-
}
|
|
169
|
-
static extractPropertyName(fullPropertyName) {
|
|
170
|
-
if (fullPropertyName?.includes('entityState.')) {
|
|
171
|
-
return fullPropertyName.replace('entityState.', '');
|
|
172
|
-
}
|
|
173
|
-
else if (fullPropertyName?.includes('revEntity.')) {
|
|
174
|
-
return fullPropertyName?.replace('revEntity.', '');
|
|
175
|
-
}
|
|
176
|
-
return fullPropertyName;
|
|
177
|
-
}
|
|
178
|
-
static paramsToHttpParams(params) {
|
|
179
|
-
const routeParams = dataListParamsToUrlQuery(params, null);
|
|
180
|
-
let httpParams = new HttpParams();
|
|
181
|
-
Object.entries(routeParams).forEach(([key, value]) => {
|
|
182
|
-
httpParams = httpParams.append(key, value);
|
|
183
|
-
});
|
|
184
|
-
return httpParams;
|
|
185
|
-
}
|
|
186
|
-
static mapItemsToEntityChangesArray(fieldValue) {
|
|
187
|
-
const entityChanges = [];
|
|
188
|
-
for (const key of Object.keys(fieldValue)) {
|
|
189
|
-
const ec = { entityType: key, items: [] };
|
|
190
|
-
for (const change of fieldValue[key]) {
|
|
191
|
-
if (change.revType === RevisionTypeDto.Add && change.entityNewState) {
|
|
192
|
-
const item = {
|
|
193
|
-
revType: change.revType,
|
|
194
|
-
color: 'green'
|
|
195
|
-
};
|
|
196
|
-
Object.entries(change.entityNewState).forEach(([key, value]) => (item[key] = value));
|
|
197
|
-
ec.items?.push(item);
|
|
198
|
-
}
|
|
199
|
-
else if (change.revType === RevisionTypeDto.Del && change.entityOldState) {
|
|
200
|
-
const item = {
|
|
201
|
-
revType: change.revType,
|
|
202
|
-
color: 'red'
|
|
203
|
-
};
|
|
204
|
-
Object.entries(change.entityOldState).forEach(([key, value]) => (item[key] = value));
|
|
205
|
-
ec.items?.push(item);
|
|
206
|
-
}
|
|
207
|
-
else if (change.revType === RevisionTypeDto.Mod && change.entityOldState && change.entityNewState) {
|
|
208
|
-
const itemOld = {
|
|
209
|
-
revType: change.revType,
|
|
210
|
-
color: 'red'
|
|
211
|
-
};
|
|
212
|
-
Object.entries(change.entityOldState).forEach(([key, value]) => (itemOld[key] = value));
|
|
213
|
-
const itemNew = {
|
|
214
|
-
revType: change.revType,
|
|
215
|
-
color: 'green'
|
|
216
|
-
};
|
|
217
|
-
Object.entries(change.entityNewState).forEach(([key, value]) => (itemNew[key] = value));
|
|
218
|
-
ec.items?.push(itemOld);
|
|
219
|
-
ec.items?.push(itemNew);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
entityChanges.push(ec);
|
|
223
|
-
}
|
|
224
|
-
return entityChanges;
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvYXVkaXQudXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFaEQsT0FBTyxFQUEyQixZQUFZLEVBQUUsd0JBQXdCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQU85RCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFLN0UsTUFBTSxPQUFPLFNBQVM7YUFDSCxlQUFVLEdBQUcsc0JBQXNCLENBQUM7SUFFNUMsTUFBTSxDQUFDLG1CQUFtQixDQUM3QixVQUFrQyxFQUNsQyxVQUFpQyxFQUNqQyxZQUFxRCxTQUFTLEVBQzlELFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFFBQVEsR0FBRyxJQUFJO1FBRWYsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ2pDLFNBQVM7WUFDYixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDakUsOERBQThEO1lBQzlELElBQUksTUFBTSxHQUFvQyxJQUFJLENBQUM7WUFDbkQsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQy9CLFNBQVM7Z0JBQ2IsQ0FBQztnQkFFRCxNQUFNLFNBQVMsR0FBRyxTQUFT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RUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7WUFDTCxDQUFDO1lBQ0QsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQge0RhdGFMaXN0UGFyYW1zLCBFbnVtVHlwZSwgVHlwZVJlZ2lzdHJ5LCBkYXRhTGlzdFBhcmFtc1RvVXJsUXVlcnl9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge2xvb2t1cERhdGFQcm92aWRlcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtL2FwaSc7XG5pbXBvcnQge2VudW1Nb2RlbEdlbmVyaWN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3JJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5pbXBvcnQge0VkaXRvckRlc2NyaXB0b3JJbnN0LCBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtFbnRpdHlDaGFuZ2VEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvZW50aXR5Q2hhbmdlJztcbmltcG9ydCB7R3VpRW50aXR5TW9kZWxEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvZ3VpRW50aXR5TW9kZWwnO1xuaW1wb3J0IHtHdWlQcm9wZXJ0eU1vZGVsRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2d1aVByb3BlcnR5TW9kZWwnO1xuaW1wb3J0IHtHdWlQcm9wZXJ0eVR5cGVEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvZ3VpUHJvcGVydHlUeXBlJztcbmltcG9ydCB7UmV2aXNpb25UeXBlRHRvLCByZXZpc2lvblR5cGVFbnVtfSBmcm9tICcuLi9hcGkvbW9kZWxzL3JldmlzaW9uVHlwZSc7XG5pbXBvcnQge0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGV9IGZyb20gJy4uL21vZGVscy9lbnRpdHktcmV2aXNpb24tY2hhbmdlLXN0YXRlLm1vZGVsJztcbmltcG9ydCB7RW50aXR5UmV2aXNpb25DaGFuZ2VzfSBmcm9tICcuLi9tb2RlbHMvZW50aXR5LXJldmlzaW9uLWNoYW5nZXMubW9kZWwnO1xuaW1wb3J0IHtSZXZFbnRpdHlXaXRoSWR9IGZyb20gJy4uL21vZGVscy9yZXZFbnRpdHlXaXRoSWQubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgQXVkaXRVdGlsIHtcbiAgICBwcml2YXRlIHN0YXRpYyBfZGF0ZVJlZ2V4ID0gL1xcZHs0fS1bMDFdXFxkLVswLTNdXFxkLztcblxuICAgIHB1YmxpYyBzdGF0aWMgYWRkQ29sdW1uc0Zyb21Nb2RlbDxUPihcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxUPixcbiAgICAgICAgcHJvcGVydGllczogR3VpUHJvcGVydHlNb2RlbER0b1tdLFxuICAgICAgICBtb2RlbFR5cGU6ICdyZXZFbnRpdHknIHwgJ2VudGl0eVN0YXRlJyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICAgICAgYWRkRmlsdGVycyA9IHRydWUsXG4gICAgICAgIGFkZFNvcnRzID0gdHJ1ZVxuICAgICk6IFRhYmxlRGVzY3JpcHRvckluc3Q8VD4ge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaXNFbnVtID0gcHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGVEdG8uRW51bTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgICAgICBsZXQgY29sdW1uOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgVD4gfCBudWxsID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc0VudW0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtTW9kZWwgPSBBdWRpdFV0aWwuZmluZEVudW0ocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGlmIChlbnVtTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5FbnVtKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lIGFzIGtleW9mIFQsIGVudW1Nb2RlbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhZGRGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmFkZEZpbHRlckxvb2t1cEVudW0oY29sdW1uLnByb3BlcnR5IGFzIGtleW9mIFQsIGVudW1Nb2RlbCwgcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuYWRkRmlsdGVyTG9va3VwVW5zYWZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbi5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXI8c3RyaW5nPigpLndpdGhMb29rdXAoKCkgPT4gcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzID8/IFtdKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGVEdG8uTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLmFzTnVtYmVyKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkuYXNCb29sZWFuKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLkxvY2FsRGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0RhdGUoJ2RkLiBNTSB5eXl5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLk9mZnNldERhdGVUaW1lKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLmFzRGF0ZSgnZGQuIE1NIHl5eXkgSEg6bW0nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc3RyaW5nIC8gd2lsZGNhcmRcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkud2l0aFRpdGxlKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1vZGVsVHlwZSkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi53aXRoR2V0dGVyKCh2YWx1ZSwgaXRlbSkgPT4gaXRlbT8uW21vZGVsVHlwZSBhcyBrZXlvZiBvYmplY3RdPy5bcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUgYXMga2V5b2Ygb2JqZWN0XSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbHVtbi53aXRoVGl0bGUoQXVkaXRVdGlsLmdldFByb3BlcnR5VGl0bGVLZXkocHJvcGVydHksIG1vZGVsVHlwZSkpO1xuXG4gICAgICAgICAgICBpZiAoIWlzRW51bSAmJiBhZGRGaWx0ZXJzKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZShjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkZFNvcnRzKSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvci53aXRoU29ydFVuc2FmZShjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eTogR3VpUHJvcGVydHlNb2RlbER0bywgbW9kZWxUeXBlOiAncmV2RW50aXR5JyB8ICdlbnRpdHlTdGF0ZScgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKG1vZGVsVHlwZSA9PT0gJ3JldkVudGl0eScpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW5nUmV2RW50aXR5LnByb3BlcnRpZXMuJyArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSA/PyAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFkZEZpZWxkc0Zyb21Nb2RlbDxUPihcbiAgICAgICAgZGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvckluc3Q8VD4sXG4gICAgICAgIHByb3BlcnRpZXM6IEd1aVByb3BlcnR5TW9kZWxEdG9bXSxcbiAgICAgICAgbW9kZWxUeXBlOiAncmV2RW50aXR5JyB8ICdlbnRpdHlTdGF0ZScgPSAncmV2RW50aXR5J1xuICAgICk6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBpZiAoIXByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJlcGVuZCA9IGAke21vZGVsVHlwZX0uYDtcblxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLkVudW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtTW9kZWwgPSBBdWRpdFV0aWwuZmluZEVudW0ocHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIGlmIChlbnVtTW9kZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZExvb2t1cEVudW0oKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKSBhcyBrZXlvZiBULCBlbnVtTW9kZWwsIHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcykud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLk51bWJlcikge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAuYXNOdW1iZXIoKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZUR0by5Mb2NhbERhdGUpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLmFzRGF0ZVBpY2tlcih7Zm9ybWF0OiAnZGQuIE1NTSB5eXl5J30pXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGVEdG8uT2Zmc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgICAgIC5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbChBdWRpdFV0aWwuZ2V0UHJvcGVydHlUaXRsZUtleShwcm9wZXJ0eSwgbW9kZWxUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLmFzRGF0ZVBpY2tlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdkZC4gTU0geXknLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RpbWU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93U2Vjb25kczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaXNhYmxlZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzdHJpbmcgLyB3aWxkY2FyZFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAgICAgLmFkZEZpZWxkVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKVxuICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKEF1ZGl0VXRpbC5nZXRQcm9wZXJ0eVRpdGxlS2V5KHByb3BlcnR5LCBtb2RlbFR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBidWlsZERlc2NyaXB0b3JGb3JFbnRpdHlSZXZpc2lvbihcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8UmV2RW50aXR5V2l0aElkPixcbiAgICAgICAgcmV2TW9kZWw6IEd1aUVudGl0eU1vZGVsRHRvLFxuICAgICAgICBlbnRpdHlNb2RlbDogR3VpRW50aXR5TW9kZWxEdG9cbiAgICApOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxSZXZFbnRpdHlXaXRoSWQ+IHtcbiAgICAgICAgY29uc3QgcmV2VHlwZSA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uRW51bSgncmV2VHlwZScsIHJldmlzaW9uVHlwZUVudW0pLndpdGhUaXRsZSgnTW5nRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZS5wcm9wZXJ0aWVzLnJldlR5cGUnKTtcbiAgICAgICAgZGVzY3JpcHRvci5hZGRGaWVsZExvb2t1cEVudW0oJ3JldlR5cGUnLCByZXZpc2lvblR5cGVFbnVtKS53aXRoTGFiZWwoJ01uZ0VudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUucHJvcGVydGllcy5yZXZUeXBlJyk7XG5cbiAgICAgICAgZGVzY3JpcHRvci50YWJsZS5hZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZShyZXZUeXBlKTtcblxuICAgICAgICBpZiAocmV2TW9kZWwucHJvcGVydGllcykge1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZENvbHVtbnNGcm9tTW9kZWwoZGVzY3JpcHRvci50YWJsZSwgcmV2TW9kZWwucHJvcGVydGllcywgJ3JldkVudGl0eScpO1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZEZpZWxkc0Zyb21Nb2RlbChkZXNjcmlwdG9yLmRldGFpbHNFZGl0b3IsIHJldk1vZGVsLnByb3BlcnRpZXMsICdyZXZFbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZW50aXR5TW9kZWwucHJvcGVydGllcykge1xuICAgICAgICAgICAgQXVkaXRVdGlsLmFkZENvbHVtbnNGcm9tTW9kZWwoZGVzY3JpcHRvci50YWJsZSwgZW50aXR5TW9kZWwucHJvcGVydGllcywgJ2VudGl0eVN0YXRlJyk7XG4gICAgICAgICAgICBBdWRpdFV0aWwuYWRkRmllbGRzRnJvbU1vZGVsKGRlc2NyaXB0b3IuZGV0YWlsc0VkaXRvciwgZW50aXR5TW9kZWwucHJvcGVydGllcywgJ2VudGl0eVN0YXRlJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZpbmRFbnVtKHByb3BlcnR5OiBHdWlQcm9wZXJ0eU1vZGVsRHRvKSB7XG4gICAgICAgIGlmICghcHJvcGVydHkuZW51bUNsYXNzU2ltcGxlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBpMThuOiBzdHJpbmcgfCBudWxsID0gcHJvcGVydHkuZW51bUNsYXNzU2ltcGxlTmFtZTtcbiAgICAgICAgbGV0IGVudW1UeXBlID0gVHlwZVJlZ2lzdHJ5LmdldCgpLmZpbmRFbnVtKGkxOG4pO1xuICAgICAgICBpZiAoIWVudW1UeXBlKSB7XG4gICAgICAgICAgICBpMThuID0gcHJvcGVydHkuZW51bUNsYXNzU2ltcGxlTmFtZSArICdEdG8nO1xuICAgICAgICAgICAgZW51bVR5cGUgPSBUeXBlUmVnaXN0cnkuZ2V0KCkuZmluZEVudW0oaTE4bik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbnVtVHlwZSAmJiBBcnJheS5pc0FycmF5KHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcykpIHtcbiAgICAgICAgICAgIGkxOG4gPSBudWxsO1xuICAgICAgICAgICAgZW51bVR5cGUgPSBwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXM/LnJlZHVjZShcbiAgICAgICAgICAgICAgICAoYWNjLCB2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnN0TmFtZSA9IHZcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnXycpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKHMgPT4gKHMubGVuZ3RoID4gMSA/IHMuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCkgKyBzLnN1YnN0cmluZygxKS50b0xvd2VyQ2FzZSgpIDogcykpXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25zdE5hbWUgIT09IHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY1tjb25zdE5hbWVdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhY2Nbdl0gPSBjb25zdE5hbWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICA8RW51bVR5cGU+e31cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1Nb2RlbEdlbmVyaWMoZW51bVR5cGUsIGkxOG4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZXh0cmFjdFByb3BlcnR5TmFtZShmdWxsUHJvcGVydHlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoZnVsbFByb3BlcnR5TmFtZT8uaW5jbHVkZXMoJ2VudGl0eVN0YXRlLicpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVsbFByb3BlcnR5TmFtZS5yZXBsYWNlKCdlbnRpdHlTdGF0ZS4nLCAnJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZnVsbFByb3BlcnR5TmFtZT8uaW5jbHVkZXMoJ3JldkVudGl0eS4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWU/LnJlcGxhY2UoJ3JldkVudGl0eS4nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bGxQcm9wZXJ0eU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBwYXJhbXNUb0h0dHBQYXJhbXMocGFyYW1zOiBEYXRhTGlzdFBhcmFtcyk6IEh0dHBQYXJhbXMge1xuICAgICAgICBjb25zdCByb3V0ZVBhcmFtcyA9IGRhdGFMaXN0UGFyYW1zVG9VcmxRdWVyeShwYXJhbXMsIG51bGwpO1xuICAgICAgICBsZXQgaHR0cFBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG5cbiAgICAgICAgT2JqZWN0LmVudHJpZXMocm91dGVQYXJhbXMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgaHR0cFBhcmFtcyA9IGh0dHBQYXJhbXMuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIG1hcEl0ZW1zVG9FbnRpdHlDaGFuZ2VzQXJyYXkoZmllbGRWYWx1ZToge1trZXk6IHN0cmluZ106IEFycmF5PEVudGl0eUNoYW5nZUR0bz59KTogQXJyYXk8RW50aXR5UmV2aXNpb25DaGFuZ2VzPiB7XG4gICAgICAgIGNvbnN0IGVudGl0eUNoYW5nZXM6IEVudGl0eVJldmlzaW9uQ2hhbmdlc1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBlYzogRW50aXR5UmV2aXNpb25DaGFuZ2VzID0ge2VudGl0eVR5cGU6IGtleSwgaXRlbXM6IFtdfTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIGZpZWxkVmFsdWVba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2UucmV2VHlwZSA9PT0gUmV2aXNpb25UeXBlRHRvLkFkZCAmJiBjaGFuZ2UuZW50aXR5TmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbTogRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldlR5cGU6IGNoYW5nZS5yZXZUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdncmVlbidcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlLmVudGl0eU5ld1N0YXRlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IChpdGVtW2tleV0gPSB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBlYy5pdGVtcz8ucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBSZXZpc2lvblR5cGVEdG8uRGVsICYmIGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtOiBFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV2VHlwZTogY2hhbmdlLnJldlR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCdcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlLmVudGl0eU9sZFN0YXRlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IChpdGVtW2tleV0gPSB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBlYy5pdGVtcz8ucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBSZXZpc2lvblR5cGVEdG8uTW9kICYmIGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSAmJiBjaGFuZ2UuZW50aXR5TmV3U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbU9sZDogRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldlR5cGU6IGNoYW5nZS5yZXZUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZWQnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbU9sZFtrZXldID0gdmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtTmV3OiBFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV2VHlwZTogY2hhbmdlLnJldlR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2dyZWVuJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5TmV3U3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1OZXdba2V5XSA9IHZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZWMuaXRlbXM/LnB1c2goaXRlbU9sZCk7XG4gICAgICAgICAgICAgICAgICAgIGVjLml0ZW1zPy5wdXNoKGl0ZW1OZXcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVudGl0eUNoYW5nZXMucHVzaChlYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudGl0eUNoYW5nZXM7XG4gICAgfVxufVxuIl19
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { HttpParams } from '@angular/common/http';
|
|
2
|
-
import { DataListParams } from '@mediusinc/mng-commons/core';
|
|
3
|
-
import { TableDescriptorInst } from '@mediusinc/mng-commons/table/api';
|
|
4
|
-
import { EditorDescriptorInst, TableviewDescriptorInst } from '@mediusinc/mng-commons/tableview/api';
|
|
5
|
-
import { EntityChangeDto } from '../api/models/entityChange';
|
|
6
|
-
import { GuiEntityModelDto } from '../api/models/guiEntityModel';
|
|
7
|
-
import { GuiPropertyModelDto } from '../api/models/guiPropertyModel';
|
|
8
|
-
import { EntityRevisionChanges } from '../models/entity-revision-changes.model';
|
|
9
|
-
import { RevEntityWithId } from '../models/revEntityWithId.model';
|
|
10
|
-
export declare class AuditUtil {
|
|
11
|
-
private static _dateRegex;
|
|
12
|
-
static addColumnsFromModel<T>(descriptor: TableDescriptorInst<T>, properties: GuiPropertyModelDto[], modelType?: 'revEntity' | 'entityState' | undefined, addFilters?: boolean, addSorts?: boolean): TableDescriptorInst<T>;
|
|
13
|
-
static getPropertyTitleKey(property: GuiPropertyModelDto, modelType?: 'revEntity' | 'entityState' | undefined): string;
|
|
14
|
-
static addFieldsFromModel<T>(descriptor: EditorDescriptorInst<T>, properties: GuiPropertyModelDto[], modelType?: 'revEntity' | 'entityState'): EditorDescriptorInst<T>;
|
|
15
|
-
static buildDescriptorForEntityRevision(descriptor: TableviewDescriptorInst<RevEntityWithId>, revModel: GuiEntityModelDto, entityModel: GuiEntityModelDto): TableviewDescriptorInst<RevEntityWithId>;
|
|
16
|
-
static findEnum(property: GuiPropertyModelDto): import("@mediusinc/mng-commons/model").EnumDescriptor<any> | undefined;
|
|
17
|
-
static extractPropertyName(fullPropertyName: string | undefined): string | undefined;
|
|
18
|
-
static paramsToHttpParams(params: DataListParams): HttpParams;
|
|
19
|
-
static mapItemsToEntityChangesArray(fieldValue: {
|
|
20
|
-
[key: string]: Array<EntityChangeDto>;
|
|
21
|
-
}): Array<EntityRevisionChanges>;
|
|
22
|
-
}
|