@alfresco/adf-process-services-cloud 8.1.0-15484746933 → 8.1.0-15488125964

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 (172) hide show
  1. package/fesm2022/adf-process-services-cloud.mjs +346 -347
  2. package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
  3. package/lib/task/task-filters/components/base-task-filters-cloud.component.d.ts +1 -1
  4. package/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.d.ts +1 -1
  5. package/lib/task/task-list/components/base-task-list-cloud.component.d.ts +1 -1
  6. package/package.json +4 -6
  7. package/esm2022/adf-process-services-cloud.mjs +0 -5
  8. package/esm2022/lib/app/app-list-cloud.module.mjs +0 -20
  9. package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +0 -67
  10. package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +0 -126
  11. package/esm2022/lib/app/models/application-instance.model.mjs +0 -24
  12. package/esm2022/lib/app/public-api.mjs +0 -22
  13. package/esm2022/lib/app/services/apps-process-cloud.service.mjs +0 -97
  14. package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +0 -164
  15. package/esm2022/lib/common/date-range-filter/date-range-filter.service.mjs +0 -97
  16. package/esm2022/lib/common/index.mjs +0 -18
  17. package/esm2022/lib/common/interface/environment.interface.mjs +0 -18
  18. package/esm2022/lib/common/interface/index.mjs +0 -18
  19. package/esm2022/lib/common/interface/public-api.mjs +0 -18
  20. package/esm2022/lib/common/public-api.mjs +0 -19
  21. package/esm2022/lib/form/components/cloud-form-rendering.service.mjs +0 -57
  22. package/esm2022/lib/form/components/form-cloud-custom-outcomes.component.mjs +0 -31
  23. package/esm2022/lib/form/components/form-cloud.component.mjs +0 -416
  24. package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +0 -54
  25. package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +0 -36
  26. package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +0 -250
  27. package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +0 -137
  28. package/esm2022/lib/form/components/widgets/data-table/data-table-adapter.widget.mjs +0 -107
  29. package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +0 -121
  30. package/esm2022/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.mjs +0 -122
  31. package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +0 -190
  32. package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +0 -86
  33. package/esm2022/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +0 -80
  34. package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +0 -464
  35. package/esm2022/lib/form/components/widgets/dropdown/validators.mjs +0 -29
  36. package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +0 -47
  37. package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +0 -83
  38. package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +0 -92
  39. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +0 -81
  40. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +0 -54
  41. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.schema.mjs +0 -86
  42. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +0 -117
  43. package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +0 -188
  44. package/esm2022/lib/form/form-cloud.module.mjs +0 -103
  45. package/esm2022/lib/form/models/form-cloud-representation.model.mjs +0 -48
  46. package/esm2022/lib/form/models/task-variable-cloud.model.mjs +0 -28
  47. package/esm2022/lib/form/public-api.mjs +0 -44
  48. package/esm2022/lib/form/services/content-cloud-node-selector.service.mjs +0 -120
  49. package/esm2022/lib/form/services/display-mode.service.mjs +0 -146
  50. package/esm2022/lib/form/services/form-cloud.service.interface.mjs +0 -18
  51. package/esm2022/lib/form/services/form-cloud.service.mjs +0 -201
  52. package/esm2022/lib/form/services/form-definition-selector-cloud.service.interface.mjs +0 -18
  53. package/esm2022/lib/form/services/form-definition-selector-cloud.service.mjs +0 -51
  54. package/esm2022/lib/form/services/form-utils.service.mjs +0 -37
  55. package/esm2022/lib/form/services/process-cloud-content.service.mjs +0 -71
  56. package/esm2022/lib/form/services/spinner/form-cloud-spinner.service.mjs +0 -52
  57. package/esm2022/lib/group/components/group-cloud.component.mjs +0 -424
  58. package/esm2022/lib/group/group-cloud.module.mjs +0 -33
  59. package/esm2022/lib/group/models/identity-group.model.mjs +0 -18
  60. package/esm2022/lib/group/public-api.mjs +0 -21
  61. package/esm2022/lib/group/services/identity-group.service.mjs +0 -89
  62. package/esm2022/lib/models/application-version.model.mjs +0 -21
  63. package/esm2022/lib/models/constant-values.type.mjs +0 -18
  64. package/esm2022/lib/models/data-column-custom-data.mjs +0 -18
  65. package/esm2022/lib/models/date-cloud-filter.model.mjs +0 -31
  66. package/esm2022/lib/models/date-format-cloud.model.mjs +0 -18
  67. package/esm2022/lib/models/engine-event-cloud.model.mjs +0 -18
  68. package/esm2022/lib/models/filter-cloud-model.mjs +0 -128
  69. package/esm2022/lib/models/process-definition-cloud.model.mjs +0 -32
  70. package/esm2022/lib/models/process-instance-variable.model.mjs +0 -18
  71. package/esm2022/lib/models/process-variable-filter.model.mjs +0 -18
  72. package/esm2022/lib/models/task-cloud.model.mjs +0 -23
  73. package/esm2022/lib/models/task-list-sorting.model.mjs +0 -40
  74. package/esm2022/lib/models/variable-definition.mjs +0 -18
  75. package/esm2022/lib/people/components/people-cloud.component.mjs +0 -499
  76. package/esm2022/lib/people/models/identity-user.model.mjs +0 -18
  77. package/esm2022/lib/people/people-cloud.module.mjs +0 -33
  78. package/esm2022/lib/people/public-api.mjs +0 -21
  79. package/esm2022/lib/people/services/identity-user.service.mjs +0 -119
  80. package/esm2022/lib/process/process-cloud.module.mjs +0 -40
  81. package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +0 -802
  82. package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +0 -59
  83. package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +0 -293
  84. package/esm2022/lib/process/process-filters/models/process-filter-cloud.model.mjs +0 -170
  85. package/esm2022/lib/process/process-filters/process-filters-cloud.module.mjs +0 -44
  86. package/esm2022/lib/process/process-filters/public-api.mjs +0 -23
  87. package/esm2022/lib/process/process-filters/services/process-filter-cloud.service.mjs +0 -408
  88. package/esm2022/lib/process/process-header/components/process-header-cloud.component.mjs +0 -137
  89. package/esm2022/lib/process/process-header/process-header-cloud.module.mjs +0 -33
  90. package/esm2022/lib/process/process-header/public-api.mjs +0 -19
  91. package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +0 -594
  92. package/esm2022/lib/process/process-list/datatable/process-list-datatable-adapter.mjs +0 -31
  93. package/esm2022/lib/process/process-list/models/perocess-instance-cloud-view.model.mjs +0 -18
  94. package/esm2022/lib/process/process-list/models/process-cloud-preferences.mjs +0 -24
  95. package/esm2022/lib/process/process-list/models/process-cloud-preset.model.mjs +0 -37
  96. package/esm2022/lib/process/process-list/models/process-cloud-query-request.model.mjs +0 -107
  97. package/esm2022/lib/process/process-list/models/process-list-sorting.model.mjs +0 -40
  98. package/esm2022/lib/process/process-list/process-list-cloud.module.mjs +0 -45
  99. package/esm2022/lib/process/process-list/public-api.mjs +0 -25
  100. package/esm2022/lib/process/process-list/services/process-list-cloud.service.mjs +0 -253
  101. package/esm2022/lib/process/process-list/services/process-task-list-cloud.service.mjs +0 -109
  102. package/esm2022/lib/process/public-api.mjs +0 -23
  103. package/esm2022/lib/process/services/process-cloud.service.mjs +0 -105
  104. package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +0 -481
  105. package/esm2022/lib/process/start-process/models/process-instance-cloud.model.mjs +0 -18
  106. package/esm2022/lib/process/start-process/models/process-payload-cloud.model.mjs +0 -26
  107. package/esm2022/lib/process/start-process/models/process-with-form-payload-cloud.model.mjs +0 -26
  108. package/esm2022/lib/process/start-process/public-api.mjs +0 -21
  109. package/esm2022/lib/process/start-process/services/start-process-cloud.service.mjs +0 -125
  110. package/esm2022/lib/process-services-cloud.module.mjs +0 -91
  111. package/esm2022/lib/rich-text-editor/editorjs-config.mjs +0 -101
  112. package/esm2022/lib/rich-text-editor/index.mjs +0 -18
  113. package/esm2022/lib/rich-text-editor/public-api.mjs +0 -19
  114. package/esm2022/lib/rich-text-editor/rich-text-editor.component.mjs +0 -80
  115. package/esm2022/lib/rich-text-editor/rich-text-editor.module.mjs +0 -33
  116. package/esm2022/lib/screen/components/screen-cloud/screen-cloud.component.mjs +0 -186
  117. package/esm2022/lib/screen/models/screen-cloud.model.mjs +0 -18
  118. package/esm2022/lib/screen/public-api.mjs +0 -18
  119. package/esm2022/lib/services/base-cloud.service.mjs +0 -83
  120. package/esm2022/lib/services/cloud-token.service.mjs +0 -23
  121. package/esm2022/lib/services/form-fields.interfaces.mjs +0 -55
  122. package/esm2022/lib/services/local-preference-cloud.service.mjs +0 -122
  123. package/esm2022/lib/services/notification-cloud.service.mjs +0 -45
  124. package/esm2022/lib/services/preference-cloud.interface.mjs +0 -18
  125. package/esm2022/lib/services/public-api.mjs +0 -28
  126. package/esm2022/lib/services/screen-rendering.service.mjs +0 -30
  127. package/esm2022/lib/services/task-list-cloud.service.interface.mjs +0 -18
  128. package/esm2022/lib/services/user-preference-cloud.service.mjs +0 -105
  129. package/esm2022/lib/services/variable-mapper.sevice.mjs +0 -77
  130. package/esm2022/lib/services/web-socket.service.mjs +0 -146
  131. package/esm2022/lib/task/models/start-task-cloud-request.model.mjs +0 -32
  132. package/esm2022/lib/task/models/task-details-cloud.model.mjs +0 -26
  133. package/esm2022/lib/task/models/task.model.mjs +0 -23
  134. package/esm2022/lib/task/public-api.mjs +0 -26
  135. package/esm2022/lib/task/services/task-cloud.service.mjs +0 -272
  136. package/esm2022/lib/task/task-cloud.module.mjs +0 -45
  137. package/esm2022/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +0 -59
  138. package/esm2022/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +0 -467
  139. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +0 -206
  140. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +0 -318
  141. package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +0 -147
  142. package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +0 -143
  143. package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +0 -73
  144. package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +0 -256
  145. package/esm2022/lib/task/task-filters/models/filter-cloud.model.mjs +0 -207
  146. package/esm2022/lib/task/task-filters/public-api.mjs +0 -27
  147. package/esm2022/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +0 -283
  148. package/esm2022/lib/task/task-filters/services/task-filter-cloud.service.mjs +0 -392
  149. package/esm2022/lib/task/task-filters/task-filters-cloud.module.mjs +0 -56
  150. package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +0 -214
  151. package/esm2022/lib/task/task-form/components/user-task-cloud/complete-task/complete-task.directive.mjs +0 -89
  152. package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +0 -284
  153. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/claim-task/claim-task-cloud.directive.mjs +0 -101
  154. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/unclaim-task/unclaim-task-cloud.directive.mjs +0 -87
  155. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +0 -79
  156. package/esm2022/lib/task/task-form/public-api.mjs +0 -21
  157. package/esm2022/lib/task/task-form/task-form.module.mjs +0 -36
  158. package/esm2022/lib/task/task-header/components/task-header-cloud.component.mjs +0 -280
  159. package/esm2022/lib/task/task-header/public-api.mjs +0 -19
  160. package/esm2022/lib/task/task-header/task-header-cloud.module.mjs +0 -33
  161. package/esm2022/lib/task/task-list/components/base-task-list-cloud.component.mjs +0 -331
  162. package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +0 -116
  163. package/esm2022/lib/task/task-list/components/task-list/datatable/task-list-datatable-adapter.mjs +0 -31
  164. package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +0 -390
  165. package/esm2022/lib/task/task-list/models/service-task-cloud.model.mjs +0 -18
  166. package/esm2022/lib/task/task-list/models/task-cloud-view.model.mjs +0 -18
  167. package/esm2022/lib/task/task-list/public-api.mjs +0 -23
  168. package/esm2022/lib/task/task-list/services/service-task-list-cloud.service.mjs +0 -115
  169. package/esm2022/lib/task/task-list/services/task-list-cloud.service.mjs +0 -178
  170. package/esm2022/lib/task/task-list/task-list-cloud.module.mjs +0 -57
  171. package/esm2022/lib/types.mjs +0 -18
  172. package/esm2022/public-api.mjs +0 -40
@@ -1,464 +0,0 @@
1
- /*!
2
- * @license
3
- * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { AppConfigService, ErrorMessageModel, ErrorWidgetComponent, FormFieldEvent, FormFieldTypes, FormService, SelectFilterInputComponent, WidgetComponent } from '@alfresco/adf-core';
18
- import { AsyncPipe, NgFor, NgIf } from '@angular/common';
19
- import { Component, DestroyRef, inject, ViewEncapsulation } from '@angular/core';
20
- import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
21
- import { MatFormFieldModule } from '@angular/material/form-field';
22
- import { MatSelectModule } from '@angular/material/select';
23
- import { TranslateModule } from '@ngx-translate/core';
24
- import { BehaviorSubject } from 'rxjs';
25
- import { filter, map } from 'rxjs/operators';
26
- import { FormCloudService } from '../../../services/form-cloud.service';
27
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
28
- import { FormUtilsService } from '../../../services/form-utils.service';
29
- import { defaultValueValidator } from './validators';
30
- import * as i0 from "@angular/core";
31
- import * as i1 from "@angular/forms";
32
- import * as i2 from "@angular/material/form-field";
33
- import * as i3 from "@angular/material/select";
34
- import * as i4 from "@angular/material/core";
35
- import * as i5 from "@ngx-translate/core";
36
- export const DEFAULT_OPTION = {
37
- id: 'empty',
38
- name: 'Choose one...'
39
- };
40
- export const HIDE_FILTER_LIMIT = 5;
41
- /* eslint-disable @angular-eslint/component-selector */
42
- export class DropdownCloudWidgetComponent extends WidgetComponent {
43
- constructor() {
44
- super(...arguments);
45
- this.formService = inject(FormService);
46
- this.formCloudService = inject(FormCloudService);
47
- this.appConfig = inject(AppConfigService);
48
- this.formUtilsService = inject(FormUtilsService);
49
- this.destroyRef = inject(DestroyRef);
50
- this.typeId = 'DropdownCloudWidgetComponent';
51
- this.showInputFilter = false;
52
- this.isRestApiFailed = false;
53
- this.variableOptionsFailed = false;
54
- this.previewState = false;
55
- this.dropdownControl = new FormControl(undefined);
56
- this.list$ = new BehaviorSubject([]);
57
- this.filter$ = new BehaviorSubject('');
58
- this.defaultVariableOptionId = 'id';
59
- this.defaultVariableOptionLabel = 'name';
60
- this.defaultVariableOptionPath = 'data';
61
- }
62
- get showRequiredMessage() {
63
- return this.dropdownControl.touched && this.dropdownControl.errors?.required && !this.isRestApiFailed && !this.variableOptionsFailed;
64
- }
65
- get isReadOnlyType() {
66
- return this.field.type === 'readonly';
67
- }
68
- get isLinkedWidget() {
69
- return !!this.linkedWidgetId;
70
- }
71
- get linkedWidgetId() {
72
- return this.field?.rule?.ruleOn;
73
- }
74
- get isReadOnlyForm() {
75
- return !!this.field?.form?.readOnly;
76
- }
77
- get hasRestUrl() {
78
- return !!this.field?.restUrl;
79
- }
80
- get isValidRestConfig() {
81
- return this.isRestOptionType && this.hasRestUrl;
82
- }
83
- get isRestOptionType() {
84
- return this.field?.optionType === 'rest';
85
- }
86
- get isVariableOptionType() {
87
- return this.field?.optionType === 'variable';
88
- }
89
- ngOnInit() {
90
- this.setupDropdown();
91
- this.formService.onFormVariableChanged.subscribe(({ field }) => {
92
- if (field.id === this.field.id) {
93
- this.setupDropdown();
94
- }
95
- });
96
- }
97
- updateReactiveFormControl() {
98
- this.updateFormControlState();
99
- this.handleErrors();
100
- }
101
- compareDropdownValues(opt1, opt2) {
102
- if (!opt1 || !opt2) {
103
- return false;
104
- }
105
- if (typeof opt1 === 'string' && typeof opt2 === 'object') {
106
- return opt1 === opt2.id || opt1 === opt2.name;
107
- }
108
- if (typeof opt1 === 'object' && typeof opt2 === 'string') {
109
- return opt1.id === opt2 || opt1.name === opt2;
110
- }
111
- if (typeof opt1 === 'object' && typeof opt2 === 'object') {
112
- return opt1.id === opt2.id || opt1.name === opt2.name;
113
- }
114
- return opt1 === opt2;
115
- }
116
- selectionChangedForField(field) {
117
- const formFieldValueChangedEvent = new FormFieldEvent(field.form, field);
118
- this.formService.formFieldValueChanged.next(formFieldValueChangedEvent);
119
- this.onFieldChanged(field);
120
- }
121
- setupDropdown() {
122
- this.setPreviewState();
123
- this.checkFieldOptionsSource();
124
- this.updateOptions();
125
- this.setFormControlValue();
126
- this.updateFormControlState();
127
- this.subscribeToInputChanges();
128
- this.initFilter();
129
- this.handleErrors();
130
- }
131
- subscribeToInputChanges() {
132
- this.dropdownControl.valueChanges
133
- .pipe(filter(() => !!this.field), takeUntilDestroyed(this.destroyRef))
134
- .subscribe((value) => {
135
- this.setOptionValue(value, this.field);
136
- this.handleErrors();
137
- this.selectionChangedForField(this.field);
138
- });
139
- }
140
- setFormControlValue() {
141
- if (Array.isArray(this.field.value)) {
142
- this.dropdownControl.setValue(this.field?.value, { emitEvent: false });
143
- }
144
- else if (this.field?.value && typeof this.field?.value === 'object') {
145
- this.dropdownControl.setValue({ id: this.field?.value.id, name: this.field?.value.name }, { emitEvent: false });
146
- }
147
- else if (this.field.value === null) {
148
- this.dropdownControl.setValue(this.field?.value, { emitEvent: false });
149
- }
150
- else {
151
- this.dropdownControl.setValue({ id: this.field?.value, name: '' }, { emitEvent: false });
152
- }
153
- }
154
- updateFormControlState() {
155
- this.updateDropdownValidationRules();
156
- this.updateDropdownReadonlyRules();
157
- this.dropdownControl.updateValueAndValidity({ emitEvent: false });
158
- }
159
- updateDropdownValidationRules() {
160
- this.dropdownControl.setValidators([]);
161
- if (!this.field?.isVisible) {
162
- return;
163
- }
164
- if (this.isRequired()) {
165
- this.dropdownControl.addValidators([Validators.required]);
166
- if (this.field.hasEmptyValue) {
167
- this.dropdownControl.addValidators([defaultValueValidator(this.field)]);
168
- }
169
- }
170
- }
171
- updateDropdownReadonlyRules() {
172
- if (this.field?.readOnly || this.readOnly) {
173
- this.dropdownControl.disable({ emitEvent: false });
174
- }
175
- else {
176
- this.dropdownControl.enable({ emitEvent: false });
177
- }
178
- }
179
- handleErrors() {
180
- if (this.dropdownControl.valid) {
181
- this.field.validationSummary = new ErrorMessageModel('');
182
- this.field.markAsValid();
183
- return;
184
- }
185
- if (this.dropdownControl.invalid && this.dropdownControl.errors.required) {
186
- this.field.validationSummary = new ErrorMessageModel({ message: 'FORM.FIELD.REQUIRED' });
187
- this.field.markAsInvalid();
188
- }
189
- }
190
- initFilter() {
191
- this.filter$
192
- .pipe(filter((search) => search !== undefined), map((search) => search ? this.field.options.filter(({ name }) => name.toLowerCase().includes(search.toLowerCase())) : this.field.options), takeUntilDestroyed(this.destroyRef))
193
- .subscribe((result) => this.list$.next(result));
194
- }
195
- checkFieldOptionsSource() {
196
- switch (true) {
197
- case this.isReadOnlyForm:
198
- break;
199
- case this.isValidRestConfig && !this.isLinkedWidget:
200
- this.persistFieldOptionsFromRestApi();
201
- break;
202
- case this.isLinkedWidget:
203
- this.loadFieldOptionsForLinkedWidget();
204
- break;
205
- case this.isVariableOptionType:
206
- this.persistFieldOptionsFromVariable();
207
- break;
208
- default:
209
- break;
210
- }
211
- }
212
- persistFieldOptionsFromVariable() {
213
- const optionsPath = this.field?.variableConfig?.optionsPath ?? this.defaultVariableOptionPath;
214
- const variableName = this.field?.variableConfig?.variableName;
215
- const processVariables = this.field?.form?.processVariables;
216
- const formVariables = this.field?.form?.variables;
217
- const dropdownOptions = this.getOptionsFromVariable(processVariables, formVariables, variableName);
218
- if (dropdownOptions) {
219
- const formVariableOptions = this.getOptionsFromPath(dropdownOptions, optionsPath);
220
- this.updateOptions(formVariableOptions);
221
- this.resetInvalidValue();
222
- this.field.updateForm();
223
- }
224
- else {
225
- this.handleError(`${variableName} not found`);
226
- this.resetOptions();
227
- this.variableOptionsFailed = true;
228
- }
229
- }
230
- getOptionsFromPath(data, path) {
231
- const optionsId = this.field?.variableConfig?.optionsId ?? this.defaultVariableOptionId;
232
- const optionsLabel = this.field?.variableConfig?.optionsLabel ?? this.defaultVariableOptionLabel;
233
- const properties = path.split('.');
234
- const currentProperty = properties.shift();
235
- if (!Object.prototype.hasOwnProperty.call(data, currentProperty)) {
236
- this.handleError(`${currentProperty} not found in ${JSON.stringify(data)}`);
237
- this.variableOptionsFailed = true;
238
- return [];
239
- }
240
- const nestedData = data[currentProperty];
241
- if (Array.isArray(nestedData)) {
242
- return this.getOptionsFromArray(nestedData, optionsId, optionsLabel);
243
- }
244
- return this.getOptionsFromPath(nestedData, properties.join('.'));
245
- }
246
- getOptionsFromArray(nestedData, id, label) {
247
- const options = nestedData.map((item) => this.createOption(item, id, label));
248
- const hasInvalidOption = options.some((option) => !option);
249
- if (hasInvalidOption) {
250
- this.variableOptionsFailed = true;
251
- return [];
252
- }
253
- this.variableOptionsFailed = false;
254
- return options;
255
- }
256
- createOption(item, id, label) {
257
- const option = {
258
- id: item[id],
259
- name: item[label]
260
- };
261
- if (!option.id || !option.name) {
262
- this.handleError(`'id' or 'label' is not properly defined`);
263
- return undefined;
264
- }
265
- return option;
266
- }
267
- getOptionsFromVariable(processVariables, formVariables, variableName) {
268
- const processVariableDropdownOptions = this.getVariableValueByName(processVariables, variableName);
269
- const formVariableDropdownOptions = this.getVariableValueByName(formVariables, variableName);
270
- return processVariableDropdownOptions ?? formVariableDropdownOptions;
271
- }
272
- getVariableValueByName(variables, variableName) {
273
- return variables?.find((variable) => variable?.name === `variables.${variableName}` || variable?.name === variableName)
274
- ?.value;
275
- }
276
- persistFieldOptionsFromRestApi() {
277
- if (this.isValidRestConfig) {
278
- this.resetRestApiErrorMessage();
279
- const bodyParam = this.buildBodyParam();
280
- this.formCloudService
281
- .getRestWidgetData(this.field.form.id, this.field.id, bodyParam)
282
- .pipe(takeUntilDestroyed(this.destroyRef))
283
- .subscribe({
284
- next: (result) => {
285
- this.resetRestApiErrorMessage();
286
- this.updateOptions(result);
287
- this.field.updateForm();
288
- this.resetInvalidValue();
289
- },
290
- error: (err) => {
291
- this.resetRestApiOptions();
292
- this.handleError(err);
293
- }
294
- });
295
- }
296
- }
297
- buildBodyParam() {
298
- const bodyParam = Object.assign({});
299
- if (this.isLinkedWidget) {
300
- const parentWidgetValue = this.getParentWidgetValue();
301
- const parentWidgetId = this.linkedWidgetId;
302
- bodyParam[parentWidgetId] = parentWidgetValue;
303
- }
304
- return this.formUtilsService.getRestUrlVariablesMap(this.field.form, this.field.restUrl, bodyParam);
305
- }
306
- loadFieldOptionsForLinkedWidget() {
307
- const parentWidgetValue = this.getParentWidgetValue();
308
- this.parentValueChanged(parentWidgetValue);
309
- this.formService.formFieldValueChanged
310
- .pipe(filter((event) => this.isFormFieldEventOfTypeDropdown(event) && this.isParentFormFieldEvent(event)), takeUntilDestroyed(this.destroyRef))
311
- .subscribe((event) => {
312
- const valueOfParentWidget = event.field.value;
313
- this.parentValueChanged(valueOfParentWidget);
314
- });
315
- }
316
- getParentWidgetValue() {
317
- const parentWidgetId = this.linkedWidgetId;
318
- const parentWidget = this.getFormFieldById(parentWidgetId);
319
- return parentWidget?.value;
320
- }
321
- parentValueChanged(value) {
322
- if (value && !this.isNoneValueSelected(value)) {
323
- this.isValidRestConfig ? this.persistFieldOptionsFromRestApi() : this.persistFieldOptionsFromManualList(value);
324
- }
325
- else if (this.isNoneValueSelected(value)) {
326
- this.resetRestApiErrorMessage();
327
- this.resetOptions();
328
- this.resetInvalidValue();
329
- }
330
- else {
331
- this.updateOptions([]);
332
- this.resetInvalidValue();
333
- }
334
- }
335
- isNoneValueSelected(value) {
336
- return value === undefined;
337
- }
338
- getFormFieldById(fieldId) {
339
- return this.field.form.getFormFields().filter((field) => field.id === fieldId)[0];
340
- }
341
- persistFieldOptionsFromManualList(value) {
342
- if (this.hasRuleEntries()) {
343
- const rulesEntries = this.field.rule.entries;
344
- rulesEntries.forEach((ruleEntry) => {
345
- if (ruleEntry.key === value) {
346
- this.updateOptions(ruleEntry.options);
347
- this.resetInvalidValue();
348
- this.field.updateForm();
349
- }
350
- });
351
- }
352
- }
353
- resetInvalidValue() {
354
- if (!this.isValidValue()) {
355
- this.resetValue();
356
- }
357
- }
358
- resetValue() {
359
- this.field.value = '';
360
- this.selectionChangedForField(this.field);
361
- this.updateOptions();
362
- this.field.updateForm();
363
- }
364
- isValidValue() {
365
- return this.field.value && this.isSelectedValueInOptions();
366
- }
367
- isSelectedValueInOptions() {
368
- if (Array.isArray(this.field.value)) {
369
- const optionIdList = [...this.field.options].map((option) => option.id);
370
- const fieldValueIds = this.field.value.map((valueOption) => valueOption.id);
371
- return fieldValueIds.every((valueOptionId) => optionIdList.includes(valueOptionId));
372
- }
373
- else {
374
- if (this.field?.value && typeof this.field?.value === 'object') {
375
- return [...this.field.options].map((option) => option.id).includes(this.field.value.id);
376
- }
377
- else {
378
- return [...this.field.options].map((option) => option.id).includes(this.field.value);
379
- }
380
- }
381
- }
382
- hasRuleEntries() {
383
- return !!this.field.rule.entries.length;
384
- }
385
- resetOptions() {
386
- this.updateOptions([]);
387
- }
388
- isParentFormFieldEvent(event) {
389
- return event.field.id === this.linkedWidgetId;
390
- }
391
- isFormFieldEventOfTypeDropdown(event) {
392
- return event.field.type === FormFieldTypes.DROPDOWN;
393
- }
394
- setOptionValue(option, field) {
395
- if (Array.isArray(option) || field.hasMultipleValues) {
396
- field.value = option;
397
- return;
398
- }
399
- let optionValue = '';
400
- if (option.id === DEFAULT_OPTION.id) {
401
- optionValue = undefined;
402
- }
403
- else if (option.name !== field.value) {
404
- optionValue = option.id;
405
- }
406
- else {
407
- optionValue = option.name;
408
- }
409
- field.value = optionValue;
410
- }
411
- setPreviewState() {
412
- this.previewState = this.formCloudService.getPreviewState();
413
- }
414
- handleError(error) {
415
- if (!this.previewState) {
416
- this.widgetError.emit(error);
417
- }
418
- }
419
- updateOptions(options) {
420
- if (!this.field) {
421
- return;
422
- }
423
- if (options) {
424
- this.field.options = options;
425
- }
426
- this.list$.next(this.field.options);
427
- this.showInputFilter = this.field.options.length > this.appConfig.get('form.dropDownFilterLimit', HIDE_FILTER_LIMIT);
428
- }
429
- resetRestApiErrorMessage() {
430
- this.isRestApiFailed = false;
431
- this.restApiHostName = '';
432
- }
433
- resetRestApiOptions() {
434
- this.updateOptions([]);
435
- this.resetValue();
436
- this.isRestApiFailed = true;
437
- this.restApiHostName = this.getRestUrlHostName();
438
- }
439
- getRestUrlHostName() {
440
- try {
441
- return new URL(this.field?.restUrl).hostname;
442
- }
443
- catch {
444
- return this.field?.restUrl;
445
- }
446
- }
447
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownCloudWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
448
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DropdownCloudWidgetComponent, isStandalone: true, selector: "dropdown-cloud-widget", usesInheritance: true, ngImport: i0, template: "<div\n class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"dropdownControl.invalid && dropdownControl.touched\"\n [class.adf-readonly]=\"field.readOnly\"\n [class.adf-left-label-input-container]=\"field.leftLabels\"\n>\n <div *ngIf=\"field.leftLabels\">\n <label class=\"adf-label adf-left-label\" [attr.for]=\"field.id\">\n {{ field.name | translate }}<span class=\"adf-asterisk\" [style.visibility]=\"isRequired() ? 'visible' : 'hidden'\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"!field.leftLabels\" class=\"adf-label\" [attr.for]=\"field.id\">\n {{ field.name | translate }}<span class=\"adf-asterisk\" [style.visibility]=\"isRequired() ? 'visible' : 'hidden'\">*</span>\n </mat-label>\n <mat-select\n class=\"adf-select\"\n [formControl]=\"dropdownControl\"\n [id]=\"field.id\"\n [compareWith]=\"compareDropdownValues\"\n [title]=\"field.tooltip\"\n panelClass=\"adf-select-filter\"\n [multiple]=\"field.hasMultipleValues\"\n >\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\" />\n\n <mat-option *ngFor=\"let opt of list$ | async\" [value]=\"opt\" [id]=\"opt.id\">{{opt.name}}</mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType\" [value]=\"field.value\">{{field.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState && !field.readOnly\">\n <error-widget\n class=\"adf-dropdown-required-message\"\n *ngIf=\"showRequiredMessage\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"\n />\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"\n />\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"\n />\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}.adf-dropdown-widget .mat-mdc-select-arrow-wrapper{height:auto}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i4.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "component", type: SelectFilterInputComponent, selector: "adf-select-filter-input", outputs: ["change"] }], encapsulation: i0.ViewEncapsulation.None }); }
449
- }
450
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownCloudWidgetComponent, decorators: [{
451
- type: Component,
452
- args: [{ selector: 'dropdown-cloud-widget', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
453
- NgIf,
454
- NgFor,
455
- AsyncPipe,
456
- ReactiveFormsModule,
457
- MatFormFieldModule,
458
- MatSelectModule,
459
- ErrorWidgetComponent,
460
- TranslateModule,
461
- SelectFilterInputComponent
462
- ], template: "<div\n class=\"adf-dropdown-widget {{field.className}}\"\n [class.adf-invalid]=\"dropdownControl.invalid && dropdownControl.touched\"\n [class.adf-readonly]=\"field.readOnly\"\n [class.adf-left-label-input-container]=\"field.leftLabels\"\n>\n <div *ngIf=\"field.leftLabels\">\n <label class=\"adf-label adf-left-label\" [attr.for]=\"field.id\">\n {{ field.name | translate }}<span class=\"adf-asterisk\" [style.visibility]=\"isRequired() ? 'visible' : 'hidden'\">*</span>\n </label>\n </div>\n <div>\n <mat-form-field>\n <mat-label *ngIf=\"!field.leftLabels\" class=\"adf-label\" [attr.for]=\"field.id\">\n {{ field.name | translate }}<span class=\"adf-asterisk\" [style.visibility]=\"isRequired() ? 'visible' : 'hidden'\">*</span>\n </mat-label>\n <mat-select\n class=\"adf-select\"\n [formControl]=\"dropdownControl\"\n [id]=\"field.id\"\n [compareWith]=\"compareDropdownValues\"\n [title]=\"field.tooltip\"\n panelClass=\"adf-select-filter\"\n [multiple]=\"field.hasMultipleValues\"\n >\n <adf-select-filter-input *ngIf=\"showInputFilter\" (change)=\"filter$.next($event)\" />\n\n <mat-option *ngFor=\"let opt of list$ | async\" [value]=\"opt\" [id]=\"opt.id\">{{opt.name}}</mat-option>\n <mat-option id=\"readonlyOption\" *ngIf=\"isReadOnlyType\" [value]=\"field.value\">{{field.value}}</mat-option>\n </mat-select>\n </mat-form-field>\n <div *ngIf=\"!previewState && !field.readOnly\">\n <error-widget\n class=\"adf-dropdown-required-message\"\n *ngIf=\"showRequiredMessage\"\n required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\"\n />\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"isRestApiFailed\"\n required=\"{{ 'FORM.FIELD.REST_API_FAILED' | translate: { hostname: restApiHostName } }}\"\n />\n <error-widget\n class=\"adf-dropdown-failed-message\"\n *ngIf=\"variableOptionsFailed\"\n required=\"{{ 'FORM.FIELD.VARIABLE_DROPDOWN_OPTIONS_FAILED' | translate }}\"\n />\n </div>\n </div>\n</div>\n", styles: [".adf-dropdown-widget{width:100%}.adf-dropdown-widget .adf-select{padding-top:0;width:100%}.adf-dropdown-widget .adf-select-filter{font-size:var(--theme-body-1-font-size)}.adf-dropdown-widget-select{width:100%}.adf-dropdown-widget-dropdown-required-message .adf-error-container,.adf-dropdown-widget-dropdown-failed-message .adf-error-container{margin-top:1px}.adf-dropdown-widget .mat-mdc-select-arrow-wrapper{height:auto}\n"] }]
463
- }] });
464
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tY2xvdWQud2lkZ2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3Byb2Nlc3Mtc2VydmljZXMtY2xvdWQvc3JjL2xpYi9mb3JtL2NvbXBvbmVudHMvd2lkZ2V0cy9kcm9wZG93bi9kcm9wZG93bi1jbG91ZC53aWRnZXQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy93aWRnZXRzL2Ryb3Bkb3duL2Ryb3Bkb3duLWNsb3VkLndpZGdldC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixjQUFjLEVBR2QsY0FBYyxFQUNkLFdBQVcsRUFHWCwwQkFBMEIsRUFDMUIsZUFBZSxFQUNsQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFB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U0FDbEIsZUFBZSxvckJBQ2Ysb0JBQW9CLHVGQUNwQixlQUFlLDRGQUNmLDBCQUEwQjs7NEZBR3JCLDRCQUE0QjtrQkFsQnhDLFNBQVM7K0JBQ0ksdUJBQXVCLGlCQUdsQixpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUDt3QkFDTCxJQUFJO3dCQUNKLEtBQUs7d0JBQ0wsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLGVBQWU7d0JBQ2YsMEJBQTBCO3FCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtcbiAgICBBcHBDb25maWdTZXJ2aWNlLFxuICAgIEVycm9yTWVzc2FnZU1vZGVsLFxuICAgIEVycm9yV2lkZ2V0Q29tcG9uZW50LFxuICAgIEZvcm1GaWVsZEV2ZW50LFxuICAgIEZvcm1GaWVsZE1vZGVsLFxuICAgIEZvcm1GaWVsZE9wdGlvbixcbiAgICBGb3JtRmllbGRUeXBlcyxcbiAgICBGb3JtU2VydmljZSxcbiAgICBSZWFjdGl2ZUZvcm1XaWRnZXQsXG4gICAgUnVsZUVudHJ5LFxuICAgIFNlbGVjdEZpbHRlcklucHV0Q29tcG9uZW50LFxuICAgIFdpZGdldENvbXBvbmVudFxufSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0ZvciwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIGluamVjdCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUYXNrVmFyaWFibGVDbG91ZCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy90YXNrLXZhcmlhYmxlLWNsb3VkLm1vZGVsJztcbmltcG9ydCB7IEZvcm1DbG91ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9mb3JtLWNsb3VkLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybVV0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Zvcm0tdXRpbHMuc2VydmljZSc7XG5pbXBvcnQgeyBkZWZhdWx0VmFsdWVWYWxpZGF0b3IgfSBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9PUFRJT04gPSB7XG4gICAgaWQ6ICdlbXB0eScsXG4gICAgbmFtZTogJ0Nob29zZSBvbmUuLi4nXG59O1xuZXhwb3J0IGNvbnN0IEhJREVfRklMVEVSX0xJTUlUID0gNTtcblxuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvciAqL1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2Ryb3Bkb3duLWNsb3VkLXdpZGdldCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLWNsb3VkLndpZGdldC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi1jbG91ZC53aWRnZXQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0U2VsZWN0TW9kdWxlLFxuICAgICAgICBFcnJvcldpZGdldENvbXBvbmVudCxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBTZWxlY3RGaWx0ZXJJbnB1dENvbXBvbmVudFxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25DbG91ZFdpZGdldENvbXBvbmVudCBleHRlbmRzIFdpZGdldENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgUmVhY3RpdmVGb3JtV2lkZ2V0IHtcbiAgICBwdWJsaWMgZm9ybVNlcnZpY2UgPSBpbmplY3QoRm9ybVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUNsb3VkU2VydmljZSA9IGluamVjdChGb3JtQ2xvdWRTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZyA9IGluamVjdChBcHBDb25maWdTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1VdGlsc1NlcnZpY2UgPSBpbmplY3QoRm9ybVV0aWxzU2VydmljZSk7XG4gICAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgdHlwZUlkID0gJ0Ryb3Bkb3duQ2xvdWRXaWRnZXRDb21wb25lbnQnO1xuICAgIHNob3dJbnB1dEZpbHRlciA9IGZhbHNlO1xuICAgIGlzUmVzdEFwaUZhaWxlZCA9IGZhbHNlO1xuICAgIHZhcmlhYmxlT3B0aW9uc0ZhaWxlZCA9IGZhbHNlO1xuICAgIHByZXZpZXdTdGF0ZSA9IGZhbHNlO1xuICAgIHJlc3RBcGlIb3N0TmFtZTogc3RyaW5nO1xuICAgIGRyb3Bkb3duQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxGb3JtRmllbGRPcHRpb24gfCBGb3JtRmllbGRPcHRpb25bXT4odW5kZWZpbmVkKTtcblxuICAgIGxpc3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGb3JtRmllbGRPcHRpb25bXT4oW10pO1xuICAgIGZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VmFyaWFibGVPcHRpb25JZCA9ICdpZCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VmFyaWFibGVPcHRpb25MYWJlbCA9ICduYW1lJztcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRWYXJpYWJsZU9wdGlvblBhdGggPSAnZGF0YSc7XG5cbiAgICBnZXQgc2hvd1JlcXVpcmVkTWVzc2FnZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcGRvd25Db250cm9sLnRvdWNoZWQgJiYgdGhpcy5kcm9wZG93bkNvbnRyb2wuZXJyb3JzPy5yZXF1aXJlZCAmJiAhdGhpcy5pc1Jlc3RBcGlGYWlsZWQgJiYgIXRoaXMudmFyaWFibGVPcHRpb25zRmFpbGVkO1xuICAgIH1cblxuICAgIGdldCBpc1JlYWRPbmx5VHlwZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQudHlwZSA9PT0gJ3JlYWRvbmx5JztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc0xpbmtlZFdpZGdldCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5saW5rZWRXaWRnZXRJZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBsaW5rZWRXaWRnZXRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZD8ucnVsZT8ucnVsZU9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzUmVhZE9ubHlGb3JtKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpZWxkPy5mb3JtPy5yZWFkT25seTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBoYXNSZXN0VXJsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpZWxkPy5yZXN0VXJsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzVmFsaWRSZXN0Q29uZmlnKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1Jlc3RPcHRpb25UeXBlICYmIHRoaXMuaGFzUmVzdFVybDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc1Jlc3RPcHRpb25UeXBlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZD8ub3B0aW9uVHlwZSA9PT0gJ3Jlc3QnO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzVmFyaWFibGVPcHRpb25UeXBlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZD8ub3B0aW9uVHlwZSA9PT0gJ3ZhcmlhYmxlJztcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXR1cERyb3Bkb3duKCk7XG5cbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5vbkZvcm1WYXJpYWJsZUNoYW5nZWQuc3Vic2NyaWJlKCh7IGZpZWxkIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5pZCA9PT0gdGhpcy5maWVsZC5pZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBEcm9wZG93bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVSZWFjdGl2ZUZvcm1Db250cm9sKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sU3RhdGUoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoKTtcbiAgICB9XG5cbiAgICBjb21wYXJlRHJvcGRvd25WYWx1ZXMob3B0MTogRm9ybUZpZWxkT3B0aW9uIHwgc3RyaW5nLCBvcHQyOiBGb3JtRmllbGRPcHRpb24gfCBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFvcHQxIHx8ICFvcHQyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIG9wdDEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBvcHQyID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdDEgPT09IG9wdDIuaWQgfHwgb3B0MSA9PT0gb3B0Mi5uYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvcHQxID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3B0MiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHQxLmlkID09PSBvcHQyIHx8IG9wdDEubmFtZSA9PT0gb3B0MjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0MSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9wdDIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0MS5pZCA9PT0gb3B0Mi5pZCB8fCBvcHQxLm5hbWUgPT09IG9wdDIubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvcHQxID09PSBvcHQyO1xuICAgIH1cblxuICAgIHNlbGVjdGlvbkNoYW5nZWRGb3JGaWVsZChmaWVsZDogRm9ybUZpZWxkTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkVmFsdWVDaGFuZ2VkRXZlbnQgPSBuZXcgRm9ybUZpZWxkRXZlbnQoZmllbGQuZm9ybSwgZmllbGQpO1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmZvcm1GaWVsZFZhbHVlQ2hhbmdlZC5uZXh0KGZvcm1GaWVsZFZhbHVlQ2hhbmdlZEV2ZW50KTtcbiAgICAgICAgdGhpcy5vbkZpZWxkQ2hhbmdlZChmaWVsZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cERyb3Bkb3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFByZXZpZXdTdGF0ZSgpO1xuXG4gICAgICAgIHRoaXMuY2hlY2tGaWVsZE9wdGlvbnNTb3VyY2UoKTtcbiAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG5cbiAgICAgICAgdGhpcy5zZXRGb3JtQ29udHJvbFZhbHVlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybUNvbnRyb2xTdGF0ZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvSW5wdXRDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuaW5pdEZpbHRlcigpO1xuICAgICAgICB0aGlzLmhhbmRsZUVycm9ycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9JbnB1dENoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25Db250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5maWVsZCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZSh2YWx1ZSwgdGhpcy5maWVsZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWRGb3JGaWVsZCh0aGlzLmZpZWxkKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9ybUNvbnRyb2xWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5maWVsZC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250cm9sLnNldFZhbHVlKHRoaXMuZmllbGQ/LnZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZD8udmFsdWUgJiYgdHlwZW9mIHRoaXMuZmllbGQ/LnZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRyb2wuc2V0VmFsdWUoeyBpZDogdGhpcy5maWVsZD8udmFsdWUuaWQsIG5hbWU6IHRoaXMuZmllbGQ/LnZhbHVlLm5hbWUgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGQudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250cm9sLnNldFZhbHVlKHRoaXMuZmllbGQ/LnZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udHJvbC5zZXRWYWx1ZSh7IGlkOiB0aGlzLmZpZWxkPy52YWx1ZSwgbmFtZTogJycgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVGb3JtQ29udHJvbFN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZURyb3Bkb3duVmFsaWRhdGlvblJ1bGVzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRHJvcGRvd25SZWFkb25seVJ1bGVzKCk7XG4gICAgICAgIHRoaXMuZHJvcGRvd25Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRHJvcGRvd25WYWxpZGF0aW9uUnVsZXMoKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25Db250cm9sLnNldFZhbGlkYXRvcnMoW10pO1xuXG4gICAgICAgIGlmICghdGhpcy5maWVsZD8uaXNWaXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlcXVpcmVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250cm9sLmFkZFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkLmhhc0VtcHR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udHJvbC5hZGRWYWxpZGF0b3JzKFtkZWZhdWx0VmFsdWVWYWxpZGF0b3IodGhpcy5maWVsZCldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRHJvcGRvd25SZWFkb25seVJ1bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5maWVsZD8ucmVhZE9ubHkgfHwgdGhpcy5yZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duQ29udHJvbC52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC52YWxpZGF0aW9uU3VtbWFyeSA9IG5ldyBFcnJvck1lc3NhZ2VNb2RlbCgnJyk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLm1hcmtBc1ZhbGlkKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kcm9wZG93bkNvbnRyb2wuaW52YWxpZCAmJiB0aGlzLmRyb3Bkb3duQ29udHJvbC5lcnJvcnMucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGQudmFsaWRhdGlvblN1bW1hcnkgPSBuZXcgRXJyb3JNZXNzYWdlTW9kZWwoeyBtZXNzYWdlOiAnRk9STS5GSUVMRC5SRVFVSVJFRCcgfSk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLm1hcmtBc0ludmFsaWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEZpbHRlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXIkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKHNlYXJjaCkgPT4gc2VhcmNoICE9PSB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIG1hcCgoc2VhcmNoKSA9PlxuICAgICAgICAgICAgICAgICAgICBzZWFyY2ggPyB0aGlzLmZpZWxkLm9wdGlvbnMuZmlsdGVyKCh7IG5hbWUgfSkgPT4gbmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSkgOiB0aGlzLmZpZWxkLm9wdGlvbnNcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXN1bHQpID0+IHRoaXMubGlzdCQubmV4dChyZXN1bHQpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrRmllbGRPcHRpb25zU291cmNlKCk6IHZvaWQge1xuICAgICAgICBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1JlYWRPbmx5Rm9ybTpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1ZhbGlkUmVzdENvbmZpZyAmJiAhdGhpcy5pc0xpbmtlZFdpZGdldDpcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RGaWVsZE9wdGlvbnNGcm9tUmVzdEFwaSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNMaW5rZWRXaWRnZXQ6XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRmllbGRPcHRpb25zRm9yTGlua2VkV2lkZ2V0KCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgdGhpcy5pc1ZhcmlhYmxlT3B0aW9uVHlwZTpcbiAgICAgICAgICAgICAgICB0aGlzLnBlcnNpc3RGaWVsZE9wdGlvbnNGcm9tVmFyaWFibGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcGVyc2lzdEZpZWxkT3B0aW9uc0Zyb21WYXJpYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc1BhdGggPSB0aGlzLmZpZWxkPy52YXJpYWJsZUNvbmZpZz8ub3B0aW9uc1BhdGggPz8gdGhpcy5kZWZhdWx0VmFyaWFibGVPcHRpb25QYXRoO1xuICAgICAgICBjb25zdCB2YXJpYWJsZU5hbWUgPSB0aGlzLmZpZWxkPy52YXJpYWJsZUNvbmZpZz8udmFyaWFibGVOYW1lO1xuICAgICAgICBjb25zdCBwcm9jZXNzVmFyaWFibGVzID0gdGhpcy5maWVsZD8uZm9ybT8ucHJvY2Vzc1ZhcmlhYmxlcztcbiAgICAgICAgY29uc3QgZm9ybVZhcmlhYmxlcyA9IHRoaXMuZmllbGQ/LmZvcm0/LnZhcmlhYmxlcztcblxuICAgICAgICBjb25zdCBkcm9wZG93bk9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbnNGcm9tVmFyaWFibGUocHJvY2Vzc1ZhcmlhYmxlcywgZm9ybVZhcmlhYmxlcywgdmFyaWFibGVOYW1lKTtcblxuICAgICAgICBpZiAoZHJvcGRvd25PcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtVmFyaWFibGVPcHRpb25zOiBGb3JtRmllbGRPcHRpb25bXSA9IHRoaXMuZ2V0T3B0aW9uc0Zyb21QYXRoKGRyb3Bkb3duT3B0aW9ucywgb3B0aW9uc1BhdGgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKGZvcm1WYXJpYWJsZU9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5yZXNldEludmFsaWRWYWx1ZSgpO1xuICAgICAgICAgICAgdGhpcy5maWVsZC51cGRhdGVGb3JtKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGAke3ZhcmlhYmxlTmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgdGhpcy52YXJpYWJsZU9wdGlvbnNGYWlsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zRnJvbVBhdGgoZGF0YTogYW55LCBwYXRoOiBzdHJpbmcpOiBGb3JtRmllbGRPcHRpb25bXSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNJZCA9IHRoaXMuZmllbGQ/LnZhcmlhYmxlQ29uZmlnPy5vcHRpb25zSWQgPz8gdGhpcy5kZWZhdWx0VmFyaWFibGVPcHRpb25JZDtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0xhYmVsID0gdGhpcy5maWVsZD8udmFyaWFibGVDb25maWc/Lm9wdGlvbnNMYWJlbCA/PyB0aGlzLmRlZmF1bHRWYXJpYWJsZU9wdGlvbkxhYmVsO1xuXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBwYXRoLnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQcm9wZXJ0eSA9IHByb3BlcnRpZXMuc2hpZnQoKTtcblxuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBjdXJyZW50UHJvcGVydHkpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGAke2N1cnJlbnRQcm9wZXJ0eX0gbm90IGZvdW5kIGluICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YCk7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlT3B0aW9uc0ZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXN0ZWREYXRhID0gZGF0YVtjdXJyZW50UHJvcGVydHldO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG5lc3RlZERhdGEpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25zRnJvbUFycmF5KG5lc3RlZERhdGEsIG9wdGlvbnNJZCwgb3B0aW9uc0xhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbnNGcm9tUGF0aChuZXN0ZWREYXRhLCBwcm9wZXJ0aWVzLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zRnJvbUFycmF5KG5lc3RlZERhdGE6IGFueVtdLCBpZDogc3RyaW5nLCBsYWJlbDogc3RyaW5nKTogRm9ybUZpZWxkT3B0aW9uW10ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gbmVzdGVkRGF0YS5tYXAoKGl0ZW0pID0+IHRoaXMuY3JlYXRlT3B0aW9uKGl0ZW0sIGlkLCBsYWJlbCkpO1xuICAgICAgICBjb25zdCBoYXNJbnZhbGlkT3B0aW9uID0gb3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFvcHRpb24pO1xuXG4gICAgICAgIGlmIChoYXNJbnZhbGlkT3B0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlT3B0aW9uc0ZhaWxlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnZhcmlhYmxlT3B0aW9uc0ZhaWxlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZU9wdGlvbihpdGVtOiBhbnksIGlkOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpOiBGb3JtRmllbGRPcHRpb24ge1xuICAgICAgICBjb25zdCBvcHRpb246IEZvcm1GaWVsZE9wdGlvbiA9IHtcbiAgICAgICAgICAgIGlkOiBpdGVtW2lkXSxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW1bbGFiZWxdXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFvcHRpb24uaWQgfHwgIW9wdGlvbi5uYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGAnaWQnIG9yICdsYWJlbCcgaXMgbm90IHByb3Blcmx5IGRlZmluZWRgKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3B0aW9uc0Zyb21WYXJpYWJsZShcbiAgICAgICAgcHJvY2Vzc1ZhcmlhYmxlczogVGFza1ZhcmlhYmxlQ2xvdWRbXSxcbiAgICAgICAgZm9ybVZhcmlhYmxlczogVGFza1ZhcmlhYmxlQ2xvdWRbXSxcbiAgICAgICAgdmFyaWFibGVOYW1lOiBzdHJpbmdcbiAgICApOiBUYXNrVmFyaWFibGVDbG91ZCB7XG4gICAgICAgIGNvbnN0IHByb2Nlc3NWYXJpYWJsZURyb3Bkb3duT3B0aW9uczogVGFza1ZhcmlhYmxlQ2xvdWQgPSB0aGlzLmdldFZhcmlhYmxlVmFsdWVCeU5hbWUocHJvY2Vzc1ZhcmlhYmxlcywgdmFyaWFibGVOYW1lKTtcbiAgICAgICAgY29uc3QgZm9ybVZhcmlhYmxlRHJvcGRvd25PcHRpb25zOiBUYXNrVmFyaWFibGVDbG91ZCA9IHRoaXMuZ2V0VmFyaWFibGVWYWx1ZUJ5TmFtZShmb3JtVmFyaWFibGVzLCB2YXJpYWJsZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiBwcm9jZXNzVmFyaWFibGVEcm9wZG93bk9wdGlvbnMgPz8gZm9ybVZhcmlhYmxlRHJvcGRvd25PcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFyaWFibGVWYWx1ZUJ5TmFtZSh2YXJpYWJsZXM6IFRhc2tWYXJpYWJsZUNsb3VkW10sIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlcz8uZmluZCgodmFyaWFibGU6IFRhc2tWYXJpYWJsZUNsb3VkKSA9PiB2YXJpYWJsZT8ubmFtZSA9PT0gYHZhcmlhYmxlcy4ke3ZhcmlhYmxlTmFtZX1gIHx8IHZhcmlhYmxlPy5uYW1lID09PSB2YXJpYWJsZU5hbWUpXG4gICAgICAgICAgICA/LnZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGVyc2lzdEZpZWxkT3B0aW9uc0Zyb21SZXN0QXBpKCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkUmVzdENvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5yZXNldFJlc3RBcGlFcnJvck1lc3NhZ2UoKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlQYXJhbSA9IHRoaXMuYnVpbGRCb2R5UGFyYW0oKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNsb3VkU2VydmljZVxuICAgICAgICAgICAgICAgIC5nZXRSZXN0V2lkZ2V0RGF0YSh0aGlzLmZpZWxkLmZvcm0uaWQsIHRoaXMuZmllbGQuaWQsIGJvZHlQYXJhbSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKHJlc3VsdDogRm9ybUZpZWxkT3B0aW9uW10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRSZXN0QXBpRXJyb3JNZXNzYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQudXBkYXRlRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldEludmFsaWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFJlc3RBcGlPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRCb2R5UGFyYW0oKTogYW55IHtcbiAgICAgICAgY29uc3QgYm9keVBhcmFtID0gT2JqZWN0LmFzc2lnbih7fSk7XG4gICAgICAgIGlmICh0aGlzLmlzTGlua2VkV2lkZ2V0KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRXaWRnZXRWYWx1ZSA9IHRoaXMuZ2V0UGFyZW50V2lkZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFdpZGdldElkID0gdGhpcy5saW5rZWRXaWRnZXRJZDtcbiAgICAgICAgICAgIGJvZHlQYXJhbVtwYXJlbnRXaWRnZXRJZF0gPSBwYXJlbnRXaWRnZXRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1VdGlsc1NlcnZpY2UuZ2V0UmVzdFVybFZhcmlhYmxlc01hcCh0aGlzLmZpZWxkLmZvcm0sIHRoaXMuZmllbGQucmVzdFVybCwgYm9keVBhcmFtKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRGaWVsZE9wdGlvbnNGb3JMaW5rZWRXaWRnZXQoKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFdpZGdldFZhbHVlID0gdGhpcy5nZXRQYXJlbnRXaWRnZXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLnBhcmVudFZhbHVlQ2hhbmdlZChwYXJlbnRXaWRnZXRWYWx1ZSk7XG5cbiAgICAgICAgdGhpcy5mb3JtU2VydmljZS5mb3JtRmllbGRWYWx1ZUNoYW5nZWRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IEZvcm1GaWVsZEV2ZW50KSA9PiB0aGlzLmlzRm9ybUZpZWxkRXZlbnRPZlR5cGVEcm9wZG93bihldmVudCkgJiYgdGhpcy5pc1BhcmVudEZvcm1GaWVsZEV2ZW50KGV2ZW50KSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBGb3JtRmllbGRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlT2ZQYXJlbnRXaWRnZXQgPSBldmVudC5maWVsZC52YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudFZhbHVlQ2hhbmdlZCh2YWx1ZU9mUGFyZW50V2lkZ2V0KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UGFyZW50V2lkZ2V0VmFsdWUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGFyZW50V2lkZ2V0SWQgPSB0aGlzLmxpbmtlZFdpZGdldElkO1xuICAgICAgICBjb25zdCBwYXJlbnRXaWRnZXQgPSB0aGlzLmdldEZvcm1GaWVsZEJ5SWQocGFyZW50V2lkZ2V0SWQpO1xuICAgICAgICByZXR1cm4gcGFyZW50V2lkZ2V0Py52YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcmVudFZhbHVlQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiAhdGhpcy5pc05vbmVWYWx1ZVNlbGVjdGVkKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkUmVzdENvbmZpZyA/IHRoaXMucGVyc2lzdEZpZWxkT3B0aW9uc0Zyb21SZXN0QXBpKCkgOiB0aGlzLnBlcnNpc3RGaWVsZE9wdGlvbnNGcm9tTWFudWFsTGlzdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc05vbmVWYWx1ZVNlbGVjdGVkKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFJlc3RBcGlFcnJvck1lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRPcHRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0SW52YWxpZFZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoW10pO1xuICAgICAgICAgICAgdGhpcy5yZXNldEludmFsaWRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05vbmVWYWx1ZVNlbGVjdGVkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtRmllbGRCeUlkKGZpZWxkSWQpOiBGb3JtRmllbGRNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkLmZvcm0uZ2V0Rm9ybUZpZWxkcygpLmZpbHRlcigoZmllbGQ6IEZvcm1GaWVsZE1vZGVsKSA9PiBmaWVsZC5pZCA9PT0gZmllbGRJZClbMF07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwZXJzaXN0RmllbGRPcHRpb25zRnJvbU1hbnVhbExpc3QodmFsdWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5oYXNSdWxlRW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlc0VudHJpZXMgPSB0aGlzLmZpZWxkLnJ1bGUuZW50cmllcztcbiAgICAgICAgICAgIHJ1bGVzRW50cmllcy5mb3JFYWNoKChydWxlRW50cnk6IFJ1bGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChydWxlRW50cnkua2V5ID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMocnVsZUVudHJ5Lm9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0SW52YWxpZFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQudXBkYXRlRm9ybSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldEludmFsaWRWYWx1ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRWYWx1ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VmFsdWUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRWYWx1ZSgpIHtcbiAgICAgICAgdGhpcy5maWVsZC52YWx1ZSA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWRGb3JGaWVsZCh0aGlzLmZpZWxkKTtcbiAgICAgICAgdGhpcy51cGRhdGVPcHRpb25zKCk7XG4gICAgICAgIHRoaXMuZmllbGQudXBkYXRlRm9ybSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZFZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC52YWx1ZSAmJiB0aGlzLmlzU2VsZWN0ZWRWYWx1ZUluT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTZWxlY3RlZFZhbHVlSW5PcHRpb25zKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZpZWxkLnZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uSWRMaXN0ID0gWy4uLnRoaXMuZmllbGQub3B0aW9uc10ubWFwKChvcHRpb24pID0+IG9wdGlvbi5pZCk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlSWRzID0gdGhpcy5maWVsZC52YWx1ZS5tYXAoKHZhbHVlT3B0aW9uKSA9PiB2YWx1ZU9wdGlvbi5pZCk7XG4gICAgICAgICAgICByZXR1cm4gZmllbGRWYWx1ZUlkcy5ldmVyeSgodmFsdWVPcHRpb25JZCkgPT4gb3B0aW9uSWRMaXN0LmluY2x1ZGVzKHZhbHVlT3B0aW9uSWQpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpZWxkPy52YWx1ZSAmJiB0eXBlb2YgdGhpcy5maWVsZD8udmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZpZWxkLm9wdGlvbnNdLm1hcCgob3B0aW9uKSA9PiBvcHRpb24uaWQpLmluY2x1ZGVzKHRoaXMuZmllbGQudmFsdWUuaWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWy4uLnRoaXMuZmllbGQub3B0aW9uc10ubWFwKChvcHRpb24pID0+IG9wdGlvbi5pZCkuaW5jbHVkZXModGhpcy5maWVsZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1J1bGVFbnRyaWVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpZWxkLnJ1bGUuZW50cmllcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldE9wdGlvbnMoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlT3B0aW9ucyhbXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1BhcmVudEZvcm1GaWVsZEV2ZW50KGV2ZW50OiBGb3JtRmllbGRFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZXZlbnQuZmllbGQuaWQgPT09IHRoaXMubGlua2VkV2lkZ2V0SWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0Zvcm1GaWVsZEV2ZW50T2ZUeXBlRHJvcGRvd24oZXZlbnQ6IEZvcm1GaWVsZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBldmVudC5maWVsZC50eXBlID09PSBGb3JtRmllbGRUeXBlcy5EUk9QRE9XTjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE9wdGlvblZhbHVlKG9wdGlvbjogRm9ybUZpZWxkT3B0aW9uIHwgRm9ybUZpZWxkT3B0aW9uW10sIGZpZWxkOiBGb3JtRmllbGRNb2RlbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb24pIHx8IGZpZWxkLmhhc011bHRpcGxlVmFsdWVzKSB7XG4gICAgICAgICAgICBmaWVsZC52YWx1ZSA9IG9wdGlvbjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvcHRpb25WYWx1ZTogc3RyaW5nID0gJyc7XG4gICAgICAgIGlmIChvcHRpb24uaWQgPT09IERFRkFVTFRfT1BUSU9OLmlkKSB7XG4gICAgICAgICAgICBvcHRpb25WYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb24ubmFtZSAhPT0gZmllbGQudmFsdWUpIHtcbiAgICAgICAgICAgIG9wdGlvblZhbHVlID0gb3B0aW9uLmlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3B0aW9uVmFsdWUgPSBvcHRpb24ubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpZWxkLnZhbHVlID0gb3B0aW9uVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRQcmV2aWV3U3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJldmlld1N0YXRlID0gdGhpcy5mb3JtQ2xvdWRTZXJ2aWNlLmdldFByZXZpZXdTdGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSkge1xuICAgICAgICBpZiAoIXRoaXMucHJldmlld1N0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldEVycm9yLmVtaXQoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVPcHRpb25zKG9wdGlvbnM/OiBGb3JtRmllbGRPcHRpb25bXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5saXN0JC5uZXh0KHRoaXMuZmllbGQub3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc2hvd0lucHV0RmlsdGVyID0gdGhpcy5maWVsZC5vcHRpb25zLmxlbmd0aCA+IHRoaXMuYXBwQ29uZmlnLmdldDxudW1iZXI+KCdmb3JtLmRyb3BEb3duRmlsdGVyTGltaXQnLCBISURFX0ZJTFRFUl9MSU1JVCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFJlc3RBcGlFcnJvck1lc3NhZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNSZXN0QXBpRmFpbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVzdEFwaUhvc3ROYW1lID0gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldFJlc3RBcGlPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZU9wdGlvbnMoW10pO1xuICAgICAgICB0aGlzLnJlc2V0VmFsdWUoKTtcbiAgICAgICAgdGhpcy5pc1Jlc3RBcGlGYWlsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc3RBcGlIb3N0TmFtZSA9IHRoaXMuZ2V0UmVzdFVybEhvc3ROYW1lKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSZXN0VXJsSG9zdE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVVJMKHRoaXMuZmllbGQ/LnJlc3RVcmwpLmhvc3RuYW1lO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpZWxkPy5yZXN0VXJsO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiYWRmLWRyb3Bkb3duLXdpZGdldCB7e2ZpZWxkLmNsYXNzTmFtZX19XCJcbiAgICBbY2xhc3MuYWRmLWludmFsaWRdPVwiZHJvcGRvd25Db250cm9sLmludmFsaWQgJiYgZHJvcGRvd25Db250cm9sLnRvdWNoZWRcIlxuICAgIFtjbGFzcy5hZGYtcmVhZG9ubHldPVwiZmllbGQucmVhZE9ubHlcIlxuICAgIFtjbGFzcy5hZGYtbGVmdC1sYWJlbC1pbnB1dC1jb250YWluZXJdPVwiZmllbGQubGVmdExhYmVsc1wiXG4+XG4gICAgPGRpdiAqbmdJZj1cImZpZWxkLmxlZnRMYWJlbHNcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYWRmLWxhYmVsIGFkZi1sZWZ0LWxhYmVsXCIgW2F0dHIuZm9yXT1cImZpZWxkLmlkXCI+XG4gICAgICAgICAgICB7eyBmaWVsZC5uYW1lIHwgdHJhbnNsYXRlIH19PHNwYW4gY2xhc3M9XCJhZGYtYXN0ZXJpc2tcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJpc1JlcXVpcmVkKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiPio8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCAqbmdJZj1cIiFmaWVsZC5sZWZ0TGFiZWxzXCIgY2xhc3M9XCJhZGYtbGFiZWxcIiBbYXR0ci5mb3JdPVwiZmllbGQuaWRcIj5cbiAgICAgICAgICAgICAgICB7eyBmaWVsZC5uYW1lIHwgdHJhbnNsYXRlIH19PHNwYW4gY2xhc3M9XCJhZGYtYXN0ZXJpc2tcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJpc1JlcXVpcmVkKCkgPyAndmlzaWJsZScgOiAnaGlkZGVuJ1wiPio8L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZHJvcGRvd25Db250cm9sXCJcbiAgICAgICAgICAgICAgICBbaWRdPVwiZmllbGQuaWRcIlxuICAgICAgICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlRHJvcGRvd25WYWx1ZXNcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWVsZC50b29sdGlwXCJcbiAgICAgICAgICAgICAgICBwYW5lbENsYXNzPVwiYWRmLXNlbGVjdC1maWx0ZXJcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJmaWVsZC5oYXNNdWx0aXBsZVZhbHVlc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGFkZi1zZWxlY3QtZmlsdGVyLWlucHV0ICpuZ0lmPVwic2hvd0lucHV0RmlsdGVyXCIgKGNoYW5nZSk9XCJmaWx0ZXIkLm5leHQoJGV2ZW50KVwiIC8+XG5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIGxpc3QkIHwgYXN5bmNcIiBbdmFsdWVdPVwib3B0XCIgW2lkXT1cIm9wdC5pZFwiPnt7b3B0Lm5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBpZD1cInJlYWRvbmx5T3B0aW9uXCIgKm5nSWY9XCJpc1JlYWRPbmx5VHlwZVwiIFt2YWx1ZV09XCJmaWVsZC52YWx1ZVwiPnt7ZmllbGQudmFsdWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFwcmV2aWV3U3RhdGUgJiYgIWZpZWxkLnJlYWRPbmx5XCI+XG4gICAgICAgICAgICA8ZXJyb3Itd2lkZ2V0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtZHJvcGRvd24tcmVxdWlyZWQtbWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93UmVxdWlyZWRNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInt7ICdGT1JNLkZJRUxELlJFUVVJUkVEJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGVycm9yLXdpZGdldFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRyb3Bkb3duLWZhaWxlZC1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzUmVzdEFwaUZhaWxlZFwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5SRVNUX0FQSV9GQUlMRUQnIHwgdHJhbnNsYXRlOiB7IGhvc3RuYW1lOiByZXN0QXBpSG9zdE5hbWUgfSB9fVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGVycm9yLXdpZGdldFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWRyb3Bkb3duLWZhaWxlZC1tZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInZhcmlhYmxlT3B0aW9uc0ZhaWxlZFwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5WQVJJQUJMRV9EUk9QRE9XTl9PUFRJT05TX0ZBSUxFRCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,29 +0,0 @@
1
- /*!
2
- * @license
3
- * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
4
- *
5
- * Licensed under the Apache License, Version 2.0 (the "License");
6
- * you may not use this file except in compliance with the License.
7
- * You may obtain a copy of the License at
8
- *
9
- * http://www.apache.org/licenses/LICENSE-2.0
10
- *
11
- * Unless required by applicable law or agreed to in writing, software
12
- * distributed under the License is distributed on an "AS IS" BASIS,
13
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- * See the License for the specific language governing permissions and
15
- * limitations under the License.
16
- */
17
- import { DEFAULT_OPTION } from './dropdown-cloud.widget';
18
- export const defaultValueValidator = (filed) => (control) => {
19
- const optionsWithNoDefaultValue = filed.options.filter((dropdownOption) => {
20
- const isDefaultValue = dropdownOption.id === DEFAULT_OPTION.id;
21
- return !isDefaultValue;
22
- });
23
- const isSomeOptionSelected = optionsWithNoDefaultValue.some((dropdownOption) => {
24
- const isOptionSelected = dropdownOption.id === control.value?.id;
25
- return isOptionSelected;
26
- });
27
- return isSomeOptionSelected ? null : { required: true };
28
- };
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvZHJvcGRvd24vdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFJSCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFekQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQzlCLENBQUMsS0FBcUIsRUFBZSxFQUFFLENBQ3ZDLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtJQUNsRCxNQUFNLHlCQUF5QixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7UUFDdEUsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLEVBQUUsS0FBSyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBRS9ELE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLG9CQUFvQixHQUFHLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFO1FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsY0FBYyxDQUFDLEVBQUUsS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUVqRSxPQUFPLGdCQUFnQixDQUFDO0lBQzVCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEZvcm1GaWVsZE1vZGVsIH0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvckZuLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBERUZBVUxUX09QVElPTiB9IGZyb20gJy4vZHJvcGRvd24tY2xvdWQud2lkZ2V0JztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRWYWx1ZVZhbGlkYXRvciA9XG4gICAgKGZpbGVkOiBGb3JtRmllbGRNb2RlbCk6IFZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc1dpdGhOb0RlZmF1bHRWYWx1ZSA9IGZpbGVkLm9wdGlvbnMuZmlsdGVyKChkcm9wZG93bk9wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNEZWZhdWx0VmFsdWUgPSBkcm9wZG93bk9wdGlvbi5pZCA9PT0gREVGQVVMVF9PUFRJT04uaWQ7XG5cbiAgICAgICAgICAgIHJldHVybiAhaXNEZWZhdWx0VmFsdWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGlzU29tZU9wdGlvblNlbGVjdGVkID0gb3B0aW9uc1dpdGhOb0RlZmF1bHRWYWx1ZS5zb21lKChkcm9wZG93bk9wdGlvbikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNPcHRpb25TZWxlY3RlZCA9IGRyb3Bkb3duT3B0aW9uLmlkID09PSBjb250cm9sLnZhbHVlPy5pZDtcblxuICAgICAgICAgICAgcmV0dXJuIGlzT3B0aW9uU2VsZWN0ZWQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBpc1NvbWVPcHRpb25TZWxlY3RlZCA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgfTtcbiJdfQ==