@alfresco/adf-process-services-cloud 8.1.0-15484232623 → 8.1.0-15488123400

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 (174) hide show
  1. package/bundles/assets/adf-process-services-cloud/i18n/de.json +2 -2
  2. package/fesm2022/adf-process-services-cloud.mjs +356 -350
  3. package/fesm2022/adf-process-services-cloud.mjs.map +1 -1
  4. package/lib/process/process-filters/models/process-filter-cloud.model.d.ts +1 -0
  5. package/lib/task/task-filters/components/base-task-filters-cloud.component.d.ts +1 -1
  6. package/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.d.ts +1 -1
  7. package/lib/task/task-list/components/base-task-list-cloud.component.d.ts +1 -1
  8. package/package.json +4 -6
  9. package/esm2022/adf-process-services-cloud.mjs +0 -5
  10. package/esm2022/lib/app/app-list-cloud.module.mjs +0 -20
  11. package/esm2022/lib/app/components/app-details-cloud/app-details-cloud.component.mjs +0 -67
  12. package/esm2022/lib/app/components/app-list-cloud/app-list-cloud.component.mjs +0 -126
  13. package/esm2022/lib/app/models/application-instance.model.mjs +0 -24
  14. package/esm2022/lib/app/public-api.mjs +0 -22
  15. package/esm2022/lib/app/services/apps-process-cloud.service.mjs +0 -97
  16. package/esm2022/lib/common/date-range-filter/date-range-filter.component.mjs +0 -164
  17. package/esm2022/lib/common/date-range-filter/date-range-filter.service.mjs +0 -97
  18. package/esm2022/lib/common/index.mjs +0 -18
  19. package/esm2022/lib/common/interface/environment.interface.mjs +0 -18
  20. package/esm2022/lib/common/interface/index.mjs +0 -18
  21. package/esm2022/lib/common/interface/public-api.mjs +0 -18
  22. package/esm2022/lib/common/public-api.mjs +0 -19
  23. package/esm2022/lib/form/components/cloud-form-rendering.service.mjs +0 -57
  24. package/esm2022/lib/form/components/form-cloud-custom-outcomes.component.mjs +0 -31
  25. package/esm2022/lib/form/components/form-cloud.component.mjs +0 -416
  26. package/esm2022/lib/form/components/form-definition-selector-cloud.component.mjs +0 -54
  27. package/esm2022/lib/form/components/spinner/form-spinner.component.mjs +0 -36
  28. package/esm2022/lib/form/components/widgets/attach-file/attach-file-cloud-widget.component.mjs +0 -250
  29. package/esm2022/lib/form/components/widgets/attach-file/file-properties-table/file-properties-table-cloud.component.mjs +0 -137
  30. package/esm2022/lib/form/components/widgets/data-table/data-table-adapter.widget.mjs +0 -107
  31. package/esm2022/lib/form/components/widgets/data-table/data-table.widget.mjs +0 -121
  32. package/esm2022/lib/form/components/widgets/data-table/helpers/data-table-path-parser.helper.mjs +0 -122
  33. package/esm2022/lib/form/components/widgets/date/date-cloud.widget.mjs +0 -190
  34. package/esm2022/lib/form/components/widgets/display-external-property/display-external-property.widget.mjs +0 -86
  35. package/esm2022/lib/form/components/widgets/display-rich-text/display-rich-text.widget.mjs +0 -80
  36. package/esm2022/lib/form/components/widgets/dropdown/dropdown-cloud.widget.mjs +0 -464
  37. package/esm2022/lib/form/components/widgets/dropdown/validators.mjs +0 -29
  38. package/esm2022/lib/form/components/widgets/file-viewer/file-viewer.widget.mjs +0 -47
  39. package/esm2022/lib/form/components/widgets/group/group-cloud.widget.mjs +0 -83
  40. package/esm2022/lib/form/components/widgets/people/people-cloud.widget.mjs +0 -92
  41. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer-wrapper/properties-viewer-wrapper.component.mjs +0 -81
  42. package/esm2022/lib/form/components/widgets/properties-viewer/properties-viewer.widget.mjs +0 -54
  43. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.schema.mjs +0 -86
  44. package/esm2022/lib/form/components/widgets/radio-buttons/radio-buttons-cloud.widget.mjs +0 -117
  45. package/esm2022/lib/form/components/widgets/upload/upload-cloud.widget.mjs +0 -188
  46. package/esm2022/lib/form/form-cloud.module.mjs +0 -103
  47. package/esm2022/lib/form/models/form-cloud-representation.model.mjs +0 -48
  48. package/esm2022/lib/form/models/task-variable-cloud.model.mjs +0 -28
  49. package/esm2022/lib/form/public-api.mjs +0 -44
  50. package/esm2022/lib/form/services/content-cloud-node-selector.service.mjs +0 -120
  51. package/esm2022/lib/form/services/display-mode.service.mjs +0 -146
  52. package/esm2022/lib/form/services/form-cloud.service.interface.mjs +0 -18
  53. package/esm2022/lib/form/services/form-cloud.service.mjs +0 -201
  54. package/esm2022/lib/form/services/form-definition-selector-cloud.service.interface.mjs +0 -18
  55. package/esm2022/lib/form/services/form-definition-selector-cloud.service.mjs +0 -51
  56. package/esm2022/lib/form/services/form-utils.service.mjs +0 -37
  57. package/esm2022/lib/form/services/process-cloud-content.service.mjs +0 -71
  58. package/esm2022/lib/form/services/spinner/form-cloud-spinner.service.mjs +0 -52
  59. package/esm2022/lib/group/components/group-cloud.component.mjs +0 -424
  60. package/esm2022/lib/group/group-cloud.module.mjs +0 -33
  61. package/esm2022/lib/group/models/identity-group.model.mjs +0 -18
  62. package/esm2022/lib/group/public-api.mjs +0 -21
  63. package/esm2022/lib/group/services/identity-group.service.mjs +0 -89
  64. package/esm2022/lib/models/application-version.model.mjs +0 -21
  65. package/esm2022/lib/models/constant-values.type.mjs +0 -18
  66. package/esm2022/lib/models/data-column-custom-data.mjs +0 -18
  67. package/esm2022/lib/models/date-cloud-filter.model.mjs +0 -31
  68. package/esm2022/lib/models/date-format-cloud.model.mjs +0 -18
  69. package/esm2022/lib/models/engine-event-cloud.model.mjs +0 -18
  70. package/esm2022/lib/models/filter-cloud-model.mjs +0 -128
  71. package/esm2022/lib/models/process-definition-cloud.model.mjs +0 -32
  72. package/esm2022/lib/models/process-instance-variable.model.mjs +0 -18
  73. package/esm2022/lib/models/process-variable-filter.model.mjs +0 -18
  74. package/esm2022/lib/models/task-cloud.model.mjs +0 -23
  75. package/esm2022/lib/models/task-list-sorting.model.mjs +0 -40
  76. package/esm2022/lib/models/variable-definition.mjs +0 -18
  77. package/esm2022/lib/people/components/people-cloud.component.mjs +0 -499
  78. package/esm2022/lib/people/models/identity-user.model.mjs +0 -18
  79. package/esm2022/lib/people/people-cloud.module.mjs +0 -33
  80. package/esm2022/lib/people/public-api.mjs +0 -21
  81. package/esm2022/lib/people/services/identity-user.service.mjs +0 -119
  82. package/esm2022/lib/process/process-cloud.module.mjs +0 -40
  83. package/esm2022/lib/process/process-filters/components/edit-process-filter/edit-process-filter-cloud.component.mjs +0 -802
  84. package/esm2022/lib/process/process-filters/components/process-filter-dialog/process-filter-dialog-cloud.component.mjs +0 -59
  85. package/esm2022/lib/process/process-filters/components/process-filters/process-filters-cloud.component.mjs +0 -290
  86. package/esm2022/lib/process/process-filters/models/process-filter-cloud.model.mjs +0 -169
  87. package/esm2022/lib/process/process-filters/process-filters-cloud.module.mjs +0 -44
  88. package/esm2022/lib/process/process-filters/public-api.mjs +0 -23
  89. package/esm2022/lib/process/process-filters/services/process-filter-cloud.service.mjs +0 -405
  90. package/esm2022/lib/process/process-header/components/process-header-cloud.component.mjs +0 -137
  91. package/esm2022/lib/process/process-header/process-header-cloud.module.mjs +0 -33
  92. package/esm2022/lib/process/process-header/public-api.mjs +0 -19
  93. package/esm2022/lib/process/process-list/components/process-list-cloud.component.mjs +0 -594
  94. package/esm2022/lib/process/process-list/datatable/process-list-datatable-adapter.mjs +0 -31
  95. package/esm2022/lib/process/process-list/models/perocess-instance-cloud-view.model.mjs +0 -18
  96. package/esm2022/lib/process/process-list/models/process-cloud-preferences.mjs +0 -24
  97. package/esm2022/lib/process/process-list/models/process-cloud-preset.model.mjs +0 -37
  98. package/esm2022/lib/process/process-list/models/process-cloud-query-request.model.mjs +0 -107
  99. package/esm2022/lib/process/process-list/models/process-list-sorting.model.mjs +0 -40
  100. package/esm2022/lib/process/process-list/process-list-cloud.module.mjs +0 -45
  101. package/esm2022/lib/process/process-list/public-api.mjs +0 -25
  102. package/esm2022/lib/process/process-list/services/process-list-cloud.service.mjs +0 -253
  103. package/esm2022/lib/process/process-list/services/process-task-list-cloud.service.mjs +0 -109
  104. package/esm2022/lib/process/public-api.mjs +0 -23
  105. package/esm2022/lib/process/services/process-cloud.service.mjs +0 -105
  106. package/esm2022/lib/process/start-process/components/start-process-cloud.component.mjs +0 -481
  107. package/esm2022/lib/process/start-process/models/process-instance-cloud.model.mjs +0 -18
  108. package/esm2022/lib/process/start-process/models/process-payload-cloud.model.mjs +0 -26
  109. package/esm2022/lib/process/start-process/models/process-with-form-payload-cloud.model.mjs +0 -26
  110. package/esm2022/lib/process/start-process/public-api.mjs +0 -21
  111. package/esm2022/lib/process/start-process/services/start-process-cloud.service.mjs +0 -125
  112. package/esm2022/lib/process-services-cloud.module.mjs +0 -91
  113. package/esm2022/lib/rich-text-editor/editorjs-config.mjs +0 -101
  114. package/esm2022/lib/rich-text-editor/index.mjs +0 -18
  115. package/esm2022/lib/rich-text-editor/public-api.mjs +0 -19
  116. package/esm2022/lib/rich-text-editor/rich-text-editor.component.mjs +0 -80
  117. package/esm2022/lib/rich-text-editor/rich-text-editor.module.mjs +0 -33
  118. package/esm2022/lib/screen/components/screen-cloud/screen-cloud.component.mjs +0 -186
  119. package/esm2022/lib/screen/models/screen-cloud.model.mjs +0 -18
  120. package/esm2022/lib/screen/public-api.mjs +0 -18
  121. package/esm2022/lib/services/base-cloud.service.mjs +0 -83
  122. package/esm2022/lib/services/cloud-token.service.mjs +0 -23
  123. package/esm2022/lib/services/form-fields.interfaces.mjs +0 -55
  124. package/esm2022/lib/services/local-preference-cloud.service.mjs +0 -122
  125. package/esm2022/lib/services/notification-cloud.service.mjs +0 -45
  126. package/esm2022/lib/services/preference-cloud.interface.mjs +0 -18
  127. package/esm2022/lib/services/public-api.mjs +0 -28
  128. package/esm2022/lib/services/screen-rendering.service.mjs +0 -30
  129. package/esm2022/lib/services/task-list-cloud.service.interface.mjs +0 -18
  130. package/esm2022/lib/services/user-preference-cloud.service.mjs +0 -105
  131. package/esm2022/lib/services/variable-mapper.sevice.mjs +0 -77
  132. package/esm2022/lib/services/web-socket.service.mjs +0 -146
  133. package/esm2022/lib/task/models/start-task-cloud-request.model.mjs +0 -32
  134. package/esm2022/lib/task/models/task-details-cloud.model.mjs +0 -26
  135. package/esm2022/lib/task/models/task.model.mjs +0 -23
  136. package/esm2022/lib/task/public-api.mjs +0 -26
  137. package/esm2022/lib/task/services/task-cloud.service.mjs +0 -272
  138. package/esm2022/lib/task/task-cloud.module.mjs +0 -45
  139. package/esm2022/lib/task/task-filters/components/base-task-filters-cloud.component.mjs +0 -59
  140. package/esm2022/lib/task/task-filters/components/edit-task-filters/base-edit-task-filter-cloud.component.mjs +0 -467
  141. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-service-task-filter/edit-service-task-filter-cloud.component.mjs +0 -206
  142. package/esm2022/lib/task/task-filters/components/edit-task-filters/edit-task-filter/edit-task-filter-cloud.component.mjs +0 -318
  143. package/esm2022/lib/task/task-filters/components/service-task-filters/service-task-filters-cloud.component.mjs +0 -147
  144. package/esm2022/lib/task/task-filters/components/task-assignment-filter/task-assignment-filter.component.mjs +0 -143
  145. package/esm2022/lib/task/task-filters/components/task-filter-dialog/task-filter-dialog-cloud.component.mjs +0 -73
  146. package/esm2022/lib/task/task-filters/components/task-filters/task-filters-cloud.component.mjs +0 -256
  147. package/esm2022/lib/task/task-filters/models/filter-cloud.model.mjs +0 -207
  148. package/esm2022/lib/task/task-filters/public-api.mjs +0 -27
  149. package/esm2022/lib/task/task-filters/services/service-task-filter-cloud.service.mjs +0 -283
  150. package/esm2022/lib/task/task-filters/services/task-filter-cloud.service.mjs +0 -392
  151. package/esm2022/lib/task/task-filters/task-filters-cloud.module.mjs +0 -56
  152. package/esm2022/lib/task/task-form/components/task-form-cloud/task-form-cloud.component.mjs +0 -214
  153. package/esm2022/lib/task/task-form/components/user-task-cloud/complete-task/complete-task.directive.mjs +0 -89
  154. package/esm2022/lib/task/task-form/components/user-task-cloud/user-task-cloud.component.mjs +0 -284
  155. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/claim-task/claim-task-cloud.directive.mjs +0 -101
  156. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/unclaim-task/unclaim-task-cloud.directive.mjs +0 -87
  157. package/esm2022/lib/task/task-form/components/user-task-cloud-buttons/user-task-cloud-buttons.component.mjs +0 -79
  158. package/esm2022/lib/task/task-form/public-api.mjs +0 -21
  159. package/esm2022/lib/task/task-form/task-form.module.mjs +0 -36
  160. package/esm2022/lib/task/task-header/components/task-header-cloud.component.mjs +0 -280
  161. package/esm2022/lib/task/task-header/public-api.mjs +0 -19
  162. package/esm2022/lib/task/task-header/task-header-cloud.module.mjs +0 -33
  163. package/esm2022/lib/task/task-list/components/base-task-list-cloud.component.mjs +0 -331
  164. package/esm2022/lib/task/task-list/components/service-task-list/service-task-list-cloud.component.mjs +0 -116
  165. package/esm2022/lib/task/task-list/components/task-list/datatable/task-list-datatable-adapter.mjs +0 -31
  166. package/esm2022/lib/task/task-list/components/task-list/task-list-cloud.component.mjs +0 -390
  167. package/esm2022/lib/task/task-list/models/service-task-cloud.model.mjs +0 -18
  168. package/esm2022/lib/task/task-list/models/task-cloud-view.model.mjs +0 -18
  169. package/esm2022/lib/task/task-list/public-api.mjs +0 -23
  170. package/esm2022/lib/task/task-list/services/service-task-list-cloud.service.mjs +0 -115
  171. package/esm2022/lib/task/task-list/services/task-list-cloud.service.mjs +0 -178
  172. package/esm2022/lib/task/task-list/task-list-cloud.module.mjs +0 -57
  173. package/esm2022/lib/types.mjs +0 -18
  174. package/esm2022/public-api.mjs +0 -40
@@ -1,54 +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 { Component, EventEmitter, Input, Output } from '@angular/core';
18
- import { FormDefinitionSelectorCloudService } from '../services/form-definition-selector-cloud.service';
19
- import { MatSelectModule } from '@angular/material/select';
20
- import { CommonModule } from '@angular/common';
21
- import { TranslateModule } from '@ngx-translate/core';
22
- import * as i0 from "@angular/core";
23
- import * as i1 from "../services/form-definition-selector-cloud.service";
24
- import * as i2 from "@angular/common";
25
- import * as i3 from "@ngx-translate/core";
26
- import * as i4 from "@angular/material/form-field";
27
- import * as i5 from "@angular/material/select";
28
- import * as i6 from "@angular/material/core";
29
- export class FormDefinitionSelectorCloudComponent {
30
- constructor(formDefinitionCloudService) {
31
- this.formDefinitionCloudService = formDefinitionCloudService;
32
- /** Name of the application. If specified, this shows the users who have access to the app. */
33
- this.appName = '';
34
- /** Emitted when a form is selected. */
35
- this.selectForm = new EventEmitter();
36
- }
37
- ngOnInit() {
38
- this.forms$ = this.formDefinitionCloudService.getStandAloneTaskForms(this.appName);
39
- }
40
- onSelect(event) {
41
- this.selectForm.emit(event.value);
42
- }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDefinitionSelectorCloudComponent, deps: [{ token: i1.FormDefinitionSelectorCloudService }], target: i0.ɵɵFactoryTarget.Component }); }
44
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormDefinitionSelectorCloudComponent, isStandalone: true, selector: "adf-cloud-form-definition-selector", inputs: { appName: "appName" }, outputs: { selectForm: "selectForm" }, ngImport: i0, template: "<mat-form-field class=\"adf-form-definition-selector\">\n <mat-label>{{'ADF_CLOUD_TASK_LIST.START_TASK.FORM.LABEL.FORM' | translate}}</mat-label>\n <mat-select class=\"adf-form-selector-dropdown\" (selectionChange)=\"onSelect($event)\">\n <mat-option [value]=\"''\">{{'ADF_CLOUD_TASK_LIST.START_TASK.FORM.LABEL.NONE' | translate}}</mat-option>\n <mat-option *ngFor=\"let form of forms$ | async\" [value]=\"form.id\">{{ form.name }}</mat-option>\n </mat-select>\n</mat-form-field>\n", styles: [".adf-form-definition-selector{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "component", type: i5.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: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }] }); }
45
- }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormDefinitionSelectorCloudComponent, decorators: [{
47
- type: Component,
48
- args: [{ selector: 'adf-cloud-form-definition-selector', standalone: true, imports: [CommonModule, TranslateModule, MatSelectModule], template: "<mat-form-field class=\"adf-form-definition-selector\">\n <mat-label>{{'ADF_CLOUD_TASK_LIST.START_TASK.FORM.LABEL.FORM' | translate}}</mat-label>\n <mat-select class=\"adf-form-selector-dropdown\" (selectionChange)=\"onSelect($event)\">\n <mat-option [value]=\"''\">{{'ADF_CLOUD_TASK_LIST.START_TASK.FORM.LABEL.NONE' | translate}}</mat-option>\n <mat-option *ngFor=\"let form of forms$ | async\" [value]=\"form.id\">{{ form.name }}</mat-option>\n </mat-select>\n</mat-form-field>\n", styles: [".adf-form-definition-selector{width:100%}\n"] }]
49
- }], ctorParameters: () => [{ type: i1.FormDefinitionSelectorCloudService }], propDecorators: { appName: [{
50
- type: Input
51
- }], selectForm: [{
52
- type: Output
53
- }] } });
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kZWZpbml0aW9uLXNlbGVjdG9yLWNsb3VkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL2Zvcm0tZGVmaW5pdGlvbi1zZWxlY3Rvci1jbG91ZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvcHJvY2Vzcy1zZXJ2aWNlcy1jbG91ZC9zcmMvbGliL2Zvcm0vY29tcG9uZW50cy9mb3JtLWRlZmluaXRpb24tc2VsZWN0b3ItY2xvdWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN4RyxPQUFPLEVBQW1CLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBU3RELE1BQU0sT0FBTyxvQ0FBb0M7SUFXN0MsWUFBb0IsMEJBQThEO1FBQTlELCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBb0M7UUFWbEYsOEZBQThGO1FBRTlGLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFckIsdUNBQXVDO1FBRXZDLGVBQVUsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUl1QixDQUFDO0lBRXRGLFFBQVE7UUFDSixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFzQjtRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQzsrR0FuQlEsb0NBQW9DO21HQUFwQyxvQ0FBb0MscUtDaENqRCwwZkFPQSxvR0RxQmMsWUFBWSxnTkFBRSxlQUFlLDJGQUFFLGVBQWU7OzRGQUkvQyxvQ0FBb0M7a0JBUGhELFNBQVM7K0JBQ0ksb0NBQW9DLGNBQ2xDLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDO3VHQU96RCxPQUFPO3NCQUROLEtBQUs7Z0JBS04sVUFBVTtzQkFEVCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGb3JtRGVmaW5pdGlvblNlbGVjdG9yQ2xvdWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZm9ybS1kZWZpbml0aW9uLXNlbGVjdG9yLWNsb3VkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWF0U2VsZWN0Q2hhbmdlLCBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgRm9ybVJlcHJlc2VudGF0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1maWVsZHMuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNsb3VkLWZvcm0tZGVmaW5pdGlvbi1zZWxlY3RvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIE1hdFNlbGVjdE1vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZGVmaW5pdGlvbi1zZWxlY3Rvci1jbG91ZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS1kZWZpbml0aW9uLXNlbGVjdG9yLWNsb3VkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRm9ybURlZmluaXRpb25TZWxlY3RvckNsb3VkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKiogTmFtZSBvZiB0aGUgYXBwbGljYXRpb24uIElmIHNwZWNpZmllZCwgdGhpcyBzaG93cyB0aGUgdXNlcnMgd2hvIGhhdmUgYWNjZXNzIHRvIHRoZSBhcHAuICovXG4gICAgQElucHV0KClcbiAgICBhcHBOYW1lOiBzdHJpbmcgPSAnJztcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gYSBmb3JtIGlzIHNlbGVjdGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdEZvcm06IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBmb3JtcyQ6IE9ic2VydmFibGU8Rm9ybVJlcHJlc2VudGF0aW9uW10+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBmb3JtRGVmaW5pdGlvbkNsb3VkU2VydmljZTogRm9ybURlZmluaXRpb25TZWxlY3RvckNsb3VkU2VydmljZSkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvcm1zJCA9IHRoaXMuZm9ybURlZmluaXRpb25DbG91ZFNlcnZpY2UuZ2V0U3RhbmRBbG9uZVRhc2tGb3Jtcyh0aGlzLmFwcE5hbWUpO1xuICAgIH1cblxuICAgIG9uU2VsZWN0KGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RGb3JtLmVtaXQoZXZlbnQudmFsdWUpO1xuICAgIH1cbn1cbiIsIjxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImFkZi1mb3JtLWRlZmluaXRpb24tc2VsZWN0b3JcIj5cbiAgICA8bWF0LWxhYmVsPnt7J0FERl9DTE9VRF9UQVNLX0xJU1QuU1RBUlRfVEFTSy5GT1JNLkxBQkVMLkZPUk0nIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICA8bWF0LXNlbGVjdCBjbGFzcz1cImFkZi1mb3JtLXNlbGVjdG9yLWRyb3Bkb3duXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdCgkZXZlbnQpXCI+XG4gICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCInJ1wiPnt7J0FERl9DTE9VRF9UQVNLX0xJU1QuU1RBUlRfVEFTSy5GT1JNLkxBQkVMLk5PTkUnIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBmb3JtIG9mIGZvcm1zJCB8IGFzeW5jXCIgW3ZhbHVlXT1cImZvcm0uaWRcIj57eyBmb3JtLm5hbWUgfX08L21hdC1vcHRpb24+XG4gICAgPC9tYXQtc2VsZWN0PlxuPC9tYXQtZm9ybS1maWVsZD5cbiJdfQ==
@@ -1,36 +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 { Component, Input } from '@angular/core';
18
- import { TranslateModule } from '@ngx-translate/core';
19
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
20
- import * as i0 from "@angular/core";
21
- import * as i1 from "@ngx-translate/core";
22
- import * as i2 from "@angular/material/progress-spinner";
23
- export class FormSpinnerComponent {
24
- constructor() {
25
- this.message = '';
26
- }
27
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormSpinnerComponent, isStandalone: true, selector: "ng-component", inputs: { message: "message" }, ngImport: i0, template: "<div class=\"adf-cloud-form-spinner\">\n <div class=\"adf-cloud-form-spinner-content\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n />\n <span class=\"adf-cloud-form-spinner-content-message\">\n {{message | translate}}\n </span>\n </div>\n</div>\n", styles: [".adf-cloud-form-spinner{position:fixed;inset:0;display:flex;place-content:center center}.adf-cloud-form-spinner-content{display:flex;flex-flow:column wrap;place-content:center center;row-gap:25px;align-items:center}.adf-cloud-form-spinner-content-message{font-size:var(--theme-body-4-font-size)}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
29
- }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormSpinnerComponent, decorators: [{
31
- type: Component,
32
- args: [{ standalone: true, imports: [TranslateModule, MatProgressSpinnerModule], template: "<div class=\"adf-cloud-form-spinner\">\n <div class=\"adf-cloud-form-spinner-content\">\n <mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n />\n <span class=\"adf-cloud-form-spinner-content-message\">\n {{message | translate}}\n </span>\n </div>\n</div>\n", styles: [".adf-cloud-form-spinner{position:fixed;inset:0;display:flex;place-content:center center}.adf-cloud-form-spinner-content{display:flex;flex-flow:column wrap;place-content:center center;row-gap:25px;align-items:center}.adf-cloud-form-spinner-content-message{font-size:var(--theme-body-4-font-size)}\n"] }]
33
- }], propDecorators: { message: [{
34
- type: Input
35
- }] } });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zcGlubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3NwaW5uZXIvZm9ybS1zcGlubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3NwaW5uZXIvZm9ybS1zcGlubmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7OztBQVE5RSxNQUFNLE9BQU8sb0JBQW9CO0lBTmpDO1FBT2EsWUFBTyxHQUFHLEVBQUUsQ0FBQztLQUN6QjsrR0FGWSxvQkFBb0I7bUdBQXBCLG9CQUFvQix3R0MzQmpDLHVWQVdBLGtXRFljLGVBQWUsMkZBQUUsd0JBQXdCOzs0RkFJMUMsb0JBQW9CO2tCQU5oQyxTQUFTO2lDQUNNLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsQ0FBQzs4QkFLM0MsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtUcmFuc2xhdGVNb2R1bGUsIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tc3Bpbm5lci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZm9ybS1zcGlubmVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRm9ybVNwaW5uZXJDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIG1lc3NhZ2UgPSAnJztcbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGYtY2xvdWQtZm9ybS1zcGlubmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImFkZi1jbG91ZC1mb3JtLXNwaW5uZXItY29udGVudFwiPlxuICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXJcbiAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYWRmLWNsb3VkLWZvcm0tc3Bpbm5lci1jb250ZW50LW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIHt7bWVzc2FnZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,250 +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
- /* eslint-disable @angular-eslint/component-selector */
18
- import { Component, EventEmitter, inject, Output, ViewEncapsulation } from '@angular/core';
19
- import { FormService, ContentLinkModel, AppConfigService, UploadWidgetContentLinkModel, ErrorWidgetComponent } from '@alfresco/adf-core';
20
- import { NodesApi } from '@alfresco/js-api';
21
- import { ContentCloudNodeSelectorService } from '../../../services/content-cloud-node-selector.service';
22
- import { UploadCloudWidgetComponent } from '../upload/upload-cloud.widget';
23
- import { DestinationFolderPathType } from '../../../models/form-cloud-representation.model';
24
- import { AlfrescoApiService, ContentNodeSelectorPanelService, NewVersionUploaderDataAction, NewVersionUploaderService } from '@alfresco/adf-content-services';
25
- import { CommonModule } from '@angular/common';
26
- import { TranslateModule } from '@ngx-translate/core';
27
- import { MatIconModule } from '@angular/material/icon';
28
- import { FilePropertiesTableCloudComponent } from './file-properties-table/file-properties-table-cloud.component';
29
- import { MatButtonModule } from '@angular/material/button';
30
- import * as i0 from "@angular/core";
31
- import * as i1 from "@alfresco/adf-core";
32
- import * as i2 from "@angular/common";
33
- import * as i3 from "@ngx-translate/core";
34
- import * as i4 from "@angular/material/icon";
35
- import * as i5 from "@angular/material/button";
36
- const RETRIEVE_METADATA_OPTION = 'retrieveMetadata';
37
- const ALIAS_ROOT_FOLDER = '-root-';
38
- const ALIAS_USER_FOLDER = '-my-';
39
- const APP_NAME = '-appname-';
40
- const VALID_ALIAS = [ALIAS_ROOT_FOLDER, ALIAS_USER_FOLDER, '-shared-'];
41
- export class AttachFileCloudWidgetComponent extends UploadCloudWidgetComponent {
42
- get nodesApi() {
43
- this._nodesApi = this._nodesApi ?? new NodesApi(this.apiService.getInstance());
44
- return this._nodesApi;
45
- }
46
- constructor(formService) {
47
- super(formService);
48
- this.contentNodeSelectorService = inject(ContentCloudNodeSelectorService);
49
- this.appConfigService = inject(AppConfigService);
50
- this.apiService = inject(AlfrescoApiService);
51
- this.contentNodeSelectorPanelService = inject(ContentNodeSelectorPanelService);
52
- this.newVersionUploaderService = inject(NewVersionUploaderService);
53
- this.typeId = 'AttachFileCloudWidgetComponent';
54
- this.rootNodeId = ALIAS_USER_FOLDER;
55
- this.error = new EventEmitter();
56
- this.previewState = false;
57
- this.displayedColumns = ['icon', 'fileName', 'title', 'action'];
58
- }
59
- ngOnInit() {
60
- super.ngOnInit();
61
- if (this.hasFile && this.field.value.length > 0) {
62
- const files = this.field.value || this.field.form.values[this.field.id];
63
- this.contentModelFormFileHandler(files[0]);
64
- }
65
- this.field.params.displayableCMProperties = this.field.params.displayableCMProperties ?? [];
66
- this.displayedColumns.splice(2, 0, ...(this.field.params.displayableCMProperties?.map((property) => property?.name) || []));
67
- this.setPreviewState();
68
- }
69
- isPathStaticType() {
70
- return this.field.params?.fileSource?.destinationFolderPath?.type === DestinationFolderPathType.STATIC_TYPE;
71
- }
72
- isUploadButtonVisible() {
73
- return (!this.hasFile || this.multipleOption) && !this.field.readOnly;
74
- }
75
- onRemoveAttachFile(file) {
76
- this.removeFile(file);
77
- if (file['id'] === this.selectedNode?.id) {
78
- this.selectedNode = null;
79
- }
80
- this.contentModelFormFileHandler(this.field.value.length > 0 ? this.field.value[0] : null);
81
- }
82
- fetchAppNameFromAppConfig() {
83
- return this.appConfigService.get('alfresco-deployed-apps')[0]?.name;
84
- }
85
- replaceAppNameAliasWithValue(path) {
86
- if (path?.match(APP_NAME)) {
87
- const appName = this.fetchAppNameFromAppConfig();
88
- return path.replace(APP_NAME, appName);
89
- }
90
- return path;
91
- }
92
- async openSelectDialog() {
93
- if (this.previewState) {
94
- this.notificationService.showWarning('FORM.PREVIEW.ATTACH_FILE_WIDGET.ON_ATTACH_FILE_CLICK');
95
- }
96
- else {
97
- const selectedMode = this.field.params.multiple ? 'multiple' : 'single';
98
- const nodeId = await this.getDestinationFolderNodeId();
99
- this.rootNodeId = nodeId ? nodeId : ALIAS_USER_FOLDER;
100
- this.contentNodeSelectorPanelService.customModels = this.field.params.customModels;
101
- this.contentNodeSelectorService
102
- .openUploadFileDialog(this.rootNodeId, selectedMode, this.isAlfrescoAndLocal(), true)
103
- .subscribe((selections) => {
104
- selections.forEach((node) => (node['isExternal'] = true));
105
- const selectionWithoutDuplication = this.removeExistingSelection(selections);
106
- const hadFilesAttached = this.field.value?.length > 0;
107
- this.fixIncompatibilityFromPreviousAndNewForm(selectionWithoutDuplication);
108
- if (!hadFilesAttached) {
109
- this.contentModelFormFileHandler(this.field.value.length > 0 ? this.field.value[0] : null);
110
- }
111
- });
112
- }
113
- }
114
- async getDestinationFolderNodeId() {
115
- let rootNodeId;
116
- switch (this.field?.params?.fileSource?.destinationFolderPath?.type) {
117
- case DestinationFolderPathType.STATIC_TYPE:
118
- rootNodeId = await this.getNodeIdFromPath(this.field.params.fileSource.destinationFolderPath);
119
- break;
120
- case DestinationFolderPathType.STRING_TYPE:
121
- rootNodeId = await this.getNodeIdFromPath(this.field.params.fileSource.destinationFolderPath);
122
- break;
123
- case DestinationFolderPathType.FOLDER_TYPE:
124
- rootNodeId = await this.getNodeIdFromFolderVariableValue(this.field.params.fileSource.destinationFolderPath);
125
- break;
126
- default:
127
- rootNodeId = await this.getNodeIdFromPath({ type: '', value: ALIAS_USER_FOLDER });
128
- break;
129
- }
130
- return rootNodeId;
131
- }
132
- async getNodeIdFromPath(destinationFolderPath) {
133
- let nodeId;
134
- const destinationPath = this.getAliasAndRelativePathFromDestinationFolderPath(destinationFolderPath.value);
135
- destinationPath.path = this.replaceAppNameAliasWithValue(destinationPath.path);
136
- try {
137
- nodeId = await this.contentNodeSelectorService.getNodeIdFromPath(destinationPath);
138
- }
139
- catch (error) {
140
- this.error.emit(error);
141
- }
142
- return nodeId;
143
- }
144
- async getNodeIdFromFolderVariableValue(destinationFolderPath) {
145
- let nodeId;
146
- try {
147
- nodeId = await this.contentNodeSelectorService.getNodeIdFromFolderVariableValue(destinationFolderPath.value, ALIAS_USER_FOLDER);
148
- }
149
- catch (error) {
150
- this.error.emit(error);
151
- }
152
- return nodeId;
153
- }
154
- getAliasAndRelativePathFromDestinationFolderPath(destinationFolderPath) {
155
- let alias;
156
- let path;
157
- if (destinationFolderPath) {
158
- const startOfRelativePathIndex = destinationFolderPath.indexOf('/');
159
- if (startOfRelativePathIndex >= 0) {
160
- alias = destinationFolderPath.substring(0, startOfRelativePathIndex);
161
- path = destinationFolderPath.substring(startOfRelativePathIndex, destinationFolderPath.length);
162
- }
163
- else {
164
- alias = destinationFolderPath;
165
- }
166
- }
167
- return this.isValidAlias(alias) ? { alias, path } : { alias: ALIAS_USER_FOLDER, path: undefined };
168
- }
169
- removeExistingSelection(selections) {
170
- const existingNode = [...(this.field.value || [])];
171
- return selections.filter((opt) => !existingNode.some((node) => node.id === opt.id));
172
- }
173
- downloadContent(file) {
174
- this.processCloudContentService.downloadFile(file.id);
175
- }
176
- onUploadNewFileVersion(config) {
177
- this.newVersionUploaderService.openUploadNewVersionDialog(config).subscribe((newVersionUploaderData) => {
178
- if (newVersionUploaderData.action === NewVersionUploaderDataAction.upload) {
179
- this.replaceOldFileVersionWithNew(newVersionUploaderData);
180
- }
181
- }, (error) => this.notificationService.showError(error.value));
182
- }
183
- onAttachFileClicked(nodeSelector) {
184
- nodeSelector.nodeId = nodeSelector.id;
185
- this.fileClicked(new ContentLinkModel(nodeSelector));
186
- }
187
- getWidgetIcon() {
188
- return this.isAlfrescoAndLocal() ? 'file_upload' : 'attach_file';
189
- }
190
- onRowClicked(file) {
191
- if (this.selectedNode?.id === file?.id) {
192
- this.selectedNode = null;
193
- }
194
- else {
195
- this.selectedNode = file;
196
- }
197
- this.contentModelFormFileHandler(this.selectedNode);
198
- }
199
- contentModelFormFileHandler(file) {
200
- if (file?.id && this.isRetrieveMetadataOptionEnabled()) {
201
- const values = {};
202
- this.nodesApi.getNode(file.id).then((acsNode) => {
203
- const metadata = acsNode?.entry?.properties;
204
- if (metadata) {
205
- const keys = Object.keys(metadata);
206
- keys.forEach((key) => {
207
- const sanitizedKey = key.replace(':', '_');
208
- values[sanitizedKey] = metadata[key];
209
- });
210
- this.formService.updateFormValuesRequested.next(values);
211
- }
212
- });
213
- }
214
- this.fileClicked(new UploadWidgetContentLinkModel(file, this.field.id));
215
- }
216
- isRetrieveMetadataOptionEnabled() {
217
- return this.field?.params?.menuOptions?.[RETRIEVE_METADATA_OPTION];
218
- }
219
- isValidAlias(alias) {
220
- return alias && VALID_ALIAS.includes(alias);
221
- }
222
- isSelected() {
223
- return this.hasFile;
224
- }
225
- ngOnDestroy() {
226
- this.contentNodeSelectorPanelService.customModels = [];
227
- }
228
- setPreviewState() {
229
- this.previewState = this.formService.getPreviewState();
230
- }
231
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AttachFileCloudWidgetComponent, deps: [{ token: i1.FormService }], target: i0.ɵɵFactoryTarget.Component }); }
232
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AttachFileCloudWidgetComponent, isStandalone: true, selector: "adf-cloud-attach-file-cloud-widget", outputs: { error: "error" }, host: { listeners: { "click": "event($event)", "blur": "event($event)", "change": "event($event)", "focus": "event($event)", "focusin": "event($event)", "focusout": "event($event)", "input": "event($event)", "invalid": "event($event)", "select": "event($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [title]=\"field.tooltip\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n />\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\" />\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\" />\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-label{white-space:normal;height:100%}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px;word-break:normal}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:100%;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:normal;margin-left:8px;padding-right:8px;height:100%}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row{margin-bottom:0}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ErrorWidgetComponent, selector: "error-widget", inputs: ["error", "required"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FilePropertiesTableCloudComponent, selector: "adf-cloud-file-properties-table", inputs: ["uploadedFiles", "hasFile", "selectedNode", "field", "displayedColumns", "mimeTypeIcon"], outputs: ["rowClick", "attachFileClick", "downloadFile", "uploadNewFileVersion", "contentModelFileHandler", "removeAttachFile"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }], encapsulation: i0.ViewEncapsulation.None }); }
233
- }
234
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AttachFileCloudWidgetComponent, decorators: [{
235
- type: Component,
236
- args: [{ selector: 'adf-cloud-attach-file-cloud-widget', standalone: true, imports: [CommonModule, ErrorWidgetComponent, TranslateModule, MatIconModule, FilePropertiesTableCloudComponent, MatButtonModule], host: {
237
- '(click)': 'event($event)',
238
- '(blur)': 'event($event)',
239
- '(change)': 'event($event)',
240
- '(focus)': 'event($event)',
241
- '(focusin)': 'event($event)',
242
- '(focusout)': 'event($event)',
243
- '(input)': 'event($event)',
244
- '(invalid)': 'event($event)',
245
- '(select)': 'event($event)'
246
- }, encapsulation: ViewEncapsulation.None, template: "<div class=\"adf-attach-file-widget-container\">\n <div class=\"adf-attach-widget {{field.className}}\"\n [class.adf-readonly]=\"field.readOnly\">\n <label class=\"adf-label\" [attr.for]=\"field.id\">{{field.name}}\n <span class=\"adf-asterisk\" *ngIf=\"isRequired()\">*</span>\n </label>\n <div class=\"adf-attach-widget-container\" (focusout)=\"markAsTouched()\">\n <div class=\"adf-attach-widget__menu-upload\" *ngIf=\"isUploadButtonVisible()\">\n <button\n (click)=\"openSelectDialog()\"\n mat-raised-button\n class=\"adf-attach-widget__menu-upload__button\"\n color=\"primary\"\n [id]=\"field.id\"\n [title]=\"field.tooltip\">\n {{ 'FORM.FIELD.ATTACH' | translate }}\n <mat-icon class=\"adf-attach-widget__menu-upload__button__icon\">{{getWidgetIcon()}}</mat-icon>\n </button>\n </div>\n </div>\n </div>\n\n <div data-automation-id=\"adf-attach-widget-readonly-list\" class=\"adf-attach-widget-readonly-table\">\n <adf-cloud-file-properties-table\n [uploadedFiles]=\"uploadedFiles\"\n [hasFile]=\"hasFile\"\n [selectedNode]=\"selectedNode\"\n [field]=\"field\"\n [displayedColumns]=\"displayedColumns\"\n [mimeTypeIcon]=\"mimeTypeIcon\"\n (rowClick)=\"onRowClicked($event)\"\n (attachFileClick)=\"onAttachFileClicked($event)\"\n (downloadFile)=\"downloadContent($event)\"\n (uploadNewFileVersion)=\"onUploadNewFileVersion($event)\"\n (contentModelFileHandler)=\"contentModelFormFileHandler($event)\"\n (removeAttachFile)=\"onRemoveAttachFile($event)\"\n />\n <div *ngIf=\"!hasFile && field.readOnly\" id=\"{{'adf-attach-empty-list-'+field.id}}\">\n {{ 'FORM.FIELD.NO_FILE_ATTACHED' | translate }}\n </div>\n\n </div>\n\n <error-widget [error]=\"field.validationSummary\" />\n <error-widget *ngIf=\"!field.isValid && isTouched() && !isSelected()\" required=\"{{ 'FORM.FIELD.REQUIRED' | translate }}\" />\n</div>\n", styles: [".adf-attach-widget-container{display:flex;align-items:center}.adf-attach-widget-container input{cursor:pointer;height:100%;right:0;opacity:0;position:absolute;top:0;width:300px;z-index:4}.adf-label{white-space:normal;height:100%}.adf-attach-widget__menu-upload{display:flex;align-items:center;margin-right:8px;word-break:normal}.adf-attach-widget__menu-upload .adf-attach-widget__menu-upload__button{line-height:28px;font-size:var(--theme-caption-font-size)}.adf-attach-widget__menu-upload button span{font-size:var(--theme-caption-font-size)}.adf-attach-widget__input-type{width:.1px;height:.1px;opacity:0;overflow:hidden;position:absolute;z-index:-1}.adf-attach-widget__image-logo{padding-left:5px}.adf-attach-widget{display:flex;justify-content:space-between;word-break:break-all;padding:.4375em;border-bottom:none;background:var(--adf-theme-mat-grey-color-a200);min-height:27px;margin-bottom:12px}.adf-attach-widget .adf-label{width:100%;font-size:var(--theme-caption-font-size);line-height:var(--theme-headline-line-height);text-align:left;white-space:normal;margin-left:8px;padding-right:8px;height:100%}.adf-attach-widget__icon{font-size:var(--theme-adf-picture-1-font-size);height:var(--theme-adf-picture-1-font-size);width:var(--theme-adf-picture-1-font-size);line-height:calc(var(--theme-adf-picture-1-font-size) - 2px)}.adf-attach-widget__reset{margin-top:-2px}.adf-attach-files-row{margin-bottom:0}.adf-attach-files-row>div:first-child{cursor:pointer}.adf-attach-selected-file-row>div:first-child .adf-datatable-selected{color:var(--theme-primary-color);padding-right:6px}.adf-attach-file-widget-container{margin:15px}\n"] }]
247
- }], ctorParameters: () => [{ type: i1.FormService }], propDecorators: { error: [{
248
- type: Output
249
- }] } });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9wcm9jZXNzLXNlcnZpY2VzLWNsb3VkL3NyYy9saWIvZm9ybS9jb21wb25lbnRzL3dpZGdldHMvYXR0YWNoLWZpbGUvYXR0YWNoLWZpbGUtY2xvdWQtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQXFCLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RyxPQUFPLEVBQ0gsV0FBVyxFQUVYLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsNEJBQTRCLEVBRTVCLG9CQUFvQixFQUN2QixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBUSxRQUFRLEVBQWdDLE1BQU0sa0JBQWtCLENBQUM7QUFDaEYsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDeEcsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0UsT0FBTyxFQUE4Qix5QkFBeUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3hILE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsK0JBQStCLEVBQy9CLDRCQUE0QixFQUU1Qix5QkFBeUIsRUFFNUIsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0s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RSxvQkFBb0IsdUZBQUUsZUFBZSwyRkFBRSxhQUFhLG9MQUFFLGlDQUFpQywrU0FBRSxlQUFlOzs0RkFnQnZILDhCQUE4QjtrQkFuQjFDLFNBQVM7K0JBQ0ksb0NBQW9DLGNBQ2xDLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGlDQUFpQyxFQUFFLGVBQWUsQ0FBQyxRQUczSDt3QkFDRixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsUUFBUSxFQUFFLGVBQWU7d0JBQ3pCLFVBQVUsRUFBRSxlQUFlO3dCQUMzQixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsV0FBVyxFQUFFLGVBQWU7d0JBQzVCLFlBQVksRUFBRSxlQUFlO3dCQUM3QixTQUFTLEVBQUUsZUFBZTt3QkFDMUIsV0FBVyxFQUFFLGVBQWU7d0JBQzVCLFVBQVUsRUFBRSxlQUFlO3FCQUM5QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJO2dGQWNyQyxLQUFLO3NCQURKLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qIGVzbGludC1kaXNhYmxlIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3IgKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgRm9ybVNlcnZpY2UsXG4gICAgRm9ybVZhbHVlcyxcbiAgICBDb250ZW50TGlua01vZGVsLFxuICAgIEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgVXBsb2FkV2lkZ2V0Q29udGVudExpbmtNb2RlbCxcbiAgICBEZXN0aW5hdGlvbkZvbGRlclBhdGgsXG4gICAgRXJyb3JXaWRnZXRDb21wb25lbnRcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IE5vZGUsIE5vZGVzQXBpLCBSZWxhdGVkQ29udGVudFJlcHJlc2VudGF0aW9uIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBDb250ZW50Q2xvdWROb2RlU2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29udGVudC1jbG91ZC1ub2RlLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXBsb2FkQ2xvdWRXaWRnZXRDb21wb25lbnQgfSBmcm9tICcuLi91cGxvYWQvdXBsb2FkLWNsb3VkLndpZGdldCc7XG5pbXBvcnQgeyBEZXN0aW5hdGlvbkZvbGRlclBhdGhNb2RlbCwgRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZSB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9mb3JtLWNsb3VkLXJlcHJlc2VudGF0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gICAgQWxmcmVzY29BcGlTZXJ2aWNlLFxuICAgIENvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2UsXG4gICAgTmV3VmVyc2lvblVwbG9hZGVyRGF0YUFjdGlvbixcbiAgICBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhLFxuICAgIE5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2UsXG4gICAgVmVyc2lvbk1hbmFnZXJVcGxvYWREYXRhXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29udGVudC1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBGaWxlUHJvcGVydGllc1RhYmxlQ2xvdWRDb21wb25lbnQgfSBmcm9tICcuL2ZpbGUtcHJvcGVydGllcy10YWJsZS9maWxlLXByb3BlcnRpZXMtdGFibGUtY2xvdWQuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5cbmNvbnN0IFJFVFJJRVZFX01FVEFEQVRBX09QVElPTiA9ICdyZXRyaWV2ZU1ldGFkYXRhJztcbmNvbnN0IEFMSUFTX1JPT1RfRk9MREVSID0gJy1yb290LSc7XG5jb25zdCBBTElBU19VU0VSX0ZPTERFUiA9ICctbXktJztcbmNvbnN0IEFQUF9OQU1FID0gJy1hcHBuYW1lLSc7XG5jb25zdCBWQUxJRF9BTElBUyA9IFtBTElBU19ST09UX0ZPTERFUiwgQUxJQVNfVVNFUl9GT0xERVIsICctc2hhcmVkLSddO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FkZi1jbG91ZC1hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRXJyb3JXaWRnZXRDb21wb25lbnQsIFRyYW5zbGF0ZU1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgRmlsZVByb3BlcnRpZXNUYWJsZUNsb3VkQ29tcG9uZW50LCBNYXRCdXR0b25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hdHRhY2gtZmlsZS1jbG91ZC13aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2F0dGFjaC1maWxlLWNsb3VkLXdpZGdldC5jb21wb25lbnQuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhjbGljayknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoYmx1ciknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoY2hhbmdlKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNpbiknOiAnZXZlbnQoJGV2ZW50KScsXG4gICAgICAgICcoZm9jdXNvdXQpJzogJ2V2ZW50KCRldmVudCknLFxuICAgICAgICAnKGlucHV0KSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhpbnZhbGlkKSc6ICdldmVudCgkZXZlbnQpJyxcbiAgICAgICAgJyhzZWxlY3QpJzogJ2V2ZW50KCRldmVudCknXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEF0dGFjaEZpbGVDbG91ZFdpZGdldENvbXBvbmVudCBleHRlbmRzIFVwbG9hZENsb3VkV2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgY29udGVudE5vZGVTZWxlY3RvclNlcnZpY2UgPSBpbmplY3QoQ29udGVudENsb3VkTm9kZVNlbGVjdG9yU2VydmljZSk7XG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlID0gaW5qZWN0KEFwcENvbmZpZ1NlcnZpY2UpO1xuICAgIHByaXZhdGUgYXBpU2VydmljZSA9IGluamVjdChBbGZyZXNjb0FwaVNlcnZpY2UpO1xuICAgIHByaXZhdGUgY29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZSA9IGluamVjdChDb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlKTtcbiAgICBwcml2YXRlIG5ld1ZlcnNpb25VcGxvYWRlclNlcnZpY2UgPSBpbmplY3QoTmV3VmVyc2lvblVwbG9hZGVyU2VydmljZSk7XG5cbiAgICB0eXBlSWQgPSAnQXR0YWNoRmlsZUNsb3VkV2lkZ2V0Q29tcG9uZW50JztcbiAgICByb290Tm9kZUlkID0gQUxJQVNfVVNFUl9GT0xERVI7XG4gICAgc2VsZWN0ZWROb2RlOiBOb2RlO1xuXG4gICAgQE91dHB1dCgpXG4gICAgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIHByaXZhdGUgcHJldmlld1N0YXRlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbm9kZXNBcGk6IE5vZGVzQXBpO1xuICAgIGdldCBub2Rlc0FwaSgpOiBOb2Rlc0FwaSB7XG4gICAgICAgIHRoaXMuX25vZGVzQXBpID0gdGhpcy5fbm9kZXNBcGkgPz8gbmV3IE5vZGVzQXBpKHRoaXMuYXBpU2VydmljZS5nZXRJbnN0YW5jZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGVzQXBpO1xuICAgIH1cbiAgICBkaXNwbGF5ZWRDb2x1bW5zID0gWydpY29uJywgJ2ZpbGVOYW1lJywgJ3RpdGxlJywgJ2FjdGlvbiddO1xuXG4gICAgY29uc3RydWN0b3IoZm9ybVNlcnZpY2U6IEZvcm1TZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGZvcm1TZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgaWYgKHRoaXMuaGFzRmlsZSAmJiB0aGlzLmZpZWxkLnZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gdGhpcy5maWVsZC52YWx1ZSB8fCB0aGlzLmZpZWxkLmZvcm0udmFsdWVzW3RoaXMuZmllbGQuaWRdO1xuICAgICAgICAgICAgdGhpcy5jb250ZW50TW9kZWxGb3JtRmlsZUhhbmRsZXIoZmlsZXNbMF0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmllbGQucGFyYW1zLmRpc3BsYXlhYmxlQ01Qcm9wZXJ0aWVzID0gdGhpcy5maWVsZC5wYXJhbXMuZGlzcGxheWFibGVDTVByb3BlcnRpZXMgPz8gW107XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucy5zcGxpY2UoMiwgMCwgLi4uKHRoaXMuZmllbGQucGFyYW1zLmRpc3BsYXlhYmxlQ01Qcm9wZXJ0aWVzPy5tYXAoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eT8ubmFtZSkgfHwgW10pKTtcbiAgICAgICAgdGhpcy5zZXRQcmV2aWV3U3RhdGUoKTtcbiAgICB9XG5cbiAgICBpc1BhdGhTdGF0aWNUeXBlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZC5wYXJhbXM/LmZpbGVTb3VyY2U/LmRlc3RpbmF0aW9uRm9sZGVyUGF0aD8udHlwZSA9PT0gRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5TVEFUSUNfVFlQRTtcbiAgICB9XG5cbiAgICBpc1VwbG9hZEJ1dHRvblZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuaGFzRmlsZSB8fCB0aGlzLm11bHRpcGxlT3B0aW9uKSAmJiAhdGhpcy5maWVsZC5yZWFkT25seTtcbiAgICB9XG5cbiAgICBvblJlbW92ZUF0dGFjaEZpbGUoZmlsZTogRmlsZSB8IFJlbGF0ZWRDb250ZW50UmVwcmVzZW50YXRpb24gfCBOb2RlKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRmlsZShmaWxlKTtcbiAgICAgICAgaWYgKGZpbGVbJ2lkJ10gPT09IHRoaXMuc2VsZWN0ZWROb2RlPy5pZCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuZmllbGQudmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuZmllbGQudmFsdWVbMF0gOiBudWxsKTtcbiAgICB9XG5cbiAgICBmZXRjaEFwcE5hbWVGcm9tQXBwQ29uZmlnKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0KCdhbGZyZXNjby1kZXBsb3llZC1hcHBzJylbMF0/Lm5hbWU7XG4gICAgfVxuXG4gICAgcmVwbGFjZUFwcE5hbWVBbGlhc1dpdGhWYWx1ZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAocGF0aD8ubWF0Y2goQVBQX05BTUUpKSB7XG4gICAgICAgICAgICBjb25zdCBhcHBOYW1lID0gdGhpcy5mZXRjaEFwcE5hbWVGcm9tQXBwQ29uZmlnKCk7XG4gICAgICAgICAgICByZXR1cm4gcGF0aC5yZXBsYWNlKEFQUF9OQU1FLCBhcHBOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICB9XG5cbiAgICBhc3luYyBvcGVuU2VsZWN0RGlhbG9nKCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aWV3U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93V2FybmluZygnRk9STS5QUkVWSUVXLkFUVEFDSF9GSUxFX1dJREdFVC5PTl9BVFRBQ0hfRklMRV9DTElDSycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRNb2RlID0gdGhpcy5maWVsZC5wYXJhbXMubXVsdGlwbGUgPyAnbXVsdGlwbGUnIDogJ3NpbmdsZSc7XG4gICAgICAgICAgICBjb25zdCBub2RlSWQgPSBhd2FpdCB0aGlzLmdldERlc3RpbmF0aW9uRm9sZGVyTm9kZUlkKCk7XG4gICAgICAgICAgICB0aGlzLnJvb3ROb2RlSWQgPSBub2RlSWQgPyBub2RlSWQgOiBBTElBU19VU0VSX0ZPTERFUjtcbiAgICAgICAgICAgIHRoaXMuY29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZS5jdXN0b21Nb2RlbHMgPSB0aGlzLmZpZWxkLnBhcmFtcy5jdXN0b21Nb2RlbHM7XG5cbiAgICAgICAgICAgIHRoaXMuY29udGVudE5vZGVTZWxlY3RvclNlcnZpY2VcbiAgICAgICAgICAgICAgICAub3BlblVwbG9hZEZpbGVEaWFsb2codGhpcy5yb290Tm9kZUlkLCBzZWxlY3RlZE1vZGUsIHRoaXMuaXNBbGZyZXNjb0FuZExvY2FsKCksIHRydWUpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc2VsZWN0aW9uczogTm9kZVtdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbnMuZm9yRWFjaCgobm9kZSkgPT4gKG5vZGVbJ2lzRXh0ZXJuYWwnXSA9IHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uV2l0aG91dER1cGxpY2F0aW9uID0gdGhpcy5yZW1vdmVFeGlzdGluZ1NlbGVjdGlvbihzZWxlY3Rpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFkRmlsZXNBdHRhY2hlZCA9IHRoaXMuZmllbGQudmFsdWU/Lmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZml4SW5jb21wYXRpYmlsaXR5RnJvbVByZXZpb3VzQW5kTmV3Rm9ybShzZWxlY3Rpb25XaXRob3V0RHVwbGljYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhZEZpbGVzQXR0YWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKHRoaXMuZmllbGQudmFsdWUubGVuZ3RoID4gMCA/IHRoaXMuZmllbGQudmFsdWVbMF0gOiBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREZXN0aW5hdGlvbkZvbGRlck5vZGVJZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgcm9vdE5vZGVJZDogc3RyaW5nO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5maWVsZD8ucGFyYW1zPy5maWxlU291cmNlPy5kZXN0aW5hdGlvbkZvbGRlclBhdGg/LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRGVzdGluYXRpb25Gb2xkZXJQYXRoVHlwZS5TVEFUSUNfVFlQRTpcbiAgICAgICAgICAgICAgICByb290Tm9kZUlkID0gYXdhaXQgdGhpcy5nZXROb2RlSWRGcm9tUGF0aCh0aGlzLmZpZWxkLnBhcmFtcy5maWxlU291cmNlLmRlc3RpbmF0aW9uRm9sZGVyUGF0aCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERlc3RpbmF0aW9uRm9sZGVyUGF0aFR5cGUuU1RSSU5HX1RZUEU6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgodGhpcy5maWVsZC5wYXJhbXMuZmlsZVNvdXJjZS5kZXN0aW5hdGlvbkZvbGRlclBhdGgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEZXN0aW5hdGlvbkZvbGRlclBhdGhUeXBlLkZPTERFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJvb3ROb2RlSWQgPSBhd2FpdCB0aGlzLmdldE5vZGVJZEZyb21Gb2xkZXJWYXJpYWJsZVZhbHVlKHRoaXMuZmllbGQucGFyYW1zLmZpbGVTb3VyY2UuZGVzdGluYXRpb25Gb2xkZXJQYXRoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcm9vdE5vZGVJZCA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUlkRnJvbVBhdGgoeyB0eXBlOiAnJywgdmFsdWU6IEFMSUFTX1VTRVJfRk9MREVSIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJvb3ROb2RlSWQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0Tm9kZUlkRnJvbVBhdGgoZGVzdGluYXRpb25Gb2xkZXJQYXRoOiBEZXN0aW5hdGlvbkZvbGRlclBhdGgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBsZXQgbm9kZUlkOiBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uUGF0aCA9IHRoaXMuZ2V0QWxpYXNBbmRSZWxhdGl2ZVBhdGhGcm9tRGVzdGluYXRpb25Gb2xkZXJQYXRoKGRlc3RpbmF0aW9uRm9sZGVyUGF0aC52YWx1ZSk7XG4gICAgICAgIGRlc3RpbmF0aW9uUGF0aC5wYXRoID0gdGhpcy5yZXBsYWNlQXBwTmFtZUFsaWFzV2l0aFZhbHVlKGRlc3RpbmF0aW9uUGF0aC5wYXRoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5vZGVJZCA9IGF3YWl0IHRoaXMuY29udGVudE5vZGVTZWxlY3RvclNlcnZpY2UuZ2V0Tm9kZUlkRnJvbVBhdGgoZGVzdGluYXRpb25QYXRoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZUlkO1xuICAgIH1cblxuICAgIGFzeW5jIGdldE5vZGVJZEZyb21Gb2xkZXJWYXJpYWJsZVZhbHVlKGRlc3RpbmF0aW9uRm9sZGVyUGF0aDogRGVzdGluYXRpb25Gb2xkZXJQYXRoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IG5vZGVJZDogc3RyaW5nO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbm9kZUlkID0gYXdhaXQgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yU2VydmljZS5nZXROb2RlSWRGcm9tRm9sZGVyVmFyaWFibGVWYWx1ZShkZXN0aW5hdGlvbkZvbGRlclBhdGgudmFsdWUsIEFMSUFTX1VTRVJfRk9MREVSKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuZXJyb3IuZW1pdChlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9kZUlkO1xuICAgIH1cblxuICAgIGdldEFsaWFzQW5kUmVsYXRpdmVQYXRoRnJvbURlc3RpbmF0aW9uRm9sZGVyUGF0aChkZXN0aW5hdGlvbkZvbGRlclBhdGg6IHN0cmluZyk6IERlc3RpbmF0aW9uRm9sZGVyUGF0aE1vZGVsIHtcbiAgICAgICAgbGV0IGFsaWFzOiBzdHJpbmc7XG4gICAgICAgIGxldCBwYXRoOiBzdHJpbmc7XG4gICAgICAgIGlmIChkZXN0aW5hdGlvbkZvbGRlclBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2ZSZWxhdGl2ZVBhdGhJbmRleCA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5pbmRleE9mKCcvJyk7XG4gICAgICAgICAgICBpZiAoc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5zdWJzdHJpbmcoMCwgc3RhcnRPZlJlbGF0aXZlUGF0aEluZGV4KTtcbiAgICAgICAgICAgICAgICBwYXRoID0gZGVzdGluYXRpb25Gb2xkZXJQYXRoLnN1YnN0cmluZyhzdGFydE9mUmVsYXRpdmVQYXRoSW5kZXgsIGRlc3RpbmF0aW9uRm9sZGVyUGF0aC5sZW5ndGgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGlhcyA9IGRlc3RpbmF0aW9uRm9sZGVyUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRBbGlhcyhhbGlhcykgPyB7IGFsaWFzLCBwYXRoIH0gOiB7IGFsaWFzOiBBTElBU19VU0VSX0ZPTERFUiwgcGF0aDogdW5kZWZpbmVkIH07XG4gICAgfVxuXG4gICAgcmVtb3ZlRXhpc3RpbmdTZWxlY3Rpb24oc2VsZWN0aW9uczogTm9kZVtdKSB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTm9kZTogTm9kZVtdID0gWy4uLih0aGlzLmZpZWxkLnZhbHVlIHx8IFtdKV07XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb25zLmZpbHRlcigob3B0KSA9PiAhZXhpc3RpbmdOb2RlLnNvbWUoKG5vZGUpID0+IG5vZGUuaWQgPT09IG9wdC5pZCkpO1xuICAgIH1cblxuICAgIGRvd25sb2FkQ29udGVudChmaWxlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvY2Vzc0Nsb3VkQ29udGVudFNlcnZpY2UuZG93bmxvYWRGaWxlKGZpbGUuaWQpO1xuICAgIH1cblxuICAgIG9uVXBsb2FkTmV3RmlsZVZlcnNpb24oY29uZmlnOiBOZXdWZXJzaW9uVXBsb2FkZXJEaWFsb2dEYXRhKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmV3VmVyc2lvblVwbG9hZGVyU2VydmljZS5vcGVuVXBsb2FkTmV3VmVyc2lvbkRpYWxvZyhjb25maWcpLnN1YnNjcmliZShcbiAgICAgICAgICAgIChuZXdWZXJzaW9uVXBsb2FkZXJEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1ZlcnNpb25VcGxvYWRlckRhdGEuYWN0aW9uID09PSBOZXdWZXJzaW9uVXBsb2FkZXJEYXRhQWN0aW9uLnVwbG9hZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VPbGRGaWxlVmVyc2lvbldpdGhOZXcobmV3VmVyc2lvblVwbG9hZGVyRGF0YSBhcyBWZXJzaW9uTWFuYWdlclVwbG9hZERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoZXJyb3IpID0+IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93RXJyb3IoZXJyb3IudmFsdWUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb25BdHRhY2hGaWxlQ2xpY2tlZChub2RlU2VsZWN0b3I6IGFueSkge1xuICAgICAgICBub2RlU2VsZWN0b3Iubm9kZUlkID0gbm9kZVNlbGVjdG9yLmlkO1xuICAgICAgICB0aGlzLmZpbGVDbGlja2VkKG5ldyBDb250ZW50TGlua01vZGVsKG5vZGVTZWxlY3RvcikpO1xuICAgIH1cblxuICAgIGdldFdpZGdldEljb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNBbGZyZXNjb0FuZExvY2FsKCkgPyAnZmlsZV91cGxvYWQnIDogJ2F0dGFjaF9maWxlJztcbiAgICB9XG5cbiAgICBvblJvd0NsaWNrZWQoZmlsZT86IE5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWROb2RlPy5pZCA9PT0gZmlsZT8uaWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlID0gZmlsZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRlbnRNb2RlbEZvcm1GaWxlSGFuZGxlcih0aGlzLnNlbGVjdGVkTm9kZSk7XG4gICAgfVxuXG4gICAgY29udGVudE1vZGVsRm9ybUZpbGVIYW5kbGVyKGZpbGU/OiBhbnkpIHtcbiAgICAgICAgaWYgKGZpbGU/LmlkICYmIHRoaXMuaXNSZXRyaWV2ZU1ldGFkYXRhT3B0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IEZvcm1WYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgIHRoaXMubm9kZXNBcGkuZ2V0Tm9kZShmaWxlLmlkKS50aGVuKChhY3NOb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBhY3NOb2RlPy5lbnRyeT8ucHJvcGVydGllcztcbiAgICAgICAgICAgICAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZEtleSA9IGtleS5yZXBsYWNlKCc6JywgJ18nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tzYW5pdGl6ZWRLZXldID0gbWV0YWRhdGFba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybVNlcnZpY2UudXBkYXRlRm9ybVZhbHVlc1JlcXVlc3RlZC5uZXh0KHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxlQ2xpY2tlZChuZXcgVXBsb2FkV2lkZ2V0Q29udGVudExpbmtNb2RlbChmaWxlLCB0aGlzLmZpZWxkLmlkKSk7XG4gICAgfVxuXG4gICAgaXNSZXRyaWV2ZU1ldGFkYXRhT3B0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQ/LnBhcmFtcz8ubWVudU9wdGlvbnM/LltSRVRSSUVWRV9NRVRBREFUQV9PUFRJT05dO1xuICAgIH1cblxuICAgIGlzVmFsaWRBbGlhcyhhbGlhczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBhbGlhcyAmJiBWQUxJRF9BTElBUy5pbmNsdWRlcyhhbGlhcyk7XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFzRmlsZTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlLmN1c3RvbU1vZGVscyA9IFtdO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UHJldmlld1N0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnByZXZpZXdTdGF0ZSA9IHRoaXMuZm9ybVNlcnZpY2UuZ2V0UHJldmlld1N0YXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFkZi1hdHRhY2gtZmlsZS13aWRnZXQtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0IHt7ZmllbGQuY2xhc3NOYW1lfX1cIlxuICAgICAgICBbY2xhc3MuYWRmLXJlYWRvbmx5XT1cImZpZWxkLnJlYWRPbmx5XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImFkZi1sYWJlbFwiIFthdHRyLmZvcl09XCJmaWVsZC5pZFwiPnt7ZmllbGQubmFtZX19XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFkZi1hc3Rlcmlza1wiICpuZ0lmPVwiaXNSZXF1aXJlZCgpXCI+Kjwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1hdHRhY2gtd2lkZ2V0LWNvbnRhaW5lclwiIChmb2N1c291dCk9XCJtYXJrQXNUb3VjaGVkKClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldF9fbWVudS11cGxvYWRcIiAqbmdJZj1cImlzVXBsb2FkQnV0dG9uVmlzaWJsZSgpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblNlbGVjdERpYWxvZygpXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldF9fbWVudS11cGxvYWRfX2J1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJmaWVsZC5pZFwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJmaWVsZC50b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnRk9STS5GSUVMRC5BVFRBQ0gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldF9fbWVudS11cGxvYWRfX2J1dHRvbl9faWNvblwiPnt7Z2V0V2lkZ2V0SWNvbigpfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtYXR0YWNoLXdpZGdldC1yZWFkb25seS1saXN0XCIgY2xhc3M9XCJhZGYtYXR0YWNoLXdpZGdldC1yZWFkb25seS10YWJsZVwiPlxuICAgICAgICA8YWRmLWNsb3VkLWZpbGUtcHJvcGVydGllcy10YWJsZVxuICAgICAgICAgICAgW3VwbG9hZGVkRmlsZXNdPVwidXBsb2FkZWRGaWxlc1wiXG4gICAgICAgICAgICBbaGFzRmlsZV09XCJoYXNGaWxlXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZE5vZGVdPVwic2VsZWN0ZWROb2RlXCJcbiAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCJkaXNwbGF5ZWRDb2x1bW5zXCJcbiAgICAgICAgICAgIFttaW1lVHlwZUljb25dPVwibWltZVR5cGVJY29uXCJcbiAgICAgICAgICAgIChyb3dDbGljayk9XCJvblJvd0NsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoYXR0YWNoRmlsZUNsaWNrKT1cIm9uQXR0YWNoRmlsZUNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZG93bmxvYWRGaWxlKT1cImRvd25sb2FkQ29udGVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICh1cGxvYWROZXdGaWxlVmVyc2lvbik9XCJvblVwbG9hZE5ld0ZpbGVWZXJzaW9uKCRldmVudClcIlxuICAgICAgICAgICAgKGNvbnRlbnRNb2RlbEZpbGVIYW5kbGVyKT1cImNvbnRlbnRNb2RlbEZvcm1GaWxlSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgIChyZW1vdmVBdHRhY2hGaWxlKT1cIm9uUmVtb3ZlQXR0YWNoRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFoYXNGaWxlICYmIGZpZWxkLnJlYWRPbmx5XCIgaWQ9XCJ7eydhZGYtYXR0YWNoLWVtcHR5LWxpc3QtJytmaWVsZC5pZH19XCI+XG4gICAgICAgICAgICB7eyAnRk9STS5GSUVMRC5OT19GSUxFX0FUVEFDSEVEJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2Rpdj5cblxuICAgIDwvZGl2PlxuXG4gICAgPGVycm9yLXdpZGdldCBbZXJyb3JdPVwiZmllbGQudmFsaWRhdGlvblN1bW1hcnlcIiAvPlxuICAgIDxlcnJvci13aWRnZXQgKm5nSWY9XCIhZmllbGQuaXNWYWxpZCAmJiBpc1RvdWNoZWQoKSAmJiAhaXNTZWxlY3RlZCgpXCIgcmVxdWlyZWQ9XCJ7eyAnRk9STS5GSUVMRC5SRVFVSVJFRCcgfCB0cmFuc2xhdGUgfX1cIiAvPlxuPC9kaXY+XG4iXX0=