@c8y/ngx-components 1021.11.1 → 1021.21.0
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/alarms/alarms-date-filter.component.d.ts +34 -0
- package/alarms/alarms-date-filter.component.d.ts.map +1 -0
- package/alarms/alarms-filter.component.d.ts +2 -1
- package/alarms/alarms-filter.component.d.ts.map +1 -1
- package/alarms/alarms-list.component.d.ts +2 -17
- package/alarms/alarms-list.component.d.ts.map +1 -1
- package/alarms/alarms-view.service.d.ts +5 -2
- package/alarms/alarms-view.service.d.ts.map +1 -1
- package/alarms/alarms.component.d.ts +3 -1
- package/alarms/alarms.component.d.ts.map +1 -1
- package/alarms/alarms.model.d.ts +47 -1
- package/alarms/alarms.model.d.ts.map +1 -1
- package/alarms/alarms.module.d.ts +15 -13
- package/alarms/alarms.module.d.ts.map +1 -1
- package/branding/shared/data/store-branding.service.d.ts +5 -0
- package/branding/shared/data/store-branding.service.d.ts.map +1 -1
- package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.model.d.ts +1 -0
- package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
- package/context-dashboard/context-dashboard.service.d.ts +7 -5
- package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.component.d.ts +4 -7
- package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-detail.service.d.ts +4 -4
- package/context-dashboard/dashboard-detail.service.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts +2 -2
- package/context-dashboard/dashboard-settings/dashboard-general-settings.component.d.ts.map +1 -1
- package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts +19 -6
- package/context-dashboard/dashboard-settings/typed-dashboard-settings.component.d.ts.map +1 -1
- package/core/action-bar/action-bar-item.component.d.ts +1 -1
- package/core/action-bar/action-bar-item.component.d.ts.map +1 -1
- package/core/action-bar/action-bar.module.d.ts +6 -6
- package/core/action-bar/action-bar.module.d.ts.map +1 -1
- package/core/bootstrap/bootstrap.component.d.ts +3 -1
- package/core/bootstrap/bootstrap.component.d.ts.map +1 -1
- package/core/common/aggregation/aggregation.model.d.ts +39 -0
- package/core/common/aggregation/aggregation.model.d.ts.map +1 -0
- package/core/common/aggregation/aggregation.service.d.ts +17 -0
- package/core/common/aggregation/aggregation.service.d.ts.map +1 -0
- package/core/common/index.d.ts +4 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/inter-app.service.d.ts +48 -0
- package/core/common/inter-app.service.d.ts.map +1 -0
- package/core/common/interval-based-reload.abstract.d.ts +120 -0
- package/core/common/interval-based-reload.abstract.d.ts.map +1 -0
- package/core/dashboard/dashboard.module.d.ts +26 -20
- package/core/dashboard/dashboard.module.d.ts.map +1 -1
- package/core/dashboard/index.d.ts +3 -0
- package/core/dashboard/index.d.ts.map +1 -1
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts +31 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts +17 -0
- package/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts +4 -0
- package/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/index.d.ts +8 -0
- package/core/dashboard/widget-auto-refresh-context/index.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts +7 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts +29 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts +15 -0
- package/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.d.ts.map +1 -0
- package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts +169 -0
- package/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.d.ts.map +1 -0
- package/core/dashboard/widget-change-event.model.d.ts +1 -1
- package/core/dashboard/widget-change-event.model.d.ts.map +1 -1
- package/core/dashboard/widgets-dashboard.component.d.ts +6 -3
- package/core/dashboard/widgets-dashboard.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts +2 -2
- package/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts +2 -1
- package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +12 -8
- package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +7 -26
- package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
- package/core/header/header.module.d.ts +18 -18
- package/core/header/header.module.d.ts.map +1 -1
- package/core/header/title/title.component.d.ts +1 -1
- package/core/header/title/title.component.d.ts.map +1 -1
- package/core/i18n/cached-locale-dictionary.service.d.ts +5 -1
- package/core/i18n/cached-locale-dictionary.service.d.ts.map +1 -1
- package/core/i18n/i18n.module.d.ts +0 -4
- package/core/i18n/i18n.module.d.ts.map +1 -1
- package/core/i18n/index.d.ts +2 -1
- package/core/i18n/index.d.ts.map +1 -1
- package/core/i18n/translation-loader.service.d.ts +50 -0
- package/core/i18n/translation-loader.service.d.ts.map +1 -0
- package/core/i18n/translation-utils.d.ts +14 -0
- package/core/i18n/translation-utils.d.ts.map +1 -0
- package/core/plugins/plugins-resolve.service.d.ts +7 -10
- package/core/plugins/plugins-resolve.service.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts +2 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.d.ts.map +1 -1
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +11 -2
- package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
- package/datapoint-selector/datapoint-selection.model.d.ts +6 -0
- package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
- package/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts +117 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts +90 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts +160 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts +89 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts +11 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts +27 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts +12 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts +22 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts +3 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts +9 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts +56 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts +21 -0
- package/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts +14 -0
- package/datapoints-export-selector/datapoints-export-selector.component.d.ts.map +1 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts +232 -0
- package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -0
- package/datapoints-export-selector/index.d.ts +15 -0
- package/datapoints-export-selector/index.d.ts.map +1 -0
- package/device-list/device-list.module.d.ts +4 -2
- package/device-list/device-list.module.d.ts.map +1 -1
- package/esm2022/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +4 -4
- package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +3 -3
- package/esm2022/alarms/alarms-date-filter.component.mjs +139 -0
- package/esm2022/alarms/alarms-filter.component.mjs +11 -5
- package/esm2022/alarms/alarms-list.component.mjs +5 -16
- package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
- package/esm2022/alarms/alarms-view.service.mjs +16 -2
- package/esm2022/alarms/alarms.component.mjs +12 -6
- package/esm2022/alarms/alarms.model.mjs +17 -1
- package/esm2022/alarms/alarms.module.mjs +11 -4
- package/esm2022/branding/shared/data/store-branding.service.mjs +24 -1
- package/esm2022/branding/shared/lazy/branding/branding.component.mjs +3 -1
- package/esm2022/context-dashboard/context-dashboard.component.mjs +4 -4
- package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
- package/esm2022/context-dashboard/context-dashboard.service.mjs +47 -21
- package/esm2022/context-dashboard/dashboard-detail.component.mjs +8 -16
- package/esm2022/context-dashboard/dashboard-detail.service.mjs +13 -6
- package/esm2022/context-dashboard/dashboard-settings/dashboard-general-settings.component.mjs +3 -3
- package/esm2022/context-dashboard/dashboard-settings/typed-dashboard-settings.component.mjs +32 -11
- package/esm2022/core/action-bar/action-bar-item.component.mjs +3 -3
- package/esm2022/core/action-bar/action-bar.component.mjs +3 -3
- package/esm2022/core/action-bar/action-bar.module.mjs +16 -5
- package/esm2022/core/bootstrap/bootstrap.component.mjs +21 -16
- package/esm2022/core/common/aggregation/aggregation.model.mjs +46 -0
- package/esm2022/core/common/aggregation/aggregation.service.mjs +34 -0
- package/esm2022/core/common/humanize-app-name.model.mjs +2 -2
- package/esm2022/core/common/humanize-app-name.pipe.mjs +2 -2
- package/esm2022/core/common/index.mjs +5 -1
- package/esm2022/core/common/inter-app.service.mjs +76 -0
- package/esm2022/core/common/interval-based-reload.abstract.mjs +110 -0
- package/esm2022/core/countdown-interval/countdown-interval.component.mjs +3 -3
- package/esm2022/core/dashboard/dashboard-child.component.mjs +6 -5
- package/esm2022/core/dashboard/dashboard.module.mjs +22 -4
- package/esm2022/core/dashboard/index.mjs +4 -1
- package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-control.component.mjs +101 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/auto-refresh-select-control.component.mjs +50 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/global-refresh-loading.operator.mjs +7 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/index.mjs +8 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context-icon-bar.component.mjs +18 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.component.mjs +127 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-auto-refresh-context.model.mjs +5 -0
- package/esm2022/core/dashboard/widget-auto-refresh-context/widget-global-auto-refresh.service.mjs +233 -0
- package/esm2022/core/dashboard/widget-change-event.model.mjs +1 -1
- package/esm2022/core/dashboard/widgets-dashboard.component.mjs +35 -30
- package/esm2022/core/dashboard/wiget-time-context/aggregation-picker/aggregation-picker.component.mjs +4 -4
- package/esm2022/core/dashboard/wiget-time-context/realtime-control/realtime-control.component.mjs +2 -2
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-helper.service.mjs +3 -2
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-icon-bar/widget-time-context-icon-bar.component.mjs +5 -5
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +7 -4
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +37 -36
- package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +1 -72
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +9 -3
- package/esm2022/core/header/header.module.mjs +7 -5
- package/esm2022/core/header/title/title.component.mjs +3 -3
- package/esm2022/core/i18n/cached-locale-dictionary.service.mjs +1 -1
- package/esm2022/core/i18n/i18n.module.mjs +7 -14
- package/esm2022/core/i18n/index.mjs +3 -2
- package/esm2022/core/i18n/translate.parser.mjs +2 -2
- package/esm2022/core/i18n/translation-loader.service.mjs +132 -0
- package/esm2022/core/i18n/translation-utils.mjs +24 -0
- package/esm2022/core/list-display-switch/list-display-switch.component.mjs +3 -3
- package/esm2022/core/plugins/plugins-resolve.service.mjs +12 -37
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.mjs +13 -6
- package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +22 -5
- package/esm2022/datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.mjs +3 -3
- package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
- package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
- package/esm2022/datapoints-export-selector/c8y-ngx-components-datapoints-export-selector.mjs +5 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-fetching.service.mjs +407 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/data-processing.service.mjs +207 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.component.mjs +467 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-file-exporter.service.mjs +187 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-export-selector-preview/datapoints-export-selector-preview.component.mjs +27 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-data-scope/datapoints-exports-selector-data-scope.component.mjs +41 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-file-types/datapoints-exports-selector-file-types.component.mjs +23 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/datapoints-exports-selector-time-range/datapoints-exports-selector-time-range.component.mjs +42 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/csv-generator.mjs +120 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/generators/excel-generator.mjs +282 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-file-exporter/utils.service.mjs +76 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector-modal/datapoints-export-selector-modal.component.mjs +46 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector.component.mjs +42 -0
- package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +43 -0
- package/esm2022/datapoints-export-selector/index.mjs +15 -0
- package/esm2022/device-list/add-smart-group.component.mjs +4 -3
- package/esm2022/device-list/device-list.module.mjs +22 -4
- package/esm2022/interval-picker/c8y-ngx-components-interval-picker.mjs +5 -0
- package/esm2022/interval-picker/index.mjs +3 -0
- package/esm2022/interval-picker/interval-picker.component.mjs +68 -0
- package/esm2022/interval-picker/interval-picker.model.mjs +47 -0
- package/esm2022/map/cluster-map.component.mjs +41 -13
- package/esm2022/map/map-status.component.mjs +6 -5
- package/esm2022/map/map.component.mjs +9 -5
- package/esm2022/map/map.model.mjs +1 -1
- package/esm2022/translation-editor/c8y-ngx-components-translation-editor.mjs +5 -0
- package/esm2022/translation-editor/data/c8y-ngx-components-translation-editor-data.mjs +5 -0
- package/esm2022/translation-editor/data/index.mjs +2 -0
- package/esm2022/translation-editor/data/translation-store.service.mjs +175 -0
- package/esm2022/translation-editor/index.mjs +10 -0
- package/esm2022/translation-editor/lazy/add-translation-modal/add-translation-modal.component.mjs +70 -0
- package/esm2022/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.mjs +5 -0
- package/esm2022/translation-editor/lazy/index.mjs +2 -0
- package/esm2022/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.mjs +53 -0
- package/esm2022/translation-editor/lazy/translation-editor/translation-editor.component.mjs +124 -0
- package/esm2022/translation-editor/translation-editor-naviagtor-factory.service.mjs +31 -0
- package/esm2022/widgets/cockpit/index.mjs +4 -2
- package/esm2022/widgets/cockpit-exports/index.mjs +8 -1
- package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +6 -2
- package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +6 -2
- package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +6 -2
- package/esm2022/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +5 -0
- package/esm2022/widgets/definitions/datapoints-table/index.mjs +34 -0
- package/esm2022/widgets/definitions/index.mjs +2 -1
- package/esm2022/widgets/definitions/map/index.mjs +4 -2
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.mjs +29 -15
- package/esm2022/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.mjs +57 -25
- package/esm2022/widgets/implementations/alarms/alarm-list-widget.model.mjs +2 -1
- package/esm2022/widgets/implementations/alarms/alarm-widget-alarms-reload.component.mjs +19 -21
- package/esm2022/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +5 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +383 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.mjs +124 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.mjs +191 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.mjs +36 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.mjs +45 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.mjs +116 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.mjs +116 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.mjs +43 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.mjs +282 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.mjs +430 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.mjs +75 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table-widget.model.mjs +76 -0
- package/esm2022/widgets/implementations/datapoints-table/datapoints-table.service.mjs +52 -0
- package/esm2022/widgets/implementations/datapoints-table/date-range-picker.component.mjs +68 -0
- package/esm2022/widgets/implementations/datapoints-table/index.mjs +10 -0
- package/esm2022/widgets/implementations/map/map-widget-config.component.mjs +19 -11
- package/esm2022/widgets/implementations/map/map-widget.component.mjs +20 -2
- package/esm2022/widgets/implementations/map/map-widget.model.mjs +1 -1
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +5 -5
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +189 -31
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +23 -0
- package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -0
- package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +135 -91
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +37 -13
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs +1928 -0
- package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-device-list.mjs +24 -5
- package/fesm2022/c8y-ngx-components-device-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-interval-picker.mjs +120 -0
- package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-map.mjs +52 -19
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +181 -0
- package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs +236 -0
- package/fesm2022/c8y-ngx-components-translation-editor-lazy.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-translation-editor.mjs +46 -0
- package/fesm2022/c8y-ngx-components-translation-editor.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs +7 -0
- package/fesm2022/c8y-ngx-components-widgets-cockpit-exports.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs +3 -1
- package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +5 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs +41 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-datapoints-table.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +3 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs +1 -0
- package/fesm2022/c8y-ngx-components-widgets-definitions.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs +101 -58
- package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +1967 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -0
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs +37 -11
- package/fesm2022/c8y-ngx-components-widgets-implementations-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +5093 -4369
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/interval-picker/c8y-ngx-components-interval-picker.d.ts.map +1 -0
- package/interval-picker/index.d.ts +3 -0
- package/interval-picker/index.d.ts.map +1 -0
- package/{core/dashboard/wiget-time-context/interval-picker → interval-picker}/interval-picker.component.d.ts +10 -2
- package/interval-picker/interval-picker.component.d.ts.map +1 -0
- package/interval-picker/interval-picker.model.d.ts +15 -0
- package/interval-picker/interval-picker.model.d.ts.map +1 -0
- package/locales/de.po +289 -18
- package/locales/en.po +12 -0
- package/locales/en_US.po +3 -0
- package/locales/es.po +253 -18
- package/locales/fr.po +253 -18
- package/locales/ja_JP.po +282 -18
- package/locales/locales.pot +266 -21
- package/locales/nl.po +253 -18
- package/locales/pl.po +253 -18
- package/locales/pt_BR.po +253 -18
- package/map/cluster-map.component.d.ts +8 -3
- package/map/cluster-map.component.d.ts.map +1 -1
- package/map/map-status.component.d.ts +0 -3
- package/map/map-status.component.d.ts.map +1 -1
- package/map/map.component.d.ts +4 -2
- package/map/map.component.d.ts.map +1 -1
- package/map/map.model.d.ts +2 -1
- package/map/map.model.d.ts.map +1 -1
- package/package.json +1 -1
- package/translation-editor/c8y-ngx-components-translation-editor.d.ts.map +1 -0
- package/translation-editor/data/c8y-ngx-components-translation-editor-data.d.ts.map +1 -0
- package/translation-editor/data/index.d.ts +2 -0
- package/translation-editor/data/index.d.ts.map +1 -0
- package/translation-editor/data/translation-store.service.d.ts +61 -0
- package/translation-editor/data/translation-store.service.d.ts.map +1 -0
- package/translation-editor/index.d.ts +2 -0
- package/translation-editor/index.d.ts.map +1 -0
- package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts +30 -0
- package/translation-editor/lazy/add-translation-modal/add-translation-modal.component.d.ts.map +1 -0
- package/translation-editor/lazy/c8y-ngx-components-translation-editor-lazy.d.ts.map +1 -0
- package/translation-editor/lazy/index.d.ts +2 -0
- package/translation-editor/lazy/index.d.ts.map +1 -0
- package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts +22 -0
- package/translation-editor/lazy/manage-translation-cell-renderer/manage-translation-cell-renderer.component.d.ts.map +1 -0
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts +34 -0
- package/translation-editor/lazy/translation-editor/translation-editor.component.d.ts.map +1 -0
- package/translation-editor/translation-editor-naviagtor-factory.service.d.ts +11 -0
- package/translation-editor/translation-editor-naviagtor-factory.service.d.ts.map +1 -0
- package/widgets/cockpit/index.d.ts +13 -0
- package/widgets/cockpit/index.d.ts.map +1 -1
- package/widgets/cockpit-exports/index.d.ts +6 -0
- package/widgets/cockpit-exports/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/alarm-list/index.d.ts +2 -0
- package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts +2 -0
- package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/alarms/recent-alarms/index.d.ts +2 -0
- package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
- package/widgets/definitions/datapoints-table/c8y-ngx-components-widgets-definitions-datapoints-table.d.ts.map +1 -0
- package/widgets/definitions/datapoints-table/index.d.ts +14 -0
- package/widgets/definitions/datapoints-table/index.d.ts.map +1 -0
- package/widgets/definitions/index.d.ts +1 -0
- package/widgets/definitions/index.d.ts.map +1 -1
- package/widgets/definitions/map/index.d.ts +2 -1
- package/widgets/definitions/map/index.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts +5 -9
- package/widgets/implementations/alarms/alarm-list-widget-config/alarm-list-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts +17 -10
- package/widgets/implementations/alarms/alarm-list-widget-view/alarm-list-widget.component.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts +5 -1
- package/widgets/implementations/alarms/alarm-list-widget.model.d.ts.map +1 -1
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts +5 -11
- package/widgets/implementations/alarms/alarm-widget-alarms-reload.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-table/c8y-ngx-components-widgets-implementations-datapoints-table.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts +129 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts +56 -0
- package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts +88 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/adjust-aggregated-time-range.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts +19 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/apply-range-class.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts +26 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/column-title.pipe.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts +63 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-reload/datapoints-reload.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts +38 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/datapoints-table.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts +13 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table/dynamic-column.directive.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts +123 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts +196 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/datapoints-table-view.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts +41 -0
- package/widgets/implementations/datapoints-table/datapoints-table-view/virtual-scroll-listener.directive.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts +175 -0
- package/widgets/implementations/datapoints-table/datapoints-table-widget.model.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts +12 -0
- package/widgets/implementations/datapoints-table/datapoints-table.service.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts +34 -0
- package/widgets/implementations/datapoints-table/date-range-picker.component.d.ts.map +1 -0
- package/widgets/implementations/datapoints-table/index.d.ts +10 -0
- package/widgets/implementations/datapoints-table/index.d.ts.map +1 -0
- package/widgets/implementations/map/map-widget-config.component.d.ts +4 -4
- package/widgets/implementations/map/map-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget.component.d.ts +8 -3
- package/widgets/implementations/map/map-widget.component.d.ts.map +1 -1
- package/widgets/implementations/map/map-widget.model.d.ts +4 -3
- package/widgets/implementations/map/map-widget.model.d.ts.map +1 -1
- package/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.d.ts.map +0 -1
- package/core/i18n/translate.loader.d.ts +0 -31
- package/core/i18n/translate.loader.d.ts.map +0 -1
- package/esm2022/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.mjs +0 -55
- package/esm2022/core/i18n/translate.loader.mjs +0 -71
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { OptionsService } from '../common';
|
|
3
|
+
import { CachedLocaleDictionaryService } from './cached-locale-dictionary.service';
|
|
4
|
+
import { PluginsResolveService } from '../plugins';
|
|
5
|
+
import { LOCALE_PATH } from './locale.path';
|
|
6
|
+
import { LANGUAGES } from './languages';
|
|
7
|
+
import { BehaviorSubject, combineLatest, defer, of } from 'rxjs';
|
|
8
|
+
import { catchError, distinctUntilChanged, map, shareReplay, switchMap, tap } from 'rxjs/operators';
|
|
9
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
10
|
+
import { getDictionaryWithTrimmedKeys } from './translation-utils';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../common";
|
|
13
|
+
import * as i2 from "./cached-locale-dictionary.service";
|
|
14
|
+
import * as i3 from "../plugins";
|
|
15
|
+
import * as i4 from "@ngx-translate/core";
|
|
16
|
+
/**
|
|
17
|
+
* A service to load translations from different sources.
|
|
18
|
+
* It combines translations from the app, user-defined translations, and plugins.
|
|
19
|
+
* It also caches translations to avoid unnecessary requests.
|
|
20
|
+
*
|
|
21
|
+
* Is used instead of the default TranslateLoader functionality that ngx-translate provides as otherwise only the first translations from TranslateLoader observable would have been picked up.
|
|
22
|
+
* This would have been problematic, as we can only load the plugin translations after the login and we need to have at least the basic translations already on the login screen.
|
|
23
|
+
*/
|
|
24
|
+
export class TranslationLoaderService {
|
|
25
|
+
constructor(optionsService, cachedLocaleDictionaryService, pluginResolverService, translateService, path = null, languages = null) {
|
|
26
|
+
this.optionsService = optionsService;
|
|
27
|
+
this.cachedLocaleDictionaryService = cachedLocaleDictionaryService;
|
|
28
|
+
this.pluginResolverService = pluginResolverService;
|
|
29
|
+
this.translateService = translateService;
|
|
30
|
+
this.path = path;
|
|
31
|
+
this.languages = languages;
|
|
32
|
+
this.cache = new Map();
|
|
33
|
+
this.reloadTrigger$ = new BehaviorSubject(null);
|
|
34
|
+
this.translateService.onLangChange
|
|
35
|
+
.pipe(map(event => event.lang), distinctUntilChanged(), switchMap(lang => this.getTranslation(lang).pipe(map(translations => ({ lang, translations })))))
|
|
36
|
+
.subscribe(({ lang, translations }) => {
|
|
37
|
+
this.translateService.setTranslation(lang, translations, false);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
getTranslation(lang) {
|
|
41
|
+
const translations$ = combineLatest([
|
|
42
|
+
defer(() => this.getTranslationsFromApp(lang)),
|
|
43
|
+
defer(() => this.getUserDefinedTranslations(lang)),
|
|
44
|
+
defer(() => this.optionsService.get$('langsDetails', {})),
|
|
45
|
+
defer(() => this.getTranslationsForPugins(lang))
|
|
46
|
+
]).pipe(map(([appTranslations, userDefinedTranslations, langsDetails, pluginTranslations]) => {
|
|
47
|
+
const translationsFromBranding = (langsDetails && langsDetails[lang]) || {};
|
|
48
|
+
return {
|
|
49
|
+
...appTranslations,
|
|
50
|
+
...pluginTranslations,
|
|
51
|
+
...translationsFromBranding,
|
|
52
|
+
...userDefinedTranslations
|
|
53
|
+
};
|
|
54
|
+
}), tap(dictionary => {
|
|
55
|
+
this.cachedLocaleDictionaryService.cachedDictionary[lang] = dictionary;
|
|
56
|
+
}), map(dictionary => getDictionaryWithTrimmedKeys(dictionary)), catchError(() => of({})));
|
|
57
|
+
return this.reloadTrigger$.pipe(switchMap(() => translations$));
|
|
58
|
+
}
|
|
59
|
+
triggerReload() {
|
|
60
|
+
this.clearCache();
|
|
61
|
+
this.reloadTrigger$.next();
|
|
62
|
+
}
|
|
63
|
+
clearCache() {
|
|
64
|
+
this.cache.clear();
|
|
65
|
+
}
|
|
66
|
+
getTranslationsForPugins(lang) {
|
|
67
|
+
return this.pluginResolverService.contextPathsFromWhereRemotesHaveBeenLoaded$.pipe(switchMap(plugins => {
|
|
68
|
+
// no need to load translations for self scoped plugins
|
|
69
|
+
plugins = plugins.filter(plugin => plugin !== this.optionsService.contextPath);
|
|
70
|
+
if (!plugins.length) {
|
|
71
|
+
return of({});
|
|
72
|
+
}
|
|
73
|
+
return combineLatest(plugins.map(plugin => this.getTranslationsForPlugin(lang, plugin))).pipe(map(translations => {
|
|
74
|
+
return translations.reduce((acc, translation) => ({ ...acc, ...translation }), {});
|
|
75
|
+
}));
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
getTranslationsForPlugin(lang, pluginId) {
|
|
79
|
+
const url = `/apps/${pluginId}/${lang}.json`;
|
|
80
|
+
return this.getTranslationFromPath(url, lang);
|
|
81
|
+
}
|
|
82
|
+
getTranslationsFromApp(lang) {
|
|
83
|
+
const path = this.path || '';
|
|
84
|
+
let url = `${path}${lang}.json`;
|
|
85
|
+
if (this.languages && this.languages[lang] && this.languages[lang].url) {
|
|
86
|
+
url = this.languages[lang].url;
|
|
87
|
+
}
|
|
88
|
+
return this.getTranslationFromPath(url, lang);
|
|
89
|
+
}
|
|
90
|
+
getUserDefinedTranslations(lang) {
|
|
91
|
+
const url = `/apps/public/user-defined-translations/${lang}.json`;
|
|
92
|
+
return this.getTranslationFromPath(url, lang);
|
|
93
|
+
}
|
|
94
|
+
getTranslationFromPath(path, lang) {
|
|
95
|
+
if (this.cache.has(path)) {
|
|
96
|
+
return this.cache.get(path);
|
|
97
|
+
}
|
|
98
|
+
const observable = defer(async () => {
|
|
99
|
+
try {
|
|
100
|
+
const fetchResponse = await fetch(path);
|
|
101
|
+
if (!fetchResponse.ok) {
|
|
102
|
+
throw new Error(`Unexpected response status: ${fetchResponse.status}`);
|
|
103
|
+
}
|
|
104
|
+
const responseBody = await fetchResponse.json();
|
|
105
|
+
if (responseBody[lang]) {
|
|
106
|
+
return responseBody[lang];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
console.warn(`Failed to fetch translations from ${path}`);
|
|
111
|
+
}
|
|
112
|
+
return {};
|
|
113
|
+
}).pipe(shareReplay(1));
|
|
114
|
+
this.cache.set(path, observable);
|
|
115
|
+
return observable;
|
|
116
|
+
}
|
|
117
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationLoaderService, deps: [{ token: i1.OptionsService }, { token: i2.CachedLocaleDictionaryService }, { token: i3.PluginsResolveService }, { token: i4.TranslateService }, { token: LOCALE_PATH }, { token: LANGUAGES }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
118
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationLoaderService, providedIn: 'root' }); }
|
|
119
|
+
}
|
|
120
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: TranslationLoaderService, decorators: [{
|
|
121
|
+
type: Injectable,
|
|
122
|
+
args: [{
|
|
123
|
+
providedIn: 'root'
|
|
124
|
+
}]
|
|
125
|
+
}], ctorParameters: () => [{ type: i1.OptionsService }, { type: i2.CachedLocaleDictionaryService }, { type: i3.PluginsResolveService }, { type: i4.TranslateService }, { type: undefined, decorators: [{
|
|
126
|
+
type: Inject,
|
|
127
|
+
args: [LOCALE_PATH]
|
|
128
|
+
}] }, { type: undefined, decorators: [{
|
|
129
|
+
type: Inject,
|
|
130
|
+
args: [LANGUAGES]
|
|
131
|
+
}] }] });
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tbG9hZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2kxOG4vdHJhbnNsYXRpb24tbG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUMzQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNuRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBRW5FOzs7Ozs7O0dBT0c7QUFJSCxNQUFNLE9BQU8sd0JBQXdCO0lBSW5DLFlBQ1UsY0FBOEIsRUFDOUIsNkJBQTRELEVBQzVELHFCQUE0QyxFQUM1QyxnQkFBa0MsRUFDYixPQUFlLElBQUksRUFDckIsWUFBd0QsSUFBSTtRQUwvRSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsa0NBQTZCLEdBQTdCLDZCQUE2QixDQUErQjtRQUM1RCwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FB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QUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMscUNBQXFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNqQyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOzhHQTdIVSx3QkFBd0Isa0tBU3pCLFdBQVcsYUFDWCxTQUFTO2tIQVZSLHdCQUF3QixjQUZ2QixNQUFNOzsyRkFFUCx3QkFBd0I7a0JBSHBDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFVSSxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9wdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IENhY2hlZExvY2FsZURpY3Rpb25hcnlTZXJ2aWNlIH0gZnJvbSAnLi9jYWNoZWQtbG9jYWxlLWRpY3Rpb25hcnkuc2VydmljZSc7XG5pbXBvcnQgeyBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UgfSBmcm9tICcuLi9wbHVnaW5zJztcbmltcG9ydCB7IExPQ0FMRV9QQVRIIH0gZnJvbSAnLi9sb2NhbGUucGF0aCc7XG5pbXBvcnQgeyBMQU5HVUFHRVMgfSBmcm9tICcuL2xhbmd1YWdlcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlZmVyLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZ2V0RGljdGlvbmFyeVdpdGhUcmltbWVkS2V5cyB9IGZyb20gJy4vdHJhbnNsYXRpb24tdXRpbHMnO1xuXG4vKipcbiAqIEEgc2VydmljZSB0byBsb2FkIHRyYW5zbGF0aW9ucyBmcm9tIGRpZmZlcmVudCBzb3VyY2VzLlxuICogSXQgY29tYmluZXMgdHJhbnNsYXRpb25zIGZyb20gdGhlIGFwcCwgdXNlci1kZWZpbmVkIHRyYW5zbGF0aW9ucywgYW5kIHBsdWdpbnMuXG4gKiBJdCBhbHNvIGNhY2hlcyB0cmFuc2xhdGlvbnMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVxdWVzdHMuXG4gKlxuICogSXMgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFRyYW5zbGF0ZUxvYWRlciBmdW5jdGlvbmFsaXR5IHRoYXQgbmd4LXRyYW5zbGF0ZSBwcm92aWRlcyBhcyBvdGhlcndpc2Ugb25seSB0aGUgZmlyc3QgdHJhbnNsYXRpb25zIGZyb20gVHJhbnNsYXRlTG9hZGVyIG9ic2VydmFibGUgd291bGQgaGF2ZSBiZWVuIHBpY2tlZCB1cC5cbiAqIFRoaXMgd291bGQgaGF2ZSBiZWVuIHByb2JsZW1hdGljLCBhcyB3ZSBjYW4gb25seSBsb2FkIHRoZSBwbHVnaW4gdHJhbnNsYXRpb25zIGFmdGVyIHRoZSBsb2dpbiBhbmQgd2UgbmVlZCB0byBoYXZlIGF0IGxlYXN0IHRoZSBiYXNpYyB0cmFuc2xhdGlvbnMgYWxyZWFkeSBvbiB0aGUgbG9naW4gc2NyZWVuLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkxvYWRlclNlcnZpY2Uge1xuICBwcml2YXRlIGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4+KCk7XG4gIHByaXZhdGUgcmVsb2FkVHJpZ2dlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KG51bGwpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FjaGVkTG9jYWxlRGljdGlvbmFyeVNlcnZpY2U6IENhY2hlZExvY2FsZURpY3Rpb25hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luUmVzb2x2ZXJTZXJ2aWNlOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoTE9DQUxFX1BBVEgpIHByaXZhdGUgcGF0aDogc3RyaW5nID0gbnVsbCxcbiAgICBASW5qZWN0KExBTkdVQUdFUykgcHJpdmF0ZSBsYW5ndWFnZXM6IHsgW2tleTogc3RyaW5nXTogeyB1cmw/OiBzdHJpbmcgfSB9IHwgbnVsbCA9IG51bGxcbiAgKSB7XG4gICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLm9uTGFuZ0NoYW5nZVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChldmVudCA9PiBldmVudC5sYW5nKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgc3dpdGNoTWFwKGxhbmcgPT5cbiAgICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKGxhbmcpLnBpcGUobWFwKHRyYW5zbGF0aW9ucyA9PiAoeyBsYW5nLCB0cmFuc2xhdGlvbnMgfSkpKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh7IGxhbmcsIHRyYW5zbGF0aW9ucyB9KSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbihsYW5nLCB0cmFuc2xhdGlvbnMsIGZhbHNlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0VHJhbnNsYXRpb24obGFuZzogc3RyaW5nKTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PiB7XG4gICAgY29uc3QgdHJhbnNsYXRpb25zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgZGVmZXIoKCkgPT4gdGhpcy5nZXRUcmFuc2xhdGlvbnNGcm9tQXBwKGxhbmcpKSxcbiAgICAgIGRlZmVyKCgpID0+IHRoaXMuZ2V0VXNlckRlZmluZWRUcmFuc2xhdGlvbnMobGFuZykpLFxuICAgICAgZGVmZXIoKCkgPT4gdGhpcy5vcHRpb25zU2VydmljZS5nZXQkKCdsYW5nc0RldGFpbHMnLCB7fSkpLFxuICAgICAgZGVmZXIoKCkgPT4gdGhpcy5nZXRUcmFuc2xhdGlvbnNGb3JQdWdpbnMobGFuZykpXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2FwcFRyYW5zbGF0aW9ucywgdXNlckRlZmluZWRUcmFuc2xhdGlvbnMsIGxhbmdzRGV0YWlscywgcGx1Z2luVHJhbnNsYXRpb25zXSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbnNGcm9tQnJhbmRpbmcgPSAobGFuZ3NEZXRhaWxzICYmIGxhbmdzRGV0YWlsc1tsYW5nXSkgfHwge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uYXBwVHJhbnNsYXRpb25zLFxuICAgICAgICAgIC4uLnBsdWdpblRyYW5zbGF0aW9ucyxcbiAgICAgICAgICAuLi50cmFuc2xhdGlvbnNGcm9tQnJhbmRpbmcsXG4gICAgICAgICAgLi4udXNlckRlZmluZWRUcmFuc2xhdGlvbnNcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgdGFwKGRpY3Rpb25hcnkgPT4ge1xuICAgICAgICB0aGlzLmNhY2hlZExvY2FsZURpY3Rpb25hcnlTZXJ2aWNlLmNhY2hlZERpY3Rpb25hcnlbbGFuZ10gPSBkaWN0aW9uYXJ5O1xuICAgICAgfSksXG4gICAgICBtYXAoZGljdGlvbmFyeSA9PiBnZXREaWN0aW9uYXJ5V2l0aFRyaW1tZWRLZXlzKGRpY3Rpb25hcnkpKSxcbiAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2Yoe30pKVxuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5yZWxvYWRUcmlnZ2VyJC5waXBlKHN3aXRjaE1hcCgoKSA9PiB0cmFuc2xhdGlvbnMkKSk7XG4gIH1cblxuICB0cmlnZ2VyUmVsb2FkKCkge1xuICAgIHRoaXMuY2xlYXJDYWNoZSgpO1xuICAgIHRoaXMucmVsb2FkVHJpZ2dlciQubmV4dCgpO1xuICB9XG5cbiAgY2xlYXJDYWNoZSgpIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNsYXRpb25zRm9yUHVnaW5zKGxhbmc6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnBsdWdpblJlc29sdmVyU2VydmljZS5jb250ZXh0UGF0aHNGcm9tV2hlcmVSZW1vdGVzSGF2ZUJlZW5Mb2FkZWQkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAocGx1Z2lucyA9PiB7XG4gICAgICAgIC8vIG5vIG5lZWQgdG8gbG9hZCB0cmFuc2xhdGlvbnMgZm9yIHNlbGYgc2NvcGVkIHBsdWdpbnNcbiAgICAgICAgcGx1Z2lucyA9IHBsdWdpbnMuZmlsdGVyKHBsdWdpbiA9PiBwbHVnaW4gIT09IHRoaXMub3B0aW9uc1NlcnZpY2UuY29udGV4dFBhdGgpO1xuICAgICAgICBpZiAoIXBsdWdpbnMubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChcbiAgICAgICAgICBwbHVnaW5zLm1hcChwbHVnaW4gPT4gdGhpcy5nZXRUcmFuc2xhdGlvbnNGb3JQbHVnaW4obGFuZywgcGx1Z2luKSlcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIG1hcCh0cmFuc2xhdGlvbnMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0aW9ucy5yZWR1Y2UoKGFjYywgdHJhbnNsYXRpb24pID0+ICh7IC4uLmFjYywgLi4udHJhbnNsYXRpb24gfSksIHt9KTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFRyYW5zbGF0aW9uc0ZvclBsdWdpbihsYW5nOiBzdHJpbmcsIHBsdWdpbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1cmwgPSBgL2FwcHMvJHtwbHVnaW5JZH0vJHtsYW5nfS5qc29uYDtcbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbkZyb21QYXRoKHVybCwgbGFuZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNsYXRpb25zRnJvbUFwcChsYW5nOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5wYXRoIHx8ICcnO1xuICAgIGxldCB1cmwgPSBgJHtwYXRofSR7bGFuZ30uanNvbmA7XG4gICAgaWYgKHRoaXMubGFuZ3VhZ2VzICYmIHRoaXMubGFuZ3VhZ2VzW2xhbmddICYmIHRoaXMubGFuZ3VhZ2VzW2xhbmddLnVybCkge1xuICAgICAgdXJsID0gdGhpcy5sYW5ndWFnZXNbbGFuZ10udXJsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmdldFRyYW5zbGF0aW9uRnJvbVBhdGgodXJsLCBsYW5nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRVc2VyRGVmaW5lZFRyYW5zbGF0aW9ucyhsYW5nOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1cmwgPSBgL2FwcHMvcHVibGljL3VzZXItZGVmaW5lZC10cmFuc2xhdGlvbnMvJHtsYW5nfS5qc29uYDtcbiAgICByZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGlvbkZyb21QYXRoKHVybCwgbGFuZyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0VHJhbnNsYXRpb25Gcm9tUGF0aChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgbGFuZzogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4ge1xuICAgIGlmICh0aGlzLmNhY2hlLmhhcyhwYXRoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHBhdGgpO1xuICAgIH1cbiAgICBjb25zdCBvYnNlcnZhYmxlID0gZGVmZXIoYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZmV0Y2hSZXNwb25zZSA9IGF3YWl0IGZldGNoKHBhdGgpO1xuICAgICAgICBpZiAoIWZldGNoUmVzcG9uc2Uub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgcmVzcG9uc2Ugc3RhdHVzOiAke2ZldGNoUmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VCb2R5ID0gYXdhaXQgZmV0Y2hSZXNwb25zZS5qc29uKCk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlQm9keVtsYW5nXSkge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZUJvZHlbbGFuZ107XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gZmV0Y2ggdHJhbnNsYXRpb25zIGZyb20gJHtwYXRofWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICAgIHRoaXMuY2FjaGUuc2V0KHBhdGgsIG9ic2VydmFibGUpO1xuICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { mapKeys } from 'lodash-es';
|
|
2
|
+
/**
|
|
3
|
+
* Returns a trimmed translation key.
|
|
4
|
+
* If the key contains HTML, it also removes all whitespaces.
|
|
5
|
+
* The reason behind it is that by default Angular compiler removes
|
|
6
|
+
* whitespaces from adjacent inline elements,
|
|
7
|
+
* which prevents ngx-translate from finding a matching entry in the dictionary.
|
|
8
|
+
*/
|
|
9
|
+
export function trimTranslationKey(key) {
|
|
10
|
+
key = key
|
|
11
|
+
.replace(/(\r\n|\n|\r)/gm, '')
|
|
12
|
+
.replace(/\s{2,}/g, ' ')
|
|
13
|
+
.trim();
|
|
14
|
+
const containsHTML = /(<([^>]+)>)/i.test(key);
|
|
15
|
+
return containsHTML ? key.replace(/\s/g, '') : key;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* We want to have translation keys unified, so they don't contain unnecessary spaces and line breaks.
|
|
19
|
+
* This way we can dynamically build keys from HTML, and match them to extracted string, that might be HTML as well.
|
|
20
|
+
*/
|
|
21
|
+
export function getDictionaryWithTrimmedKeys(dictionary) {
|
|
22
|
+
return mapKeys(dictionary, (value, key) => trimTranslationKey(key));
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24tdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2kxOG4vdHJhbnNsYXRpb24tdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUVwQzs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBVztJQUM1QyxHQUFHLEdBQUcsR0FBRztTQUNOLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7U0FDN0IsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUM7U0FDdkIsSUFBSSxFQUFFLENBQUM7SUFDVixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQ3JELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsNEJBQTRCLENBQUMsVUFBa0I7SUFDN0QsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFwS2V5cyB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbi8qKlxuICogUmV0dXJucyBhIHRyaW1tZWQgdHJhbnNsYXRpb24ga2V5LlxuICogSWYgdGhlIGtleSBjb250YWlucyBIVE1MLCBpdCBhbHNvIHJlbW92ZXMgYWxsIHdoaXRlc3BhY2VzLlxuICogVGhlIHJlYXNvbiBiZWhpbmQgaXQgaXMgdGhhdCBieSBkZWZhdWx0IEFuZ3VsYXIgY29tcGlsZXIgcmVtb3Zlc1xuICogd2hpdGVzcGFjZXMgZnJvbSBhZGphY2VudCBpbmxpbmUgZWxlbWVudHMsXG4gKiB3aGljaCBwcmV2ZW50cyBuZ3gtdHJhbnNsYXRlIGZyb20gZmluZGluZyBhIG1hdGNoaW5nIGVudHJ5IGluIHRoZSBkaWN0aW9uYXJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbVRyYW5zbGF0aW9uS2V5KGtleTogc3RyaW5nKSB7XG4gIGtleSA9IGtleVxuICAgIC5yZXBsYWNlKC8oXFxyXFxufFxcbnxcXHIpL2dtLCAnJylcbiAgICAucmVwbGFjZSgvXFxzezIsfS9nLCAnICcpXG4gICAgLnRyaW0oKTtcbiAgY29uc3QgY29udGFpbnNIVE1MID0gLyg8KFtePl0rKT4pL2kudGVzdChrZXkpO1xuICByZXR1cm4gY29udGFpbnNIVE1MID8ga2V5LnJlcGxhY2UoL1xccy9nLCAnJykgOiBrZXk7XG59XG5cbi8qKlxuICogV2Ugd2FudCB0byBoYXZlIHRyYW5zbGF0aW9uIGtleXMgdW5pZmllZCwgc28gdGhleSBkb24ndCBjb250YWluIHVubmVjZXNzYXJ5IHNwYWNlcyBhbmQgbGluZSBicmVha3MuXG4gKiBUaGlzIHdheSB3ZSBjYW4gZHluYW1pY2FsbHkgYnVpbGQga2V5cyBmcm9tIEhUTUwsIGFuZCBtYXRjaCB0aGVtIHRvIGV4dHJhY3RlZCBzdHJpbmcsIHRoYXQgbWlnaHQgYmUgSFRNTCBhcyB3ZWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGljdGlvbmFyeVdpdGhUcmltbWVkS2V5cyhkaWN0aW9uYXJ5OiBvYmplY3QpIHtcbiAgcmV0dXJuIG1hcEtleXMoZGljdGlvbmFyeSwgKHZhbHVlLCBrZXkpID0+IHRyaW1UcmFuc2xhdGlvbktleShrZXkpKTtcbn1cbiJdfQ==
|
|
@@ -74,11 +74,11 @@ export class ListDisplaySwitchComponent {
|
|
|
74
74
|
return this.listKey || this.location.path();
|
|
75
75
|
}
|
|
76
76
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ListDisplaySwitchComponent, deps: [{ token: i1.Location }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
77
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: { listKey: "listKey", listLength: "listLength", filterPipe: "filterPipe" }, outputs: { onListClassChange: "onListClassChange" }, ngImport: i0, template: "<div class=\"
|
|
77
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: ListDisplaySwitchComponent, selector: "c8y-list-display-switch", inputs: { listKey: "listKey", listLength: "listLength", filterPipe: "filterPipe" }, outputs: { onListClassChange: "onListClassChange" }, ngImport: i0, template: "<div class=\"d-flex\">\n <label class=\"m-r-8\" id=\"listLabel\">\n {{ 'Display as' | translate }}\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n aria-labelledby=\"listLabel\"\n name=\"listLabel\"\n class=\"form-control\"\n [ngModel]=\"selectedOption\"\n (ngModelChange)=\"onOptionSelect($event)\"\n [attr.aria-label]=\"'Display mode' | translate\"\n >\n <option *ngFor=\"let option of DISPLAY_OPTIONS\" [ngValue]=\"option\">\n {{ option.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
|
|
78
78
|
}
|
|
79
79
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: ListDisplaySwitchComponent, decorators: [{
|
|
80
80
|
type: Component,
|
|
81
|
-
args: [{ selector: 'c8y-list-display-switch', template: "<div class=\"
|
|
81
|
+
args: [{ selector: 'c8y-list-display-switch', template: "<div class=\"d-flex\">\n <label class=\"m-r-8\" id=\"listLabel\">\n {{ 'Display as' | translate }}\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n aria-labelledby=\"listLabel\"\n name=\"listLabel\"\n class=\"form-control\"\n [ngModel]=\"selectedOption\"\n (ngModelChange)=\"onOptionSelect($event)\"\n [attr.aria-label]=\"'Display mode' | translate\"\n >\n <option *ngFor=\"let option of DISPLAY_OPTIONS\" [ngValue]=\"option\">\n {{ option.label | translate }}\n </option>\n </select>\n <span></span>\n </div>\n</div>\n" }]
|
|
82
82
|
}], ctorParameters: () => [{ type: i1.Location }], propDecorators: { listKey: [{
|
|
83
83
|
type: Input
|
|
84
84
|
}], listLength: [{
|
|
@@ -89,4 +89,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
89
89
|
}], onListClassChange: [{
|
|
90
90
|
type: Output
|
|
91
91
|
}] } });
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1kaXNwbGF5LXN3aXRjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL2xpc3QtZGlzcGxheS1zd2l0Y2gvbGlzdC1kaXNwbGF5LXN3aXRjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9jb3JlL2xpc3QtZGlzcGxheS1zd2l0Y2gvbGlzdC1kaXNwbGF5LXN3aXRjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBTzFDLE1BQU0sT0FBTywwQkFBMEI7SUFFckMsSUFDSSxVQUFVLENBQUMsR0FBVztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBa0NELFlBQW9CLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFqQzdCLGVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUN4QixzQkFBaUIsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUd0RSxvQkFBZSxHQUFvQjtZQUMxQztnQkFDRSxJQUFJLEVBQUUsTUFBTTtnQkFDWixLQUFLLEVBQUUsTUFBTTtnQkFDYixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsWUFBWSxFQUFFLEdBQUcs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ci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJy4uL2kxOG4vZ2V0dGV4dCc7XG5pbXBvcnQgeyBEaXNwbGF5T3B0aW9uIH0gZnJvbSAnLi9saXN0LWRpc3BsYXktc3dpdGNoLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxpc3QtZGlzcGxheS1zd2l0Y2gnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC1kaXNwbGF5LXN3aXRjaC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgTGlzdERpc3BsYXlTd2l0Y2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBsaXN0S2V5OiBzdHJpbmc7XG4gIEBJbnB1dCgnbGlzdExlbmd0aCcpXG4gIHNldCBsaXN0TGVuZ3RoKHZhbDogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGlzdExlbmd0aCA9IHZhbDtcbiAgICB0aGlzLmxvYWRTZWxlY3RlZE9wdGlvbigpO1xuICB9XG4gIEBJbnB1dCgpIGZpbHRlclBpcGUgPSBwaXBlKHRhcCgpKTtcbiAgQE91dHB1dCgpIG9uTGlzdENsYXNzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBzZWxlY3RlZE9wdGlvbjogRGlzcGxheU9wdGlvbjtcblxuICByZWFkb25seSBESVNQTEFZX09QVElPTlM6IERpc3BsYXlPcHRpb25bXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnQVVUTycsXG4gICAgICB2YWx1ZTogJ2F1dG8nLFxuICAgICAgbGFiZWw6IGdldHRleHQoJ0F1dG8nKSxcbiAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICBnZXRMaXN0Q2xhc3M6ICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICB0aGlzLl9saXN0TGVuZ3RoID4gdGhpcy5BVVRPX0dSSURfSVRFTVNfTElNSVRcbiAgICAgICAgICAgID8gdGhpcy5ESVNQTEFZX09QVElPTlMuZmluZChvcHQgPT4gb3B0Lm5hbWUgPT09ICdMSVNUJylcbiAgICAgICAgICAgIDogdGhpcy5ESVNQTEFZX09QVElPTlMuZmluZChvcHQgPT4gb3B0Lm5hbWUgPT09ICdHUklEJyk7XG4gICAgICAgIHJldHVybiBvcHRpb24uZ2V0TGlzdENsYXNzKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnR1JJRCcsXG4gICAgICB2YWx1ZTogJ2dyaWQnLFxuICAgICAgbGFiZWw6IGdldHRleHQoJ0dyaWQnKSxcbiAgICAgIGdldExpc3RDbGFzczogKCkgPT4gJ2ludGVyYWN0LWdyaWQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnTElTVCcsXG4gICAgICB2YWx1ZTogJ2xpc3QnLFxuICAgICAgbGFiZWw6IGdldHRleHQoJ0xpc3QnKSxcbiAgICAgIGdldExpc3RDbGFzczogKCkgPT4gJ2ludGVyYWN0LWxpc3QnXG4gICAgfVxuICBdO1xuICBwcml2YXRlIHJlYWRvbmx5IEFVVE9fR1JJRF9JVEVNU19MSU1JVCA9IDEyO1xuICBwcml2YXRlIF9saXN0TGVuZ3RoOiBudW1iZXI7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubG9hZFNlbGVjdGVkT3B0aW9uKCk7XG4gIH1cblxuICBvbk9wdGlvblNlbGVjdChvcHRpb246IERpc3BsYXlPcHRpb24pIHtcbiAgICBjb25zdCBsb2NhbFN0b3JhZ2VLZXkgPSB0aGlzLmdldExvY2FsU3RvcmFnZUtleSgpO1xuICAgIGlmIChvcHRpb24uZGVmYXVsdCkge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obG9jYWxTdG9yYWdlS2V5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obG9jYWxTdG9yYWdlS2V5LCBvcHRpb24udmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmxvYWRTZWxlY3RlZE9wdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkU2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMuZ2V0TG9jYWxTdG9yYWdlT3B0aW9uKCkgfHwgdGhpcy5nZXREZWZhdWx0T3B0aW9uKCk7XG4gICAgdGhpcy5vbkxpc3RDbGFzc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRPcHRpb24uZ2V0TGlzdENsYXNzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb2NhbFN0b3JhZ2VPcHRpb24oKTogRGlzcGxheU9wdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuRElTUExBWV9PUFRJT05TLmZpbmQoXG4gICAgICBvcHRpb24gPT4gb3B0aW9uLnZhbHVlID09PSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldExvY2FsU3RvcmFnZUtleSgpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldERlZmF1bHRPcHRpb24oKTogRGlzcGxheU9wdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuRElTUExBWV9PUFRJT05TLmZpbmQob3B0aW9uID0+IG9wdGlvbi5kZWZhdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TG9jYWxTdG9yYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBsaXN0LWRpc3BsYXktb3B0aW9uWyR7dGhpcy5nZXRMaXN0S2V5KCl9XWA7XG4gIH1cblxuICBwcml2YXRlIGdldExpc3RLZXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5saXN0S2V5IHx8IHRoaXMubG9jYXRpb24ucGF0aCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gIDxsYWJlbCBjbGFzcz1cIm0tci04XCIgaWQ9XCJsaXN0TGFiZWxcIj5cbiAgICB7eyAnRGlzcGxheSBhcycgfCB0cmFuc2xhdGUgfX1cbiAgPC9sYWJlbD5cbiAgPGRpdiBjbGFzcz1cImM4eS1zZWxlY3Qtd3JhcHBlclwiPlxuICAgIDxzZWxlY3RcbiAgICAgIGFyaWEtbGFiZWxsZWRieT1cImxpc3RMYWJlbFwiXG4gICAgICBuYW1lPVwibGlzdExhYmVsXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uT3B0aW9uU2VsZWN0KCRldmVudClcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInRGlzcGxheSBtb2RlJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIERJU1BMQVlfT1BUSU9OU1wiIFtuZ1ZhbHVlXT1cIm9wdGlvblwiPlxuICAgICAgICB7eyBvcHRpb24ubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICAgIDxzcGFuPjwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,17 +1,10 @@
|
|
|
1
1
|
import { Injectable, NgModuleRef, EnvironmentInjector, createNgModule } from '@angular/core';
|
|
2
|
-
import { FetchClient } from '@c8y/client';
|
|
3
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
4
2
|
import { reduce, forEach, get, union, camelCase } from 'lodash-es';
|
|
5
3
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
6
4
|
import { shareReplay } from 'rxjs/operators';
|
|
7
|
-
import {
|
|
8
|
-
import { OptionsService } from '../common/options.service';
|
|
5
|
+
import { StandalonePluginInjector } from '../common';
|
|
9
6
|
import { cloneDeep } from 'lodash-es';
|
|
10
7
|
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@ngx-translate/core";
|
|
12
|
-
import * as i2 from "@c8y/client";
|
|
13
|
-
import * as i3 from "../common";
|
|
14
|
-
import * as i4 from "../common/options.service";
|
|
15
8
|
export class PluginsResolveService {
|
|
16
9
|
/**
|
|
17
10
|
* Takes a list of remotes and turns it into an object containing union of corresponding remotes.
|
|
@@ -71,18 +64,15 @@ export class PluginsResolveService {
|
|
|
71
64
|
}
|
|
72
65
|
return remotesToRemoveFrom;
|
|
73
66
|
}
|
|
74
|
-
constructor(
|
|
75
|
-
this.translateService = translateService;
|
|
76
|
-
this.fetchClient = fetchClient;
|
|
77
|
-
this.appState = appState;
|
|
67
|
+
constructor(injector) {
|
|
78
68
|
this.injector = injector;
|
|
79
|
-
this.optionsService = optionsService;
|
|
80
69
|
this.urlRemotesCache = null;
|
|
81
70
|
this.remoteScriptSet = new Set();
|
|
82
71
|
this._injectors$ = new Subject();
|
|
83
72
|
this._refresh$ = new Subject();
|
|
84
73
|
this._pluginDetails$ = new Subject();
|
|
85
74
|
this._allPluginsLoaded$ = new BehaviorSubject(false);
|
|
75
|
+
this._contextPathsFromWhereRemotesHaveBeenLoaded$ = new BehaviorSubject([]);
|
|
86
76
|
this.injectors$ = this._injectors$.asObservable().pipe(
|
|
87
77
|
// not specifying the bufferSize of shareReplay so all injectors are received on subscription
|
|
88
78
|
shareReplay());
|
|
@@ -91,6 +81,8 @@ export class PluginsResolveService {
|
|
|
91
81
|
// not specifying the bufferSize of shareReplay so all details are received on subscription
|
|
92
82
|
shareReplay());
|
|
93
83
|
this.allPluginsLoaded$ = this._allPluginsLoaded$.asObservable();
|
|
84
|
+
this.contextPathsFromWhereRemotesHaveBeenLoaded$ =
|
|
85
|
+
this._contextPathsFromWhereRemotesHaveBeenLoaded$.asObservable();
|
|
94
86
|
}
|
|
95
87
|
/**
|
|
96
88
|
* Loads plugins by resolving the remote NgModules and injecting it. Also attaching
|
|
@@ -126,7 +118,8 @@ export class PluginsResolveService {
|
|
|
126
118
|
loadProviders(providers, name) {
|
|
127
119
|
const injector = new StandalonePluginInjector({
|
|
128
120
|
providers: providers,
|
|
129
|
-
name: `pluginsInjector-${name}
|
|
121
|
+
name: `pluginsInjector-${name}`,
|
|
122
|
+
parent: this.injector
|
|
130
123
|
});
|
|
131
124
|
this._injectors$.next(injector);
|
|
132
125
|
}
|
|
@@ -179,17 +172,12 @@ export class PluginsResolveService {
|
|
|
179
172
|
console.warn(`Could not load remote module '%s' from url:`, moduleName, url);
|
|
180
173
|
}
|
|
181
174
|
}
|
|
182
|
-
//
|
|
175
|
+
// Only add successfully loaded remotes to the list
|
|
183
176
|
if (atLeastOneModuleLoadedSuccessfully) {
|
|
184
|
-
|
|
177
|
+
this._contextPathsFromWhereRemotesHaveBeenLoaded$.next(this._contextPathsFromWhereRemotesHaveBeenLoaded$.value.concat(pluginId));
|
|
185
178
|
}
|
|
186
179
|
}
|
|
187
180
|
}
|
|
188
|
-
// Added to ensure that the translations from public-options are not overridden by the plugin translations
|
|
189
|
-
const { lang } = this.appState.state;
|
|
190
|
-
if (this.optionsService.langsDetails && this.optionsService.langsDetails[lang]) {
|
|
191
|
-
this.translateService.setTranslation(lang, this.optionsService.langsDetails[lang], true);
|
|
192
|
-
}
|
|
193
181
|
return remoteModules;
|
|
194
182
|
}
|
|
195
183
|
/**
|
|
@@ -239,19 +227,6 @@ export class PluginsResolveService {
|
|
|
239
227
|
}
|
|
240
228
|
return this.urlRemotesCache;
|
|
241
229
|
}
|
|
242
|
-
async loadRemoteTranslations(pluginId) {
|
|
243
|
-
try {
|
|
244
|
-
const { lang } = this.appState.state;
|
|
245
|
-
const resp = await this.fetchClient.fetch(`/apps/${pluginId}/${lang}.json`);
|
|
246
|
-
if (resp.status < 400) {
|
|
247
|
-
const result = await resp.json();
|
|
248
|
-
this.translateService.setTranslation(lang, result[lang], true);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
catch (ex) {
|
|
252
|
-
console.warn(`Failed to load translations for ${pluginId}`);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
230
|
async loadRemoteModule(remoteEntryUrl, remoteContextPath, exposedModule) {
|
|
256
231
|
if (!this.remoteScriptSet.has(remoteEntryUrl)) {
|
|
257
232
|
this.remoteScriptSet.add(remoteEntryUrl);
|
|
@@ -307,7 +282,7 @@ export class PluginsResolveService {
|
|
|
307
282
|
}
|
|
308
283
|
return { name: exposedModule, factory };
|
|
309
284
|
}
|
|
310
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PluginsResolveService, deps: [{ token:
|
|
285
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PluginsResolveService, deps: [{ token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
311
286
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PluginsResolveService, providedIn: 'root' }); }
|
|
312
287
|
}
|
|
313
288
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: PluginsResolveService, decorators: [{
|
|
@@ -315,5 +290,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
|
|
|
315
290
|
args: [{
|
|
316
291
|
providedIn: 'root'
|
|
317
292
|
}]
|
|
318
|
-
}], ctorParameters: () => [{ type:
|
|
319
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsbUJBQW1CLEVBRW5CLGNBQWMsRUFHZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRCLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBZ0J0QyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBbUM7UUFDckQsT0FBTyxNQUFNLENBQ1gsT0FBTyxFQUNQLENBQUMsVUFBb0MsRUFBRSxRQUFrQyxFQUFFLEVBQUU7WUFDM0UsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQXVCLEVBQUUsaUJBQXlCLEVBQUUsRUFBRTtnQkFDdkUsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMs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O1FBQ3JCLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RCxPQUFPLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25ELENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFDLENBQUM7OEdBcldVLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBOZ01vZHVsZVJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgVHlwZSxcbiAgY3JlYXRlTmdNb2R1bGUsXG4gIEluamVjdG9yLFxuICBQcm92aWRlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgRmV0Y2hDbGllbnQgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyByZWR1Y2UsIGZvckVhY2gsIGdldCwgdW5pb24sIGNhbWVsQ2FzZSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlLCBTdGFuZGFsb25lUGx1Z2luSW5qZWN0b3IgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgT3B0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbnR5cGUgU2NvcGUgPSB1bmtub3duO1xudHlwZSBGYWN0b3J5ID0gKCkgPT4gYW55O1xuXG5kZWNsYXJlIGNvbnN0IF9fd2VicGFja19pbml0X3NoYXJpbmdfXzogKHNoYXJlU2NvcGU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcbmRlY2xhcmUgY29uc3QgX193ZWJwYWNrX3NoYXJlX3Njb3Blc19fOiB7IGRlZmF1bHQ6IFNjb3BlIH07XG5kZWNsYXJlIGNvbnN0IF9fT1JJR0lOQUxfQ09OVEVYVF9QQVRIX186IHN0cmluZztcblxuaW50ZXJmYWNlIENvbnRhaW5lciB7XG4gIGluaXQoc2hhcmVTY29wZTogU2NvcGUpOiB2b2lkO1xuICBnZXQobW9kdWxlOiBzdHJpbmcpOiBGYWN0b3J5O1xufVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGx1Z2luc1Jlc29sdmVTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIFRha2VzIGEgbGlzdCBvZiByZW1vdGVzIGFuZCB0dXJucyBpdCBpbnRvIGFuIG9iamVjdCBjb250YWluaW5nIHVuaW9uIG9mIGNvcnJlc3BvbmRpbmcgcmVtb3Rlcy5cbiAgICogQHBhcmFtIHJlbW90ZXMgTGlzdCBvZiB0aGUgcmVtb3Rlcy5cbiAgICogQHJldHVybnMgUmV0dXJucyBvYmplY3Qgd2l0aCBtZXJnZWQgcmVtb3Rlcy5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZW1vdGVzQTpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJywgJ21vZHVsZUInXSB9O1xuICAgKiBjb25zdCByZW1vdGVzQjpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJ10sIGNvbnRleHRQYXRoQjogWydtb2R1bGVaJ10gfTtcbiAgICogY29uc3QgbWVyZ2VkUmVtb3RlczpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBtZXJnZVJlbW90ZXMoW3JlbW90ZXNBLCByZW1vdGVzQl0pO1xuICAgKiAvLyBSZXN1bHRcbiAgICoge1xuICAgKiAgY29udGV4dFBhdGhBOiBbJ21vZHVsZUEnLCAnbW9kdWxlQiddLFxuICAgKiAgY29udGV4dFBhdGhCOiBbJ21vZHVsZVonXVxuICAgKiB9XG4gICAqXG4gICAqIGBgYFxuICAgKi9cbiAgc3RhdGljIG1lcmdlUmVtb3RlcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnNbXSk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgcmV0dXJuIHJlZHVjZShcbiAgICAgIHJlbW90ZXMsXG4gICAgICAoYWxsUmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLCBtZlJlbW90ZTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zKSA9PiB7XG4gICAgICAgIGZvckVhY2gobWZSZW1vdGUsIChyZW1vdGVNb2R1bGVzOiBzdHJpbmdbXSwgcmVtb3RlQ29udGV4dFBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRSZW1vdGVzID0gZ2V0KGFsbFJlbW90ZXMsIHJlbW90ZUNvbnRleHRQYXRoLCBbXSk7XG4gICAgICAgICAgYWxsUmVtb3Rlc1tyZW1vdGVDb250ZXh0UGF0aF0gPSB1bmlvbihjdXJyZW50UmVtb3RlcywgcmVtb3RlTW9kdWxlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhbGxSZW1vdGVzO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHN0YXRpYyByZW1vdmVSZW1vdGVzKFxuICAgIHJlbW90ZXNUb1JlbW92ZUZyb206IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICByZW1vdGVzVG9SZW1vdmU/OiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnNcbiAgKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICBjb25zdCBrZXlzVG9SZW1vdmUgPSBPYmplY3Qua2V5cyhyZW1vdGVzVG9SZW1vdmUgfHwge30pO1xuICAgIGlmICgha2V5c1RvUmVtb3ZlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJlbW90ZXNUb1JlbW92ZUZyb207XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRLZXlzID0gT2JqZWN0LmtleXMocmVtb3Rlc1RvUmVtb3ZlRnJvbSk7XG4gICAgY29uc3Qga2V5c1ByZXNlbnRJbkJvdGggPSBjdXJyZW50S2V5cy5maWx0ZXIoa2V5ID0+IGtleXNUb1JlbW92ZS5pbmNsdWRlcyhrZXkpKTtcbiAgICBpZiAoIWtleXNQcmVzZW50SW5Cb3RoLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHJlbW90ZXNUb1JlbW92ZUZyb207XG4gICAgfVxuICAgIHJlbW90ZXNUb1JlbW92ZUZyb20gPSBjbG9uZURlZXAocmVtb3Rlc1RvUmVtb3ZlRnJvbSk7XG4gICAgZm9yIChjb25zdCByZW1vdGVDb250ZXh0UGF0aCBvZiBrZXlzUHJlc2VudEluQm90aCkge1xuICAgICAgY29uc3QgcmVtb3RlTW9kdWxlc1RvQmVSZW1vdmVkID0gcmVtb3Rlc1RvUmVtb3ZlW3JlbW90ZUNvbnRleHRQYXRoXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZW1vdGVNb2R1bGVzVG9CZVJlbW92ZWQpIHx8ICFyZW1vdGVNb2R1bGVzVG9CZVJlbW92ZWQ/Lmxlbmd0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGN1cnJlbnRNb2R1bGVzID0gcmVtb3Rlc1RvUmVtb3ZlRnJvbVtyZW1vdGVDb250ZXh0UGF0aF07XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY3VycmVudE1vZHVsZXMpIHx8ICFjdXJyZW50TW9kdWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGRlbGV0ZSByZW1vdGVzVG9SZW1vdmVGcm9tW3JlbW90ZUNvbnRleHRQYXRoXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRNb2R1bGVzID0gY3VycmVudE1vZHVsZXMuZmlsdGVyKG1vZHVsZSA9PiAhcmVtb3RlTW9kdWxlc1RvQmVSZW1vdmVkLmluY2x1ZGVzKG1vZHVsZSkpO1xuICAgICAgaWYgKGN1cnJlbnRNb2R1bGVzLmxlbmd0aCkge1xuICAgICAgICByZW1vdGVzVG9SZW1vdmVGcm9tW3JlbW90ZUNvbnRleHRQYXRoXSA9IGN1cnJlbnRNb2R1bGVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHJlbW90ZXNUb1JlbW92ZUZyb21bcmVtb3RlQ29udGV4dFBhdGhdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZW1vdGVzVG9SZW1vdmVGcm9tO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGFsbCBpbmplY3RvcnMgb2YgYWxyZWFkeSBsb2FkZWQgcGx1Z2lucyBvbiBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBpbmplY3RvcnMkOiBPYnNlcnZhYmxlPEVudmlyb25tZW50SW5qZWN0b3IgfCBJbmplY3Rvcj47XG4gIC8qKlxuICAgKiBFbWl0cyBvbmNlIHJlbW90ZVBsdWdpbnMgaGF2ZSBiZWVuIHJlc29sdmVkLlxuICAgKi9cbiAgcmVmcmVzaCQ6IE9ic2VydmFibGU8dm9pZD47XG4gIC8qKlxuICAgKiBFbWl0cyBhbGwgcGx1Z2luIGRldGFpbHMgb2YgYWxyZWFkeSBsb2FkZWQgcGx1Z2lucyBvbiBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBwbHVnaW5EZXRhaWxzJDogT2JzZXJ2YWJsZTx7XG4gICAgcmVtb3RlTmdNb2R1bGU6IE5nTW9kdWxlUmVmPHVua25vd24+IHwgVHlwZTx1bmtub3duPjtcbiAgICBtb2R1bGVSZWY6IE5nTW9kdWxlUmVmPHVua25vd24+O1xuICB9PjtcbiAgYWxsUGx1Z2luc0xvYWRlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHByaXZhdGUgdXJsUmVtb3Rlc0NhY2hlOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBudWxsO1xuICBwcml2YXRlIHJlbW90ZVNjcmlwdFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIF9pbmplY3RvcnMkID0gbmV3IFN1YmplY3Q8RW52aXJvbm1lbnRJbmplY3RvciB8IEluamVjdG9yPigpO1xuICBwcml2YXRlIF9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX3BsdWdpbkRldGFpbHMkID0gbmV3IFN1YmplY3Q8e1xuICAgIHJlbW90ZU5nTW9kdWxlOiBOZ01vZHVsZVJlZjx1bmtub3duPiB8IFR5cGU8dW5rbm93bj47XG4gICAgbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjx1bmtub3duPjtcbiAgfT4oKTtcbiAgcHJpdmF0ZSBfYWxsUGx1Z2luc0xvYWRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmZXRjaENsaWVudDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBvcHRpb25zU2VydmljZTogT3B0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5pbmplY3RvcnMkID0gdGhpcy5faW5qZWN0b3JzJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgLy8gbm90IHNwZWNpZnlpbmcgdGhlIGJ1ZmZlclNpemUgb2Ygc2hhcmVSZXBsYXkgc28gYWxsIGluamVjdG9ycyBhcmUgcmVjZWl2ZWQgb24gc3Vic2NyaXB0aW9uXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgICB0aGlzLnJlZnJlc2gkID0gdGhpcy5fcmVmcmVzaCQuYXNPYnNlcnZhYmxlKCkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gICAgdGhpcy5wbHVnaW5EZXRhaWxzJCA9IHRoaXMuX3BsdWdpbkRldGFpbHMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAvLyBub3Qgc3BlY2lmeWluZyB0aGUgYnVmZmVyU2l6ZSBvZiBzaGFyZVJlcGxheSBzbyBhbGwgZGV0YWlscyBhcmUgcmVjZWl2ZWQgb24gc3Vic2NyaXB0aW9uXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgICB0aGlzLmFsbFBsdWdpbnNMb2FkZWQkID0gdGhpcy5fYWxsUGx1Z2luc0xvYWRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcGx1Z2lucyBieSByZXNvbHZpbmcgdGhlIHJlbW90ZSBOZ01vZHVsZXMgYW5kIGluamVjdGluZyBpdC4gQWxzbyBhdHRhY2hpbmdcbiAgICogdGhlIGhvb2tzIG9udG8gdGhlIHJvb3QgaW5qZWN0b3IuXG4gICAqIEBwYXJhbSByZW1vdGVNb2R1bGVzIFRoZSByZW1vdGUgcGx1Z2lucyB0byBsb2FkIGFzIGZhY3RvcnkgbmFtZSBtYXBwaW5nIGFycmF5LlxuICAgKi9cbiAgcmVzb2x2ZVJlbW90ZVBsdWdpbnMocmVtb3RlTW9kdWxlczogQXJyYXk8eyBmYWN0b3J5OyBuYW1lIH0+KSB7XG4gICAgdGhpcy5sb2FkTW9kdWxlc0R5bmFtaWNhbGx5KHJlbW90ZU1vZHVsZXMpO1xuICAgIHRoaXMucmVmcmVzaEhvb2tzKCk7XG4gICAgdGhpcy5tYXJrUGx1Z2luc0FzTG9hZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgbW9kdWxlcyBhbmQgaGFuZGxlcyBob29raW5nIGNvcnJlY3RseS5cbiAgICogQHBhcmFtIHJlbW90ZU5nTW9kdWxlcyBUaGUgbW9kdWxlcyB0byBsb2FkLlxuICAgKi9cbiAgbG9hZE1vZHVsZXNEeW5hbWljYWxseShyZW1vdGVNb2R1bGVzOiBBcnJheTx7IGZhY3Rvcnk7IG5hbWUgfT4pIHtcbiAgICBmb3IgKGNvbnN0IHsgZmFjdG9yeSwgbmFtZSB9IG9mIHJlbW90ZU1vZHVsZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU9yUHJvdmlkZXJzID0gZmFjdG9yeVtuYW1lXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxlT3JQcm92aWRlcnMpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkUHJvdmlkZXJzKG1vZHVsZU9yUHJvdmlkZXJzLCBuYW1lKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWRNb2R1bGUobW9kdWxlT3JQcm92aWRlcnMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCAke25hbWV9YCwgZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxvYWRQcm92aWRlcnMocHJvdmlkZXJzOiBQcm92aWRlcltdLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpbmplY3RvciA9IG5ldyBTdGFuZGFsb25lUGx1Z2luSW5qZWN0b3Ioe1xuICAgICAgcHJvdmlkZXJzOiBwcm92aWRlcnMsXG4gICAgICBuYW1lOiBgcGx1Z2luc0luamVjdG9yLSR7bmFtZX1gXG4gICAgfSk7XG4gICAgdGhpcy5faW5qZWN0b3JzJC5uZXh0KGluamVjdG9yKTtcbiAgfVxuXG4gIGxvYWRNb2R1bGU8VCA9IHVua25vd24+KHJlbW90ZU5nTW9kdWxlOiBOZ01vZHVsZVJlZjxUPiB8IFR5cGU8VD4pIHtcbiAgICBsZXQgbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxUPjtcbiAgICBpZiAocmVtb3RlTmdNb2R1bGUgaW5zdGFuY2VvZiBOZ01vZHVsZVJlZikge1xuICAgICAgLy8gQU9UXG4gICAgICBtb2R1bGVSZWYgPSByZW1vdGVOZ01vZHVsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSklUXG4gICAgICBtb2R1bGVSZWYgPSBjcmVhdGVOZ01vZHVsZShyZW1vdGVOZ01vZHVsZSwgdGhpcy5pbmplY3Rvcik7XG4gICAgfVxuICAgIHRoaXMuX2luamVjdG9ycyQubmV4dChtb2R1bGVSZWYuaW5qZWN0b3IpO1xuICAgIHRoaXMuX3BsdWdpbkRldGFpbHMkLm5leHQoeyBtb2R1bGVSZWYsIHJlbW90ZU5nTW9kdWxlIH0pO1xuICAgIHJldHVybiBtb2R1bGVSZWY7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCByZWZyZXNoIGFsbCBjdXJyZW50IHJlZ2lzdGVyZWQgaG9va3MuXG4gICAqL1xuICByZWZyZXNoSG9va3MoKSB7XG4gICAgdGhpcy5fcmVmcmVzaCQubmV4dCgpO1xuICB9XG5cbiAgbWFya1BsdWdpbnNBc0xvYWRlZCgpIHtcbiAgICB0aGlzLl9hbGxQbHVnaW5zTG9hZGVkJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgbGlzdCBvZiByZW1vdGVzIHNvIHRoYXQgYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlbS5cbiAgICogVGhlIHJlcXVlc3QgaXMgbWFkZSB0byB0aGUgZm9sbG93aW5nIGFkZHJlc3M6IC9hcHBzLzxjb250ZXh0UGF0aD4vcmVtb3RlRW50cnkuanNcbiAgICogQHBhcmFtIHJlbW90ZXMgTGlzdCBvZiByZW1vdGVzIHRvIGJlIGxvYWRlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbGlzdCBvZiBsb2FkZWQgbW9kdWxlcyBmcm9tIHJlbW90ZXMuXG4gICAqL1xuICBhc3luYyBsb2FkUmVtb3RlcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpIHtcbiAgICBpZiAoIXJlbW90ZXMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgcmVtb3RlTW9kdWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgcGx1Z2luSWQgaW4gcmVtb3Rlcykge1xuICAgICAgaWYgKHJlbW90ZXMuaGFzT3duUHJvcGVydHkocGx1Z2luSWQpKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWVzID0gcmVtb3Rlc1twbHVnaW5JZF07XG4gICAgICAgIGNvbnN0IHVybCA9IGAvYXBwcy8ke3BsdWdpbklkfS9yZW1vdGVFbnRyeS5qcz9ub2NhY2hlPSR7ZGF0ZS5nZXRUaW1lKCl9YDtcbiAgICAgICAgbGV0IGF0TGVhc3RPbmVNb2R1bGVMb2FkZWRTdWNjZXNzZnVsbHkgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGVOYW1lIG9mIG1vZHVsZU5hbWVzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlbW90ZU1vZHVsZXMucHVzaChhd2FpdCB0aGlzLmxvYWRSZW1vdGVNb2R1bGUodXJsLCBwbHVnaW5JZCwgbW9kdWxlTmFtZSkpO1xuICAgICAgICAgICAgYXRMZWFzdE9uZU1vZHVsZUxvYWRlZFN1Y2Nlc3NmdWxseSA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ291bGQgbm90IGxvYWQgcmVtb3RlIG1vZHVsZSAnJXMnIGZyb20gdXJsOmAsIG1vZHVsZU5hbWUsIHVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gbmVlZCB0byBsb2FkIHRyYW5zbGF0aW9ucyBpZiB3ZSB3ZXJlIHVuYWJsZSB0byBsb2FkIGEgc2luZ2xlIG1vZHVsZS4uXG4gICAgICAgIGlmIChhdExlYXN0T25lTW9kdWxlTG9hZGVkU3VjY2Vzc2Z1bGx5KSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5sb2FkUmVtb3RlVHJhbnNsYXRpb25zKHBsdWdpbklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBBZGRlZCB0byBlbnN1cmUgdGhhdCB0aGUgdHJhbnNsYXRpb25zIGZyb20gcHVibGljLW9wdGlvbnMgYXJlIG5vdCBvdmVycmlkZGVuIGJ5IHRoZSBwbHVnaW4gdHJhbnNsYXRpb25zXG4gICAgY29uc3QgeyBsYW5nIH0gPSB0aGlzLmFwcFN0YXRlLnN0YXRlO1xuICAgIGlmICh0aGlzLm9wdGlvbnNTZXJ2aWNlLmxhbmdzRGV0YWlscyAmJiB0aGlzLm9wdGlvbnNTZXJ2aWNlLmxhbmdzRGV0YWlsc1tsYW5nXSkge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKGxhbmcsIHRoaXMub3B0aW9uc1NlcnZpY2UubGFuZ3NEZXRhaWxzW2xhbmddLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbW90ZU1vZHVsZXM7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYSBsaXN0IG9mIHJlbW90ZXMgYW5kIHR1cm5zIGl0IGludG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdW5pb24gb2YgY29ycmVzcG9uZGluZyByZW1vdGVzLlxuICAgKiBAcGFyYW0gbWZSZW1vdGVzIExpc3Qgb2YgdGhlIHJlbW90ZXMuXG4gICAqIEByZXR1cm5zIFJldHVybnMgb2JqZWN0IHdpdGggbWVyZ2VkIHJlbW90ZXMuXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgc3RhdGljIGZ1bmN0aW9uIG1lcmdlUmVtb3RlcyBhcyB0aGlzIGlzIGEgcHVyZSBmdW5jdGlvbi5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZW1vdGVzQTpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJywgJ21vZHVsZUInXSB9O1xuICAgKiBjb25zdCByZW1vdGVzQjpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSB7IGNvbnRleHRQYXRoQTogWydtb2R1bGVBJ10sIGNvbnRleHRQYXRoQjogWydtb2R1bGVaJ10gfTtcbiAgICogY29uc3QgbWVyZ2VkUmVtb3RlczpBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBtZXJnZU1GUmVtb3RlcyhbcmVtb3Rlc0EsIHJlbW90ZXNCXSk7XG4gICAqIC8vIFJlc3VsdFxuICAgKiB7XG4gICAqICBjb250ZXh0UGF0aEE6IFsnbW9kdWxlQScsICdtb2R1bGVCJ10sXG4gICAqICBjb250ZXh0UGF0aEI6IFsnbW9kdWxlWiddXG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqL1xuICBtZXJnZU1GUmVtb3RlcyhtZlJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1tdKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICByZXR1cm4gUGx1Z2luc1Jlc29sdmVTZXJ2aWNlLm1lcmdlUmVtb3RlcyhtZlJlbW90ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBVUkwgcmVtb3RlcyBjYWNoZS5cbiAgICovXG4gIGNsZWFyVVJMUmVtb3Rlc0NhY2hlKCkge1xuICAgIHRoaXMudXJsUmVtb3Rlc0NhY2hlID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHJlbW90ZXMgbGlzdCBmcm9tIHRoZSBVUkwuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxpc3Qgb2YgcmVtb3Rlcy5cbiAgICovXG4gIGxvYWRVcmxSZW1vdGVzKCkge1xuICAgIGlmICghdGhpcy51cmxSZW1vdGVzQ2FjaGUpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICBjb25zdCByZW1vdGVzID0gcGFyYW1zLmdldCgncmVtb3RlcycpO1xuICAgICAgaWYgKHJlbW90ZXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLnVybFJlbW90ZXNDYWNoZSA9IEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHJlbW90ZXMpKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBwYXJzZSByZW1vdGVzOiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVybFJlbW90ZXNDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZVRyYW5zbGF0aW9ucyhwbHVnaW5JZDogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgbGFuZyB9ID0gdGhpcy5hcHBTdGF0ZS5zdGF0ZTtcbiAgICAgIGNvbnN0IHJlc3AgPSBhd2FpdCB0aGlzLmZldGNoQ2xpZW50LmZldGNoKGAvYXBwcy8ke3BsdWdpbklkfS8ke2xhbmd9Lmpzb25gKTtcbiAgICAgIGlmIChyZXNwLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwLmpzb24oKTtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKGxhbmcsIHJlc3VsdFtsYW5nXSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGxvYWQgdHJhbnNsYXRpb25zIGZvciAke3BsdWdpbklkfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZU1vZHVsZShcbiAgICByZW1vdGVFbnRyeVVybDogc3RyaW5nLFxuICAgIHJlbW90ZUNvbnRleHRQYXRoOiBzdHJpbmcsXG4gICAgZXhwb3NlZE1vZHVsZTogc3RyaW5nXG4gICk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IGZhY3Rvcnk6IEZhY3RvcnkgfT4ge1xuICAgIGlmICghdGhpcy5yZW1vdGVTY3JpcHRTZXQuaGFzKHJlbW90ZUVudHJ5VXJsKSkge1xuICAgICAgdGhpcy5yZW1vdGVTY3JpcHRTZXQuYWRkKHJlbW90ZUVudHJ5VXJsKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZFJlbW90ZUVudHJ5KHJlbW90ZUVudHJ5VXJsKTtcbiAgICB9XG4gICAgbGV0IGNvbnRleHRQYXRoOiBzdHJpbmcgPSByZW1vdGVDb250ZXh0UGF0aDtcbiAgICBpZiAoY29udGV4dFBhdGguaW5jbHVkZXMoJ0AnKSkge1xuICAgICAgY29udGV4dFBhdGggPSByZW1vdGVDb250ZXh0UGF0aC5zcGxpdCgnQCcpWzBdO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5sb29rdXBFeHBvc2VkTW9kdWxlKGNhbWVsQ2FzZShjb250ZXh0UGF0aCksIGV4cG9zZWRNb2R1bGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUmVtb3RlRW50cnkocmVtb3RlRW50cnlVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdC5zcmMgPSByZW1vdGVFbnRyeVVybDtcblxuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSByZWplY3Q7XG5cbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoKTsgLy8gd2luZG93IGlzIHRoZSBnbG9iYWwgbmFtZXNwYWNlXG4gICAgICB9O1xuXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChzY3JpcHQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb29rdXBFeHBvc2VkTW9kdWxlKFxuICAgIHJlbW90ZU5hbWU6IHN0cmluZyxcbiAgICBleHBvc2VkTW9kdWxlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgZmFjdG9yeTogRmFjdG9yeSB9PiB7XG4gICAgLy8gSW5pdGlhbGl6ZXMgdGhlIHNoYXJlIHNjb3BlLiBUaGlzIGZpbGxzIGl0IHdpdGgga25vd24gcHJvdmlkZWQgbW9kdWxlcyBmcm9tIHRoaXMgYnVpbGQgYW5kIGFsbCByZW1vdGVzXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IF9fd2VicGFja19pbml0X3NoYXJpbmdfXygnZGVmYXVsdCcpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBgTW9kdWxlICVzIGNvdWxkIG5vdCBiZSBsb2FkZWQuIE1vZHVsZSBGZWRlcmF0aW9uIGlzIG5vdCBlbmFibGVkIGluIHRoaXMgYXBwbGljYXRpb24uYCxcbiAgICAgICAgZXhwb3NlZE1vZHVsZSxcbiAgICAgICAgZXhcbiAgICAgICk7XG4gICAgfVxuICAgIGxldCBjb250YWluZXI6IENvbnRhaW5lciA9IHdpbmRvd1tyZW1vdGVOYW1lXTtcblxuICAgIC8qKlxuICAgICAqIE1UTS02MDg1MDogSW4gY2FzZSBvZiBlLmcuIHRoZSBjb2NrcGl0IGFwcCBiZWluZyBjbG9uZWQgdG8gYSBkaWZmZXJlbnQgY29udGV4dCBwYXRoXG4gICAgICogdGhlIHNlbGYgc2NvcGVkIHBsdWdpbnMgb2YgY29ja3BpdCB3aWxsIGJlIGxvYWRlZCBmcm9tIHRoZSBuZXcgY29udGV4dCBwYXRoLlxuICAgICAqIEJ1dCB0aGUgcmVtb3RlRW50cnkuanMgd2lsbCBzdGlsbCByZWdpc3RlciB0aGUgcmVtb3RlcyB3aXRoIHRoZSBvcmlnaW5hbCBjb250ZXh0IHBhdGgsXG4gICAgICogYXMgdGhpcyBpcyBoYXJkY29kZWQgZHVyaW5nIGNvbXBpbGUgdGltZS5cbiAgICAgKlxuICAgICAqIFdlIHRoZXJlZm9yZSBhZGQgYSBmYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBwYXRoIGluIGNhc2UgdGhlcmUgaXMgbm8gY29udGFpbmVyIGZvciB0aGUgcmVtb3RlTmFtZVxuICAgICAqL1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb25zdCBmYWxsYmFja1JlbW90ZU5hbWU6IHN0cmluZyA9IGNhbWVsQ2FzZShfX09SSUdJTkFMX0NPTlRFWFRfUEFUSF9fKTtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYEF0dHJpYnV0ZSBcIiVzXCIgbm90IGRlZmluZWQgb24gd2luZG93IG9iamVjdCB3aGlsZSB0cnlpbmcgdG8gbG9hZCBcIiVzXCIuIFVzaW5nIFwiJXNcIiBhcyBmYWxsYmFjay5gLFxuICAgICAgICByZW1vdGVOYW1lLFxuICAgICAgICBleHBvc2VkTW9kdWxlLFxuICAgICAgICBmYWxsYmFja1JlbW90ZU5hbWVcbiAgICAgICk7XG4gICAgICBjb250YWluZXIgPSB3aW5kb3dbZmFsbGJhY2tSZW1vdGVOYW1lXTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBjb250YWluZXIsIGl0IG1heSBwcm92aWRlIHNoYXJlZCBtb2R1bGVzXG4gICAgbGV0IGZhY3Rvcnk6IEZhY3Rvcnk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvbnRhaW5lci5pbml0KF9fd2VicGFja19zaGFyZV9zY29wZXNfXy5kZWZhdWx0KTtcbiAgICAgIGZhY3RvcnkgPSAoYXdhaXQgY29udGFpbmVyLmdldChleHBvc2VkTW9kdWxlKSkoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS5lcnJvcihgTW9kdWxlICVzIGNvdWxkIG5vdCBiZSBsb2FkZWQuYCwgZXhwb3NlZE1vZHVsZSwgZXgpO1xuICAgIH1cbiAgICByZXR1cm4geyBuYW1lOiBleHBvc2VkTW9kdWxlLCBmYWN0b3J5IH07XG4gIH1cbn1cbiJdfQ==
|
|
293
|
+
}], ctorParameters: () => [{ type: i0.EnvironmentInjector }] });
|
|
294
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL3BsdWdpbnMvcGx1Z2lucy1yZXNvbHZlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixXQUFXLEVBQ1gsbUJBQW1CLEVBRW5CLGNBQWMsRUFHZixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBZ0J0QyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBbUM7UUFDckQsT0FBTyxNQUFNLENBQ1gsT0FBTyxFQUNQLENBQUMsVUFBb0MsRUFBRSxRQUFrQyxFQUFFLEVBQUU7WUFDM0UsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLGFBQXVCLEVBQUUsaUJBQXlCLEVBQUUsRUFBRTtnQkFDdkUsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDOUQsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN2RSxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FB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QUFDO1FBQ3JCLElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2RCxPQUFPLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25ELENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFDLENBQUM7OEdBdlZVLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBOZ01vZHVsZVJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgVHlwZSxcbiAgY3JlYXRlTmdNb2R1bGUsXG4gIEluamVjdG9yLFxuICBQcm92aWRlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IHJlZHVjZSwgZm9yRWFjaCwgZ2V0LCB1bmlvbiwgY2FtZWxDYXNlIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTdGFuZGFsb25lUGx1Z2luSW5qZWN0b3IgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoLWVzJztcblxudHlwZSBTY29wZSA9IHVua25vd247XG50eXBlIEZhY3RvcnkgPSAoKSA9PiBhbnk7XG5cbmRlY2xhcmUgY29uc3QgX193ZWJwYWNrX2luaXRfc2hhcmluZ19fOiAoc2hhcmVTY29wZTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuZGVjbGFyZSBjb25zdCBfX3dlYnBhY2tfc2hhcmVfc2NvcGVzX186IHsgZGVmYXVsdDogU2NvcGUgfTtcbmRlY2xhcmUgY29uc3QgX19PUklHSU5BTF9DT05URVhUX1BBVEhfXzogc3RyaW5nO1xuXG5pbnRlcmZhY2UgQ29udGFpbmVyIHtcbiAgaW5pdChzaGFyZVNjb3BlOiBTY29wZSk6IHZvaWQ7XG4gIGdldChtb2R1bGU6IHN0cmluZyk6IEZhY3Rvcnk7XG59XG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbHVnaW5zUmVzb2x2ZVNlcnZpY2Uge1xuICAvKipcbiAgICogVGFrZXMgYSBsaXN0IG9mIHJlbW90ZXMgYW5kIHR1cm5zIGl0IGludG8gYW4gb2JqZWN0IGNvbnRhaW5pbmcgdW5pb24gb2YgY29ycmVzcG9uZGluZyByZW1vdGVzLlxuICAgKiBAcGFyYW0gcmVtb3RlcyBMaXN0IG9mIHRoZSByZW1vdGVzLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIG9iamVjdCB3aXRoIG1lcmdlZCByZW1vdGVzLlxuICAgKlxuICAgKiAqKkV4YW1wbGUqKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlbW90ZXNBOkFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IHsgY29udGV4dFBhdGhBOiBbJ21vZHVsZUEnLCAnbW9kdWxlQiddIH07XG4gICAqIGNvbnN0IHJlbW90ZXNCOkFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IHsgY29udGV4dFBhdGhBOiBbJ21vZHVsZUEnXSwgY29udGV4dFBhdGhCOiBbJ21vZHVsZVonXSB9O1xuICAgKiBjb25zdCBtZXJnZWRSZW1vdGVzOkFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IG1lcmdlUmVtb3RlcyhbcmVtb3Rlc0EsIHJlbW90ZXNCXSk7XG4gICAqIC8vIFJlc3VsdFxuICAgKiB7XG4gICAqICBjb250ZXh0UGF0aEE6IFsnbW9kdWxlQScsICdtb2R1bGVCJ10sXG4gICAqICBjb250ZXh0UGF0aEI6IFsnbW9kdWxlWiddXG4gICAqIH1cbiAgICpcbiAgICogYGBgXG4gICAqL1xuICBzdGF0aWMgbWVyZ2VSZW1vdGVzKHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1tdKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICByZXR1cm4gcmVkdWNlKFxuICAgICAgcmVtb3RlcyxcbiAgICAgIChhbGxSZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsIG1mUmVtb3RlOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpID0+IHtcbiAgICAgICAgZm9yRWFjaChtZlJlbW90ZSwgKHJlbW90ZU1vZHVsZXM6IHN0cmluZ1tdLCByZW1vdGVDb250ZXh0UGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgY29uc3QgY3VycmVudFJlbW90ZXMgPSBnZXQoYWxsUmVtb3RlcywgcmVtb3RlQ29udGV4dFBhdGgsIFtdKTtcbiAgICAgICAgICBhbGxSZW1vdGVzW3JlbW90ZUNvbnRleHRQYXRoXSA9IHVuaW9uKGN1cnJlbnRSZW1vdGVzLCByZW1vdGVNb2R1bGVzKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGFsbFJlbW90ZXM7XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgc3RhdGljIHJlbW92ZVJlbW90ZXMoXG4gICAgcmVtb3Rlc1RvUmVtb3ZlRnJvbTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLFxuICAgIHJlbW90ZXNUb1JlbW92ZT86IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1xuICApOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMge1xuICAgIGNvbnN0IGtleXNUb1JlbW92ZSA9IE9iamVjdC5rZXlzKHJlbW90ZXNUb1JlbW92ZSB8fCB7fSk7XG4gICAgaWYgKCFrZXlzVG9SZW1vdmUubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcmVtb3Rlc1RvUmVtb3ZlRnJvbTtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEtleXMgPSBPYmplY3Qua2V5cyhyZW1vdGVzVG9SZW1vdmVGcm9tKTtcbiAgICBjb25zdCBrZXlzUHJlc2VudEluQm90aCA9IGN1cnJlbnRLZXlzLmZpbHRlcihrZXkgPT4ga2V5c1RvUmVtb3ZlLmluY2x1ZGVzKGtleSkpO1xuICAgIGlmICgha2V5c1ByZXNlbnRJbkJvdGgubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcmVtb3Rlc1RvUmVtb3ZlRnJvbTtcbiAgICB9XG4gICAgcmVtb3Rlc1RvUmVtb3ZlRnJvbSA9IGNsb25lRGVlcChyZW1vdGVzVG9SZW1vdmVGcm9tKTtcbiAgICBmb3IgKGNvbnN0IHJlbW90ZUNvbnRleHRQYXRoIG9mIGtleXNQcmVzZW50SW5Cb3RoKSB7XG4gICAgICBjb25zdCByZW1vdGVNb2R1bGVzVG9CZVJlbW92ZWQgPSByZW1vdGVzVG9SZW1vdmVbcmVtb3RlQ29udGV4dFBhdGhdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlbW90ZU1vZHVsZXNUb0JlUmVtb3ZlZCkgfHwgIXJlbW90ZU1vZHVsZXNUb0JlUmVtb3ZlZD8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgY3VycmVudE1vZHVsZXMgPSByZW1vdGVzVG9SZW1vdmVGcm9tW3JlbW90ZUNvbnRleHRQYXRoXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50TW9kdWxlcykgfHwgIWN1cnJlbnRNb2R1bGVzPy5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIHJlbW90ZXNUb1JlbW92ZUZyb21bcmVtb3RlQ29udGV4dFBhdGhdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY3VycmVudE1vZHVsZXMgPSBjdXJyZW50TW9kdWxlcy5maWx0ZXIobW9kdWxlID0+ICFyZW1vdGVNb2R1bGVzVG9CZVJlbW92ZWQuaW5jbHVkZXMobW9kdWxlKSk7XG4gICAgICBpZiAoY3VycmVudE1vZHVsZXMubGVuZ3RoKSB7XG4gICAgICAgIHJlbW90ZXNUb1JlbW92ZUZyb21bcmVtb3RlQ29udGV4dFBhdGhdID0gY3VycmVudE1vZHVsZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVtb3Rlc1RvUmVtb3ZlRnJvbVtyZW1vdGVDb250ZXh0UGF0aF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbW90ZXNUb1JlbW92ZUZyb207XG4gIH1cblxuICAvKipcbiAgICogRW1pdHMgYWxsIGluamVjdG9ycyBvZiBhbHJlYWR5IGxvYWRlZCBwbHVnaW5zIG9uIHN1YnNjcmlwdGlvbi5cbiAgICovXG4gIGluamVjdG9ycyQ6IE9ic2VydmFibGU8RW52aXJvbm1lbnRJbmplY3RvciB8IEluamVjdG9yPjtcbiAgLyoqXG4gICAqIEVtaXRzIG9uY2UgcmVtb3RlUGx1Z2lucyBoYXZlIGJlZW4gcmVzb2x2ZWQuXG4gICAqL1xuICByZWZyZXNoJDogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgLyoqXG4gICAqIEVtaXRzIGFsbCBwbHVnaW4gZGV0YWlscyBvZiBhbHJlYWR5IGxvYWRlZCBwbHVnaW5zIG9uIHN1YnNjcmlwdGlvbi5cbiAgICovXG4gIHBsdWdpbkRldGFpbHMkOiBPYnNlcnZhYmxlPHtcbiAgICByZW1vdGVOZ01vZHVsZTogTmdNb2R1bGVSZWY8dW5rbm93bj4gfCBUeXBlPHVua25vd24+O1xuICAgIG1vZHVsZVJlZjogTmdNb2R1bGVSZWY8dW5rbm93bj47XG4gIH0+O1xuICBhbGxQbHVnaW5zTG9hZGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIEVtaXRzIGFsbCBjb250ZXh0UGF0aHMgKGluY2x1ZGluZyB0aGUgY29ycmVzcG9uZGluZyB2ZXJzaW9uL3RhZywgaWYgcHJvdmlkZWQpIHRoYXQgaGF2ZSBiZWVuIGFscmVhZHkgbG9hZGVkIG9uIHN0YXJ0dXAgYW5kIGZ1cnRoZXIgYW55IG5ld2xvYWQgbG9hZGVkLlxuICAgKi9cbiAgY29udGV4dFBhdGhzRnJvbVdoZXJlUmVtb3Rlc0hhdmVCZWVuTG9hZGVkJDogT2JzZXJ2YWJsZTxzdHJpbmdbXT47XG4gIHByaXZhdGUgdXJsUmVtb3Rlc0NhY2hlOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSBudWxsO1xuICBwcml2YXRlIHJlbW90ZVNjcmlwdFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBwcml2YXRlIF9pbmplY3RvcnMkID0gbmV3IFN1YmplY3Q8RW52aXJvbm1lbnRJbmplY3RvciB8IEluamVjdG9yPigpO1xuICBwcml2YXRlIF9yZWZyZXNoJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgX3BsdWdpbkRldGFpbHMkID0gbmV3IFN1YmplY3Q8e1xuICAgIHJlbW90ZU5nTW9kdWxlOiBOZ01vZHVsZVJlZjx1bmtub3duPiB8IFR5cGU8dW5rbm93bj47XG4gICAgbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjx1bmtub3duPjtcbiAgfT4oKTtcbiAgcHJpdmF0ZSBfYWxsUGx1Z2luc0xvYWRlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJpdmF0ZSBfY29udGV4dFBhdGhzRnJvbVdoZXJlUmVtb3Rlc0hhdmVCZWVuTG9hZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluamVjdG9yOiBFbnZpcm9ubWVudEluamVjdG9yKSB7XG4gICAgdGhpcy5pbmplY3RvcnMkID0gdGhpcy5faW5qZWN0b3JzJC5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgLy8gbm90IHNwZWNpZnlpbmcgdGhlIGJ1ZmZlclNpemUgb2Ygc2hhcmVSZXBsYXkgc28gYWxsIGluamVjdG9ycyBhcmUgcmVjZWl2ZWQgb24gc3Vic2NyaXB0aW9uXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgICB0aGlzLnJlZnJlc2gkID0gdGhpcy5fcmVmcmVzaCQuYXNPYnNlcnZhYmxlKCkucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gICAgdGhpcy5wbHVnaW5EZXRhaWxzJCA9IHRoaXMuX3BsdWdpbkRldGFpbHMkLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICAvLyBub3Qgc3BlY2lmeWluZyB0aGUgYnVmZmVyU2l6ZSBvZiBzaGFyZVJlcGxheSBzbyBhbGwgZGV0YWlscyBhcmUgcmVjZWl2ZWQgb24gc3Vic2NyaXB0aW9uXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgICB0aGlzLmFsbFBsdWdpbnNMb2FkZWQkID0gdGhpcy5fYWxsUGx1Z2luc0xvYWRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5jb250ZXh0UGF0aHNGcm9tV2hlcmVSZW1vdGVzSGF2ZUJlZW5Mb2FkZWQkID1cbiAgICAgIHRoaXMuX2NvbnRleHRQYXRoc0Zyb21XaGVyZVJlbW90ZXNIYXZlQmVlbkxvYWRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgcGx1Z2lucyBieSByZXNvbHZpbmcgdGhlIHJlbW90ZSBOZ01vZHVsZXMgYW5kIGluamVjdGluZyBpdC4gQWxzbyBhdHRhY2hpbmdcbiAgICogdGhlIGhvb2tzIG9udG8gdGhlIHJvb3QgaW5qZWN0b3IuXG4gICAqIEBwYXJhbSByZW1vdGVNb2R1bGVzIFRoZSByZW1vdGUgcGx1Z2lucyB0byBsb2FkIGFzIGZhY3RvcnkgbmFtZSBtYXBwaW5nIGFycmF5LlxuICAgKi9cbiAgcmVzb2x2ZVJlbW90ZVBsdWdpbnMocmVtb3RlTW9kdWxlczogQXJyYXk8eyBmYWN0b3J5OyBuYW1lIH0+KSB7XG4gICAgdGhpcy5sb2FkTW9kdWxlc0R5bmFtaWNhbGx5KHJlbW90ZU1vZHVsZXMpO1xuICAgIHRoaXMucmVmcmVzaEhvb2tzKCk7XG4gICAgdGhpcy5tYXJrUGx1Z2luc0FzTG9hZGVkKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZHMgbW9kdWxlcyBhbmQgaGFuZGxlcyBob29raW5nIGNvcnJlY3RseS5cbiAgICogQHBhcmFtIHJlbW90ZU5nTW9kdWxlcyBUaGUgbW9kdWxlcyB0byBsb2FkLlxuICAgKi9cbiAgbG9hZE1vZHVsZXNEeW5hbWljYWxseShyZW1vdGVNb2R1bGVzOiBBcnJheTx7IGZhY3Rvcnk7IG5hbWUgfT4pIHtcbiAgICBmb3IgKGNvbnN0IHsgZmFjdG9yeSwgbmFtZSB9IG9mIHJlbW90ZU1vZHVsZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU9yUHJvdmlkZXJzID0gZmFjdG9yeVtuYW1lXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kdWxlT3JQcm92aWRlcnMpKSB7XG4gICAgICAgICAgdGhpcy5sb2FkUHJvdmlkZXJzKG1vZHVsZU9yUHJvdmlkZXJzLCBuYW1lKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWRNb2R1bGUobW9kdWxlT3JQcm92aWRlcnMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCAke25hbWV9YCwgZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGxvYWRQcm92aWRlcnMocHJvdmlkZXJzOiBQcm92aWRlcltdLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBpbmplY3RvciA9IG5ldyBTdGFuZGFsb25lUGx1Z2luSW5qZWN0b3Ioe1xuICAgICAgcHJvdmlkZXJzOiBwcm92aWRlcnMsXG4gICAgICBuYW1lOiBgcGx1Z2luc0luamVjdG9yLSR7bmFtZX1gLFxuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yXG4gICAgfSk7XG4gICAgdGhpcy5faW5qZWN0b3JzJC5uZXh0KGluamVjdG9yKTtcbiAgfVxuXG4gIGxvYWRNb2R1bGU8VCA9IHVua25vd24+KHJlbW90ZU5nTW9kdWxlOiBOZ01vZHVsZVJlZjxUPiB8IFR5cGU8VD4pIHtcbiAgICBsZXQgbW9kdWxlUmVmOiBOZ01vZHVsZVJlZjxUPjtcbiAgICBpZiAocmVtb3RlTmdNb2R1bGUgaW5zdGFuY2VvZiBOZ01vZHVsZVJlZikge1xuICAgICAgLy8gQU9UXG4gICAgICBtb2R1bGVSZWYgPSByZW1vdGVOZ01vZHVsZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSklUXG4gICAgICBtb2R1bGVSZWYgPSBjcmVhdGVOZ01vZHVsZShyZW1vdGVOZ01vZHVsZSwgdGhpcy5pbmplY3Rvcik7XG4gICAgfVxuICAgIHRoaXMuX2luamVjdG9ycyQubmV4dChtb2R1bGVSZWYuaW5qZWN0b3IpO1xuICAgIHRoaXMuX3BsdWdpbkRldGFpbHMkLm5leHQoeyBtb2R1bGVSZWYsIHJlbW90ZU5nTW9kdWxlIH0pO1xuICAgIHJldHVybiBtb2R1bGVSZWY7XG4gIH1cblxuICAvKipcbiAgICogV2lsbCByZWZyZXNoIGFsbCBjdXJyZW50IHJlZ2lzdGVyZWQgaG9va3MuXG4gICAqL1xuICByZWZyZXNoSG9va3MoKSB7XG4gICAgdGhpcy5fcmVmcmVzaCQubmV4dCgpO1xuICB9XG5cbiAgbWFya1BsdWdpbnNBc0xvYWRlZCgpIHtcbiAgICB0aGlzLl9hbGxQbHVnaW5zTG9hZGVkJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgbGlzdCBvZiByZW1vdGVzIHNvIHRoYXQgYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uIGNhbiB1c2UgdGhlbS5cbiAgICogVGhlIHJlcXVlc3QgaXMgbWFkZSB0byB0aGUgZm9sbG93aW5nIGFkZHJlc3M6IC9hcHBzLzxjb250ZXh0UGF0aD4vcmVtb3RlRW50cnkuanNcbiAgICogQHBhcmFtIHJlbW90ZXMgTGlzdCBvZiByZW1vdGVzIHRvIGJlIGxvYWRlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbGlzdCBvZiBsb2FkZWQgbW9kdWxlcyBmcm9tIHJlbW90ZXMuXG4gICAqL1xuICBhc3luYyBsb2FkUmVtb3RlcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpIHtcbiAgICBpZiAoIXJlbW90ZXMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgcmVtb3RlTW9kdWxlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgcGx1Z2luSWQgaW4gcmVtb3Rlcykge1xuICAgICAgaWYgKHJlbW90ZXMuaGFzT3duUHJvcGVydHkocGx1Z2luSWQpKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZU5hbWVzID0gcmVtb3Rlc1twbHVnaW5JZF07XG4gICAgICAgIGNvbnN0IHVybCA9IGAvYXBwcy8ke3BsdWdpbklkfS9yZW1vdGVFbnRyeS5qcz9ub2NhY2hlPSR7ZGF0ZS5nZXRUaW1lKCl9YDtcbiAgICAgICAgbGV0IGF0TGVhc3RPbmVNb2R1bGVMb2FkZWRTdWNjZXNzZnVsbHkgPSBmYWxzZTtcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGVOYW1lIG9mIG1vZHVsZU5hbWVzKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlbW90ZU1vZHVsZXMucHVzaChhd2FpdCB0aGlzLmxvYWRSZW1vdGVNb2R1bGUodXJsLCBwbHVnaW5JZCwgbW9kdWxlTmFtZSkpO1xuICAgICAgICAgICAgYXRMZWFzdE9uZU1vZHVsZUxvYWRlZFN1Y2Nlc3NmdWxseSA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgQ291bGQgbm90IGxvYWQgcmVtb3RlIG1vZHVsZSAnJXMnIGZyb20gdXJsOmAsIG1vZHVsZU5hbWUsIHVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBhZGQgc3VjY2Vzc2Z1bGx5IGxvYWRlZCByZW1vdGVzIHRvIHRoZSBsaXN0XG4gICAgICAgIGlmIChhdExlYXN0T25lTW9kdWxlTG9hZGVkU3VjY2Vzc2Z1bGx5KSB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dFBhdGhzRnJvbVdoZXJlUmVtb3Rlc0hhdmVCZWVuTG9hZGVkJC5uZXh0KFxuICAgICAgICAgICAgdGhpcy5fY29udGV4dFBhdGhzRnJvbVdoZXJlUmVtb3Rlc0hhdmVCZWVuTG9hZGVkJC52YWx1ZS5jb25jYXQocGx1Z2luSWQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVtb3RlTW9kdWxlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIGxpc3Qgb2YgcmVtb3RlcyBhbmQgdHVybnMgaXQgaW50byBhbiBvYmplY3QgY29udGFpbmluZyB1bmlvbiBvZiBjb3JyZXNwb25kaW5nIHJlbW90ZXMuXG4gICAqIEBwYXJhbSBtZlJlbW90ZXMgTGlzdCBvZiB0aGUgcmVtb3Rlcy5cbiAgICogQHJldHVybnMgUmV0dXJucyBvYmplY3Qgd2l0aCBtZXJnZWQgcmVtb3Rlcy5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBzdGF0aWMgZnVuY3Rpb24gbWVyZ2VSZW1vdGVzIGFzIHRoaXMgaXMgYSBwdXJlIGZ1bmN0aW9uLlxuICAgKlxuICAgKiAqKkV4YW1wbGUqKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlbW90ZXNBOkFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IHsgY29udGV4dFBhdGhBOiBbJ21vZHVsZUEnLCAnbW9kdWxlQiddIH07XG4gICAqIGNvbnN0IHJlbW90ZXNCOkFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IHsgY29udGV4dFBhdGhBOiBbJ21vZHVsZUEnXSwgY29udGV4dFBhdGhCOiBbJ21vZHVsZVonXSB9O1xuICAgKiBjb25zdCBtZXJnZWRSZW1vdGVzOkFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IG1lcmdlTUZSZW1vdGVzKFtyZW1vdGVzQSwgcmVtb3Rlc0JdKTtcbiAgICogLy8gUmVzdWx0XG4gICAqIHtcbiAgICogIGNvbnRleHRQYXRoQTogWydtb2R1bGVBJywgJ21vZHVsZUInXSxcbiAgICogIGNvbnRleHRQYXRoQjogWydtb2R1bGVaJ11cbiAgICogfVxuICAgKlxuICAgKiBgYGBcbiAgICovXG4gIG1lcmdlTUZSZW1vdGVzKG1mUmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zW10pOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMge1xuICAgIHJldHVybiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2UubWVyZ2VSZW1vdGVzKG1mUmVtb3Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIFVSTCByZW1vdGVzIGNhY2hlLlxuICAgKi9cbiAgY2xlYXJVUkxSZW1vdGVzQ2FjaGUoKSB7XG4gICAgdGhpcy51cmxSZW1vdGVzQ2FjaGUgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVtb3RlcyBsaXN0IGZyb20gdGhlIFVSTC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgbGlzdCBvZiByZW1vdGVzLlxuICAgKi9cbiAgbG9hZFVybFJlbW90ZXMoKSB7XG4gICAgaWYgKCF0aGlzLnVybFJlbW90ZXNDYWNoZSkge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICAgIGNvbnN0IHJlbW90ZXMgPSBwYXJhbXMuZ2V0KCdyZW1vdGVzJyk7XG4gICAgICBpZiAocmVtb3Rlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMudXJsUmVtb3Rlc0NhY2hlID0gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQocmVtb3RlcykpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHBhcnNlIHJlbW90ZXM6ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudXJsUmVtb3Rlc0NhY2hlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUmVtb3RlTW9kdWxlKFxuICAgIHJlbW90ZUVudHJ5VXJsOiBzdHJpbmcsXG4gICAgcmVtb3RlQ29udGV4dFBhdGg6IHN0cmluZyxcbiAgICBleHBvc2VkTW9kdWxlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgZmFjdG9yeTogRmFjdG9yeSB9PiB7XG4gICAgaWYgKCF0aGlzLnJlbW90ZVNjcmlwdFNldC5oYXMocmVtb3RlRW50cnlVcmwpKSB7XG4gICAgICB0aGlzLnJlbW90ZVNjcmlwdFNldC5hZGQocmVtb3RlRW50cnlVcmwpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkUmVtb3RlRW50cnkocmVtb3RlRW50cnlVcmwpO1xuICAgIH1cbiAgICBsZXQgY29udGV4dFBhdGg6IHN0cmluZyA9IHJlbW90ZUNvbnRleHRQYXRoO1xuICAgIGlmIChjb250ZXh0UGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IHJlbW90ZUNvbnRleHRQYXRoLnNwbGl0KCdAJylbMF07XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCB0aGlzLmxvb2t1cEV4cG9zZWRNb2R1bGUoY2FtZWxDYXNlKGNvbnRleHRQYXRoKSwgZXhwb3NlZE1vZHVsZSk7XG4gIH1cblxuICBwcml2YXRlIGxvYWRSZW1vdGVFbnRyeShyZW1vdGVFbnRyeVVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgc2NyaXB0LnNyYyA9IHJlbW90ZUVudHJ5VXJsO1xuXG4gICAgICBzY3JpcHQub25lcnJvciA9IHJlamVjdDtcblxuICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpOyAvLyB3aW5kb3cgaXMgdGhlIGdsb2JhbCBuYW1lc3BhY2VcbiAgICAgIH07XG5cbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHNjcmlwdCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvb2t1cEV4cG9zZWRNb2R1bGUoXG4gICAgcmVtb3RlTmFtZTogc3RyaW5nLFxuICAgIGV4cG9zZWRNb2R1bGU6IHN0cmluZ1xuICApOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyBmYWN0b3J5OiBGYWN0b3J5IH0+IHtcbiAgICAvLyBJbml0aWFsaXplcyB0aGUgc2hhcmUgc2NvcGUuIFRoaXMgZmlsbHMgaXQgd2l0aCBrbm93biBwcm92aWRlZCBtb2R1bGVzIGZyb20gdGhpcyBidWlsZCBhbmQgYWxsIHJlbW90ZXNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgX193ZWJwYWNrX2luaXRfc2hhcmluZ19fKCdkZWZhdWx0Jyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBNb2R1bGUgJXMgY291bGQgbm90IGJlIGxvYWRlZC4gTW9kdWxlIEZlZGVyYXRpb24gaXMgbm90IGVuYWJsZWQgaW4gdGhpcyBhcHBsaWNhdGlvbi5gLFxuICAgICAgICBleHBvc2VkTW9kdWxlLFxuICAgICAgICBleFxuICAgICAgKTtcbiAgICB9XG4gICAgbGV0IGNvbnRhaW5lcjogQ29udGFpbmVyID0gd2luZG93W3JlbW90ZU5hbWVdO1xuXG4gICAgLyoqXG4gICAgICogTVRNLTYwODUwOiBJbiBjYXNlIG9mIGUuZy4gdGhlIGNvY2twaXQgYXBwIGJlaW5nIGNsb25lZCB0byBhIGRpZmZlcmVudCBjb250ZXh0IHBhdGhcbiAgICAgKiB0aGUgc2VsZiBzY29wZWQgcGx1Z2lucyBvZiBjb2NrcGl0IHdpbGwgYmUgbG9hZGVkIGZyb20gdGhlIG5ldyBjb250ZXh0IHBhdGguXG4gICAgICogQnV0IHRoZSByZW1vdGVFbnRyeS5qcyB3aWxsIHN0aWxsIHJlZ2lzdGVyIHRoZSByZW1vdGVzIHdpdGggdGhlIG9yaWdpbmFsIGNvbnRleHQgcGF0aCxcbiAgICAgKiBhcyB0aGlzIGlzIGhhcmRjb2RlZCBkdXJpbmcgY29tcGlsZSB0aW1lLlxuICAgICAqXG4gICAgICogV2UgdGhlcmVmb3JlIGFkZCBhIGZhbGxiYWNrIHRvIHRoZSBvcmlnaW5hbCBjb250ZXh0IHBhdGggaW4gY2FzZSB0aGVyZSBpcyBubyBjb250YWluZXIgZm9yIHRoZSByZW1vdGVOYW1lXG4gICAgICovXG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIGNvbnN0IGZhbGxiYWNrUmVtb3RlTmFtZTogc3RyaW5nID0gY2FtZWxDYXNlKF9fT1JJR0lOQUxfQ09OVEVYVF9QQVRIX18pO1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgQXR0cmlidXRlIFwiJXNcIiBub3QgZGVmaW5lZCBvbiB3aW5kb3cgb2JqZWN0IHdoaWxlIHRyeWluZyB0byBsb2FkIFwiJXNcIi4gVXNpbmcgXCIlc1wiIGFzIGZhbGxiYWNrLmAsXG4gICAgICAgIHJlbW90ZU5hbWUsXG4gICAgICAgIGV4cG9zZWRNb2R1bGUsXG4gICAgICAgIGZhbGxiYWNrUmVtb3RlTmFtZVxuICAgICAgKTtcbiAgICAgIGNvbnRhaW5lciA9IHdpbmRvd1tmYWxsYmFja1JlbW90ZU5hbWVdO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciwgaXQgbWF5IHByb3ZpZGUgc2hhcmVkIG1vZHVsZXNcbiAgICBsZXQgZmFjdG9yeTogRmFjdG9yeTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29udGFpbmVyLmluaXQoX193ZWJwYWNrX3NoYXJlX3Njb3Blc19fLmRlZmF1bHQpO1xuICAgICAgZmFjdG9yeSA9IChhd2FpdCBjb250YWluZXIuZ2V0KGV4cG9zZWRNb2R1bGUpKSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBNb2R1bGUgJXMgY291bGQgbm90IGJlIGxvYWRlZC5gLCBleHBvc2VkTW9kdWxlLCBleCk7XG4gICAgfVxuICAgIHJldHVybiB7IG5hbWU6IGV4cG9zZWRNb2R1bGUsIGZhY3RvcnkgfTtcbiAgfVxufVxuIl19
|