@mediusinc/mng-commons-audit 5.5.0-rc.0 → 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.
Files changed (35) hide show
  1. package/esm2022/lib/api/models/entityChange.mjs +1 -1
  2. package/esm2022/lib/api/models/guiEntityModel.mjs +1 -1
  3. package/esm2022/lib/api/models/guiPropertyModel.mjs +1 -1
  4. package/esm2022/lib/api/models/guiPropertyType.mjs +1 -14
  5. package/esm2022/lib/api/models/guiRelationModel.mjs +1 -12
  6. package/esm2022/lib/api/models/revEntityWithChangesDto.mjs +1 -1
  7. package/esm2022/lib/api/models/revEntityWithStateDto.mjs +1 -1
  8. package/esm2022/lib/api/models/revisionType.mjs +1 -14
  9. package/esm2022/lib/api/services/audit-revisions-api.service.mjs +7 -8
  10. package/esm2022/lib/api/services/audit.service.mjs +4 -4
  11. package/esm2022/lib/components/entity-changes-field/entity-changes-field.component.mjs +33 -22
  12. package/esm2022/lib/components/pages/audit/audit.page.component.mjs +4 -4
  13. package/esm2022/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.mjs +43 -34
  14. package/esm2022/lib/components/pages/revisions/audit-revisions.page.component.mjs +20 -18
  15. package/esm2022/lib/helpers/descriptor.mjs +136 -0
  16. package/esm2022/lib/helpers/entity-changes.mjs +42 -0
  17. package/esm2022/lib/helpers/i18n.mjs +14 -0
  18. package/fesm2022/mediusinc-mng-commons-audit.mjs +300 -341
  19. package/fesm2022/mediusinc-mng-commons-audit.mjs.map +1 -1
  20. package/lib/api/models/entityChange.d.ts +0 -11
  21. package/lib/api/models/guiEntityModel.d.ts +0 -11
  22. package/lib/api/models/guiPropertyModel.d.ts +0 -11
  23. package/lib/api/models/guiRelationModel.d.ts +0 -11
  24. package/lib/api/models/revEntityWithChangesDto.d.ts +0 -11
  25. package/lib/api/models/revEntityWithStateDto.d.ts +0 -11
  26. package/lib/components/entity-changes-field/entity-changes-field.component.d.ts +5 -8
  27. package/lib/components/pages/entity-revisions/audit-entity-revisions.page.component.d.ts +8 -15
  28. package/lib/components/pages/revisions/audit-revisions.page.component.d.ts +5 -7
  29. package/lib/helpers/descriptor.d.ts +10 -0
  30. package/lib/helpers/entity-changes.d.ts +5 -0
  31. package/lib/helpers/i18n.d.ts +3 -0
  32. package/package.json +4 -4
  33. package/version-info.json +5 -5
  34. package/esm2022/lib/utils/audit.util.mjs +0 -227
  35. package/lib/utils/audit.util.d.ts +0 -22
@@ -1,5 +1,4 @@
1
- import { AsyncPipe } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, computed, inject, signal } from '@angular/core';
3
2
  import { toSignal } from '@angular/core/rxjs-interop';
4
3
  import { FormsModule } from '@angular/forms';
5
4
  import { ActivatedRoute, Router } from '@angular/router';
@@ -7,29 +6,30 @@ import { FormlyModule } from '@ngx-formly/core';
7
6
  import { TranslateModule, TranslateService } from '@ngx-translate/core';
8
7
  import { throwError } from 'rxjs';
9
8
  import { map } from 'rxjs/operators';
10
- import { CommonsInternalError } from '@mediusinc/mng-commons/core';
9
+ import { CommonsInternalError, effectWithDeps } from '@mediusinc/mng-commons/core';
11
10
  import { DropdownComponent } from '@mediusinc/mng-commons/form';
12
11
  import { lookupDataProviderWithService } from '@mediusinc/mng-commons/form/api';
13
12
  import { TableviewComponent } from '@mediusinc/mng-commons/tableview';
14
13
  import { actionEditorDetails, tableviewDataProviderWithService, tableviewDescriptor } from '@mediusinc/mng-commons/tableview/api';
15
14
  import { AuditRevisionsApiService } from '../../../api/services/audit-revisions-api.service';
16
15
  import { AuditService } from '../../../api/services/audit.service';
17
- import { AuditUtil } from '../../../utils/audit.util';
16
+ import { auditBuildTableviewEntityRevision } from '../../../helpers/descriptor';
17
+ import { getI18nAuditEntityName } from '../../../helpers/i18n';
18
18
  import * as i0 from "@angular/core";
19
19
  import * as i1 from "@angular/forms";
20
20
  import * as i2 from "@ngx-translate/core";
21
21
  export class AuditEntityRevisionsPageComponent {
22
22
  constructor() {
23
- this.router = inject(Router);
24
- this.route = inject(ActivatedRoute);
25
- this.translate = inject(TranslateService);
26
- this.auditService = inject(AuditService);
27
- this.revModel = toSignal(this.auditService.revModel$);
28
- this.auditModel = toSignal(this.auditService.auditModel$);
29
- this.entityClass = toSignal(this.route.paramMap.pipe(map(pm => pm.get('entityClass') ?? undefined)));
23
+ this.#router = inject(Router);
24
+ this.#route = inject(ActivatedRoute);
25
+ this.#translate = inject(TranslateService);
26
+ this.#auditService = inject(AuditService);
27
+ this.#revModel = toSignal(this.#auditService.revModel$);
28
+ this.#auditModel = toSignal(this.#auditService.auditModel$);
29
+ this.#entityClass = toSignal(this.#route.paramMap.pipe(map(pm => pm.get('entityClass') ?? undefined)));
30
30
  this.selectedRevisionEntity = computed(() => {
31
- const entities = this.auditModel();
32
- const entityClass = this.entityClass();
31
+ const entities = this.#auditModel();
32
+ const entityClass = this.#entityClass();
33
33
  if (entityClass && entities) {
34
34
  for (const e of entities) {
35
35
  if (e.entityName === entityClass) {
@@ -40,20 +40,21 @@ export class AuditEntityRevisionsPageComponent {
40
40
  return undefined;
41
41
  });
42
42
  this.descriptor = computed(() => {
43
- const revModel = this.revModel();
43
+ const revModel = this.#revModel();
44
44
  const selectedRevisionEntity = this.selectedRevisionEntity();
45
45
  if (!revModel || !selectedRevisionEntity?.entityName) {
46
46
  return undefined;
47
47
  }
48
- const desc = tableviewDescriptor({ id: 'mergedId', i18nBase: selectedRevisionEntity.entityName });
49
- AuditUtil.buildDescriptorForEntityRevision(desc, revModel, selectedRevisionEntity);
48
+ const desc = tableviewDescriptor({ id: 'mergedId' });
49
+ auditBuildTableviewEntityRevision(this.#translate, desc, revModel, selectedRevisionEntity);
50
+ desc.table.withTitle(getI18nAuditEntityName(this.#translate, selectedRevisionEntity.entityName));
50
51
  desc.table.withColumnsResizable();
51
52
  desc.table.withCurrentColumnsReorderable();
52
53
  desc.table.withCurrentColumnsToggleable();
53
54
  return desc;
54
55
  });
55
56
  this.dataProvider = computed(() => {
56
- const revModel = this.revModel();
57
+ const revModel = this.#revModel();
57
58
  const selectedRevisionEntity = this.selectedRevisionEntity();
58
59
  if (!revModel || !selectedRevisionEntity?.entityName) {
59
60
  return undefined;
@@ -99,7 +100,7 @@ export class AuditEntityRevisionsPageComponent {
99
100
  .withEditorTitle('pages.entityRevisions.actions.details.editor.title');
100
101
  return [detailsAction];
101
102
  });
102
- this.revisionEntitiesLookupProvider = lookupDataProviderWithService(AuditService).withLookup(() => this.auditService.auditModel$.pipe(map(model => {
103
+ this.revisionEntitiesLookupProvider = lookupDataProviderWithService(AuditService).withLookup(() => this.#auditService.auditModel$.pipe(map(model => {
103
104
  const modelI18n = model;
104
105
  modelI18n.sort((m1, m2) => {
105
106
  if (m1.entityName && m2.entityName) {
@@ -113,35 +114,43 @@ export class AuditEntityRevisionsPageComponent {
113
114
  }
114
115
  });
115
116
  modelI18n.forEach(item => {
116
- const translatedEntityName = this.translate.instant('AuditEntities.' + item.entityName);
117
- item.entityNameI18n = translatedEntityName.includes('AuditEntities.') ? item.entityName : translatedEntityName;
117
+ item.entityNameI18n = item.entityName ? getI18nAuditEntityName(this.#translate, item.entityName) : undefined;
118
118
  });
119
119
  return modelI18n;
120
120
  })));
121
121
  this.showTableview = signal(false);
122
- effect(() => {
123
- const descriptor = this.descriptor();
122
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
123
+ this.#showTableviewEffectRef = effectWithDeps([this.descriptor], descriptor => {
124
124
  if (descriptor) {
125
- setTimeout(() => {
126
- this.showTableview.set(true);
127
- });
125
+ this.showTableview.set(true);
128
126
  }
129
- }, { allowSignalWrites: true });
127
+ });
130
128
  }
129
+ #router;
130
+ #route;
131
+ #translate;
132
+ #auditService;
133
+ #revModel;
134
+ #auditModel;
135
+ #entityClass;
136
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
137
+ #showTableviewEffectRef;
131
138
  onRevisionEntityChange(value) {
132
139
  this.showTableview.set(false);
140
+ const currentUrl = this.#router.url;
141
+ const routePrefix = currentUrl.substring(0, currentUrl.lastIndexOf('/audit/entity-revisions') + '/audit/entity-revisions'.length);
133
142
  if (value) {
134
- this.router.navigate(['/audit/entity-revisions/' + value.entityName]);
143
+ this.#router.navigate([routePrefix, value.entityName]);
135
144
  }
136
145
  else {
137
- this.router.navigate(['/audit/entity-revisions/']);
146
+ this.#router.navigate([routePrefix]);
138
147
  }
139
148
  }
140
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: AuditEntityRevisionsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
141
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.5", type: AuditEntityRevisionsPageComponent, isStandalone: true, selector: "mng-audit-entity-revisions-page", providers: [AuditRevisionsApiService], ngImport: i0, template: "<div class=\"card\">\n <div class=\"field mb-0\">\n <mng-dropdown\n id=\"revisionEntityDropdown\"\n [placeholder]=\"'pages.entityRevisions.dropdown.placeholder' | translate\"\n optionsLabelProperty=\"entityNameI18n\"\n [ngModel]=\"selectedRevisionEntity()\"\n (valueChange)=\"onRevisionEntityChange($event)\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"\n [showClear]=\"true\"></mng-dropdown>\n @if (!selectedRevisionEntity()) {\n <small class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n }\n </div>\n</div>\n@if (showTableview() && descriptor()) {\n <mng-tableview [descriptor]=\"descriptor()!\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n", dependencies: [{ kind: "component", type: DropdownComponent, selector: "mng-dropdown", inputs: ["dataProvider", "options", "optionsTrackProperty", "optionsLabelProperty", "optionsLabelTranslate", "optionsValueProperty", "optionsDisabledProperty", "multiselect", "placeholder", "showClear", "selectFirstItem", "className", "dropdownClassName", "changeValueOnBlur", "loading", "disabled", "allowInput", "appendTo", "inlineSearch", "searchTrim"], outputs: ["valueChange", "blur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: TableviewComponent, selector: "mng-tableview", inputs: ["descriptor", "dataProvider", "actions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
149
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuditEntityRevisionsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
150
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: AuditEntityRevisionsPageComponent, isStandalone: true, selector: "mng-audit-entity-revisions-page", providers: [AuditRevisionsApiService], ngImport: i0, template: "<div class=\"card\">\n <div class=\"field mb-0\">\n <mng-dropdown\n id=\"revisionEntityDropdown\"\n [placeholder]=\"'pages.entityRevisions.dropdown.placeholder' | translate\"\n optionsLabelProperty=\"entityNameI18n\"\n [ngModel]=\"selectedRevisionEntity()\"\n (valueChange)=\"onRevisionEntityChange($event)\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"\n [showClear]=\"true\"></mng-dropdown>\n @if (!selectedRevisionEntity()) {\n <small class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n }\n </div>\n</div>\n@if (showTableview() && descriptor()) {\n <mng-tableview [descriptor]=\"descriptor()!\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n", dependencies: [{ kind: "component", type: DropdownComponent, selector: "mng-dropdown", inputs: ["dataProvider", "options", "optionsTrackProperty", "optionsLabelProperty", "optionsLabelTranslate", "optionsValueProperty", "optionsDisabledProperty", "multiselect", "placeholder", "showClear", "selectFirstItem", "className", "dropdownClassName", "changeValueOnBlur", "loading", "disabled", "allowInput", "appendTo", "inlineSearch", "searchTrim"], outputs: ["valueChange", "blur"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormlyModule }, { kind: "component", type: TableviewComponent, selector: "mng-tableview", inputs: ["descriptor", "dataProvider", "actions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
142
151
  }
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: AuditEntityRevisionsPageComponent, decorators: [{
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuditEntityRevisionsPageComponent, decorators: [{
144
153
  type: Component,
145
- args: [{ standalone: true, selector: 'mng-audit-entity-revisions-page', imports: [DropdownComponent, FormsModule, AsyncPipe, TranslateModule, FormlyModule, TableviewComponent], providers: [AuditRevisionsApiService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"card\">\n <div class=\"field mb-0\">\n <mng-dropdown\n id=\"revisionEntityDropdown\"\n [placeholder]=\"'pages.entityRevisions.dropdown.placeholder' | translate\"\n optionsLabelProperty=\"entityNameI18n\"\n [ngModel]=\"selectedRevisionEntity()\"\n (valueChange)=\"onRevisionEntityChange($event)\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"\n [showClear]=\"true\"></mng-dropdown>\n @if (!selectedRevisionEntity()) {\n <small class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n }\n </div>\n</div>\n@if (showTableview() && descriptor()) {\n <mng-tableview [descriptor]=\"descriptor()!\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n" }]
146
- }], ctorParameters: () => [] });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtZW50aXR5LXJldmlzaW9ucy5wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdlcy9lbnRpdHktcmV2aXNpb25zL2F1ZGl0LWVudGl0eS1yZXZpc2lvbnMucGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnZXMvZW50aXR5LXJldmlzaW9ucy9hdWRpdC1lbnRpdHktcmV2aXNpb25zLnBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV2RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRW5DLE9BQU8sRUFBQyxvQkFBb0IsRUFBVyxNQUFNLDZCQUE2QixDQUFDO0FBQzNFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBQyw2QkFBNkIsRUFBQyxNQUFN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QixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxhQUM1RixDQUFDLHdCQUF3QixDQUFDLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBc3luY1BpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgc2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtGb3JtbHlNb2R1bGV9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHt0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7Q29tbW9uc0ludGVybmFsRXJyb3IsIE51bGxhYmxlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtEcm9wZG93bkNvbXBvbmVudH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtJztcbmltcG9ydCB7bG9va3VwRGF0YVByb3ZpZGVyV2l0aFNlcnZpY2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuaW1wb3J0IHtUYWJsZXZpZXdDb21wb25lbnR9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3JztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvckluc3QsIGFjdGlvbkVkaXRvckRldGFpbHMsIHRhYmxldmlld0RhdGFQcm92aWRlcldpdGhTZXJ2aWNlLCB0YWJsZXZpZXdEZXNjcmlwdG9yfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge0d1aUVudGl0eU1vZGVsRHRvfSBmcm9tICcuLi8uLi8uLi9hcGkvbW9kZWxzL2d1aUVudGl0eU1vZGVsJztcbmltcG9ydCB7QXVkaXRSZXZpc2lvbnNBcGlTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9hcGkvc2VydmljZXMvYXVkaXQtcmV2aXNpb25zLWFwaS5zZXJ2aWNlJztcbmltcG9ydCB7QXVkaXRTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9hcGkvc2VydmljZXMvYXVkaXQuc2VydmljZSc7XG5pbXBvcnQge0d1aUVudGl0eU1vZGVsV2l0aEkxOG59IGZyb20gJy4uLy4uLy4uL21vZGVscy9ndWlFbnRpdHlNb2RlbFdpdGhJMThuLm1vZGVsJztcbmltcG9ydCB7UmV2RW50aXR5V2l0aElkfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmV2RW50aXR5V2l0aElkLm1vZGVsJztcbmltcG9ydCB7QXVkaXRVdGlsfSBmcm9tICcuLi8uLi8uLi91dGlscy9hdWRpdC51dGlsJztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1hdWRpdC1lbnRpdHktcmV2aXNpb25zLXBhZ2UnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdWRpdC1lbnRpdHktcmV2aXNpb25zLnBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtEcm9wZG93bkNvbXBvbmVudCwgRm9ybXNNb2R1bGUsIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBGb3JtbHlNb2R1bGUsIFRhYmxldmlld0NvbXBvbmVudF0sXG4gICAgcHJvdmlkZXJzOiBbQXVkaXRSZXZpc2lvbnNBcGlTZXJ2aWNlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBdWRpdEVudGl0eVJldmlzaW9uc1BhZ2VDb21wb25lbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhdWRpdFNlcnZpY2UgPSBpbmplY3QoQXVkaXRTZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmV2TW9kZWwgPSB0b1NpZ25hbCh0aGlzLmF1ZGl0U2VydmljZS5yZXZNb2RlbCQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYXVkaXRNb2RlbCA9IHRvU2lnbmFsKHRoaXMuYXVkaXRTZXJ2aWNlLmF1ZGl0TW9kZWwkKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVudGl0eUNsYXNzID0gdG9TaWduYWwodGhpcy5yb3V0ZS5wYXJhbU1hcC5waXBlKG1hcChwbSA9PiBwbS5nZXQoJ2VudGl0eUNsYXNzJykgPz8gdW5kZWZpbmVkKSkpO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkUmV2aXNpb25FbnRpdHkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5hdWRpdE1vZGVsKCk7XG4gICAgICAgIGNvbnN0IGVudGl0eUNsYXNzID0gdGhpcy5lbnRpdHlDbGFzcygpO1xuICAgICAgICBpZiAoZW50aXR5Q2xhc3MgJiYgZW50aXRpZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRpdGllcykge1xuICAgICAgICAgICAgICAgIGlmIChlLmVudGl0eU5hbWUgPT09IGVudGl0eUNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHB1YmxpYyByZWFkb25seSBkZXNjcmlwdG9yID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCByZXZNb2RlbCA9IHRoaXMucmV2TW9kZWwoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZXZpc2lvbkVudGl0eSA9IHRoaXMuc2VsZWN0ZWRSZXZpc2lvbkVudGl0eSgpO1xuICAgICAgICBpZiAoIXJldk1vZGVsIHx8ICFzZWxlY3RlZFJldmlzaW9uRW50aXR5Py5lbnRpdHlOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzYyA9IHRhYmxldmlld0Rlc2NyaXB0b3I8UmV2RW50aXR5V2l0aElkPih7aWQ6ICdtZXJnZWRJZCcsIGkxOG5CYXNlOiBzZWxlY3RlZFJldmlzaW9uRW50aXR5LmVudGl0eU5hbWV9KTtcbiAgICAgICAgQXVkaXRVdGlsLmJ1aWxkRGVzY3JpcHRvckZvckVudGl0eVJldmlzaW9uKGRlc2MsIHJldk1vZGVsLCBzZWxlY3RlZFJldmlzaW9uRW50aXR5KTtcbiAgICAgICAgZGVzYy50YWJsZS53aXRoQ29sdW1uc1Jlc2l6YWJsZSgpO1xuICAgICAgICBkZXNjLnRhYmxlLndpdGhDdXJyZW50Q29sdW1uc1Jlb3JkZXJhYmxlKCk7XG4gICAgICAgIGRlc2MudGFibGUud2l0aEN1cnJlbnRDb2x1bW5zVG9nZ2xlYWJsZSgpO1xuXG4gICAgICAgIHJldHVybiBkZXNjO1xuICAgIH0pO1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhUHJvdmlkZXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJldk1vZGVsID0gdGhpcy5yZXZNb2RlbCgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJldmlzaW9uRW50aXR5ID0gdGhpcy5zZWxlY3RlZFJldmlzaW9uRW50aXR5KCk7XG4gICAgICAgIGlmICghcmV2TW9kZWwgfHwgIXNlbGVjdGVkUmV2aXNpb25FbnRpdHk/LmVudGl0eU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnRpdHlOYW1lID0gc2VsZWN0ZWRSZXZpc2lvbkVudGl0eS5lbnRpdHlOYW1lO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICByZXR1cm4gdGFibGV2aWV3RGF0YVByb3ZpZGVyV2l0aFNlcnZpY2U8QXVkaXRSZXZpc2lvbnNBcGlTZXJ2aWNlLCBSZXZFbnRpdHlXaXRoSWQ+KEF1ZGl0UmV2aXNpb25zQXBpU2VydmljZSkud2l0aEdldEFsbCgocGFyYW1zLCBzZXJ2aWNlKSA9PlxuICAgICAgICAgICAgc2VsZWN0ZWRSZXZpc2lvbkVudGl0eS5lbnRpdHlOYW1lXG4gICAgICAgICAgICAgICAgPyBzZXJ2aWNlLmxpc3RSZXZpc2lvbnNXaXRoU3RhdGVGb3JFbnRpdHlUeXBlKHBhcmFtcywgZW50aXR5TmFtZSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2RW50aXR5V2l0aFN0YXRlQW5kSWRMaXN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmV2RW50aXR5V2l0aFN0YXRlIG9mIHJlcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZFbnRpdHlXaXRoU3RhdGVBbmRJZDogUmV2RW50aXR5V2l0aElkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZElkOiByZXZFbnRpdHlXaXRoU3RhdGUucmV2RW50aXR5Py5bJ3JldiddICsgJ18nICsgcmV2RW50aXR5V2l0aFN0YXRlLmVudGl0eVN0YXRlPy5bJ2lkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2VHlwZTogcmV2RW50aXR5V2l0aFN0YXRlLnJldlR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2RW50aXR5OiByZXZFbnRpdHlXaXRoU3RhdGUucmV2RW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlOiByZXZFbnRpdHlXaXRoU3RhdGUuZW50aXR5U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5Q2xhc3NOYW1lOiByZXZFbnRpdHlXaXRoU3RhdGUuZW50aXR5Q2xhc3NOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2RW50aXR5V2l0aFN0YXRlQW5kSWRMaXN0LnB1c2gocmV2RW50aXR5V2l0aFN0YXRlQW5kSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7ZGF0YTogcmV2RW50aXR5V2l0aFN0YXRlQW5kSWRMaXN0LCB0b3RhbENvdW50OiByZXMudG90YWxDb3VudH07XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHRocm93RXJyb3IoKCkgPT4gbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdObyByZXZpc2lvbiBlbnRpdHkgaXMgcHJvdmlkZWQgZm9yIGxpc3QuJykpXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUmV2aXNpb25FbnRpdHkgPSB0aGlzLnNlbGVjdGVkUmV2aXNpb25FbnRpdHkoKTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuZGVzY3JpcHRvcigpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmV2aXNpb25FbnRpdHk/LmVudGl0eU5hbWUgfHwgIWRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRpdHlOYW1lID0gc2VsZWN0ZWRSZXZpc2lvbkVudGl0eS5lbnRpdHlOYW1lO1xuICAgICAgICBjb25zdCBkZXRhaWxzQWN0aW9uID0gYWN0aW9uRWRpdG9yRGV0YWlsczxSZXZFbnRpdHlXaXRoSWQsIEF1ZGl0UmV2aXNpb25zQXBpU2VydmljZT4oZGVzY3JpcHRvci5kZXRhaWxzRWRpdG9yLCBBdWRpdFJldmlzaW9uc0FwaVNlcnZpY2UpXG4gICAgICAgICAgICAud2l0aEZldGNoRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVudGl0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdObyByZXZpc2lvbiBlbnRpdHkgaXMgcHJvdmlkZWQgZm9yIGRldGFpbHMuJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWN0eC5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJ05vIGl0ZW0gaWQgZm9yIHJldmlzaW9uIGVudGl0eSBkZXRhaWxzIGlzIHByb3ZpZGVkLicpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmV2SWQgPSBjdHgucGFyYW1ldGVycy5pdGVtSWQudG9TdHJpbmcoKS5zcGxpdCgnXycpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IGN0eC5wYXJhbWV0ZXJzLml0ZW1JZC50b1N0cmluZygpLnNwbGl0KCdfJylbMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5zZXJ2aWNlSW5zdGFuY2UuZmV0Y2hSZXZpc2lvbnNXaXRoU3RhdGVGb3JFbnRpdHlUeXBlKGVudGl0eU5hbWUsIHJldklkLCBpdGVtSWQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoRWRpdG9yVGl0bGUoJ3BhZ2VzLmVudGl0eVJldmlzaW9ucy5hY3Rpb25zLmRldGFpbHMuZWRpdG9yLnRpdGxlJyk7XG4gICAgICAgIHJldHVybiBbZGV0YWlsc0FjdGlvbl0gYXMgQWN0aW9uRGVzY3JpcHRvckluc3Q8UmV2RW50aXR5V2l0aElkPltdO1xuICAgIH0pO1xuXG4gICAgcHVibGljIHJldmlzaW9uRW50aXRpZXNMb29rdXBQcm92aWRlciA9IGxvb2t1cERhdGFQcm92aWRlcldpdGhTZXJ2aWNlPEF1ZGl0U2VydmljZSwgR3VpRW50aXR5TW9kZWxXaXRoSTE4bj4oQXVkaXRTZXJ2aWNlKS53aXRoTG9va3VwKCgpID0+XG4gICAgICAgIHRoaXMuYXVkaXRTZXJ2aWNlLmF1ZGl0TW9kZWwkLnBpcGUoXG4gICAgICAgICAgICBtYXAobW9kZWwgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGVsSTE4biA9IG1vZGVsIGFzIEd1aUVudGl0eU1vZGVsV2l0aEkxOG5bXTtcbiAgICAgICAgICAgICAgICBtb2RlbEkxOG4uc29ydCgobTEsIG0yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtMS5lbnRpdHlOYW1lICYmIG0yLmVudGl0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtMS5lbnRpdHlOYW1lLmxvY2FsZUNvbXBhcmUobTIuZW50aXR5TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobTEuZW50aXR5TmFtZSAmJiAhbTIuZW50aXR5TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBtb2RlbEkxOG4uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZEVudGl0eU5hbWUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdBdWRpdEVudGl0aWVzLicgKyBpdGVtLmVudGl0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmVudGl0eU5hbWVJMThuID0gdHJhbnNsYXRlZEVudGl0eU5hbWUuaW5jbHVkZXMoJ0F1ZGl0RW50aXRpZXMuJykgPyBpdGVtLmVudGl0eU5hbWUgOiB0cmFuc2xhdGVkRW50aXR5TmFtZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWxJMThuO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICk7XG4gICAgcHVibGljIHNob3dUYWJsZXZpZXcgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yKCk7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dUYWJsZXZpZXcuc2V0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge2FsbG93U2lnbmFsV3JpdGVzOiB0cnVlfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJldmlzaW9uRW50aXR5Q2hhbmdlKHZhbHVlOiBOdWxsYWJsZTxHdWlFbnRpdHlNb2RlbER0bz4pIHtcbiAgICAgICAgdGhpcy5zaG93VGFibGV2aWV3LnNldChmYWxzZSk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXVkaXQvZW50aXR5LXJldmlzaW9ucy8nICsgdmFsdWUuZW50aXR5TmFtZV0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYXVkaXQvZW50aXR5LXJldmlzaW9ucy8nXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmaWVsZCBtYi0wXCI+XG4gICAgICAgIDxtbmctZHJvcGRvd25cbiAgICAgICAgICAgIGlkPVwicmV2aXNpb25FbnRpdHlEcm9wZG93blwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ3BhZ2VzLmVudGl0eVJldmlzaW9ucy5kcm9wZG93bi5wbGFjZWhvbGRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgb3B0aW9uc0xhYmVsUHJvcGVydHk9XCJlbnRpdHlOYW1lSTE4blwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZFJldmlzaW9uRW50aXR5KClcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUmV2aXNpb25FbnRpdHlDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbZGF0YVByb3ZpZGVyXT1cInJldmlzaW9uRW50aXRpZXNMb29rdXBQcm92aWRlclwiXG4gICAgICAgICAgICBbc2hvd0NsZWFyXT1cInRydWVcIj48L21uZy1kcm9wZG93bj5cbiAgICAgICAgQGlmICghc2VsZWN0ZWRSZXZpc2lvbkVudGl0eSgpKSB7XG4gICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJibG9ja1wiPlxuICAgICAgICAgICAgICAgIHt7ICdwYWdlcy5lbnRpdHlSZXZpc2lvbnMuZHJvcGRvd24uaGVscFRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L2Rpdj5cbkBpZiAoc2hvd1RhYmxldmlldygpICYmIGRlc2NyaXB0b3IoKSkge1xuICAgIDxtbmctdGFibGV2aWV3IFtkZXNjcmlwdG9yXT1cImRlc2NyaXB0b3IoKSFcIiBbZGF0YVByb3ZpZGVyXT1cImRhdGFQcm92aWRlcigpXCIgW2FjdGlvbnNdPVwiYWN0aW9ucygpXCI+PC9tbmctdGFibGV2aWV3PlxufVxuIl19
154
+ args: [{ standalone: true, selector: 'mng-audit-entity-revisions-page', imports: [DropdownComponent, FormsModule, TranslateModule, FormlyModule, TableviewComponent], providers: [AuditRevisionsApiService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"card\">\n <div class=\"field mb-0\">\n <mng-dropdown\n id=\"revisionEntityDropdown\"\n [placeholder]=\"'pages.entityRevisions.dropdown.placeholder' | translate\"\n optionsLabelProperty=\"entityNameI18n\"\n [ngModel]=\"selectedRevisionEntity()\"\n (valueChange)=\"onRevisionEntityChange($event)\"\n [dataProvider]=\"revisionEntitiesLookupProvider\"\n [showClear]=\"true\"></mng-dropdown>\n @if (!selectedRevisionEntity()) {\n <small class=\"block\">\n {{ 'pages.entityRevisions.dropdown.helpText' | translate }}\n </small>\n }\n </div>\n</div>\n@if (showTableview() && descriptor()) {\n <mng-tableview [descriptor]=\"descriptor()!\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n" }]
155
+ }] });
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtZW50aXR5LXJldmlzaW9ucy5wYWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9wYWdlcy9lbnRpdHktcmV2aXNpb25zL2F1ZGl0LWVudGl0eS1yZXZpc2lvbnMucGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnZXMvZW50aXR5LXJldmlzaW9ucy9hdWRpdC1lbnRpdHktcmV2aXNpb25zLnBhZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxjQUFjLEVBQUUsTUFBTSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuQyxPQUFPLEVBQUMsb0JBQW9CLEVBQVksY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDM0YsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFDLDZCQUE2QixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1B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QUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0wsQ0FBQzsrR0FsSVEsaUNBQWlDO21HQUFqQyxpQ0FBaUMsOEVBSC9CLENBQUMsd0JBQXdCLENBQUMsMEJDN0J6QyxzMkJBb0JBLDRDRFFjLGlCQUFpQiwrYkFBRSxXQUFXLDhWQUFFLGVBQWUsMkZBQUUsWUFBWSwrQkFBRSxrQkFBa0I7OzRGQUlsRixpQ0FBaUM7a0JBUjdDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLGlDQUFpQyxXQUVsQyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixDQUFDLGFBQ2pGLENBQUMsd0JBQXdCLENBQUMsbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7Rm9ybWx5TW9kdWxlfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7dGhyb3dFcnJvcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0NvbW1vbnNJbnRlcm5hbEVycm9yLCBOdWxsYWJsZSwgZWZmZWN0V2l0aERlcHN9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0Ryb3Bkb3duQ29tcG9uZW50fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0nO1xuaW1wb3J0IHtsb29rdXBEYXRhUHJvdmlkZXJXaXRoU2VydmljZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtL2FwaSc7XG5pbXBvcnQge1RhYmxldmlld0NvbXBvbmVudH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcnO1xuaW1wb3J0IHtBY3Rpb25EZXNjcmlwdG9ySW5zdCwgYWN0aW9uRWRpdG9yRGV0YWlscywgdGFibGV2aWV3RGF0YVByb3ZpZGVyV2l0aFNlcnZpY2UsIHRhYmxldmlld0Rlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7R3VpRW50aXR5TW9kZWxEdG99IGZyb20gJy4uLy4uLy4uL2FwaS9tb2RlbHMvZ3VpRW50aXR5TW9kZWwnO1xuaW1wb3J0IHtBdWRpdFJldmlzaW9uc0FwaVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2FwaS9zZXJ2aWNlcy9hdWRpdC1yZXZpc2lvbnMtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtBdWRpdFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2FwaS9zZXJ2aWNlcy9hdWRpdC5zZXJ2aWNlJztcbmltcG9ydCB7YXVkaXRCdWlsZFRhYmxldmlld0VudGl0eVJldmlzaW9ufSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHtnZXRJMThuQXVkaXRFbnRpdHlOYW1lfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL2kxOG4nO1xuaW1wb3J0IHtHdWlFbnRpdHlNb2RlbFdpdGhJMThufSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ3VpRW50aXR5TW9kZWxXaXRoSTE4bi5tb2RlbCc7XG5pbXBvcnQge1JldkVudGl0eVdpdGhJZH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3JldkVudGl0eVdpdGhJZC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYXVkaXQtZW50aXR5LXJldmlzaW9ucy1wYWdlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtZW50aXR5LXJldmlzaW9ucy5wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbRHJvcGRvd25Db21wb25lbnQsIEZvcm1zTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIEZvcm1seU1vZHVsZSwgVGFibGV2aWV3Q29tcG9uZW50XSxcbiAgICBwcm92aWRlcnM6IFtBdWRpdFJldmlzaW9uc0FwaVNlcnZpY2VdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEF1ZGl0RW50aXR5UmV2aXNpb25zUGFnZUNvbXBvbmVudCB7XG4gICAgcmVhZG9ubHkgI3JvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHJlYWRvbmx5ICNyb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcmVhZG9ubHkgI3RyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICByZWFkb25seSAjYXVkaXRTZXJ2aWNlID0gaW5qZWN0KEF1ZGl0U2VydmljZSk7XG5cbiAgICByZWFkb25seSAjcmV2TW9kZWwgPSB0b1NpZ25hbCh0aGlzLiNhdWRpdFNlcnZpY2UucmV2TW9kZWwkKTtcbiAgICByZWFkb25seSAjYXVkaXRNb2RlbCA9IHRvU2lnbmFsKHRoaXMuI2F1ZGl0U2VydmljZS5hdWRpdE1vZGVsJCk7XG4gICAgcmVhZG9ubHkgI2VudGl0eUNsYXNzID0gdG9TaWduYWwodGhpcy4jcm91dGUucGFyYW1NYXAucGlwZShtYXAocG0gPT4gcG0uZ2V0KCdlbnRpdHlDbGFzcycpID8/IHVuZGVmaW5lZCkpKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFJldmlzaW9uRW50aXR5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuI2F1ZGl0TW9kZWwoKTtcbiAgICAgICAgY29uc3QgZW50aXR5Q2xhc3MgPSB0aGlzLiNlbnRpdHlDbGFzcygpO1xuICAgICAgICBpZiAoZW50aXR5Q2xhc3MgJiYgZW50aXRpZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBlbnRpdGllcykge1xuICAgICAgICAgICAgICAgIGlmIChlLmVudGl0eU5hbWUgPT09IGVudGl0eUNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkZXNjcmlwdG9yID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCByZXZNb2RlbCA9IHRoaXMuI3Jldk1vZGVsKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUmV2aXNpb25FbnRpdHkgPSB0aGlzLnNlbGVjdGVkUmV2aXNpb25FbnRpdHkoKTtcbiAgICAgICAgaWYgKCFyZXZNb2RlbCB8fCAhc2VsZWN0ZWRSZXZpc2lvbkVudGl0eT8uZW50aXR5TmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlc2MgPSB0YWJsZXZpZXdEZXNjcmlwdG9yPFJldkVudGl0eVdpdGhJZD4oe2lkOiAnbWVyZ2VkSWQnfSk7XG4gICAgICAgIGF1ZGl0QnVpbGRUYWJsZXZpZXdFbnRpdHlSZXZpc2lvbih0aGlzLiN0cmFuc2xhdGUsIGRlc2MsIHJldk1vZGVsLCBzZWxlY3RlZFJldmlzaW9uRW50aXR5KTtcbiAgICAgICAgZGVzYy50YWJsZS53aXRoVGl0bGUoZ2V0STE4bkF1ZGl0RW50aXR5TmFtZSh0aGlzLiN0cmFuc2xhdGUsIHNlbGVjdGVkUmV2aXNpb25FbnRpdHkuZW50aXR5TmFtZSkpO1xuICAgICAgICBkZXNjLnRhYmxlLndpdGhDb2x1bW5zUmVzaXphYmxlKCk7XG4gICAgICAgIGRlc2MudGFibGUud2l0aEN1cnJlbnRDb2x1bW5zUmVvcmRlcmFibGUoKTtcbiAgICAgICAgZGVzYy50YWJsZS53aXRoQ3VycmVudENvbHVtbnNUb2dnbGVhYmxlKCk7XG5cbiAgICAgICAgcmV0dXJuIGRlc2M7XG4gICAgfSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhdGFQcm92aWRlciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmV2TW9kZWwgPSB0aGlzLiNyZXZNb2RlbCgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJldmlzaW9uRW50aXR5ID0gdGhpcy5zZWxlY3RlZFJldmlzaW9uRW50aXR5KCk7XG4gICAgICAgIGlmICghcmV2TW9kZWwgfHwgIXNlbGVjdGVkUmV2aXNpb25FbnRpdHk/LmVudGl0eU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnRpdHlOYW1lID0gc2VsZWN0ZWRSZXZpc2lvbkVudGl0eS5lbnRpdHlOYW1lO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICByZXR1cm4gdGFibGV2aWV3RGF0YVByb3ZpZGVyV2l0aFNlcnZpY2U8QXVkaXRSZXZpc2lvbnNBcGlTZXJ2aWNlLCBSZXZFbnRpdHlXaXRoSWQ+KEF1ZGl0UmV2aXNpb25zQXBpU2VydmljZSkud2l0aEdldEFsbCgocGFyYW1zLCBzZXJ2aWNlKSA9PlxuICAgICAgICAgICAgc2VsZWN0ZWRSZXZpc2lvbkVudGl0eS5lbnRpdHlOYW1lXG4gICAgICAgICAgICAgICAgPyBzZXJ2aWNlLmxpc3RSZXZpc2lvbnNXaXRoU3RhdGVGb3JFbnRpdHlUeXBlKHBhcmFtcywgZW50aXR5TmFtZSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICBtYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2RW50aXR5V2l0aFN0YXRlQW5kSWRMaXN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmV2RW50aXR5V2l0aFN0YXRlIG9mIHJlcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZFbnRpdHlXaXRoU3RhdGVBbmRJZDogUmV2RW50aXR5V2l0aElkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlZElkOiByZXZFbnRpdHlXaXRoU3RhdGUucmV2RW50aXR5Py5bJ3JldiddICsgJ18nICsgcmV2RW50aXR5V2l0aFN0YXRlLmVudGl0eVN0YXRlPy5bJ2lkJ10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2VHlwZTogcmV2RW50aXR5V2l0aFN0YXRlLnJldlR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2RW50aXR5OiByZXZFbnRpdHlXaXRoU3RhdGUucmV2RW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eVN0YXRlOiByZXZFbnRpdHlXaXRoU3RhdGUuZW50aXR5U3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5Q2xhc3NOYW1lOiByZXZFbnRpdHlXaXRoU3RhdGUuZW50aXR5Q2xhc3NOYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2RW50aXR5V2l0aFN0YXRlQW5kSWRMaXN0LnB1c2gocmV2RW50aXR5V2l0aFN0YXRlQW5kSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7ZGF0YTogcmV2RW50aXR5V2l0aFN0YXRlQW5kSWRMaXN0LCB0b3RhbENvdW50OiByZXMudG90YWxDb3VudH07XG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHRocm93RXJyb3IoKCkgPT4gbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdObyByZXZpc2lvbiBlbnRpdHkgaXMgcHJvdmlkZWQgZm9yIGxpc3QuJykpXG4gICAgICAgICk7XG4gICAgfSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUmV2aXNpb25FbnRpdHkgPSB0aGlzLnNlbGVjdGVkUmV2aXNpb25FbnRpdHkoKTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuZGVzY3JpcHRvcigpO1xuICAgICAgICBpZiAoIXNlbGVjdGVkUmV2aXNpb25FbnRpdHk/LmVudGl0eU5hbWUgfHwgIWRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRpdHlOYW1lID0gc2VsZWN0ZWRSZXZpc2lvbkVudGl0eS5lbnRpdHlOYW1lO1xuICAgICAgICBjb25zdCBkZXRhaWxzQWN0aW9uID0gYWN0aW9uRWRpdG9yRGV0YWlsczxSZXZFbnRpdHlXaXRoSWQsIEF1ZGl0UmV2aXNpb25zQXBpU2VydmljZT4oZGVzY3JpcHRvci5kZXRhaWxzRWRpdG9yLCBBdWRpdFJldmlzaW9uc0FwaVNlcnZpY2UpXG4gICAgICAgICAgICAud2l0aEZldGNoRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVudGl0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdObyByZXZpc2lvbiBlbnRpdHkgaXMgcHJvdmlkZWQgZm9yIGRldGFpbHMuJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWN0eC5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJ05vIGl0ZW0gaWQgZm9yIHJldmlzaW9uIGVudGl0eSBkZXRhaWxzIGlzIHByb3ZpZGVkLicpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmV2SWQgPSBjdHgucGFyYW1ldGVycy5pdGVtSWQudG9TdHJpbmcoKS5zcGxpdCgnXycpWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IGN0eC5wYXJhbWV0ZXJzLml0ZW1JZC50b1N0cmluZygpLnNwbGl0KCdfJylbMV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5zZXJ2aWNlSW5zdGFuY2UuZmV0Y2hSZXZpc2lvbnNXaXRoU3RhdGVGb3JFbnRpdHlUeXBlKGVudGl0eU5hbWUsIHJldklkLCBpdGVtSWQpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoRWRpdG9yVGl0bGUoJ3BhZ2VzLmVudGl0eVJldmlzaW9ucy5hY3Rpb25zLmRldGFpbHMuZWRpdG9yLnRpdGxlJyk7XG4gICAgICAgIHJldHVybiBbZGV0YWlsc0FjdGlvbl0gYXMgQWN0aW9uRGVzY3JpcHRvckluc3Q8UmV2RW50aXR5V2l0aElkPltdO1xuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIHJldmlzaW9uRW50aXRpZXNMb29rdXBQcm92aWRlciA9IGxvb2t1cERhdGFQcm92aWRlcldpdGhTZXJ2aWNlPEF1ZGl0U2VydmljZSwgR3VpRW50aXR5TW9kZWxXaXRoSTE4bj4oQXVkaXRTZXJ2aWNlKS53aXRoTG9va3VwKCgpID0+XG4gICAgICAgIHRoaXMuI2F1ZGl0U2VydmljZS5hdWRpdE1vZGVsJC5waXBlKFxuICAgICAgICAgICAgbWFwKG1vZGVsID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbEkxOG4gPSBtb2RlbCBhcyBHdWlFbnRpdHlNb2RlbFdpdGhJMThuW107XG4gICAgICAgICAgICAgICAgbW9kZWxJMThuLnNvcnQoKG0xLCBtMikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobTEuZW50aXR5TmFtZSAmJiBtMi5lbnRpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbTEuZW50aXR5TmFtZS5sb2NhbGVDb21wYXJlKG0yLmVudGl0eU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG0xLmVudGl0eU5hbWUgJiYgIW0yLmVudGl0eU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbW9kZWxJMThuLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZW50aXR5TmFtZUkxOG4gPSBpdGVtLmVudGl0eU5hbWUgPyBnZXRJMThuQXVkaXRFbnRpdHlOYW1lKHRoaXMuI3RyYW5zbGF0ZSwgaXRlbS5lbnRpdHlOYW1lKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWxJMThuO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICk7XG4gICAgcHJvdGVjdGVkIHNob3dUYWJsZXZpZXcgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICNzaG93VGFibGV2aWV3RWZmZWN0UmVmID0gZWZmZWN0V2l0aERlcHMoW3RoaXMuZGVzY3JpcHRvcl0sIGRlc2NyaXB0b3IgPT4ge1xuICAgICAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgdGhpcy5zaG93VGFibGV2aWV3LnNldCh0cnVlKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcHJvdGVjdGVkIG9uUmV2aXNpb25FbnRpdHlDaGFuZ2UodmFsdWU6IE51bGxhYmxlPEd1aUVudGl0eU1vZGVsRHRvPikge1xuICAgICAgICB0aGlzLnNob3dUYWJsZXZpZXcuc2V0KGZhbHNlKTtcbiAgICAgICAgY29uc3QgY3VycmVudFVybCA9IHRoaXMuI3JvdXRlci51cmw7XG4gICAgICAgIGNvbnN0IHJvdXRlUHJlZml4ID0gY3VycmVudFVybC5zdWJzdHJpbmcoMCwgY3VycmVudFVybC5sYXN0SW5kZXhPZignL2F1ZGl0L2VudGl0eS1yZXZpc2lvbnMnKSArICcvYXVkaXQvZW50aXR5LXJldmlzaW9ucycubGVuZ3RoKTtcblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuI3JvdXRlci5uYXZpZ2F0ZShbcm91dGVQcmVmaXgsIHZhbHVlLmVudGl0eU5hbWVdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI3JvdXRlci5uYXZpZ2F0ZShbcm91dGVQcmVmaXhdKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XG4gICAgPGRpdiBjbGFzcz1cImZpZWxkIG1iLTBcIj5cbiAgICAgICAgPG1uZy1kcm9wZG93blxuICAgICAgICAgICAgaWQ9XCJyZXZpc2lvbkVudGl0eURyb3Bkb3duXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCIncGFnZXMuZW50aXR5UmV2aXNpb25zLmRyb3Bkb3duLnBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBvcHRpb25zTGFiZWxQcm9wZXJ0eT1cImVudGl0eU5hbWVJMThuXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkUmV2aXNpb25FbnRpdHkoKVwiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25SZXZpc2lvbkVudGl0eUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtkYXRhUHJvdmlkZXJdPVwicmV2aXNpb25FbnRpdGllc0xvb2t1cFByb3ZpZGVyXCJcbiAgICAgICAgICAgIFtzaG93Q2xlYXJdPVwidHJ1ZVwiPjwvbW5nLWRyb3Bkb3duPlxuICAgICAgICBAaWYgKCFzZWxlY3RlZFJldmlzaW9uRW50aXR5KCkpIHtcbiAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImJsb2NrXCI+XG4gICAgICAgICAgICAgICAge3sgJ3BhZ2VzLmVudGl0eVJldmlzaW9ucy5kcm9wZG93bi5oZWxwVGV4dCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvZGl2PlxuQGlmIChzaG93VGFibGV2aWV3KCkgJiYgZGVzY3JpcHRvcigpKSB7XG4gICAgPG1uZy10YWJsZXZpZXcgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvcigpIVwiIFtkYXRhUHJvdmlkZXJdPVwiZGF0YVByb3ZpZGVyKClcIiBbYWN0aW9uc109XCJhY3Rpb25zKClcIj48L21uZy10YWJsZXZpZXc+XG59XG4iXX0=
@@ -1,7 +1,6 @@
1
- import { AsyncPipe, JsonPipe } from '@angular/common';
2
1
  import { ChangeDetectionStrategy, Component, Injector, computed, inject, signal } from '@angular/core';
3
2
  import { toSignal } from '@angular/core/rxjs-interop';
4
- import { RouterOutlet } from '@angular/router';
3
+ import { TranslateService } from '@ngx-translate/core';
5
4
  import { map } from 'rxjs/operators';
6
5
  import { itemIdToDefined } from '@mediusinc/mng-commons/core';
7
6
  import { model } from '@mediusinc/mng-commons/model';
@@ -9,36 +8,35 @@ import { TableviewComponent } from '@mediusinc/mng-commons/tableview';
9
8
  import { TableviewEditorTypeEnum, actionEditorDetails, editorDescriptor, tableviewDataProviderWithService, tableviewDescriptor } from '@mediusinc/mng-commons/tableview/api';
10
9
  import { AuditRevisionsApiService } from '../../../api/services/audit-revisions-api.service';
11
10
  import { AuditService } from '../../../api/services/audit.service';
12
- import { AuditUtil } from '../../../utils/audit.util';
11
+ import { auditAddColumnsFromModel, auditAddFieldsFromModel } from '../../../helpers/descriptor';
13
12
  import { EntityChangesFieldComponent } from '../../entity-changes-field/entity-changes-field.component';
14
13
  import * as i0 from "@angular/core";
15
14
  export class AuditRevisionsPageComponent {
16
15
  constructor() {
17
- this.injector = inject(Injector);
18
- this.auditService = inject(AuditService);
19
- this.revModel = toSignal(this.auditService.revModel$);
20
- this.showTableview = computed(() => this.revModel() != null);
16
+ this.#injector = inject(Injector);
17
+ this.#translate = inject(TranslateService);
18
+ this.#auditService = inject(AuditService);
19
+ this.#revModel = toSignal(this.#auditService.revModel$);
20
+ this.showTableview = computed(() => this.#revModel() != null);
21
21
  this.descriptor = computed(() => {
22
- const revModel = this.revModel();
22
+ const revModel = this.#revModel();
23
23
  if (revModel) {
24
24
  const idProperty = revModel.properties?.filter(prop => prop.isId).map(prop => prop.resolvedPropertyName)[0];
25
25
  const revEntModel = model({ id: 'rev', title: 'rev', i18nBase: 'MngRevEntity' });
26
- if (revModel.entityName)
27
- revEntModel.withI18nBase(revModel.entityName);
28
26
  if (idProperty)
29
27
  revEntModel.withIdPropertyUnsafe(idProperty);
30
28
  const desc = tableviewDescriptor(revEntModel);
31
29
  const detailsDescriptor = editorDescriptor({ i18nBase: 'MngRevEntity', tableviewEditorType: TableviewEditorTypeEnum.Details });
32
30
  detailsDescriptor.model.withIdPropertyUnsafe('revEntity.' + idProperty);
33
31
  if (revModel.properties) {
34
- AuditUtil.addColumnsFromModel(desc.table, revModel.properties);
35
- AuditUtil.addFieldsFromModel(detailsDescriptor, revModel.properties);
32
+ auditAddColumnsFromModel(this.#translate, desc.table, revModel.entityName ?? '', revModel.properties);
33
+ auditAddFieldsFromModel(this.#translate, detailsDescriptor, revModel.entityName ?? '', revModel.properties);
36
34
  }
37
35
  detailsDescriptor
38
36
  .addField('entityNameChangesMap')
39
37
  .asCustomComponent(EntityChangesFieldComponent, {
40
38
  fieldWrappers: ['field-no-label'],
41
- inputs: { injector: this.injector }
39
+ inputs: { injector: this.#injector }
42
40
  })
43
41
  .withDisabled();
44
42
  desc.withDetailsDescriptor(detailsDescriptor); // MngRevEntity is extended by MngRevEntityWithChangesDto, so no real harm here
@@ -61,11 +59,15 @@ export class AuditRevisionsPageComponent {
61
59
  return [detailsAction];
62
60
  });
63
61
  }
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: AuditRevisionsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
65
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.5", type: AuditRevisionsPageComponent, isStandalone: true, selector: "mng-audit-revisions-page", providers: [AuditRevisionsApiService], ngImport: i0, template: "@if (showTableview()) {\n <mng-tableview [descriptor]=\"descriptor()\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n", dependencies: [{ kind: "component", type: TableviewComponent, selector: "mng-tableview", inputs: ["descriptor", "dataProvider", "actions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
62
+ #injector;
63
+ #translate;
64
+ #auditService;
65
+ #revModel;
66
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuditRevisionsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: AuditRevisionsPageComponent, isStandalone: true, selector: "mng-audit-revisions-page", providers: [AuditRevisionsApiService], ngImport: i0, template: "@if (showTableview()) {\n <mng-tableview [descriptor]=\"descriptor()\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n", dependencies: [{ kind: "component", type: TableviewComponent, selector: "mng-tableview", inputs: ["descriptor", "dataProvider", "actions"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
66
68
  }
67
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImport: i0, type: AuditRevisionsPageComponent, decorators: [{
69
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: AuditRevisionsPageComponent, decorators: [{
68
70
  type: Component,
69
- args: [{ standalone: true, selector: 'mng-audit-revisions-page', imports: [TableviewComponent, AsyncPipe, RouterOutlet, JsonPipe], providers: [AuditRevisionsApiService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showTableview()) {\n <mng-tableview [descriptor]=\"descriptor()\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n" }]
71
+ args: [{ standalone: true, selector: 'mng-audit-revisions-page', imports: [TableviewComponent], providers: [AuditRevisionsApiService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (showTableview()) {\n <mng-tableview [descriptor]=\"descriptor()\" [dataProvider]=\"dataProvider()\" [actions]=\"actions()\"></mng-tableview>\n}\n" }]
70
72
  }] });
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtcmV2aXNpb25zLnBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3BhZ2VzL3JldmlzaW9ucy9hdWRpdC1yZXZpc2lvbnMucGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnZXMvcmV2aXNpb25zL2F1ZGl0LXJldmlzaW9ucy5wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBR0gsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsZ0NBQWdDLEVBQ2hDLG1CQUFtQixFQUN0QixNQUFNLHNDQUFzQyxDQUFDO0FBRzlDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQzNGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUdqRSxPQUFPLEVBQUMsU0FBUyxF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Z3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0b3IsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge1JvdXRlck91dGxldH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtpdGVtSWRUb0RlZmluZWR9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge21vZGVsfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcbmltcG9ydCB7VGFibGV2aWV3Q29tcG9uZW50fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldyc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkRlc2NyaXB0b3JJbnN0LFxuICAgIEVkaXRvckRlc2NyaXB0b3JJbnN0LFxuICAgIFRhYmxldmlld0VkaXRvclR5cGVFbnVtLFxuICAgIGFjdGlvbkVkaXRvckRldGFpbHMsXG4gICAgZWRpdG9yRGVzY3JpcHRvcixcbiAgICB0YWJsZXZpZXdEYXRhUHJvdmlkZXJXaXRoU2VydmljZSxcbiAgICB0YWJsZXZpZXdEZXNjcmlwdG9yXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7UmV2RW50aXR5V2l0aENoYW5nZXNEdG99IGZyb20gJy4uLy4uLy4uL2FwaS9tb2RlbHMvcmV2RW50aXR5V2l0aENoYW5nZXNEdG8nO1xuaW1wb3J0IHtBdWRpdFJldmlzaW9uc0FwaVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2FwaS9zZXJ2aWNlcy9hdWRpdC1yZXZpc2lvbnMtYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHtBdWRpdFNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2FwaS9zZXJ2aWNlcy9hdWRpdC5zZXJ2aWNlJztcbmltcG9ydCB7UmV2RW50aXR5RGV0YWlsZWR9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZXYtZW50aXR5LWRldGFpbGVkLm1vZGVsJztcbmltcG9ydCB7UmV2RW50aXR5fSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvcmV2LWVudGl0eS5tb2RlbCc7XG5pbXBvcnQge0F1ZGl0VXRpbH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYXVkaXQudXRpbCc7XG5pbXBvcnQge0VudGl0eUNoYW5nZXNGaWVsZENvbXBvbmVudH0gZnJvbSAnLi4vLi4vZW50aXR5LWNoYW5nZXMtZmllbGQvZW50aXR5LWNoYW5nZXMtZmllbGQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ21uZy1hdWRpdC1yZXZpc2lvbnMtcGFnZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0LXJldmlzaW9ucy5wYWdlLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbVGFibGV2aWV3Q29tcG9uZW50LCBBc3luY1BpcGUsIFJvdXRlck91dGxldCwgSnNvblBpcGVdLFxuICAgIHByb3ZpZGVyczogW0F1ZGl0UmV2aXNpb25zQXBpU2VydmljZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXVkaXRSZXZpc2lvbnNQYWdlQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcbiAgICBwcml2YXRlIGF1ZGl0U2VydmljZSA9IGluamVjdChBdWRpdFNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZXZNb2RlbCA9IHRvU2lnbmFsKHRoaXMuYXVkaXRTZXJ2aWNlLnJldk1vZGVsJCk7XG4gICAgcHVibGljIHNob3dUYWJsZXZpZXcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJldk1vZGVsKCkgIT0gbnVsbCk7XG5cbiAgICBwdWJsaWMgZGVzY3JpcHRvciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcmV2TW9kZWwgPSB0aGlzLnJldk1vZGVsKCk7XG4gICAgICAgIGlmIChyZXZNb2RlbCkge1xuICAgICAgICAgICAgY29uc3QgaWRQcm9wZXJ0eSA9IHJldk1vZGVsLnByb3BlcnRpZXM/LmZpbHRlcihwcm9wID0+IHByb3AuaXNJZCkubWFwKHByb3AgPT4gcHJvcC5yZXNvbHZlZFByb3BlcnR5TmFtZSlbMF07XG5cbiAgICAgICAgICAgIGNvbnN0IHJldkVudE1vZGVsID0gbW9kZWw8UmV2RW50aXR5Pih7aWQ6ICdyZXYnLCB0aXRsZTogJ3JldicsIGkxOG5CYXNlOiAnTW5nUmV2RW50aXR5J30pO1xuICAgICAgICAgICAgaWYgKHJldk1vZGVsLmVudGl0eU5hbWUpIHJldkVudE1vZGVsLndpdGhJMThuQmFzZShyZXZNb2RlbC5lbnRpdHlOYW1lKTtcbiAgICAgICAgICAgIGlmIChpZFByb3BlcnR5KSByZXZFbnRNb2RlbC53aXRoSWRQcm9wZXJ0eVVuc2FmZShpZFByb3BlcnR5KTtcblxuICAgICAgICAgICAgY29uc3QgZGVzYyA9IHRhYmxldmlld0Rlc2NyaXB0b3IocmV2RW50TW9kZWwpO1xuXG4gICAgICAgICAgICBjb25zdCBkZXRhaWxzRGVzY3JpcHRvciA9IGVkaXRvckRlc2NyaXB0b3I8UmV2RW50aXR5V2l0aENoYW5nZXNEdG8+KHtpMThuQmFzZTogJ01uZ1JldkVudGl0eScsIHRhYmxldmlld0VkaXRvclR5cGU6IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkRldGFpbHN9KTtcbiAgICAgICAgICAgIGRldGFpbHNEZXNjcmlwdG9yLm1vZGVsLndpdGhJZFByb3BlcnR5VW5zYWZlKCdyZXZFbnRpdHkuJyArIGlkUHJvcGVydHkpO1xuXG4gICAgICAgICAgICBpZiAocmV2TW9kZWwucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgIEF1ZGl0VXRpbC5hZGRDb2x1bW5zRnJvbU1vZGVsKGRlc2MudGFibGUsIHJldk1vZGVsLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgIEF1ZGl0VXRpbC5hZGRGaWVsZHNGcm9tTW9kZWw8UmV2RW50aXR5V2l0aENoYW5nZXNEdG8+KGRldGFpbHNEZXNjcmlwdG9yLCByZXZNb2RlbC5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGV0YWlsc0Rlc2NyaXB0b3JcbiAgICAgICAgICAgICAgICAuYWRkRmllbGQoJ2VudGl0eU5hbWVDaGFuZ2VzTWFwJylcbiAgICAgICAgICAgICAgICAuYXNDdXN0b21Db21wb25lbnQoRW50aXR5Q2hhbmdlc0ZpZWxkQ29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkV3JhcHBlcnM6IFsnZmllbGQtbm8tbGFiZWwnXSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRzOiB7aW5qZWN0b3I6IHRoaXMuaW5qZWN0b3J9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aERpc2FibGVkKCk7XG5cbiAgICAgICAgICAgIGRlc2Mud2l0aERldGFpbHNEZXNjcmlwdG9yKGRldGFpbHNEZXNjcmlwdG9yIGFzIEVkaXRvckRlc2NyaXB0b3JJbnN0PFJldkVudGl0eT4pOyAvLyBNbmdSZXZFbnRpdHkgaXMgZXh0ZW5kZWQgYnkgTW5nUmV2RW50aXR5V2l0aENoYW5nZXNEdG8sIHNvIG5vIHJlYWwgaGFybSBoZXJlXG5cbiAgICAgICAgICAgIHJldHVybiBkZXNjO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0YWJsZXZpZXdEZXNjcmlwdG9yPFJldkVudGl0eT4oKTtcbiAgICB9KTtcbiAgICBwdWJsaWMgZGF0YVByb3ZpZGVyID0gc2lnbmFsKFxuICAgICAgICB0YWJsZXZpZXdEYXRhUHJvdmlkZXJXaXRoU2VydmljZTxBdWRpdFJldmlzaW9uc0FwaVNlcnZpY2UsIFJldkVudGl0eT4oQXVkaXRSZXZpc2lvbnNBcGlTZXJ2aWNlKS53aXRoR2V0QWxsKChwYXJhbXMsIHNlcnZpY2UpID0+XG4gICAgICAgICAgICBzZXJ2aWNlLmdldFJldmlzaW9uTGlzdChwYXJhbXMpLnBpcGUobWFwKHJlcyA9PiAoe2RhdGE6IHJlcy5kYXRhLCB0b3RhbENvdW50OiByZXMudG90YWxDb3VudH0pKSlcbiAgICAgICAgKVxuICAgICk7XG4gICAgcHVibGljIGFjdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRldGFpbHNBY3Rpb24gPSBhY3Rpb25FZGl0b3JEZXRhaWxzKHRoaXMuZGVzY3JpcHRvcigpLmRldGFpbHNFZGl0b3IsIEF1ZGl0UmV2aXNpb25zQXBpU2VydmljZSkud2l0aEZldGNoRnVuY3Rpb24oY3R4ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjdHguc2VydmljZUluc3RhbmNlLmdldEFsbENoYW5nZXNGb3JSZXZpc2lvbihpdGVtSWRUb0RlZmluZWQoY3R4LnBhcmFtZXRlcnMuaXRlbUlkKSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldkVudGl0eVdpdGhDaGFuZ2VzOiBSZXZFbnRpdHlEZXRhaWxlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldjogY3R4LnBhcmFtZXRlcnMuaXRlbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV2RW50aXR5OiBpdGVtLnJldkVudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWVDaGFuZ2VzTWFwOiBpdGVtLmVudGl0eU5hbWVDaGFuZ2VzTWFwXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXZFbnRpdHlXaXRoQ2hhbmdlcztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIFtkZXRhaWxzQWN0aW9uXSBhcyBBY3Rpb25EZXNjcmlwdG9ySW5zdDxSZXZFbnRpdHk+W107XG4gICAgfSk7XG59XG4iLCJAaWYgKHNob3dUYWJsZXZpZXcoKSkge1xuICAgIDxtbmctdGFibGV2aWV3IFtkZXNjcmlwdG9yXT1cImRlc2NyaXB0b3IoKVwiIFtkYXRhUHJvdmlkZXJdPVwiZGF0YVByb3ZpZGVyKClcIiBbYWN0aW9uc109XCJhY3Rpb25zKClcIj48L21uZy10YWJsZXZpZXc+XG59XG4iXX0=
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtcmV2aXNpb25zLnBhZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL3BhZ2VzL3JldmlzaW9ucy9hdWRpdC1yZXZpc2lvbnMucGFnZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvcGFnZXMvcmV2aXNpb25zL2F1ZGl0LXJldmlzaW9ucy5wYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQzVELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBR0gsdUJBQXVCLEVBQ3ZCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsZ0NBQWdDLEVBQ2hDLG1CQUFtQixFQUN0QixNQUFNLHNDQUFzQyxDQUFDO0FBRzlDLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQzNGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RixPQUFPLEVBQUMs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b250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0b3IsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3RvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge2l0ZW1JZFRvRGVmaW5lZH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7bW9kZWx9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtUYWJsZXZpZXdDb21wb25lbnR9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3JztcbmltcG9ydCB7XG4gICAgQWN0aW9uRGVzY3JpcHRvckluc3QsXG4gICAgRWRpdG9yRGVzY3JpcHRvckluc3QsXG4gICAgVGFibGV2aWV3RWRpdG9yVHlwZUVudW0sXG4gICAgYWN0aW9uRWRpdG9yRGV0YWlscyxcbiAgICBlZGl0b3JEZXNjcmlwdG9yLFxuICAgIHRhYmxldmlld0RhdGFQcm92aWRlcldpdGhTZXJ2aWNlLFxuICAgIHRhYmxldmlld0Rlc2NyaXB0b3Jcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtSZXZFbnRpdHlXaXRoQ2hhbmdlc0R0b30gZnJvbSAnLi4vLi4vLi4vYXBpL21vZGVscy9yZXZFbnRpdHlXaXRoQ2hhbmdlc0R0byc7XG5pbXBvcnQge0F1ZGl0UmV2aXNpb25zQXBpU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL2F1ZGl0LXJldmlzaW9ucy1hcGkuc2VydmljZSc7XG5pbXBvcnQge0F1ZGl0U2VydmljZX0gZnJvbSAnLi4vLi4vLi4vYXBpL3NlcnZpY2VzL2F1ZGl0LnNlcnZpY2UnO1xuaW1wb3J0IHthdWRpdEFkZENvbHVtbnNGcm9tTW9kZWwsIGF1ZGl0QWRkRmllbGRzRnJvbU1vZGVsfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHtSZXZFbnRpdHlEZXRhaWxlZH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Jldi1lbnRpdHktZGV0YWlsZWQubW9kZWwnO1xuaW1wb3J0IHtSZXZFbnRpdHl9IGZyb20gJy4uLy4uLy4uL21vZGVscy9yZXYtZW50aXR5Lm1vZGVsJztcbmltcG9ydCB7RW50aXR5Q2hhbmdlc0ZpZWxkQ29tcG9uZW50fSBmcm9tICcuLi8uLi9lbnRpdHktY2hhbmdlcy1maWVsZC9lbnRpdHktY2hhbmdlcy1maWVsZC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWF1ZGl0LXJldmlzaW9ucy1wYWdlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXVkaXQtcmV2aXNpb25zLnBhZ2UuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtUYWJsZXZpZXdDb21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW0F1ZGl0UmV2aXNpb25zQXBpU2VydmljZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQXVkaXRSZXZpc2lvbnNQYWdlQ29tcG9uZW50IHtcbiAgICByZWFkb25seSAjaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHJlYWRvbmx5ICN0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcmVhZG9ubHkgI2F1ZGl0U2VydmljZSA9IGluamVjdChBdWRpdFNlcnZpY2UpO1xuXG4gICAgcmVhZG9ubHkgI3Jldk1vZGVsID0gdG9TaWduYWwodGhpcy4jYXVkaXRTZXJ2aWNlLnJldk1vZGVsJCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dUYWJsZXZpZXcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiNyZXZNb2RlbCgpICE9IG51bGwpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc2NyaXB0b3IgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJldk1vZGVsID0gdGhpcy4jcmV2TW9kZWwoKTtcbiAgICAgICAgaWYgKHJldk1vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBpZFByb3BlcnR5ID0gcmV2TW9kZWwucHJvcGVydGllcz8uZmlsdGVyKHByb3AgPT4gcHJvcC5pc0lkKS5tYXAocHJvcCA9PiBwcm9wLnJlc29sdmVkUHJvcGVydHlOYW1lKVswXTtcblxuICAgICAgICAgICAgY29uc3QgcmV2RW50TW9kZWwgPSBtb2RlbDxSZXZFbnRpdHk+KHtpZDogJ3JldicsIHRpdGxlOiAncmV2JywgaTE4bkJhc2U6ICdNbmdSZXZFbnRpdHknfSk7XG4gICAgICAgICAgICBpZiAoaWRQcm9wZXJ0eSkgcmV2RW50TW9kZWwud2l0aElkUHJvcGVydHlVbnNhZmUoaWRQcm9wZXJ0eSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSB0YWJsZXZpZXdEZXNjcmlwdG9yKHJldkVudE1vZGVsKTtcblxuICAgICAgICAgICAgY29uc3QgZGV0YWlsc0Rlc2NyaXB0b3IgPSBlZGl0b3JEZXNjcmlwdG9yPFJldkVudGl0eVdpdGhDaGFuZ2VzRHRvPih7aTE4bkJhc2U6ICdNbmdSZXZFbnRpdHknLCB0YWJsZXZpZXdFZGl0b3JUeXBlOiBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzfSk7XG4gICAgICAgICAgICBkZXRhaWxzRGVzY3JpcHRvci5tb2RlbC53aXRoSWRQcm9wZXJ0eVVuc2FmZSgncmV2RW50aXR5LicgKyBpZFByb3BlcnR5KTtcblxuICAgICAgICAgICAgaWYgKHJldk1vZGVsLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICBhdWRpdEFkZENvbHVtbnNGcm9tTW9kZWwodGhpcy4jdHJhbnNsYXRlLCBkZXNjLnRhYmxlLCByZXZNb2RlbC5lbnRpdHlOYW1lID8/ICcnLCByZXZNb2RlbC5wcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICBhdWRpdEFkZEZpZWxkc0Zyb21Nb2RlbDxSZXZFbnRpdHlXaXRoQ2hhbmdlc0R0bz4odGhpcy4jdHJhbnNsYXRlLCBkZXRhaWxzRGVzY3JpcHRvciwgcmV2TW9kZWwuZW50aXR5TmFtZSA/PyAnJywgcmV2TW9kZWwucHJvcGVydGllcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRldGFpbHNEZXNjcmlwdG9yXG4gICAgICAgICAgICAgICAgLmFkZEZpZWxkKCdlbnRpdHlOYW1lQ2hhbmdlc01hcCcpXG4gICAgICAgICAgICAgICAgLmFzQ3VzdG9tQ29tcG9uZW50KEVudGl0eUNoYW5nZXNGaWVsZENvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFdyYXBwZXJzOiBbJ2ZpZWxkLW5vLWxhYmVsJ10sXG4gICAgICAgICAgICAgICAgICAgIGlucHV0czoge2luamVjdG9yOiB0aGlzLiNpbmplY3Rvcn1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoRGlzYWJsZWQoKTtcblxuICAgICAgICAgICAgZGVzYy53aXRoRGV0YWlsc0Rlc2NyaXB0b3IoZGV0YWlsc0Rlc2NyaXB0b3IgYXMgRWRpdG9yRGVzY3JpcHRvckluc3Q8UmV2RW50aXR5Pik7IC8vIE1uZ1JldkVudGl0eSBpcyBleHRlbmRlZCBieSBNbmdSZXZFbnRpdHlXaXRoQ2hhbmdlc0R0bywgc28gbm8gcmVhbCBoYXJtIGhlcmVcblxuICAgICAgICAgICAgcmV0dXJuIGRlc2M7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhYmxldmlld0Rlc2NyaXB0b3I8UmV2RW50aXR5PigpO1xuICAgIH0pO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkYXRhUHJvdmlkZXIgPSBzaWduYWwoXG4gICAgICAgIHRhYmxldmlld0RhdGFQcm92aWRlcldpdGhTZXJ2aWNlPEF1ZGl0UmV2aXNpb25zQXBpU2VydmljZSwgUmV2RW50aXR5PihBdWRpdFJldmlzaW9uc0FwaVNlcnZpY2UpLndpdGhHZXRBbGwoKHBhcmFtcywgc2VydmljZSkgPT5cbiAgICAgICAgICAgIHNlcnZpY2UuZ2V0UmV2aXNpb25MaXN0KHBhcmFtcykucGlwZShtYXAocmVzID0+ICh7ZGF0YTogcmVzLmRhdGEsIHRvdGFsQ291bnQ6IHJlcy50b3RhbENvdW50fSkpKVxuICAgICAgICApXG4gICAgKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWN0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGV0YWlsc0FjdGlvbiA9IGFjdGlvbkVkaXRvckRldGFpbHModGhpcy5kZXNjcmlwdG9yKCkuZGV0YWlsc0VkaXRvciwgQXVkaXRSZXZpc2lvbnNBcGlTZXJ2aWNlKS53aXRoRmV0Y2hGdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN0eC5zZXJ2aWNlSW5zdGFuY2UuZ2V0QWxsQ2hhbmdlc0ZvclJldmlzaW9uKGl0ZW1JZFRvRGVmaW5lZChjdHgucGFyYW1ldGVycy5pdGVtSWQpKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2RW50aXR5V2l0aENoYW5nZXM6IFJldkVudGl0eURldGFpbGVkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV2OiBjdHgucGFyYW1ldGVycy5pdGVtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXZFbnRpdHk6IGl0ZW0ucmV2RW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZUNoYW5nZXNNYXA6IGl0ZW0uZW50aXR5TmFtZUNoYW5nZXNNYXBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldkVudGl0eVdpdGhDaGFuZ2VzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gW2RldGFpbHNBY3Rpb25dIGFzIEFjdGlvbkRlc2NyaXB0b3JJbnN0PFJldkVudGl0eT5bXTtcbiAgICB9KTtcbn1cbiIsIkBpZiAoc2hvd1RhYmxldmlldygpKSB7XG4gICAgPG1uZy10YWJsZXZpZXcgW2Rlc2NyaXB0b3JdPVwiZGVzY3JpcHRvcigpXCIgW2RhdGFQcm92aWRlcl09XCJkYXRhUHJvdmlkZXIoKVwiIFthY3Rpb25zXT1cImFjdGlvbnMoKVwiPjwvbW5nLXRhYmxldmlldz5cbn1cbiJdfQ==
@@ -0,0 +1,136 @@
1
+ import { lookupDataProvider } from '@mediusinc/mng-commons/form/api';
2
+ import { enumModelGeneric } from '@mediusinc/mng-commons/model';
3
+ import { GuiPropertyTypeDto } from '../api/models/guiPropertyType';
4
+ import { revisionTypeEnum } from '../api/models/revisionType';
5
+ import { getI18nAuditEntityProperty } from '../helpers/i18n';
6
+ export function auditAddColumnsFromModel(translate, descriptor, entityName, properties, modelType = undefined, addFilters = true, addSorts = true) {
7
+ for (const property of properties) {
8
+ if (!property.resolvedPropertyName) {
9
+ continue;
10
+ }
11
+ const isEnum = property.propertyType === GuiPropertyTypeDto.Enum;
12
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
+ let column = null;
14
+ if (isEnum) {
15
+ if (!property.possibleEnumValues) {
16
+ continue;
17
+ }
18
+ const enumModel = getEnumModel(property);
19
+ if (enumModel) {
20
+ column = descriptor.addColumnEnum(property.resolvedPropertyName, enumModel);
21
+ if (addFilters) {
22
+ descriptor.addFilterLookupEnum(column.property, enumModel, property.possibleEnumValues);
23
+ }
24
+ }
25
+ else {
26
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName);
27
+ if (addFilters) {
28
+ descriptor.addFilterLookupUnsafe(column.property, lookupDataProvider().withLookup(() => property.possibleEnumValues ?? []));
29
+ }
30
+ }
31
+ }
32
+ else if (property.propertyType === GuiPropertyTypeDto.Number) {
33
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asNumber();
34
+ }
35
+ else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
36
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asBoolean();
37
+ }
38
+ else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
39
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy');
40
+ }
41
+ else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
42
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).asDate('dd. MM yyyy HH:mm');
43
+ }
44
+ else {
45
+ // string / wildcard
46
+ column = descriptor.addColumnUnsafe(property.resolvedPropertyName).withTitle(getI18nAuditEntityProperty(translate, entityName, property.propertyName ?? '', modelType));
47
+ }
48
+ if (modelType) {
49
+ column.withGetter((value, item) => item?.[modelType]?.[property.resolvedPropertyName]);
50
+ }
51
+ column.withTitle(getI18nAuditEntityProperty(translate, entityName, property.propertyName ?? '', modelType));
52
+ if (!isEnum && addFilters) {
53
+ descriptor.addFilterFromColumnDescriptorUnsafe(column).withTitle(column.title ?? '');
54
+ }
55
+ if (addSorts) {
56
+ descriptor.withSortUnsafe(column.property);
57
+ }
58
+ }
59
+ return descriptor;
60
+ }
61
+ export function auditAddFieldsFromModel(translate, descriptor, entityName, properties, modelType = 'revEntity') {
62
+ for (const property of properties) {
63
+ if (!property.resolvedPropertyName) {
64
+ continue;
65
+ }
66
+ const fieldPrepend = `${modelType}.`;
67
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
68
+ let field;
69
+ if (property.propertyType === GuiPropertyTypeDto.Enum) {
70
+ const enumModel = getEnumModel(property);
71
+ if (enumModel) {
72
+ if (!property.possibleEnumValues) {
73
+ continue;
74
+ }
75
+ field = descriptor.addFieldLookupEnum((fieldPrepend + property.resolvedPropertyName), enumModel, property.possibleEnumValues);
76
+ }
77
+ else {
78
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName);
79
+ }
80
+ }
81
+ else if (property.propertyType === GuiPropertyTypeDto.Number) {
82
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).asNumber();
83
+ }
84
+ else if (property.propertyType === GuiPropertyTypeDto.Boolean) {
85
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName);
86
+ }
87
+ else if (property.propertyType === GuiPropertyTypeDto.LocalDate) {
88
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).asDatePicker({ format: 'dd. MMM yyyy' });
89
+ }
90
+ else if (property.propertyType === GuiPropertyTypeDto.OffsetDateTime) {
91
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName).asDatePicker({
92
+ format: 'dd. MM yy',
93
+ showTime: true,
94
+ showSeconds: false
95
+ });
96
+ }
97
+ else {
98
+ // string / wildcard
99
+ field = descriptor.addFieldUnsafe(fieldPrepend + property.resolvedPropertyName);
100
+ }
101
+ field.withLabel(getI18nAuditEntityProperty(translate, entityName, property.propertyName ?? '', modelType)).withDisabled();
102
+ }
103
+ return descriptor;
104
+ }
105
+ export function auditBuildTableviewEntityRevision(translate, descriptor, revModel, entityModel) {
106
+ const revType = descriptor.addColumnEnum('revType', revisionTypeEnum).withTitle('MngEntityRevisionChangeState.properties.revType');
107
+ descriptor.addFieldLookupEnum('revType', revisionTypeEnum).withLabel('MngEntityRevisionChangeState.properties.revType');
108
+ descriptor.table.addFilterFromColumnDescriptorUnsafe(revType);
109
+ if (revModel.properties) {
110
+ auditAddColumnsFromModel(translate, descriptor.table, revModel.entityName ?? '', revModel.properties, 'revEntity');
111
+ auditAddFieldsFromModel(translate, descriptor.detailsEditor, revModel.entityName ?? '', revModel.properties, 'revEntity');
112
+ }
113
+ if (entityModel.properties) {
114
+ auditAddColumnsFromModel(translate, descriptor.table, entityModel.entityName ?? '', entityModel.properties, 'entityState');
115
+ auditAddFieldsFromModel(translate, descriptor.detailsEditor, entityModel.entityName ?? '', entityModel.properties, 'entityState');
116
+ }
117
+ return descriptor;
118
+ }
119
+ export function getEnumModel(property) {
120
+ if (Array.isArray(property.possibleEnumValues)) {
121
+ const enumType = property.possibleEnumValues?.reduce((acc, v) => {
122
+ const constName = v
123
+ .split('_')
124
+ .map(s => (s.length > 1 ? s.substring(0, 1).toUpperCase() + s.substring(1).toLowerCase() : s))
125
+ .join('');
126
+ if (constName !== v) {
127
+ acc[constName] = v;
128
+ }
129
+ acc[v] = constName;
130
+ return acc;
131
+ }, {});
132
+ return enumModelGeneric(enumType, property.enumClassSimpleName);
133
+ }
134
+ return null;
135
+ }
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvaGVscGVycy9kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBTTlELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRzNELE1BQU0sVUFBVSx3QkFBd0IsQ0FDcEMsU0FBMkIsRUFDM0IsVUFBa0MsRUFDbEMsVUFBa0IsRUFDbEIsVUFBaUMsRUFDakMsWUFBcUQsU0FBUyxFQUM5RCxVQUFVLEdBQUcsSUFBSSxFQUNqQixRQUFRLEdBQUcsSUFBSTtJQUVmLEtBQUssTUFBTSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2pDLFNBQVM7UUFDYixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLFlBQVksS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDakUsOERBQThEO1FBQzlELElBQUksTUFBTSxHQUFvQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDL0IsU0FBUztZQUNiLENBQUM7WUFFRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekMsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDWixNQUFNLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENB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UCxNQUFNLFNBQVMsR0FBRyxDQUFDO2lCQUNkLEtBQUssQ0FBQyxHQUFHLENBQUM7aUJBQ1YsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzdGLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNkLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQixHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQ25CLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxFQUNTLEVBQUUsQ0FDZixDQUFDO1FBQ0YsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQge0VudW1UeXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtsb29rdXBEYXRhUHJvdmlkZXJ9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuaW1wb3J0IHtlbnVtTW9kZWxHZW5lcmljfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcbmltcG9ydCB7Q29sdW1uRGVzY3JpcHRvciwgVGFibGVEZXNjcmlwdG9ySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuaW1wb3J0IHtBRmllbGREZXNjcmlwdG9yLCBFZGl0b3JEZXNjcmlwdG9ySW5zdCwgVGFibGV2aWV3RGVzY3JpcHRvckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7R3VpRW50aXR5TW9kZWxEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvZ3VpRW50aXR5TW9kZWwnO1xuaW1wb3J0IHtHdWlQcm9wZXJ0eU1vZGVsRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2d1aVByb3BlcnR5TW9kZWwnO1xuaW1wb3J0IHtHdWlQcm9wZXJ0eVR5cGVEdG99IGZyb20gJy4uL2FwaS9tb2RlbHMvZ3VpUHJvcGVydHlUeXBlJztcbmltcG9ydCB7cmV2aXNpb25UeXBlRW51bX0gZnJvbSAnLi4vYXBpL21vZGVscy9yZXZpc2lvblR5cGUnO1xuaW1wb3J0IHtnZXRJMThuQXVkaXRFbnRpdHlQcm9wZXJ0eX0gZnJvbSAnLi4vaGVscGVycy9pMThuJztcbmltcG9ydCB7UmV2RW50aXR5V2l0aElkfSBmcm9tICcuLi9tb2RlbHMvcmV2RW50aXR5V2l0aElkLm1vZGVsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0QWRkQ29sdW1uc0Zyb21Nb2RlbDxUPihcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgZGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxUPixcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgcHJvcGVydGllczogR3VpUHJvcGVydHlNb2RlbER0b1tdLFxuICAgIG1vZGVsVHlwZTogJ3JldkVudGl0eScgfCAnZW50aXR5U3RhdGUnIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIGFkZEZpbHRlcnMgPSB0cnVlLFxuICAgIGFkZFNvcnRzID0gdHJ1ZVxuKTogVGFibGVEZXNjcmlwdG9ySW5zdDxUPiB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGlmICghcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNFbnVtID0gcHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGVEdG8uRW51bTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgbGV0IGNvbHVtbjogQ29sdW1uRGVzY3JpcHRvcjxhbnksIFQ+IHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGlmIChpc0VudW0pIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVudW1Nb2RlbCA9IGdldEVudW1Nb2RlbChwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoZW51bU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5FbnVtKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lIGFzIGtleW9mIFQsIGVudW1Nb2RlbCk7XG4gICAgICAgICAgICAgICAgaWYgKGFkZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWx0ZXJMb29rdXBFbnVtKGNvbHVtbi5wcm9wZXJ0eSBhcyBrZXlvZiBULCBlbnVtTW9kZWwsIHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBkZXNjcmlwdG9yLmFkZENvbHVtblVuc2FmZShwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGFkZEZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWx0ZXJMb29rdXBVbnNhZmUoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4ucHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXI8c3RyaW5nPigpLndpdGhMb29rdXAoKCkgPT4gcHJvcGVydHkucG9zc2libGVFbnVtVmFsdWVzID8/IFtdKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZUR0by5OdW1iZXIpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc051bWJlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLkJvb2xlYW4pIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0Jvb2xlYW4oKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUgPT09IEd1aVByb3BlcnR5VHlwZUR0by5Mb2NhbERhdGUpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0RhdGUoJ2RkLiBNTSB5eXl5Jyk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGVEdG8uT2Zmc2V0RGF0ZVRpbWUpIHtcbiAgICAgICAgICAgIGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uVW5zYWZlKHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc0RhdGUoJ2RkLiBNTSB5eXl5IEhIOm1tJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBzdHJpbmcgLyB3aWxkY2FyZFxuICAgICAgICAgICAgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW5VbnNhZmUocHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLndpdGhUaXRsZShnZXRJMThuQXVkaXRFbnRpdHlQcm9wZXJ0eSh0cmFuc2xhdGUsIGVudGl0eU5hbWUsIHByb3BlcnR5LnByb3BlcnR5TmFtZSA/PyAnJywgbW9kZWxUeXBlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWxUeXBlKSB7XG4gICAgICAgICAgICBjb2x1bW4ud2l0aEdldHRlcigodmFsdWUsIGl0ZW0pID0+IGl0ZW0/Llttb2RlbFR5cGUgYXMga2V5b2Ygb2JqZWN0XT8uW3Byb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lIGFzIGtleW9mIG9iamVjdF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29sdW1uLndpdGhUaXRsZShnZXRJMThuQXVkaXRFbnRpdHlQcm9wZXJ0eSh0cmFuc2xhdGUsIGVudGl0eU5hbWUsIHByb3BlcnR5LnByb3BlcnR5TmFtZSA/PyAnJywgbW9kZWxUeXBlKSk7XG5cbiAgICAgICAgaWYgKCFpc0VudW0gJiYgYWRkRmlsdGVycykge1xuICAgICAgICAgICAgZGVzY3JpcHRvci5hZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZShjb2x1bW4pLndpdGhUaXRsZShjb2x1bW4udGl0bGUgPz8gJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZGRTb3J0cykge1xuICAgICAgICAgICAgZGVzY3JpcHRvci53aXRoU29ydFVuc2FmZShjb2x1bW4ucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZXNjcmlwdG9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRBZGRGaWVsZHNGcm9tTW9kZWw8VD4oXG4gICAgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIGRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3JJbnN0PFQ+LFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBwcm9wZXJ0aWVzOiBHdWlQcm9wZXJ0eU1vZGVsRHRvW10sXG4gICAgbW9kZWxUeXBlOiAncmV2RW50aXR5JyB8ICdlbnRpdHlTdGF0ZScgPSAncmV2RW50aXR5J1xuKTogRWRpdG9yRGVzY3JpcHRvckluc3Q8VD4ge1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgb2YgcHJvcGVydGllcykge1xuICAgICAgICBpZiAoIXByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpZWxkUHJlcGVuZCA9IGAke21vZGVsVHlwZX0uYDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgbGV0IGZpZWxkOiBBRmllbGREZXNjcmlwdG9yPGFueSwgYW55PjtcblxuICAgICAgICBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGVEdG8uRW51bSkge1xuICAgICAgICAgICAgY29uc3QgZW51bU1vZGVsID0gZ2V0RW51bU1vZGVsKHByb3BlcnR5KTtcbiAgICAgICAgICAgIGlmIChlbnVtTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmaWVsZCA9IGRlc2NyaXB0b3IuYWRkRmllbGRMb29rdXBFbnVtKChmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSkgYXMga2V5b2YgVCwgZW51bU1vZGVsLCBwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGRlc2NyaXB0b3IuYWRkRmllbGRVbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLk51bWJlcikge1xuICAgICAgICAgICAgZmllbGQgPSBkZXNjcmlwdG9yLmFkZEZpZWxkVW5zYWZlKGZpZWxkUHJlcGVuZCArIHByb3BlcnR5LnJlc29sdmVkUHJvcGVydHlOYW1lKS5hc051bWJlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLkJvb2xlYW4pIHtcbiAgICAgICAgICAgIGZpZWxkID0gZGVzY3JpcHRvci5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHkucHJvcGVydHlUeXBlID09PSBHdWlQcm9wZXJ0eVR5cGVEdG8uTG9jYWxEYXRlKSB7XG4gICAgICAgICAgICBmaWVsZCA9IGRlc2NyaXB0b3IuYWRkRmllbGRVbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLmFzRGF0ZVBpY2tlcih7Zm9ybWF0OiAnZGQuIE1NTSB5eXl5J30pO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BlcnR5LnByb3BlcnR5VHlwZSA9PT0gR3VpUHJvcGVydHlUeXBlRHRvLk9mZnNldERhdGVUaW1lKSB7XG4gICAgICAgICAgICBmaWVsZCA9IGRlc2NyaXB0b3IuYWRkRmllbGRVbnNhZmUoZmllbGRQcmVwZW5kICsgcHJvcGVydHkucmVzb2x2ZWRQcm9wZXJ0eU5hbWUpLmFzRGF0ZVBpY2tlcih7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiAnZGQuIE1NIHl5JyxcbiAgICAgICAgICAgICAgICBzaG93VGltZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzaG93U2Vjb25kczogZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RyaW5nIC8gd2lsZGNhcmRcbiAgICAgICAgICAgIGZpZWxkID0gZGVzY3JpcHRvci5hZGRGaWVsZFVuc2FmZShmaWVsZFByZXBlbmQgKyBwcm9wZXJ0eS5yZXNvbHZlZFByb3BlcnR5TmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmaWVsZC53aXRoTGFiZWwoZ2V0STE4bkF1ZGl0RW50aXR5UHJvcGVydHkodHJhbnNsYXRlLCBlbnRpdHlOYW1lLCBwcm9wZXJ0eS5wcm9wZXJ0eU5hbWUgPz8gJycsIG1vZGVsVHlwZSkpLndpdGhEaXNhYmxlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0QnVpbGRUYWJsZXZpZXdFbnRpdHlSZXZpc2lvbihcbiAgICB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8UmV2RW50aXR5V2l0aElkPixcbiAgICByZXZNb2RlbDogR3VpRW50aXR5TW9kZWxEdG8sXG4gICAgZW50aXR5TW9kZWw6IEd1aUVudGl0eU1vZGVsRHRvXG4pOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxSZXZFbnRpdHlXaXRoSWQ+IHtcbiAgICBjb25zdCByZXZUeXBlID0gZGVzY3JpcHRvci5hZGRDb2x1bW5FbnVtKCdyZXZUeXBlJywgcmV2aXNpb25UeXBlRW51bSkud2l0aFRpdGxlKCdNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlLnByb3BlcnRpZXMucmV2VHlwZScpO1xuICAgIGRlc2NyaXB0b3IuYWRkRmllbGRMb29rdXBFbnVtKCdyZXZUeXBlJywgcmV2aXNpb25UeXBlRW51bSkud2l0aExhYmVsKCdNbmdFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlLnByb3BlcnRpZXMucmV2VHlwZScpO1xuXG4gICAgZGVzY3JpcHRvci50YWJsZS5hZGRGaWx0ZXJGcm9tQ29sdW1uRGVzY3JpcHRvclVuc2FmZShyZXZUeXBlKTtcblxuICAgIGlmIChyZXZNb2RlbC5wcm9wZXJ0aWVzKSB7XG4gICAgICAgIGF1ZGl0QWRkQ29sdW1uc0Zyb21Nb2RlbCh0cmFuc2xhdGUsIGRlc2NyaXB0b3IudGFibGUsIHJldk1vZGVsLmVudGl0eU5hbWUgPz8gJycsIHJldk1vZGVsLnByb3BlcnRpZXMsICdyZXZFbnRpdHknKTtcbiAgICAgICAgYXVkaXRBZGRGaWVsZHNGcm9tTW9kZWwodHJhbnNsYXRlLCBkZXNjcmlwdG9yLmRldGFpbHNFZGl0b3IsIHJldk1vZGVsLmVudGl0eU5hbWUgPz8gJycsIHJldk1vZGVsLnByb3BlcnRpZXMsICdyZXZFbnRpdHknKTtcbiAgICB9XG4gICAgaWYgKGVudGl0eU1vZGVsLnByb3BlcnRpZXMpIHtcbiAgICAgICAgYXVkaXRBZGRDb2x1bW5zRnJvbU1vZGVsKHRyYW5zbGF0ZSwgZGVzY3JpcHRvci50YWJsZSwgZW50aXR5TW9kZWwuZW50aXR5TmFtZSA/PyAnJywgZW50aXR5TW9kZWwucHJvcGVydGllcywgJ2VudGl0eVN0YXRlJyk7XG4gICAgICAgIGF1ZGl0QWRkRmllbGRzRnJvbU1vZGVsKHRyYW5zbGF0ZSwgZGVzY3JpcHRvci5kZXRhaWxzRWRpdG9yLCBlbnRpdHlNb2RlbC5lbnRpdHlOYW1lID8/ICcnLCBlbnRpdHlNb2RlbC5wcm9wZXJ0aWVzLCAnZW50aXR5U3RhdGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1Nb2RlbChwcm9wZXJ0eTogR3VpUHJvcGVydHlNb2RlbER0bykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5LnBvc3NpYmxlRW51bVZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgZW51bVR5cGUgPSBwcm9wZXJ0eS5wb3NzaWJsZUVudW1WYWx1ZXM/LnJlZHVjZShcbiAgICAgICAgICAgIChhY2MsIHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25zdE5hbWUgPSB2XG4gICAgICAgICAgICAgICAgICAgIC5zcGxpdCgnXycpXG4gICAgICAgICAgICAgICAgICAgIC5tYXAocyA9PiAocy5sZW5ndGggPiAxID8gcy5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKSArIHMuc3Vic3RyaW5nKDEpLnRvTG93ZXJDYXNlKCkgOiBzKSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIGlmIChjb25zdE5hbWUgIT09IHYpIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjW2NvbnN0TmFtZV0gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhY2Nbdl0gPSBjb25zdE5hbWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA8RW51bVR5cGU+e31cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVudW1Nb2RlbEdlbmVyaWMoZW51bVR5cGUsIHByb3BlcnR5LmVudW1DbGFzc1NpbXBsZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbiJdfQ==
@@ -0,0 +1,42 @@
1
+ import { RevisionTypeDto } from '../api/models/revisionType';
2
+ export function auditMapToEntityChangesArray(fieldValue) {
3
+ const entityChanges = [];
4
+ for (const key of Object.keys(fieldValue)) {
5
+ const ec = { entityType: key, items: [] };
6
+ for (const change of fieldValue[key]) {
7
+ if (change.revType === RevisionTypeDto.Add && change.entityNewState) {
8
+ const item = {
9
+ revType: change.revType,
10
+ color: 'green'
11
+ };
12
+ Object.entries(change.entityNewState).forEach(([key, value]) => (item[key] = value));
13
+ ec.items?.push(item);
14
+ }
15
+ else if (change.revType === RevisionTypeDto.Del && change.entityOldState) {
16
+ const item = {
17
+ revType: change.revType,
18
+ color: 'red'
19
+ };
20
+ Object.entries(change.entityOldState).forEach(([key, value]) => (item[key] = value));
21
+ ec.items?.push(item);
22
+ }
23
+ else if (change.revType === RevisionTypeDto.Mod && change.entityOldState && change.entityNewState) {
24
+ const itemOld = {
25
+ revType: change.revType,
26
+ color: 'red'
27
+ };
28
+ Object.entries(change.entityOldState).forEach(([key, value]) => (itemOld[key] = value));
29
+ const itemNew = {
30
+ revType: change.revType,
31
+ color: 'green'
32
+ };
33
+ Object.entries(change.entityNewState).forEach(([key, value]) => (itemNew[key] = value));
34
+ ec.items?.push(itemOld);
35
+ ec.items?.push(itemNew);
36
+ }
37
+ }
38
+ entityChanges.push(ec);
39
+ }
40
+ return entityChanges;
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNoYW5nZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlcnMvZW50aXR5LWNoYW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBSTNELE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxVQUFtRDtJQUM1RixNQUFNLGFBQWEsR0FBNEIsRUFBRSxDQUFDO0lBQ2xELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sRUFBRSxHQUEwQixFQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBQyxDQUFDO1FBQy9ELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkMsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLGVBQWUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNsRSxNQUFNLElBQUksR0FBOEI7b0JBQ3BDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsS0FBSyxFQUFFLE9BQU87aUJBQ2pCLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3JGLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLGVBQWUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6RSxNQUFNLElBQUksR0FBOEI7b0JBQ3BDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsS0FBSyxFQUFFLEtBQUs7aUJBQ2YsQ0FBQztnQkFDRixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDckYsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssZUFBZSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbEcsTUFBTSxPQUFPLEdBQThCO29CQUN2QyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87b0JBQ3ZCLEtBQUssRUFBRSxLQUFLO2lCQUNmLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBRXhGLE1BQU0sT0FBTyxHQUE4QjtvQkFDdkMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO29CQUN2QixLQUFLLEVBQUUsT0FBTztpQkFDakIsQ0FBQztnQkFDRixNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFFeEYsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDTCxDQUFDO1FBQ0QsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RW50aXR5Q2hhbmdlRHRvfSBmcm9tICcuLi9hcGkvbW9kZWxzL2VudGl0eUNoYW5nZSc7XG5pbXBvcnQge1JldmlzaW9uVHlwZUR0b30gZnJvbSAnLi4vYXBpL21vZGVscy9yZXZpc2lvblR5cGUnO1xuaW1wb3J0IHtFbnRpdHlSZXZpc2lvbkNoYW5nZVN0YXRlfSBmcm9tICcuLi9tb2RlbHMvZW50aXR5LXJldmlzaW9uLWNoYW5nZS1zdGF0ZS5tb2RlbCc7XG5pbXBvcnQge0VudGl0eVJldmlzaW9uQ2hhbmdlc30gZnJvbSAnLi4vbW9kZWxzL2VudGl0eS1yZXZpc2lvbi1jaGFuZ2VzLm1vZGVsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0TWFwVG9FbnRpdHlDaGFuZ2VzQXJyYXkoZmllbGRWYWx1ZToge1trZXk6IHN0cmluZ106IEFycmF5PEVudGl0eUNoYW5nZUR0bz59KTogQXJyYXk8RW50aXR5UmV2aXNpb25DaGFuZ2VzPiB7XG4gICAgY29uc3QgZW50aXR5Q2hhbmdlczogRW50aXR5UmV2aXNpb25DaGFuZ2VzW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmaWVsZFZhbHVlKSkge1xuICAgICAgICBjb25zdCBlYzogRW50aXR5UmV2aXNpb25DaGFuZ2VzID0ge2VudGl0eVR5cGU6IGtleSwgaXRlbXM6IFtdfTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgZmllbGRWYWx1ZVtrZXldKSB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlLnJldlR5cGUgPT09IFJldmlzaW9uVHlwZUR0by5BZGQgJiYgY2hhbmdlLmVudGl0eU5ld1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbTogRW50aXR5UmV2aXNpb25DaGFuZ2VTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmV2VHlwZTogY2hhbmdlLnJldlR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZ3JlZW4nXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2UuZW50aXR5TmV3U3RhdGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4gKGl0ZW1ba2V5XSA9IHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgZWMuaXRlbXM/LnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZS5yZXZUeXBlID09PSBSZXZpc2lvblR5cGVEdG8uRGVsICYmIGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW06IEVudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJldlR5cGU6IGNoYW5nZS5yZXZUeXBlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbVtrZXldID0gdmFsdWUpKTtcbiAgICAgICAgICAgICAgICBlYy5pdGVtcz8ucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlLnJldlR5cGUgPT09IFJldmlzaW9uVHlwZUR0by5Nb2QgJiYgY2hhbmdlLmVudGl0eU9sZFN0YXRlICYmIGNoYW5nZS5lbnRpdHlOZXdTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1PbGQ6IEVudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJldlR5cGU6IGNoYW5nZS5yZXZUeXBlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JlZCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZS5lbnRpdHlPbGRTdGF0ZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiAoaXRlbU9sZFtrZXldID0gdmFsdWUpKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1OZXc6IEVudGl0eVJldmlzaW9uQ2hhbmdlU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJldlR5cGU6IGNoYW5nZS5yZXZUeXBlLFxuICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ2dyZWVuJ1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlLmVudGl0eU5ld1N0YXRlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IChpdGVtTmV3W2tleV0gPSB2YWx1ZSkpO1xuXG4gICAgICAgICAgICAgICAgZWMuaXRlbXM/LnB1c2goaXRlbU9sZCk7XG4gICAgICAgICAgICAgICAgZWMuaXRlbXM/LnB1c2goaXRlbU5ldyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZW50aXR5Q2hhbmdlcy5wdXNoKGVjKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudGl0eUNoYW5nZXM7XG59XG4iXX0=