@energycap/components 0.41.0 → 0.41.1-ECAP-27592-angular-17.20241220-1140
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{esm2020 → esm2022}/energycap-components.mjs +4 -4
- package/{esm2020 → esm2022}/lib/components.module.mjs +418 -418
- package/{esm2020 → esm2022}/lib/controls/banner/banner.component.mjs +109 -109
- package/{esm2020 → esm2022}/lib/controls/button/button.component.mjs +106 -106
- package/{esm2020 → esm2022}/lib/controls/button/copy-button-base.directive.mjs +67 -67
- package/{esm2020 → esm2022}/lib/controls/button/copy-button.directive.mjs +28 -28
- package/{esm2020 → esm2022}/lib/controls/button/copy-table-button.directive.mjs +43 -43
- package/{esm2020 → esm2022}/lib/controls/calendar/calendar-item.component.mjs +59 -59
- package/{esm2020 → esm2022}/lib/controls/calendar/calendar.component.mjs +200 -200
- package/{esm2020 → esm2022}/lib/controls/calendar/calendar.types.mjs +3 -3
- package/{esm2020 → esm2022}/lib/controls/checkbox/checkbox.component.mjs +140 -140
- package/{esm2020 → esm2022}/lib/controls/collapsible-toggle/collapsible-toggle.component.mjs +38 -38
- package/{esm2020 → esm2022}/lib/controls/combobox/combobox.component.mjs +879 -879
- package/{esm2020 → esm2022}/lib/controls/date-input/date-input.component.mjs +256 -256
- package/{esm2020 → esm2022}/lib/controls/dropdown/dropdown.component.mjs +243 -243
- package/{esm2020 → esm2022}/lib/controls/file-upload/file-upload.component.mjs +261 -261
- package/{esm2020 → esm2022}/lib/controls/form-control/form-control.component.mjs +104 -104
- package/{esm2020 → esm2022}/lib/controls/form-control-base.mjs +151 -151
- package/{esm2020 → esm2022}/lib/controls/form-control-label/form-control-label.component.mjs +136 -136
- package/{esm2020 → esm2022}/lib/controls/form-group/form-group.component.mjs +261 -261
- package/{esm2020 → esm2022}/lib/controls/help-popover/help-popover.component.mjs +31 -31
- package/{esm2020 → esm2022}/lib/controls/item-picker/item-picker.component.mjs +329 -329
- package/{esm2020 → esm2022}/lib/controls/link-button/link-button.component.mjs +11 -11
- package/{esm2020 → esm2022}/lib/controls/menu/menu.component.mjs +485 -485
- package/{esm2020 → esm2022}/lib/controls/navigation/link-item.mjs +1 -1
- package/{esm2020 → esm2022}/lib/controls/navigation/nav-group.mjs +38 -38
- package/{esm2020 → esm2022}/lib/controls/navigation/nav-item-active.directive.mjs +92 -92
- package/{esm2020 → esm2022}/lib/controls/navigation/nav-item.mjs +1 -1
- package/{esm2020 → esm2022}/lib/controls/numericbox/numericbox.component.mjs +372 -372
- package/{esm2020 → esm2022}/lib/controls/popover/popover.component.mjs +117 -117
- package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button-option.mjs +2 -2
- package/{esm2020 → esm2022}/lib/controls/radio-button/radio-button.component.mjs +82 -82
- package/{esm2020 → esm2022}/lib/controls/select/select.component.mjs +88 -88
- package/{esm2020 → esm2022}/lib/controls/tabs/tabs.component.mjs +47 -47
- package/{esm2020 → esm2022}/lib/controls/textbox/textbox.component.mjs +155 -155
- package/{esm2020 → esm2022}/lib/core/cache.service.mjs +105 -105
- package/esm2022/lib/core/custom-validators.mjs +29 -0
- package/esm2022/lib/core/date-time-helper.mjs +220 -0
- package/{esm2020 → esm2022}/lib/core/error.service.mjs +61 -61
- package/{esm2020 → esm2022}/lib/core/router-helper.service.mjs +111 -111
- package/{esm2020 → esm2022}/lib/core/scroll.service.mjs +89 -89
- package/{esm2020 → esm2022}/lib/core/telemetry-tracker.service.mjs +16 -16
- package/{esm2020 → esm2022}/lib/core/telemetry.service.mjs +38 -38
- package/{esm2020 → esm2022}/lib/core/validation-message.service.mjs +185 -185
- package/{esm2020 → esm2022}/lib/core/validation-patterns.mjs +30 -30
- package/{esm2020 → esm2022}/lib/core/window.service.mjs +186 -186
- package/{esm2020 → esm2022}/lib/display/app-bar/app-bar.component.mjs +46 -46
- package/esm2022/lib/display/avatar/avatar.component.mjs +67 -0
- package/{esm2020 → esm2022}/lib/display/avatar/avatar.service.mjs +64 -64
- package/{esm2020 → esm2022}/lib/display/confirm/confirm.component.mjs +168 -168
- package/{esm2020 → esm2022}/lib/display/dialog/dialog-content.mjs +1 -1
- package/{esm2020 → esm2022}/lib/display/dialog/dialog-group/dialog-group.component.mjs +63 -63
- package/{esm2020 → esm2022}/lib/display/dialog/dialog-types.mjs +76 -76
- package/{esm2020 → esm2022}/lib/display/dialog/dialog.component.mjs +281 -281
- package/{esm2020 → esm2022}/lib/display/dialog/dialog.service.mjs +71 -71
- package/{esm2020 → esm2022}/lib/display/help/help-types.mjs +1 -1
- package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-base.mjs +111 -111
- package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-mocks.spec.mjs +53 -53
- package/{esm2020 → esm2022}/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.mjs +61 -61
- package/{esm2020 → esm2022}/lib/display/item-display/item-display.component.mjs +81 -81
- package/{esm2020 → esm2022}/lib/display/json-display/json-display.component.mjs +47 -47
- package/{esm2020 → esm2022}/lib/display/resizable/resizable-base.mjs +120 -120
- package/{esm2020 → esm2022}/lib/display/resizable/resizable.component.mjs +52 -52
- package/{esm2020 → esm2022}/lib/display/spinner/spinner.component.mjs +12 -12
- package/{esm2020 → esm2022}/lib/display/splash/splash.component.mjs +42 -42
- package/{esm2020 → esm2022}/lib/display/splash/splash.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/display/table/resizable-column.component.mjs +20 -20
- package/{esm2020 → esm2022}/lib/display/table/resizable-table.directive.mjs +227 -227
- package/{esm2020 → esm2022}/lib/display/table/searchable-table.component.mjs +342 -342
- package/{esm2020 → esm2022}/lib/display/table/table-detail-row.component.mjs +19 -19
- package/{esm2020 → esm2022}/lib/display/table/table-locked-column.component.mjs +58 -58
- package/{esm2020 → esm2022}/lib/display/table/table-master-header-row.component.mjs +14 -14
- package/{esm2020 → esm2022}/lib/display/table/table-master-row.component.mjs +163 -163
- package/{esm2020 → esm2022}/lib/display/table/table-pagination.component.mjs +155 -155
- package/{esm2020 → esm2022}/lib/display/table/table-selectable-row.component.mjs +235 -235
- package/{esm2020 → esm2022}/lib/display/table/table.component.mjs +249 -249
- package/{esm2020 → esm2022}/lib/display/tags/tag.mjs +17 -17
- package/{esm2020 → esm2022}/lib/display/tags/tags.component.mjs +77 -77
- package/{esm2020 → esm2022}/lib/display/toast/toast/toast.component.mjs +77 -77
- package/{esm2020 → esm2022}/lib/display/toast/toast-types.mjs +7 -7
- package/{esm2020 → esm2022}/lib/display/toast/toast.service.mjs +35 -35
- package/{esm2020 → esm2022}/lib/display/toast/toaster/toaster.component.mjs +114 -114
- package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.component.mjs +28 -28
- package/{esm2020 → esm2022}/lib/display/tooltip/tooltip.service.mjs +78 -78
- package/{esm2020 → esm2022}/lib/display/tooltip-directive/tooltip.directive.mjs +173 -173
- package/{esm2020 → esm2022}/lib/display/tour/tour-types.mjs +33 -33
- package/{esm2020 → esm2022}/lib/display/tour/tour.component.mjs +398 -398
- package/{esm2020 → esm2022}/lib/display/tour/tour.service.mjs +75 -75
- package/{esm2020 → esm2022}/lib/display/tree/tree.component.mjs +135 -135
- package/{esm2020 → esm2022}/lib/display/view-overlay/view-overlay.component.mjs +58 -58
- package/{esm2020 → esm2022}/lib/shared/directives/click-area-for/click-area-for.directive.mjs +32 -32
- package/{esm2020 → esm2022}/lib/shared/directives/if-viewport-width/if-viewport-width.directive.mjs +111 -111
- package/esm2022/lib/shared/directives/popup/popup-container.directive.mjs +166 -0
- package/{esm2020 → esm2022}/lib/shared/display/pipes/date-display.pipe.mjs +50 -50
- package/{esm2020 → esm2022}/lib/shared/display/pipes/highlight-text.pipe.mjs +30 -30
- package/{esm2020 → esm2022}/lib/shared/display/pipes/relative-date.pipe.mjs +62 -62
- package/{esm2020 → esm2022}/lib/shared/display/pipes/row-count.pipe.mjs +48 -48
- package/{esm2020 → esm2022}/lib/shared/display/pipes/time-display.pipe.mjs +41 -41
- package/esm2022/lib/shared/display.mjs +6 -0
- package/esm2022/lib/shared/form-group.helper.mjs +67 -0
- package/{esm2020 → esm2022}/lib/shared/json-helper.mjs +18 -18
- package/esm2022/lib/shared/lodash-helper.mjs +52 -0
- package/{esm2020 → esm2022}/lib/shared/page/page-base/page-base.component.mjs +387 -387
- package/{esm2020 → esm2022}/lib/shared/page/page-statuses.mjs +22 -22
- package/{esm2020 → esm2022}/lib/shared/page/page-title/page-title.component.mjs +23 -23
- package/{esm2020 → esm2022}/lib/shared/page/page-view/page-view.component.mjs +147 -147
- package/{esm2020 → esm2022}/lib/shared/testing/copy-button-base-test-injector-factory.spec.mjs +16 -16
- package/{esm2020 → esm2022}/lib/shared/testing/hierarchy-base-test-injector-factory.spec.mjs +16 -16
- package/{esm2020 → esm2022}/lib/shared/testing/page-base-component-test-helper.spec.mjs +37 -37
- package/esm2022/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +98 -0
- package/{esm2020 → esm2022}/lib/shared/testing/public-mocks.spec.mjs +148 -148
- package/{esm2020 → esm2022}/lib/shared/testing/spy-factory.spec.mjs +39 -39
- package/{esm2020 → esm2022}/lib/shared/testing/translation-mocks.spec.mjs +56 -56
- package/{esm2020 → esm2022}/lib/shared/user-preference.service.mjs +17 -17
- package/{esm2020 → esm2022}/lib/shared/wizard/wizard-base/wizard-base.component.mjs +246 -246
- package/{esm2020 → esm2022}/lib/shared/wizard/wizard-buttons/wizard-buttons.component.mjs +68 -68
- package/{esm2020 → esm2022}/lib/shared/wizard/wizard-progress/wizard-progress.component.mjs +18 -18
- package/{esm2020 → esm2022}/public-api.mjs +114 -114
- package/{fesm2020 → fesm2022}/energycap-components.mjs +11797 -11793
- package/fesm2022/energycap-components.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/components.module.d.ts +91 -91
- package/lib/controls/banner/banner.component.d.ts +50 -50
- package/lib/controls/button/button.component.d.ts +78 -78
- package/lib/controls/button/copy-button-base.directive.d.ts +20 -20
- package/lib/controls/button/copy-button.directive.d.ts +14 -14
- package/lib/controls/button/copy-table-button.directive.d.ts +19 -19
- package/lib/controls/calendar/calendar-item.component.d.ts +17 -17
- package/lib/controls/calendar/calendar.component.d.ts +54 -54
- package/lib/controls/calendar/calendar.types.d.ts +7 -7
- package/lib/controls/checkbox/checkbox.component.d.ts +65 -65
- package/lib/controls/collapsible-toggle/collapsible-toggle.component.d.ts +25 -25
- package/lib/controls/combobox/combobox.component.d.ts +418 -418
- package/lib/controls/date-input/date-input.component.d.ts +80 -80
- package/lib/controls/dropdown/dropdown.component.d.ts +161 -161
- package/lib/controls/file-upload/file-upload.component.d.ts +124 -124
- package/lib/controls/form-control/form-control.component.d.ts +30 -30
- package/lib/controls/form-control-base.d.ts +110 -110
- package/lib/controls/form-control-label/form-control-label.component.d.ts +73 -73
- package/lib/controls/form-group/form-group.component.d.ts +105 -105
- package/lib/controls/help-popover/help-popover.component.d.ts +11 -11
- package/lib/controls/item-picker/item-picker.component.d.ts +164 -164
- package/lib/controls/link-button/link-button.component.d.ts +5 -5
- package/lib/controls/menu/menu.component.d.ts +255 -255
- package/lib/controls/navigation/link-item.d.ts +32 -32
- package/lib/controls/navigation/nav-group.d.ts +18 -18
- package/lib/controls/navigation/nav-item-active.directive.d.ts +42 -42
- package/lib/controls/navigation/nav-item.d.ts +31 -31
- package/lib/controls/numericbox/numericbox.component.d.ts +148 -148
- package/lib/controls/popover/popover.component.d.ts +51 -51
- package/lib/controls/radio-button/radio-button-option.d.ts +19 -19
- package/lib/controls/radio-button/radio-button.component.d.ts +53 -53
- package/lib/controls/select/select.component.d.ts +44 -44
- package/lib/controls/tabs/tabs.component.d.ts +30 -30
- package/lib/controls/textbox/textbox.component.d.ts +107 -107
- package/lib/core/cache.service.d.ts +33 -33
- package/lib/core/custom-validators.d.ts +20 -20
- package/lib/core/date-time-helper.d.ts +101 -101
- package/lib/core/error.service.d.ts +20 -20
- package/lib/core/router-helper.service.d.ts +48 -48
- package/lib/core/scroll.service.d.ts +36 -36
- package/lib/core/telemetry-tracker.service.d.ts +13 -13
- package/lib/core/telemetry.service.d.ts +31 -31
- package/lib/core/validation-message.service.d.ts +26 -26
- package/lib/core/validation-patterns.d.ts +22 -22
- package/lib/core/window.service.d.ts +116 -116
- package/lib/display/app-bar/app-bar.component.d.ts +20 -20
- package/lib/display/avatar/avatar.component.d.ts +35 -35
- package/lib/display/avatar/avatar.service.d.ts +24 -24
- package/lib/display/confirm/confirm.component.d.ts +123 -123
- package/lib/display/dialog/dialog-content.d.ts +19 -19
- package/lib/display/dialog/dialog-group/dialog-group.component.d.ts +32 -32
- package/lib/display/dialog/dialog-types.d.ts +130 -130
- package/lib/display/dialog/dialog.component.d.ts +120 -120
- package/lib/display/dialog/dialog.service.d.ts +48 -48
- package/lib/display/help/help-types.d.ts +33 -33
- package/lib/display/hierarchy/hierarchy-base.d.ts +97 -97
- package/lib/display/hierarchy/hierarchy-mocks.spec.d.ts +53 -53
- package/lib/display/hierarchy/hierarchy-tree/hierarchy-tree.component.d.ts +34 -34
- package/lib/display/item-display/item-display.component.d.ts +43 -43
- package/lib/display/json-display/json-display.component.d.ts +16 -16
- package/lib/display/resizable/resizable-base.d.ts +67 -67
- package/lib/display/resizable/resizable.component.d.ts +31 -31
- package/lib/display/spinner/spinner.component.d.ts +5 -5
- package/lib/display/splash/splash.component.d.ts +16 -16
- package/lib/display/splash/splash.service.d.ts +22 -22
- package/lib/display/table/resizable-column.component.d.ts +10 -10
- package/lib/display/table/resizable-table.directive.d.ts +93 -93
- package/lib/display/table/searchable-table.component.d.ts +206 -206
- package/lib/display/table/table-detail-row.component.d.ts +8 -8
- package/lib/display/table/table-locked-column.component.d.ts +20 -20
- package/lib/display/table/table-master-header-row.component.d.ts +9 -9
- package/lib/display/table/table-master-row.component.d.ts +113 -113
- package/lib/display/table/table-pagination.component.d.ts +91 -91
- package/lib/display/table/table-selectable-row.component.d.ts +102 -102
- package/lib/display/table/table.component.d.ts +121 -121
- package/lib/display/tags/tag.d.ts +18 -18
- package/lib/display/tags/tags.component.d.ts +48 -48
- package/lib/display/toast/toast/toast.component.d.ts +23 -23
- package/lib/display/toast/toast-types.d.ts +24 -24
- package/lib/display/toast/toast.service.d.ts +20 -20
- package/lib/display/toast/toaster/toaster.component.d.ts +35 -35
- package/lib/display/tooltip/tooltip.component.d.ts +70 -70
- package/lib/display/tooltip/tooltip.service.d.ts +16 -16
- package/lib/display/tooltip-directive/tooltip.directive.d.ts +44 -44
- package/lib/display/tour/tour-types.d.ts +70 -70
- package/lib/display/tour/tour.component.d.ts +147 -147
- package/lib/display/tour/tour.service.d.ts +38 -38
- package/lib/display/tree/tree.component.d.ts +75 -75
- package/lib/display/view-overlay/view-overlay.component.d.ts +38 -38
- package/lib/shared/directives/click-area-for/click-area-for.directive.d.ts +14 -14
- package/lib/shared/directives/if-viewport-width/if-viewport-width.directive.d.ts +60 -60
- package/lib/shared/directives/popup/popup-container.directive.d.ts +101 -101
- package/lib/shared/display/pipes/date-display.pipe.d.ts +21 -21
- package/lib/shared/display/pipes/highlight-text.pipe.d.ts +9 -9
- package/lib/shared/display/pipes/relative-date.pipe.d.ts +36 -36
- package/lib/shared/display/pipes/row-count.pipe.d.ts +23 -23
- package/lib/shared/display/pipes/time-display.pipe.d.ts +18 -18
- package/lib/shared/display.d.ts +42 -42
- package/lib/shared/form-group.helper.d.ts +31 -31
- package/lib/shared/json-helper.d.ts +7 -7
- package/lib/shared/lodash-helper.d.ts +18 -18
- package/lib/shared/page/page-base/page-base.component.d.ts +259 -259
- package/lib/shared/page/page-statuses.d.ts +13 -13
- package/lib/shared/page/page-title/page-title.component.d.ts +9 -9
- package/lib/shared/page/page-view/page-view.component.d.ts +102 -102
- package/lib/shared/testing/copy-button-base-test-injector-factory.spec.d.ts +4 -4
- package/lib/shared/testing/hierarchy-base-test-injector-factory.spec.d.ts +4 -4
- package/lib/shared/testing/page-base-component-test-helper.spec.d.ts +30 -30
- package/lib/shared/testing/page-base-component-test-injector-factory.spec.d.ts +28 -28
- package/lib/shared/testing/public-mocks.spec.d.ts +90 -90
- package/lib/shared/testing/spy-factory.spec.d.ts +27 -27
- package/lib/shared/testing/translation-mocks.spec.d.ts +30 -30
- package/lib/shared/user-preference.service.d.ts +13 -13
- package/lib/shared/wizard/wizard-base/wizard-base.component.d.ts +134 -134
- package/lib/shared/wizard/wizard-buttons/wizard-buttons.component.d.ts +27 -27
- package/lib/shared/wizard/wizard-progress/wizard-progress.component.d.ts +10 -10
- package/package.json +12 -18
- package/public-api.d.ts +111 -111
- package/schematics/rxjs-7-upgrade/index.d.ts +3 -3
- package/schematics/rxjs-7-upgrade/index.js +67 -67
- package/schematics/rxjs-7-upgrade/schema.d.ts +4 -4
- package/schematics/rxjs-7-upgrade/schema.js +2 -2
- package/schematics/utilities/typescript.d.ts +7 -7
- package/schematics/utilities/typescript.js +41 -41
- package/schematics/utilities/workspace.d.ts +8 -8
- package/schematics/utilities/workspace.js +71 -71
- package/esm2020/lib/core/custom-validators.mjs +0 -29
- package/esm2020/lib/core/date-time-helper.mjs +0 -220
- package/esm2020/lib/display/avatar/avatar.component.mjs +0 -67
- package/esm2020/lib/shared/directives/popup/popup-container.directive.mjs +0 -163
- package/esm2020/lib/shared/display.mjs +0 -6
- package/esm2020/lib/shared/form-group.helper.mjs +0 -67
- package/esm2020/lib/shared/lodash-helper.mjs +0 -51
- package/esm2020/lib/shared/testing/page-base-component-test-injector-factory.spec.mjs +0 -98
- package/fesm2015/energycap-components.mjs +0 -12211
- package/fesm2015/energycap-components.mjs.map +0 -1
- package/fesm2020/energycap-components.mjs.map +0 -1
@@ -1,16 +1,16 @@
|
|
1
|
-
import { Injectable } from '@angular/core';
|
2
|
-
import * as i0 from "@angular/core";
|
3
|
-
/** Default No-op telemetry implementation */
|
4
|
-
export class TelemetryTrackerService {
|
5
|
-
trackPageView(pageName, url, properties) { }
|
6
|
-
trackEvent(name, properties, measurements) { }
|
7
|
-
}
|
8
|
-
|
9
|
-
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
11
|
-
type: Injectable,
|
12
|
-
args: [{
|
13
|
-
providedIn: 'root'
|
14
|
-
}]
|
15
|
-
}] });
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
/** Default No-op telemetry implementation */
|
4
|
+
export class TelemetryTrackerService {
|
5
|
+
trackPageView(pageName, url, properties) { }
|
6
|
+
trackEvent(name, properties, measurements) { }
|
7
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TelemetryTrackerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
8
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TelemetryTrackerService, providedIn: 'root' }); }
|
9
|
+
}
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TelemetryTrackerService, decorators: [{
|
11
|
+
type: Injectable,
|
12
|
+
args: [{
|
13
|
+
providedIn: 'root'
|
14
|
+
}]
|
15
|
+
}] });
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LXRyYWNrZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb3JlL3RlbGVtZXRyeS10cmFja2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsNkNBQTZDO0FBQzdDLE1BQU0sT0FBTyx1QkFBdUI7SUFDM0IsYUFBYSxDQUFDLFFBQWdCLEVBQUUsR0FBVSxFQUFFLFVBQStDLElBQUksQ0FBQztJQUNoRyxVQUFVLENBQUMsSUFBWSxFQUFFLFVBQW1DLEVBQUUsWUFBb0MsSUFBSSxDQUFDOytHQUZuRyx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUh0QixNQUFNOzs0RkFHUCx1QkFBdUI7a0JBSm5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG4vKiogRGVmYXVsdCBOby1vcCB0ZWxlbWV0cnkgaW1wbGVtZW50YXRpb24gKi9cclxuZXhwb3J0IGNsYXNzIFRlbGVtZXRyeVRyYWNrZXJTZXJ2aWNlIHtcclxuICBwdWJsaWMgdHJhY2tQYWdlVmlldyhwYWdlTmFtZTogc3RyaW5nLCB1cmw6c3RyaW5nLCBwcm9wZXJ0aWVzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfSkgeyB9XHJcbiAgcHVibGljIHRyYWNrRXZlbnQobmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzoge1trZXk6IHN0cmluZ106c3RyaW5nfSwgbWVhc3VyZW1lbnRzPzoge1t2YWw6c3RyaW5nXTpudW1iZXJ9KSB7IH1cclxufVxyXG4iXX0=
|
@@ -1,38 +1,38 @@
|
|
1
|
-
import { Injectable } from '@angular/core';
|
2
|
-
import * as i0 from "@angular/core";
|
3
|
-
import * as i1 from "./telemetry-tracker.service";
|
4
|
-
export class TelemetryService {
|
5
|
-
constructor(telemetryTrackerService) {
|
6
|
-
this.telemetryTrackerService = telemetryTrackerService;
|
7
|
-
}
|
8
|
-
/**
|
9
|
-
* Tracks a Page View / State change
|
10
|
-
*
|
11
|
-
* @param {string} pageName
|
12
|
-
* @param {string} url
|
13
|
-
* @memberof TelemetryService
|
14
|
-
*/
|
15
|
-
trackPageView(pageName, url, properties) {
|
16
|
-
this.telemetryTrackerService.trackPageView(pageName, url, properties);
|
17
|
-
}
|
18
|
-
/**
|
19
|
-
* Tracks a generic event
|
20
|
-
*
|
21
|
-
* @param {string} name
|
22
|
-
* @param {{[key: string]:string}} [properties]
|
23
|
-
* @param {{[val:string]:number}} [measurements]
|
24
|
-
* @memberof TelemetryService
|
25
|
-
*/
|
26
|
-
trackEvent(name, properties, measurements) {
|
27
|
-
this.telemetryTrackerService.trackEvent(name, properties, measurements);
|
28
|
-
}
|
29
|
-
}
|
30
|
-
|
31
|
-
|
32
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
33
|
-
type: Injectable,
|
34
|
-
args: [{
|
35
|
-
providedIn: 'root'
|
36
|
-
}]
|
37
|
-
}], ctorParameters: function () { return [{ type: i1.TelemetryTrackerService }]; } });
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import * as i0 from "@angular/core";
|
3
|
+
import * as i1 from "./telemetry-tracker.service";
|
4
|
+
export class TelemetryService {
|
5
|
+
constructor(telemetryTrackerService) {
|
6
|
+
this.telemetryTrackerService = telemetryTrackerService;
|
7
|
+
}
|
8
|
+
/**
|
9
|
+
* Tracks a Page View / State change
|
10
|
+
*
|
11
|
+
* @param {string} pageName
|
12
|
+
* @param {string} url
|
13
|
+
* @memberof TelemetryService
|
14
|
+
*/
|
15
|
+
trackPageView(pageName, url, properties) {
|
16
|
+
this.telemetryTrackerService.trackPageView(pageName, url, properties);
|
17
|
+
}
|
18
|
+
/**
|
19
|
+
* Tracks a generic event
|
20
|
+
*
|
21
|
+
* @param {string} name
|
22
|
+
* @param {{[key: string]:string}} [properties]
|
23
|
+
* @param {{[val:string]:number}} [measurements]
|
24
|
+
* @memberof TelemetryService
|
25
|
+
*/
|
26
|
+
trackEvent(name, properties, measurements) {
|
27
|
+
this.telemetryTrackerService.trackEvent(name, properties, measurements);
|
28
|
+
}
|
29
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TelemetryService, deps: [{ token: i1.TelemetryTrackerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
30
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TelemetryService, providedIn: 'root' }); }
|
31
|
+
}
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TelemetryService, decorators: [{
|
33
|
+
type: Injectable,
|
34
|
+
args: [{
|
35
|
+
providedIn: 'root'
|
36
|
+
}]
|
37
|
+
}], ctorParameters: function () { return [{ type: i1.TelemetryTrackerService }]; } });
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVsZW1ldHJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS90ZWxlbWV0cnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFvQix1QkFBZ0Q7UUFBaEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtJQUFHLENBQUM7SUFFeEU7Ozs7OztPQU1HO0lBQ0ksYUFBYSxDQUFDLFFBQWdCLEVBQUUsR0FBVSxFQUFFLFVBQStDO1FBQ2hHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFVBQVUsQ0FBQyxJQUFZLEVBQUUsVUFBbUMsRUFBRSxZQUFvQztRQUN2RyxJQUFJLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDMUUsQ0FBQzsrR0F6QlUsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUZWxlbWV0cnlUcmFja2VyU2VydmljZSB9IGZyb20gJy4vdGVsZW1ldHJ5LXRyYWNrZXIuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0ZWxlbWV0cnlUcmFja2VyU2VydmljZTogVGVsZW1ldHJ5VHJhY2tlclNlcnZpY2UpIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrcyBhIFBhZ2UgVmlldyAvIFN0YXRlIGNoYW5nZSBcclxuICAgKiBcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFnZU5hbWUgXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybCBcclxuICAgKiBAbWVtYmVyb2YgVGVsZW1ldHJ5U2VydmljZVxyXG4gICAqL1xyXG4gIHB1YmxpYyB0cmFja1BhZ2VWaWV3KHBhZ2VOYW1lOiBzdHJpbmcsIHVybDpzdHJpbmcsIHByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9KSB7XHJcbiAgICB0aGlzLnRlbGVtZXRyeVRyYWNrZXJTZXJ2aWNlLnRyYWNrUGFnZVZpZXcocGFnZU5hbWUsIHVybCwgcHJvcGVydGllcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmFja3MgYSBnZW5lcmljIGV2ZW50XHJcbiAgICogXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgXHJcbiAgICogQHBhcmFtIHt7W2tleTogc3RyaW5nXTpzdHJpbmd9fSBbcHJvcGVydGllc10gXHJcbiAgICogQHBhcmFtIHt7W3ZhbDpzdHJpbmddOm51bWJlcn19IFttZWFzdXJlbWVudHNdIFxyXG4gICAqIEBtZW1iZXJvZiBUZWxlbWV0cnlTZXJ2aWNlXHJcbiAgICovXHJcbiAgcHVibGljIHRyYWNrRXZlbnQobmFtZTogc3RyaW5nLCBwcm9wZXJ0aWVzPzoge1trZXk6IHN0cmluZ106c3RyaW5nfSwgbWVhc3VyZW1lbnRzPzoge1t2YWw6c3RyaW5nXTpudW1iZXJ9KSB7XHJcbiAgICB0aGlzLnRlbGVtZXRyeVRyYWNrZXJTZXJ2aWNlLnRyYWNrRXZlbnQobmFtZSwgcHJvcGVydGllcywgbWVhc3VyZW1lbnRzKTtcclxuICB9XHJcbn1cclxuIl19
|
@@ -1,185 +1,185 @@
|
|
1
|
-
import { Injectable } from '@angular/core';
|
2
|
-
import { forkJoin, lastValueFrom } from 'rxjs';
|
3
|
-
import * as i0 from "@angular/core";
|
4
|
-
import * as i1 from "@ngx-translate/core";
|
5
|
-
import * as i2 from "../shared/display/pipes/date-display.pipe";
|
6
|
-
/**
|
7
|
-
* "Weak Type" describing interpolation parameters for NumericBox
|
8
|
-
*/
|
9
|
-
class NumericBoxInterpolationParameters {
|
10
|
-
}
|
11
|
-
/**
|
12
|
-
* Service to take {@link ValidationErrors} and return meaningful error messages
|
13
|
-
*/
|
14
|
-
export class ValidationMessageService {
|
15
|
-
constructor(translate, dateDisplayPipe) {
|
16
|
-
this.translate = translate;
|
17
|
-
this.dateDisplayPipe = dateDisplayPipe;
|
18
|
-
}
|
19
|
-
/**
|
20
|
-
* Get meaningful error messages from {@link ValidationErrors}
|
21
|
-
*/
|
22
|
-
getErrorMessages(errors) {
|
23
|
-
/** Array of observables returned from the TranslateService. */
|
24
|
-
let translationObservables = new Array();
|
25
|
-
if (errors !== null) {
|
26
|
-
for (var errorKey in errors) {
|
27
|
-
// it would be nice to have typing on the ValidationErrors
|
28
|
-
let error = errors[errorKey];
|
29
|
-
switch (errorKey) {
|
30
|
-
case 'email':
|
31
|
-
translationObservables.push(this.translate.get('InvalidEmailValidationMessage_LC'));
|
32
|
-
break;
|
33
|
-
case 'required':
|
34
|
-
translationObservables.push(this.translate.get('is required'));
|
35
|
-
break;
|
36
|
-
case 'requiredPlural':
|
37
|
-
translationObservables.push(this.translate.get('RequiredPluralValidationMessage_LC'));
|
38
|
-
break;
|
39
|
-
case 'minlength':
|
40
|
-
translationObservables.push(this.translate
|
41
|
-
.get('MinLengthValidationMessage_LC', { minLength: error.requiredLength }));
|
42
|
-
break;
|
43
|
-
case 'maxlength':
|
44
|
-
translationObservables.push(this.translate
|
45
|
-
.get(`MaxLengthValidationMessage`, { maxLength: error.requiredLength }));
|
46
|
-
break;
|
47
|
-
case 'pattern':
|
48
|
-
translationObservables.push(this.translate.get('IncorrectFormat_LC'));
|
49
|
-
break;
|
50
|
-
case 'min':
|
51
|
-
translationObservables.push(this.translate
|
52
|
-
.get('MinValueValidationMessage_LC', { minValue: error.min }));
|
53
|
-
break;
|
54
|
-
case 'max':
|
55
|
-
translationObservables.push(this.translate
|
56
|
-
.get('MaxValueValidationMessage_LC', { maxValue: error.max }));
|
57
|
-
break;
|
58
|
-
case 'zipCodeInvalidFormat':
|
59
|
-
translationObservables.push(this.translate.get('must be 5–9 numbers'));
|
60
|
-
break;
|
61
|
-
case 'postalCodeInvalidFormat':
|
62
|
-
translationObservables.push(this.translate
|
63
|
-
.get('must be 6 characters, alternating letters and numbers'));
|
64
|
-
break;
|
65
|
-
case 'zipCodeNotFound':
|
66
|
-
translationObservables.push(this.translate
|
67
|
-
.get('ZipCodeNotFoundValidationMessage_LC'));
|
68
|
-
break;
|
69
|
-
// Custom validator from the NumericboxComponent
|
70
|
-
case 'numericbox':
|
71
|
-
translationObservables.push(this.getNumericBoxValidationMessages(error));
|
72
|
-
break;
|
73
|
-
case 'addnew':
|
74
|
-
translationObservables.push(this.translate.get('CouldNotBeAddedValidationMessage_LC'));
|
75
|
-
break;
|
76
|
-
// Kendo datepicker min error
|
77
|
-
case 'minError':
|
78
|
-
case 'minDate':
|
79
|
-
var value = this.dateDisplayPipe.transform(error.minValue);
|
80
|
-
translationObservables.push(this.translate
|
81
|
-
.get('MinValueValidationMessage_LC', { minValue: value }));
|
82
|
-
break;
|
83
|
-
// Kendo datepicker max error
|
84
|
-
case 'maxError':
|
85
|
-
case 'maxDate':
|
86
|
-
var value = this.dateDisplayPipe.transform(error.maxValue, true);
|
87
|
-
translationObservables.push(this.translate
|
88
|
-
.get('MaxValueValidationMessage_LC', { maxValue: value }));
|
89
|
-
break;
|
90
|
-
// Custom validator for the DateRangeComponent
|
91
|
-
case 'dateRange':
|
92
|
-
translationObservables.push(this.translate.get('DateRangeValidationMessage_LC'));
|
93
|
-
break;
|
94
|
-
case 'password':
|
95
|
-
translationObservables.push(this.translate.get('PasswordValidationMessage_LC'));
|
96
|
-
break;
|
97
|
-
// Custom validator from the TextboxComponent
|
98
|
-
case 'textbox':
|
99
|
-
translationObservables.push(this.getTextBoxValidationMessages(error));
|
100
|
-
break;
|
101
|
-
case 'notUnique':
|
102
|
-
translationObservables.push(this.translate.get('MustBeUnique_LC'));
|
103
|
-
break;
|
104
|
-
case 'json':
|
105
|
-
translationObservables.push(this.translate.get('JsonValidationMessage_SC'));
|
106
|
-
break;
|
107
|
-
case 'passwordInvalid':
|
108
|
-
translationObservables.push(this.translate.get('PasswordInvalidValidationMessage_LC'));
|
109
|
-
break;
|
110
|
-
case 'domain':
|
111
|
-
translationObservables.push(this.translate.get('DomainValidationMessage_SC'));
|
112
|
-
break;
|
113
|
-
case 'invalidFile':
|
114
|
-
case 'invalidFormula':
|
115
|
-
translationObservables.push(this.translate.get('is invalid'));
|
116
|
-
break;
|
117
|
-
default:
|
118
|
-
break;
|
119
|
-
}
|
120
|
-
}
|
121
|
-
if (translationObservables.length > 0) {
|
122
|
-
// forkJoin returns an Observable that emits when all its observables complete.
|
123
|
-
// When forkjoin emits, it emits an array containing the last value returned from
|
124
|
-
// each of its observables.
|
125
|
-
// @see https://www.learnrxjs.io/operators/combination/forkjoin.html
|
126
|
-
// We convert this to a promise so the form controls can display the error messages
|
127
|
-
// asynchronously.
|
128
|
-
return lastValueFrom(forkJoin(translationObservables));
|
129
|
-
}
|
130
|
-
}
|
131
|
-
return Promise.resolve(new Array());
|
132
|
-
}
|
133
|
-
/**
|
134
|
-
* Get proper validation message for @see NumericBoxComponent
|
135
|
-
*/
|
136
|
-
getNumericBoxValidationMessages(error) {
|
137
|
-
let interpolationParameters = {};
|
138
|
-
let type = 'Integer';
|
139
|
-
if (error.decimals) {
|
140
|
-
interpolationParameters.precision = error.decimals;
|
141
|
-
type = 'Decimal';
|
142
|
-
}
|
143
|
-
if (error.min !== undefined && error.max !== undefined) {
|
144
|
-
interpolationParameters.minValue = error.min;
|
145
|
-
interpolationParameters.maxValue = error.max;
|
146
|
-
return this.translate.get(`${type}BetweenValidationMessage_LC`, interpolationParameters);
|
147
|
-
}
|
148
|
-
if (error.min !== undefined) {
|
149
|
-
interpolationParameters.minValue = error.min;
|
150
|
-
return this.translate.get(`${type}MinValidationMessage_LC`, interpolationParameters);
|
151
|
-
}
|
152
|
-
if (error.max !== undefined) {
|
153
|
-
interpolationParameters.maxValue = error.max;
|
154
|
-
return this.translate.get(`${type}MaxValidationMessage_LC`, interpolationParameters);
|
155
|
-
}
|
156
|
-
if (error.maxPrecisionDigits) {
|
157
|
-
interpolationParameters.maxPrecisionDigits = error.maxPrecisionDigits;
|
158
|
-
return this.translate.get('MaxPrecisionDigitsValidationMessage_LC', interpolationParameters);
|
159
|
-
}
|
160
|
-
if (error.decimals) {
|
161
|
-
return this.translate.get('DecimalValidationMessage_LC', interpolationParameters);
|
162
|
-
}
|
163
|
-
return this.translate.get('IncorrectFormat_LC');
|
164
|
-
}
|
165
|
-
/**
|
166
|
-
* Given the advanced textbox validation params construct the error message
|
167
|
-
*/
|
168
|
-
getTextBoxValidationMessages(error) {
|
169
|
-
if (error.unique) {
|
170
|
-
return this.translate.get('TextboxRequiredAndUnique_LC', { minLength: error.minLength, maxLength: error.maxLength });
|
171
|
-
}
|
172
|
-
else {
|
173
|
-
return this.translate.get('TextboxRequired_LC', { minLength: error.minLength, maxLength: error.maxLength });
|
174
|
-
}
|
175
|
-
}
|
176
|
-
}
|
177
|
-
|
178
|
-
|
179
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
180
|
-
type: Injectable,
|
181
|
-
args: [{
|
182
|
-
providedIn: 'root'
|
183
|
-
}]
|
184
|
-
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.DateDisplayPipe }]; } });
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1tZXNzYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxRQUFRLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBSzNEOztHQUVHO0FBQ0gsTUFBTSxpQ0FBaUM7Q0FNdEM7QUFFRDs7R0FFRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFFbkMsWUFDWSxTQUEyQixFQUMzQixlQUFnQztRQURoQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDeEMsQ0FBQztJQUdMOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsTUFBK0I7UUFFbkQsK0RBQStEO1FBQy9ELElBQUksc0JBQXNCLEdBQUcsSUFBSSxLQUFLLEVBQXNCLENBQUM7UUFFN0QsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBRWpCLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO2dCQUN6QiwwREFBMEQ7Z0JBQzFELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0IsUUFBUSxRQUFRLEVBQUU7b0JBQ2QsS0FBSyxPQUFPO3dCQUNSLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUM7d0JBQ3BGLE1BQU07b0JBRVYsS0FBSyxVQUFVO3dCQUNYLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUM3RCxNQUFNO29CQUNW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QUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUMvRztJQUNMLENBQUM7O3FIQXhNVSx3QkFBd0I7eUhBQXhCLHdCQUF3QixjQUZ2QixNQUFNOzJGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFRleHRib3hWYWxpZGF0b3JQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vY29udHJvbHMvdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVEaXNwbGF5UGlwZSB9IGZyb20gJy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL2RhdGUtZGlzcGxheS5waXBlJztcclxuXHJcbi8qKlxyXG4gKiBcIldlYWsgVHlwZVwiIGRlc2NyaWJpbmcgaW50ZXJwb2xhdGlvbiBwYXJhbWV0ZXJzIGZvciBOdW1lcmljQm94XHJcbiAqL1xyXG5jbGFzcyBOdW1lcmljQm94SW50ZXJwb2xhdGlvblBhcmFtZXRlcnMge1xyXG4gICAgcHVibGljIHByZWNpc2lvbj86IG51bWJlcjtcclxuICAgIHB1YmxpYyBtaW5WYWx1ZT86IG51bWJlcjtcclxuICAgIHB1YmxpYyBtYXhWYWx1ZT86IG51bWJlcjtcclxuICAgIHB1YmxpYyBtaW5NYXhSYW5nZT86IHN0cmluZztcclxuICAgIHB1YmxpYyBtYXhQcmVjaXNpb25EaWdpdHM/OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIHRvIHRha2Uge0BsaW5rIFZhbGlkYXRpb25FcnJvcnN9IGFuZCByZXR1cm4gbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlc1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGRhdGVEaXNwbGF5UGlwZTogRGF0ZURpc3BsYXlQaXBlXHJcbiAgKSB7IH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VzIGZyb20ge0BsaW5rIFZhbGlkYXRpb25FcnJvcnN9XHJcbiAgICovXHJcbiAgcHVibGljIGdldEVycm9yTWVzc2FnZXMoZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCk6IFByb21pc2U8QXJyYXk8YW55Pj4ge1xyXG5cclxuICAgICAgLyoqIEFycmF5IG9mIG9ic2VydmFibGVzIHJldHVybmVkIGZyb20gdGhlIFRyYW5zbGF0ZVNlcnZpY2UuICovXHJcbiAgICAgIGxldCB0cmFuc2xhdGlvbk9ic2VydmFibGVzID0gbmV3IEFycmF5PE9ic2VydmFibGU8c3RyaW5nPj4oKTtcclxuXHJcbiAgICAgIGlmIChlcnJvcnMgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICBmb3IgKHZhciBlcnJvcktleSBpbiBlcnJvcnMpIHtcclxuICAgICAgICAgICAgICAvLyBpdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgdHlwaW5nIG9uIHRoZSBWYWxpZGF0aW9uRXJyb3JzXHJcbiAgICAgICAgICAgICAgbGV0IGVycm9yID0gZXJyb3JzW2Vycm9yS2V5XTtcclxuXHJcbiAgICAgICAgICAgICAgc3dpdGNoIChlcnJvcktleSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdlbWFpbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdJbnZhbGlkRW1haWxWYWxpZGF0aW9uTWVzc2FnZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnaXMgcmVxdWlyZWQnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkUGx1cmFsJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnUmVxdWlyZWRQbHVyYWxWYWxpZGF0aW9uTWVzc2FnZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWlubGVuZ3RoJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ01pbkxlbmd0aFZhbGlkYXRpb25NZXNzYWdlX0xDJywgeyBtaW5MZW5ndGg6IGVycm9yLnJlcXVpcmVkTGVuZ3RoIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoYE1heExlbmd0aFZhbGlkYXRpb25NZXNzYWdlYCwgeyBtYXhMZW5ndGg6IGVycm9yLnJlcXVpcmVkTGVuZ3RoIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAncGF0dGVybic6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdJbmNvcnJlY3RGb3JtYXRfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdNaW5WYWx1ZVZhbGlkYXRpb25NZXNzYWdlX0xDJywgeyBtaW5WYWx1ZTogZXJyb3IubWluIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWF4JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ01heFZhbHVlVmFsaWRhdGlvbk1lc3NhZ2VfTEMnLCB7IG1heFZhbHVlOiBlcnJvci5tYXggfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd6aXBDb2RlSW52YWxpZEZvcm1hdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdtdXN0IGJlIDXigJM5IG51bWJlcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bvc3RhbENvZGVJbnZhbGlkRm9ybWF0JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ211c3QgYmUgNiBjaGFyYWN0ZXJzLCBhbHRlcm5hdGluZyBsZXR0ZXJzIGFuZCBudW1iZXJzJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd6aXBDb2RlTm90Rm91bmQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnWmlwQ29kZU5vdEZvdW5kVmFsaWRhdGlvbk1lc3NhZ2VfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbSB2YWxpZGF0b3IgZnJvbSB0aGUgTnVtZXJpY2JveENvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBjYXNlICdudW1lcmljYm94JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLmdldE51bWVyaWNCb3hWYWxpZGF0aW9uTWVzc2FnZXMoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnYWRkbmV3JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ0NvdWxkTm90QmVBZGRlZFZhbGlkYXRpb25NZXNzYWdlX0xDJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBLZW5kbyBkYXRlcGlja2VyIG1pbiBlcnJvclxyXG4gICAgICAgICAgICAgICAgICBjYXNlICdtaW5FcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbkRhdGUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5kYXRlRGlzcGxheVBpcGUudHJhbnNmb3JtKGVycm9yLm1pblZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ01pblZhbHVlVmFsaWRhdGlvbk1lc3NhZ2VfTEMnLCB7IG1pblZhbHVlOiB2YWx1ZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIEtlbmRvIGRhdGVwaWNrZXIgbWF4IGVycm9yXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ21heEVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWF4RGF0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmRhdGVEaXNwbGF5UGlwZS50cmFuc2Zvcm0oZXJyb3IubWF4VmFsdWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnTWF4VmFsdWVWYWxpZGF0aW9uTWVzc2FnZV9MQycsIHsgbWF4VmFsdWU6IHZhbHVlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gQ3VzdG9tIHZhbGlkYXRvciBmb3IgdGhlIERhdGVSYW5nZUNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBjYXNlICdkYXRlUmFuZ2UnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnRGF0ZVJhbmdlVmFsaWRhdGlvbk1lc3NhZ2VfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ1Bhc3N3b3JkVmFsaWRhdGlvbk1lc3NhZ2VfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbSB2YWxpZGF0b3IgZnJvbSB0aGUgVGV4dGJveENvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0Ym94JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLmdldFRleHRCb3hWYWxpZGF0aW9uTWVzc2FnZXMoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbm90VW5pcXVlJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ011c3RCZVVuaXF1ZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdKc29uVmFsaWRhdGlvbk1lc3NhZ2VfU0MnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bhc3N3b3JkSW52YWxpZCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdQYXNzd29yZEludmFsaWRWYWxpZGF0aW9uTWVzc2FnZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnZG9tYWluJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ0RvbWFpblZhbGlkYXRpb25NZXNzYWdlX1NDJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2ludmFsaWRGaWxlJzpcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnaW52YWxpZEZvcm11bGEnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnaXMgaW52YWxpZCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0cmFuc2xhdGlvbk9ic2VydmFibGVzLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gZm9ya0pvaW4gcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiBhbGwgaXRzIG9ic2VydmFibGVzIGNvbXBsZXRlLlxyXG4gICAgICAgICAgICAgIC8vIFdoZW4gZm9ya2pvaW4gZW1pdHMsIGl0IGVtaXRzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxhc3QgdmFsdWUgcmV0dXJuZWQgZnJvbVxyXG4gICAgICAgICAgICAgIC8vIGVhY2ggb2YgaXRzIG9ic2VydmFibGVzLlxyXG4gICAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly93d3cubGVhcm5yeGpzLmlvL29wZXJhdG9ycy9jb21iaW5hdGlvbi9mb3Jram9pbi5odG1sXHJcbiAgICAgICAgICAgICAgLy8gV2UgY29udmVydCB0aGlzIHRvIGEgcHJvbWlzZSBzbyB0aGUgZm9ybSBjb250cm9scyBjYW4gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZXNcclxuICAgICAgICAgICAgICAvLyBhc3luY2hyb25vdXNseS5cclxuICAgICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbShmb3JrSm9pbih0cmFuc2xhdGlvbk9ic2VydmFibGVzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEFycmF5PHN0cmluZz4oKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHByb3BlciB2YWxpZGF0aW9uIG1lc3NhZ2UgZm9yIEBzZWUgTnVtZXJpY0JveENvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0TnVtZXJpY0JveFZhbGlkYXRpb25NZXNzYWdlcyhlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgbGV0IGludGVycG9sYXRpb25QYXJhbWV0ZXJzOiBOdW1lcmljQm94SW50ZXJwb2xhdGlvblBhcmFtZXRlcnMgPSB7fTtcclxuICAgICAgbGV0IHR5cGU6IHN0cmluZyA9ICdJbnRlZ2VyJztcclxuXHJcbiAgICAgIGlmIChlcnJvci5kZWNpbWFscykge1xyXG4gICAgICAgICAgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMucHJlY2lzaW9uID0gZXJyb3IuZGVjaW1hbHM7XHJcbiAgICAgICAgICB0eXBlID0gJ0RlY2ltYWwnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWluICE9PSB1bmRlZmluZWQgJiYgZXJyb3IubWF4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGludGVycG9sYXRpb25QYXJhbWV0ZXJzLm1pblZhbHVlID0gZXJyb3IubWluO1xyXG4gICAgICAgICAgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMubWF4VmFsdWUgPSBlcnJvci5tYXg7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KGAke3R5cGV9QmV0d2VlblZhbGlkYXRpb25NZXNzYWdlX0xDYCwgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWluICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGludGVycG9sYXRpb25QYXJhbWV0ZXJzLm1pblZhbHVlID0gZXJyb3IubWluO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldChgJHt0eXBlfU1pblZhbGlkYXRpb25NZXNzYWdlX0xDYCwgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWF4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGludGVycG9sYXRpb25QYXJhbWV0ZXJzLm1heFZhbHVlID0gZXJyb3IubWF4O1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldChgJHt0eXBlfU1heFZhbGlkYXRpb25NZXNzYWdlX0xDYCwgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWF4UHJlY2lzaW9uRGlnaXRzKSB7XHJcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uUGFyYW1ldGVycy5tYXhQcmVjaXNpb25EaWdpdHMgPSBlcnJvci5tYXhQcmVjaXNpb25EaWdpdHM7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KCdNYXhQcmVjaXNpb25EaWdpdHNWYWxpZGF0aW9uTWVzc2FnZV9MQycsIGludGVycG9sYXRpb25QYXJhbWV0ZXJzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVycm9yLmRlY2ltYWxzKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KCdEZWNpbWFsVmFsaWRhdGlvbk1lc3NhZ2VfTEMnLCBpbnRlcnBvbGF0aW9uUGFyYW1ldGVycyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0luY29ycmVjdEZvcm1hdF9MQycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZW4gdGhlIGFkdmFuY2VkIHRleHRib3ggdmFsaWRhdGlvbiBwYXJhbXMgY29uc3RydWN0IHRoZSBlcnJvciBtZXNzYWdlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRUZXh0Qm94VmFsaWRhdGlvbk1lc3NhZ2VzKGVycm9yOiBUZXh0Ym94VmFsaWRhdG9yUGFyYW1ldGVycyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIGlmIChlcnJvci51bmlxdWUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5nZXQoJ1RleHRib3hSZXF1aXJlZEFuZFVuaXF1ZV9MQycsIHsgbWluTGVuZ3RoOiBlcnJvci5taW5MZW5ndGgsIG1heExlbmd0aDogZXJyb3IubWF4TGVuZ3RoIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldCgnVGV4dGJveFJlcXVpcmVkX0xDJywgeyBtaW5MZW5ndGg6IGVycm9yLm1pbkxlbmd0aCwgbWF4TGVuZ3RoOiBlcnJvci5tYXhMZW5ndGggfSk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|
1
|
+
import { Injectable } from '@angular/core';
|
2
|
+
import { forkJoin, lastValueFrom } from 'rxjs';
|
3
|
+
import * as i0 from "@angular/core";
|
4
|
+
import * as i1 from "@ngx-translate/core";
|
5
|
+
import * as i2 from "../shared/display/pipes/date-display.pipe";
|
6
|
+
/**
|
7
|
+
* "Weak Type" describing interpolation parameters for NumericBox
|
8
|
+
*/
|
9
|
+
class NumericBoxInterpolationParameters {
|
10
|
+
}
|
11
|
+
/**
|
12
|
+
* Service to take {@link ValidationErrors} and return meaningful error messages
|
13
|
+
*/
|
14
|
+
export class ValidationMessageService {
|
15
|
+
constructor(translate, dateDisplayPipe) {
|
16
|
+
this.translate = translate;
|
17
|
+
this.dateDisplayPipe = dateDisplayPipe;
|
18
|
+
}
|
19
|
+
/**
|
20
|
+
* Get meaningful error messages from {@link ValidationErrors}
|
21
|
+
*/
|
22
|
+
getErrorMessages(errors) {
|
23
|
+
/** Array of observables returned from the TranslateService. */
|
24
|
+
let translationObservables = new Array();
|
25
|
+
if (errors !== null) {
|
26
|
+
for (var errorKey in errors) {
|
27
|
+
// it would be nice to have typing on the ValidationErrors
|
28
|
+
let error = errors[errorKey];
|
29
|
+
switch (errorKey) {
|
30
|
+
case 'email':
|
31
|
+
translationObservables.push(this.translate.get('InvalidEmailValidationMessage_LC'));
|
32
|
+
break;
|
33
|
+
case 'required':
|
34
|
+
translationObservables.push(this.translate.get('is required'));
|
35
|
+
break;
|
36
|
+
case 'requiredPlural':
|
37
|
+
translationObservables.push(this.translate.get('RequiredPluralValidationMessage_LC'));
|
38
|
+
break;
|
39
|
+
case 'minlength':
|
40
|
+
translationObservables.push(this.translate
|
41
|
+
.get('MinLengthValidationMessage_LC', { minLength: error.requiredLength }));
|
42
|
+
break;
|
43
|
+
case 'maxlength':
|
44
|
+
translationObservables.push(this.translate
|
45
|
+
.get(`MaxLengthValidationMessage`, { maxLength: error.requiredLength }));
|
46
|
+
break;
|
47
|
+
case 'pattern':
|
48
|
+
translationObservables.push(this.translate.get('IncorrectFormat_LC'));
|
49
|
+
break;
|
50
|
+
case 'min':
|
51
|
+
translationObservables.push(this.translate
|
52
|
+
.get('MinValueValidationMessage_LC', { minValue: error.min }));
|
53
|
+
break;
|
54
|
+
case 'max':
|
55
|
+
translationObservables.push(this.translate
|
56
|
+
.get('MaxValueValidationMessage_LC', { maxValue: error.max }));
|
57
|
+
break;
|
58
|
+
case 'zipCodeInvalidFormat':
|
59
|
+
translationObservables.push(this.translate.get('must be 5–9 numbers'));
|
60
|
+
break;
|
61
|
+
case 'postalCodeInvalidFormat':
|
62
|
+
translationObservables.push(this.translate
|
63
|
+
.get('must be 6 characters, alternating letters and numbers'));
|
64
|
+
break;
|
65
|
+
case 'zipCodeNotFound':
|
66
|
+
translationObservables.push(this.translate
|
67
|
+
.get('ZipCodeNotFoundValidationMessage_LC'));
|
68
|
+
break;
|
69
|
+
// Custom validator from the NumericboxComponent
|
70
|
+
case 'numericbox':
|
71
|
+
translationObservables.push(this.getNumericBoxValidationMessages(error));
|
72
|
+
break;
|
73
|
+
case 'addnew':
|
74
|
+
translationObservables.push(this.translate.get('CouldNotBeAddedValidationMessage_LC'));
|
75
|
+
break;
|
76
|
+
// Kendo datepicker min error
|
77
|
+
case 'minError':
|
78
|
+
case 'minDate':
|
79
|
+
var value = this.dateDisplayPipe.transform(error.minValue);
|
80
|
+
translationObservables.push(this.translate
|
81
|
+
.get('MinValueValidationMessage_LC', { minValue: value }));
|
82
|
+
break;
|
83
|
+
// Kendo datepicker max error
|
84
|
+
case 'maxError':
|
85
|
+
case 'maxDate':
|
86
|
+
var value = this.dateDisplayPipe.transform(error.maxValue, true);
|
87
|
+
translationObservables.push(this.translate
|
88
|
+
.get('MaxValueValidationMessage_LC', { maxValue: value }));
|
89
|
+
break;
|
90
|
+
// Custom validator for the DateRangeComponent
|
91
|
+
case 'dateRange':
|
92
|
+
translationObservables.push(this.translate.get('DateRangeValidationMessage_LC'));
|
93
|
+
break;
|
94
|
+
case 'password':
|
95
|
+
translationObservables.push(this.translate.get('PasswordValidationMessage_LC'));
|
96
|
+
break;
|
97
|
+
// Custom validator from the TextboxComponent
|
98
|
+
case 'textbox':
|
99
|
+
translationObservables.push(this.getTextBoxValidationMessages(error));
|
100
|
+
break;
|
101
|
+
case 'notUnique':
|
102
|
+
translationObservables.push(this.translate.get('MustBeUnique_LC'));
|
103
|
+
break;
|
104
|
+
case 'json':
|
105
|
+
translationObservables.push(this.translate.get('JsonValidationMessage_SC'));
|
106
|
+
break;
|
107
|
+
case 'passwordInvalid':
|
108
|
+
translationObservables.push(this.translate.get('PasswordInvalidValidationMessage_LC'));
|
109
|
+
break;
|
110
|
+
case 'domain':
|
111
|
+
translationObservables.push(this.translate.get('DomainValidationMessage_SC'));
|
112
|
+
break;
|
113
|
+
case 'invalidFile':
|
114
|
+
case 'invalidFormula':
|
115
|
+
translationObservables.push(this.translate.get('is invalid'));
|
116
|
+
break;
|
117
|
+
default:
|
118
|
+
break;
|
119
|
+
}
|
120
|
+
}
|
121
|
+
if (translationObservables.length > 0) {
|
122
|
+
// forkJoin returns an Observable that emits when all its observables complete.
|
123
|
+
// When forkjoin emits, it emits an array containing the last value returned from
|
124
|
+
// each of its observables.
|
125
|
+
// @see https://www.learnrxjs.io/operators/combination/forkjoin.html
|
126
|
+
// We convert this to a promise so the form controls can display the error messages
|
127
|
+
// asynchronously.
|
128
|
+
return lastValueFrom(forkJoin(translationObservables));
|
129
|
+
}
|
130
|
+
}
|
131
|
+
return Promise.resolve(new Array());
|
132
|
+
}
|
133
|
+
/**
|
134
|
+
* Get proper validation message for @see NumericBoxComponent
|
135
|
+
*/
|
136
|
+
getNumericBoxValidationMessages(error) {
|
137
|
+
let interpolationParameters = {};
|
138
|
+
let type = 'Integer';
|
139
|
+
if (error.decimals) {
|
140
|
+
interpolationParameters.precision = error.decimals;
|
141
|
+
type = 'Decimal';
|
142
|
+
}
|
143
|
+
if (error.min !== undefined && error.max !== undefined) {
|
144
|
+
interpolationParameters.minValue = error.min;
|
145
|
+
interpolationParameters.maxValue = error.max;
|
146
|
+
return this.translate.get(`${type}BetweenValidationMessage_LC`, interpolationParameters);
|
147
|
+
}
|
148
|
+
if (error.min !== undefined) {
|
149
|
+
interpolationParameters.minValue = error.min;
|
150
|
+
return this.translate.get(`${type}MinValidationMessage_LC`, interpolationParameters);
|
151
|
+
}
|
152
|
+
if (error.max !== undefined) {
|
153
|
+
interpolationParameters.maxValue = error.max;
|
154
|
+
return this.translate.get(`${type}MaxValidationMessage_LC`, interpolationParameters);
|
155
|
+
}
|
156
|
+
if (error.maxPrecisionDigits) {
|
157
|
+
interpolationParameters.maxPrecisionDigits = error.maxPrecisionDigits;
|
158
|
+
return this.translate.get('MaxPrecisionDigitsValidationMessage_LC', interpolationParameters);
|
159
|
+
}
|
160
|
+
if (error.decimals) {
|
161
|
+
return this.translate.get('DecimalValidationMessage_LC', interpolationParameters);
|
162
|
+
}
|
163
|
+
return this.translate.get('IncorrectFormat_LC');
|
164
|
+
}
|
165
|
+
/**
|
166
|
+
* Given the advanced textbox validation params construct the error message
|
167
|
+
*/
|
168
|
+
getTextBoxValidationMessages(error) {
|
169
|
+
if (error.unique) {
|
170
|
+
return this.translate.get('TextboxRequiredAndUnique_LC', { minLength: error.minLength, maxLength: error.maxLength });
|
171
|
+
}
|
172
|
+
else {
|
173
|
+
return this.translate.get('TextboxRequired_LC', { minLength: error.minLength, maxLength: error.maxLength });
|
174
|
+
}
|
175
|
+
}
|
176
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidationMessageService, deps: [{ token: i1.TranslateService }, { token: i2.DateDisplayPipe }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
177
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidationMessageService, providedIn: 'root' }); }
|
178
|
+
}
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidationMessageService, decorators: [{
|
180
|
+
type: Injectable,
|
181
|
+
args: [{
|
182
|
+
providedIn: 'root'
|
183
|
+
}]
|
184
|
+
}], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.DateDisplayPipe }]; } });
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1tZXNzYWdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxRQUFRLEVBQWMsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBSzNEOztHQUVHO0FBQ0gsTUFBTSxpQ0FBaUM7Q0FNdEM7QUFFRDs7R0FFRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFFbkMsWUFDWSxTQUEyQixFQUMzQixlQUFnQztRQURoQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7SUFDeEMsQ0FBQztJQUdMOztPQUVHO0lBQ0ksZ0JBQWdCLENBQUMsTUFBK0I7UUFFbkQsK0RBQStEO1FBQy9ELElBQUksc0JBQXNCLEdBQUcsSUFBSSxLQUFLLEVBQXNCLENBQUM7UUFFN0QsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBRWpCLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO2dCQUN6QiwwREFBMEQ7Z0JBQzFELElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFN0IsUUFBUSxRQUFRLEVBQUU7b0JBQ2QsS0FBSyxPQUFPO3dCQUNSLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUM7d0JBQ3BGLE1BQU07b0JBRVYsS0FBSyxVQUFVO3dCQUNYLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO3dCQUM3RCxNQUFNO29CQUNW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QUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUMvRztJQUNMLENBQUM7K0dBeE1VLHdCQUF3QjttSEFBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzRGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIGxhc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFRleHRib3hWYWxpZGF0b3JQYXJhbWV0ZXJzIH0gZnJvbSAnLi4vY29udHJvbHMvdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVEaXNwbGF5UGlwZSB9IGZyb20gJy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL2RhdGUtZGlzcGxheS5waXBlJztcclxuXHJcbi8qKlxyXG4gKiBcIldlYWsgVHlwZVwiIGRlc2NyaWJpbmcgaW50ZXJwb2xhdGlvbiBwYXJhbWV0ZXJzIGZvciBOdW1lcmljQm94XHJcbiAqL1xyXG5jbGFzcyBOdW1lcmljQm94SW50ZXJwb2xhdGlvblBhcmFtZXRlcnMge1xyXG4gICAgcHVibGljIHByZWNpc2lvbj86IG51bWJlcjtcclxuICAgIHB1YmxpYyBtaW5WYWx1ZT86IG51bWJlcjtcclxuICAgIHB1YmxpYyBtYXhWYWx1ZT86IG51bWJlcjtcclxuICAgIHB1YmxpYyBtaW5NYXhSYW5nZT86IHN0cmluZztcclxuICAgIHB1YmxpYyBtYXhQcmVjaXNpb25EaWdpdHM/OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTZXJ2aWNlIHRvIHRha2Uge0BsaW5rIFZhbGlkYXRpb25FcnJvcnN9IGFuZCByZXR1cm4gbWVhbmluZ2Z1bCBlcnJvciBtZXNzYWdlc1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGRhdGVEaXNwbGF5UGlwZTogRGF0ZURpc3BsYXlQaXBlXHJcbiAgKSB7IH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBtZWFuaW5nZnVsIGVycm9yIG1lc3NhZ2VzIGZyb20ge0BsaW5rIFZhbGlkYXRpb25FcnJvcnN9XHJcbiAgICovXHJcbiAgcHVibGljIGdldEVycm9yTWVzc2FnZXMoZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCk6IFByb21pc2U8QXJyYXk8YW55Pj4ge1xyXG5cclxuICAgICAgLyoqIEFycmF5IG9mIG9ic2VydmFibGVzIHJldHVybmVkIGZyb20gdGhlIFRyYW5zbGF0ZVNlcnZpY2UuICovXHJcbiAgICAgIGxldCB0cmFuc2xhdGlvbk9ic2VydmFibGVzID0gbmV3IEFycmF5PE9ic2VydmFibGU8c3RyaW5nPj4oKTtcclxuXHJcbiAgICAgIGlmIChlcnJvcnMgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICBmb3IgKHZhciBlcnJvcktleSBpbiBlcnJvcnMpIHtcclxuICAgICAgICAgICAgICAvLyBpdCB3b3VsZCBiZSBuaWNlIHRvIGhhdmUgdHlwaW5nIG9uIHRoZSBWYWxpZGF0aW9uRXJyb3JzXHJcbiAgICAgICAgICAgICAgbGV0IGVycm9yID0gZXJyb3JzW2Vycm9yS2V5XTtcclxuXHJcbiAgICAgICAgICAgICAgc3dpdGNoIChlcnJvcktleSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlICdlbWFpbCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdJbnZhbGlkRW1haWxWYWxpZGF0aW9uTWVzc2FnZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnaXMgcmVxdWlyZWQnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlcXVpcmVkUGx1cmFsJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnUmVxdWlyZWRQbHVyYWxWYWxpZGF0aW9uTWVzc2FnZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWlubGVuZ3RoJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ01pbkxlbmd0aFZhbGlkYXRpb25NZXNzYWdlX0xDJywgeyBtaW5MZW5ndGg6IGVycm9yLnJlcXVpcmVkTGVuZ3RoIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoYE1heExlbmd0aFZhbGlkYXRpb25NZXNzYWdlYCwgeyBtYXhMZW5ndGg6IGVycm9yLnJlcXVpcmVkTGVuZ3RoIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAncGF0dGVybic6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdJbmNvcnJlY3RGb3JtYXRfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdNaW5WYWx1ZVZhbGlkYXRpb25NZXNzYWdlX0xDJywgeyBtaW5WYWx1ZTogZXJyb3IubWluIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWF4JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ01heFZhbHVlVmFsaWRhdGlvbk1lc3NhZ2VfTEMnLCB7IG1heFZhbHVlOiBlcnJvci5tYXggfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd6aXBDb2RlSW52YWxpZEZvcm1hdCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdtdXN0IGJlIDXigJM5IG51bWJlcnMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bvc3RhbENvZGVJbnZhbGlkRm9ybWF0JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ211c3QgYmUgNiBjaGFyYWN0ZXJzLCBhbHRlcm5hdGluZyBsZXR0ZXJzIGFuZCBudW1iZXJzJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd6aXBDb2RlTm90Rm91bmQnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnWmlwQ29kZU5vdEZvdW5kVmFsaWRhdGlvbk1lc3NhZ2VfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbSB2YWxpZGF0b3IgZnJvbSB0aGUgTnVtZXJpY2JveENvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBjYXNlICdudW1lcmljYm94JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLmdldE51bWVyaWNCb3hWYWxpZGF0aW9uTWVzc2FnZXMoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnYWRkbmV3JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ0NvdWxkTm90QmVBZGRlZFZhbGlkYXRpb25NZXNzYWdlX0xDJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBLZW5kbyBkYXRlcGlja2VyIG1pbiBlcnJvclxyXG4gICAgICAgICAgICAgICAgICBjYXNlICdtaW5FcnJvcic6XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ21pbkRhdGUnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5kYXRlRGlzcGxheVBpcGUudHJhbnNmb3JtKGVycm9yLm1pblZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoJ01pblZhbHVlVmFsaWRhdGlvbk1lc3NhZ2VfTEMnLCB7IG1pblZhbHVlOiB2YWx1ZSB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIEtlbmRvIGRhdGVwaWNrZXIgbWF4IGVycm9yXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ21heEVycm9yJzpcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbWF4RGF0ZSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB0aGlzLmRhdGVEaXNwbGF5UGlwZS50cmFuc2Zvcm0oZXJyb3IubWF4VmFsdWUsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnTWF4VmFsdWVWYWxpZGF0aW9uTWVzc2FnZV9MQycsIHsgbWF4VmFsdWU6IHZhbHVlIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gQ3VzdG9tIHZhbGlkYXRvciBmb3IgdGhlIERhdGVSYW5nZUNvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBjYXNlICdkYXRlUmFuZ2UnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnRGF0ZVJhbmdlVmFsaWRhdGlvbk1lc3NhZ2VfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bhc3N3b3JkJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ1Bhc3N3b3JkVmFsaWRhdGlvbk1lc3NhZ2VfTEMnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIEN1c3RvbSB2YWxpZGF0b3IgZnJvbSB0aGUgVGV4dGJveENvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0Ym94JzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLmdldFRleHRCb3hWYWxpZGF0aW9uTWVzc2FnZXMoZXJyb3IpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnbm90VW5pcXVlJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ011c3RCZVVuaXF1ZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnanNvbic6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdKc29uVmFsaWRhdGlvbk1lc3NhZ2VfU0MnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bhc3N3b3JkSW52YWxpZCc6XHJcbiAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbk9ic2VydmFibGVzLnB1c2godGhpcy50cmFuc2xhdGUuZ2V0KCdQYXNzd29yZEludmFsaWRWYWxpZGF0aW9uTWVzc2FnZV9MQycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY2FzZSAnZG9tYWluJzpcclxuICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT2JzZXJ2YWJsZXMucHVzaCh0aGlzLnRyYW5zbGF0ZS5nZXQoJ0RvbWFpblZhbGlkYXRpb25NZXNzYWdlX1NDJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2ludmFsaWRGaWxlJzpcclxuICAgICAgICAgICAgICAgICAgY2FzZSAnaW52YWxpZEZvcm11bGEnOlxyXG4gICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PYnNlcnZhYmxlcy5wdXNoKHRoaXMudHJhbnNsYXRlLmdldCgnaXMgaW52YWxpZCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0cmFuc2xhdGlvbk9ic2VydmFibGVzLmxlbmd0aCA+IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gZm9ya0pvaW4gcmV0dXJucyBhbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiBhbGwgaXRzIG9ic2VydmFibGVzIGNvbXBsZXRlLlxyXG4gICAgICAgICAgICAgIC8vIFdoZW4gZm9ya2pvaW4gZW1pdHMsIGl0IGVtaXRzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGxhc3QgdmFsdWUgcmV0dXJuZWQgZnJvbVxyXG4gICAgICAgICAgICAgIC8vIGVhY2ggb2YgaXRzIG9ic2VydmFibGVzLlxyXG4gICAgICAgICAgICAgIC8vIEBzZWUgaHR0cHM6Ly93d3cubGVhcm5yeGpzLmlvL29wZXJhdG9ycy9jb21iaW5hdGlvbi9mb3Jram9pbi5odG1sXHJcbiAgICAgICAgICAgICAgLy8gV2UgY29udmVydCB0aGlzIHRvIGEgcHJvbWlzZSBzbyB0aGUgZm9ybSBjb250cm9scyBjYW4gZGlzcGxheSB0aGUgZXJyb3IgbWVzc2FnZXNcclxuICAgICAgICAgICAgICAvLyBhc3luY2hyb25vdXNseS5cclxuICAgICAgICAgICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbShmb3JrSm9pbih0cmFuc2xhdGlvbk9ic2VydmFibGVzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEFycmF5PHN0cmluZz4oKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHByb3BlciB2YWxpZGF0aW9uIG1lc3NhZ2UgZm9yIEBzZWUgTnVtZXJpY0JveENvbXBvbmVudFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0TnVtZXJpY0JveFZhbGlkYXRpb25NZXNzYWdlcyhlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgbGV0IGludGVycG9sYXRpb25QYXJhbWV0ZXJzOiBOdW1lcmljQm94SW50ZXJwb2xhdGlvblBhcmFtZXRlcnMgPSB7fTtcclxuICAgICAgbGV0IHR5cGU6IHN0cmluZyA9ICdJbnRlZ2VyJztcclxuXHJcbiAgICAgIGlmIChlcnJvci5kZWNpbWFscykge1xyXG4gICAgICAgICAgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMucHJlY2lzaW9uID0gZXJyb3IuZGVjaW1hbHM7XHJcbiAgICAgICAgICB0eXBlID0gJ0RlY2ltYWwnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWluICE9PSB1bmRlZmluZWQgJiYgZXJyb3IubWF4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGludGVycG9sYXRpb25QYXJhbWV0ZXJzLm1pblZhbHVlID0gZXJyb3IubWluO1xyXG4gICAgICAgICAgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMubWF4VmFsdWUgPSBlcnJvci5tYXg7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KGAke3R5cGV9QmV0d2VlblZhbGlkYXRpb25NZXNzYWdlX0xDYCwgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWluICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGludGVycG9sYXRpb25QYXJhbWV0ZXJzLm1pblZhbHVlID0gZXJyb3IubWluO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldChgJHt0eXBlfU1pblZhbGlkYXRpb25NZXNzYWdlX0xDYCwgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWF4ICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGludGVycG9sYXRpb25QYXJhbWV0ZXJzLm1heFZhbHVlID0gZXJyb3IubWF4O1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldChgJHt0eXBlfU1heFZhbGlkYXRpb25NZXNzYWdlX0xDYCwgaW50ZXJwb2xhdGlvblBhcmFtZXRlcnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZXJyb3IubWF4UHJlY2lzaW9uRGlnaXRzKSB7XHJcbiAgICAgICAgICBpbnRlcnBvbGF0aW9uUGFyYW1ldGVycy5tYXhQcmVjaXNpb25EaWdpdHMgPSBlcnJvci5tYXhQcmVjaXNpb25EaWdpdHM7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KCdNYXhQcmVjaXNpb25EaWdpdHNWYWxpZGF0aW9uTWVzc2FnZV9MQycsIGludGVycG9sYXRpb25QYXJhbWV0ZXJzKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGVycm9yLmRlY2ltYWxzKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuZ2V0KCdEZWNpbWFsVmFsaWRhdGlvbk1lc3NhZ2VfTEMnLCBpbnRlcnBvbGF0aW9uUGFyYW1ldGVycyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0luY29ycmVjdEZvcm1hdF9MQycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2l2ZW4gdGhlIGFkdmFuY2VkIHRleHRib3ggdmFsaWRhdGlvbiBwYXJhbXMgY29uc3RydWN0IHRoZSBlcnJvciBtZXNzYWdlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRUZXh0Qm94VmFsaWRhdGlvbk1lc3NhZ2VzKGVycm9yOiBUZXh0Ym94VmFsaWRhdG9yUGFyYW1ldGVycyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgIGlmIChlcnJvci51bmlxdWUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5nZXQoJ1RleHRib3hSZXF1aXJlZEFuZFVuaXF1ZV9MQycsIHsgbWluTGVuZ3RoOiBlcnJvci5taW5MZW5ndGgsIG1heExlbmd0aDogZXJyb3IubWF4TGVuZ3RoIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmdldCgnVGV4dGJveFJlcXVpcmVkX0xDJywgeyBtaW5MZW5ndGg6IGVycm9yLm1pbkxlbmd0aCwgbWF4TGVuZ3RoOiBlcnJvci5tYXhMZW5ndGggfSk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|