@sapui5/sap.fe.core 1.102.3 → 1.105.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/package.json +6 -6
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/ActionRuntime.js +120 -0
- package/src/sap/fe/core/ActionRuntime.ts +108 -0
- package/src/sap/fe/core/AppComponent.js +81 -35
- package/src/sap/fe/core/AppComponent.ts +68 -44
- package/src/sap/fe/core/AppStateHandler.js +82 -70
- package/src/sap/fe/core/AppStateHandler.ts +32 -37
- package/src/sap/fe/core/BaseController.js +12 -10
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +291 -218
- package/src/sap/fe/core/CommonUtils.ts +315 -251
- package/src/sap/fe/core/ExtensionAPI.js +25 -28
- package/src/sap/fe/core/ExtensionAPI.ts +36 -38
- package/src/sap/fe/core/PageController.js +5 -5
- package/src/sap/fe/core/PageController.ts +4 -5
- package/src/sap/fe/core/TemplateComponent.js +21 -10
- package/src/sap/fe/core/TemplateComponent.ts +9 -6
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +8 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +197 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +164 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -230
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +275 -128
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
- package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
- package/src/sap/fe/core/controllerextensions/EditFlow.js +761 -700
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +478 -514
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +10 -10
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +104 -75
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -79
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +68 -68
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +162 -102
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +177 -121
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +67 -69
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +10 -10
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
- package/src/sap/fe/core/controllerextensions/PageReady.js +98 -26
- package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +31 -32
- package/src/sap/fe/core/controllerextensions/Paginator.ts +33 -34
- package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -7
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +11 -12
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
- package/src/sap/fe/core/controllerextensions/Share.js +171 -140
- package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
- package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
- package/src/sap/fe/core/controllerextensions/ViewState.js +201 -132
- package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +13 -12
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +13 -12
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +15 -15
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -18
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +60 -28
- package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +29 -21
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1424 -940
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +799 -836
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +410 -377
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +275 -358
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +752 -579
- package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +631 -599
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +92 -74
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +49 -52
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -41
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +110 -84
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +69 -81
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +64 -73
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +18 -2
- package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
- package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +25 -24
- package/src/sap/fe/core/controls/Any.js +9 -5
- package/src/sap/fe/core/controls/Any.ts +10 -4
- package/src/sap/fe/core/controls/CommandExecution.js +12 -26
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
- package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -3
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +26 -26
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -3
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
- package/src/sap/fe/core/controls/FieldWrapper.js +3 -3
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +9 -4
- package/src/sap/fe/core/controls/FileWrapper.ts +16 -12
- package/src/sap/fe/core/controls/FilterBar.js +7 -3
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
- package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
- package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
- package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
- package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +44 -19
- package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +17 -13
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +4 -4
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
- package/src/sap/fe/core/converters/ConverterContext.js +48 -34
- package/src/sap/fe/core/converters/ConverterContext.ts +81 -67
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +18 -15
- package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
- package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
- package/src/sap/fe/core/converters/MetaModelConverter.js +74 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +176 -140
- package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
- package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
- package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
- package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1956 -1494
- package/src/sap/fe/core/converters/controls/Common/Action.js +78 -51
- package/src/sap/fe/core/converters/controls/Common/Action.ts +87 -52
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -16
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +42 -43
- package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
- package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +65 -29
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +93 -62
- package/src/sap/fe/core/converters/controls/Common/Form.js +31 -31
- package/src/sap/fe/core/converters/controls/Common/Form.ts +46 -57
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
- package/src/sap/fe/core/converters/controls/Common/Table.js +251 -264
- package/src/sap/fe/core/converters/controls/Common/Table.ts +344 -370
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +147 -144
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +89 -59
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +118 -71
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +131 -95
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +123 -87
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +98 -87
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +121 -117
- package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +8 -6
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +18 -10
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +136 -0
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +139 -0
- package/src/sap/fe/core/converters/helpers/ID.js +48 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
- package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
- package/src/sap/fe/core/converters/helpers/Key.js +7 -7
- package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +53 -75
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +59 -90
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +58 -57
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +93 -86
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +58 -44
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +87 -80
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
- package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
- package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
- package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
- package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
- package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
- package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
- package/src/sap/fe/core/fpm/Component.js +33 -7
- package/src/sap/fe/core/fpm/Component.ts +14 -0
- package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +19 -18
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +41 -43
- package/src/sap/fe/core/helpers/BindingToolkit.js +1836 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +397 -270
- package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
- package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
- package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
- package/src/sap/fe/core/helpers/EditState.js +1 -6
- package/src/sap/fe/core/helpers/EditState.ts +5 -10
- package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
- package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
- package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
- package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
- package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
- package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
- package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
- package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
- package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
- package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
- package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
- package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
- package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
- package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
- package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
- package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
- package/src/sap/fe/core/helpers/Synchronization.js +1 -1
- package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
- package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
- package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
- package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.js +110 -0
- package/src/sap/fe/core/jsx-runtime/jsx-control.ts +92 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
- package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
- package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
- package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
- package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
- package/src/sap/fe/core/library.js +42 -3
- package/src/sap/fe/core/library.support.js +1 -1
- package/src/sap/fe/core/library.ts +38 -0
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
- package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
- package/src/sap/fe/core/messagebundle.properties +39 -67
- package/src/sap/fe/core/messagebundle_ar.properties +27 -44
- package/src/sap/fe/core/messagebundle_bg.properties +27 -44
- package/src/sap/fe/core/messagebundle_ca.properties +27 -44
- package/src/sap/fe/core/messagebundle_cs.properties +27 -44
- package/src/sap/fe/core/messagebundle_cy.properties +26 -43
- package/src/sap/fe/core/messagebundle_da.properties +27 -44
- package/src/sap/fe/core/messagebundle_de.properties +25 -42
- package/src/sap/fe/core/messagebundle_el.properties +28 -45
- package/src/sap/fe/core/messagebundle_en.properties +27 -44
- package/src/sap/fe/core/messagebundle_en_GB.properties +27 -44
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -42
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -40
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +25 -42
- package/src/sap/fe/core/messagebundle_es.properties +27 -44
- package/src/sap/fe/core/messagebundle_es_MX.properties +27 -44
- package/src/sap/fe/core/messagebundle_et.properties +27 -44
- package/src/sap/fe/core/messagebundle_fi.properties +27 -44
- package/src/sap/fe/core/messagebundle_fr.properties +26 -43
- package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -42
- package/src/sap/fe/core/messagebundle_hi.properties +27 -44
- package/src/sap/fe/core/messagebundle_hr.properties +27 -44
- package/src/sap/fe/core/messagebundle_hu.properties +27 -44
- package/src/sap/fe/core/messagebundle_id.properties +27 -44
- package/src/sap/fe/core/messagebundle_it.properties +43 -60
- package/src/sap/fe/core/messagebundle_iw.properties +27 -44
- package/src/sap/fe/core/messagebundle_ja.properties +27 -44
- package/src/sap/fe/core/messagebundle_kk.properties +27 -44
- package/src/sap/fe/core/messagebundle_ko.properties +30 -47
- package/src/sap/fe/core/messagebundle_lt.properties +27 -44
- package/src/sap/fe/core/messagebundle_lv.properties +27 -44
- package/src/sap/fe/core/messagebundle_ms.properties +27 -44
- package/src/sap/fe/core/messagebundle_nl.properties +29 -46
- package/src/sap/fe/core/messagebundle_no.properties +27 -44
- package/src/sap/fe/core/messagebundle_pl.properties +28 -45
- package/src/sap/fe/core/messagebundle_pt.properties +28 -45
- package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -44
- package/src/sap/fe/core/messagebundle_ro.properties +27 -44
- package/src/sap/fe/core/messagebundle_ru.properties +27 -44
- package/src/sap/fe/core/messagebundle_sh.properties +27 -44
- package/src/sap/fe/core/messagebundle_sk.properties +27 -44
- package/src/sap/fe/core/messagebundle_sl.properties +27 -44
- package/src/sap/fe/core/messagebundle_sv.properties +27 -44
- package/src/sap/fe/core/messagebundle_th.properties +25 -42
- package/src/sap/fe/core/messagebundle_tr.properties +27 -44
- package/src/sap/fe/core/messagebundle_uk.properties +27 -44
- package/src/sap/fe/core/messagebundle_vi.properties +27 -44
- package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -44
- package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -44
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +103 -75
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +72 -73
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +62 -50
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +56 -56
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
- package/src/sap/fe/core/services/ShellServicesFactory.js +93 -77
- package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +64 -64
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +232 -200
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +145 -142
- package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
- package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
- package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
- package/src/sap/fe/core/support/CommonHelper.js +3 -2
- package/src/sap/fe/core/support/CommonHelper.ts +9 -13
- package/src/sap/fe/core/support/Diagnostics.js +1 -1
- package/src/sap/fe/core/support/Diagnostics.ts +5 -5
- package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +85 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +90 -0
- package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
- package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
- package/src/sap/fe/core/templating/DataModelPathHelper.js +23 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +47 -34
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
- package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
- package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
- package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
- package/src/sap/fe/core/templating/FilterHelper.js +18 -17
- package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
- package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
- package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
- package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
- package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
- package/src/sap/fe/core/templating/UIFormatters.js +152 -95
- package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
- package/src/sap/fe/core/type/Email.js +3 -3
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
|
@@ -1,54 +1,53 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { CommunicationAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Communication";
|
|
2
|
+
import type {
|
|
3
3
|
CollectionFacetTypes,
|
|
4
4
|
DataFieldAbstractTypes,
|
|
5
|
+
Emphasized,
|
|
5
6
|
FacetTypes,
|
|
6
7
|
FieldGroup,
|
|
7
|
-
Identification,
|
|
8
8
|
OperationGroupingType,
|
|
9
|
-
ReferenceFacetTypes
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from "@sap-ux/vocabularies-types";
|
|
14
|
-
import { CommunicationAnnotationTerms } from "@sap-ux/vocabularies-types/dist/generated/Communication";
|
|
9
|
+
ReferenceFacetTypes
|
|
10
|
+
} from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
11
|
+
import { UIAnnotationTerms, UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
12
|
+
import type { BaseAction, CombinedAction, ConverterAction, CustomAction } from "sap/fe/core/converters/controls/Common/Action";
|
|
15
13
|
import {
|
|
16
|
-
BaseAction,
|
|
17
14
|
ButtonType,
|
|
18
|
-
ConverterAction,
|
|
19
|
-
CustomAction,
|
|
20
15
|
getActionsFromManifest,
|
|
21
16
|
getEnabledForAnnotationAction,
|
|
22
17
|
getSemanticObjectMapping,
|
|
23
18
|
isActionNavigable,
|
|
24
19
|
removeDuplicateActions
|
|
25
20
|
} from "sap/fe/core/converters/controls/Common/Action";
|
|
21
|
+
import type { CustomObjectPageHeaderFacet, FlexSettings } from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
|
|
26
22
|
import {
|
|
27
|
-
CustomObjectPageHeaderFacet,
|
|
28
|
-
FlexSettings,
|
|
29
23
|
getDesignTimeMetadataSettingsForHeaderFacet,
|
|
30
24
|
getHeaderFacetsFromManifest,
|
|
31
25
|
getStashedSettingsForHeaderFacet
|
|
32
26
|
} from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
|
|
33
27
|
import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
|
|
34
28
|
import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
|
|
29
|
+
import type { CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
|
|
35
30
|
import {
|
|
36
|
-
|
|
37
|
-
bindingExpression,
|
|
38
|
-
BindingExpression,
|
|
39
|
-
compileBinding,
|
|
31
|
+
compileExpression,
|
|
40
32
|
equal,
|
|
41
33
|
fn,
|
|
34
|
+
getExpressionFromAnnotation,
|
|
35
|
+
ifElse,
|
|
42
36
|
not,
|
|
37
|
+
pathInModel,
|
|
43
38
|
ref
|
|
44
|
-
} from "sap/fe/core/helpers/
|
|
45
|
-
import ConverterContext from "../../ConverterContext";
|
|
46
|
-
import { ConfigurableObject, ConfigurableRecord, CustomElement
|
|
47
|
-
import {
|
|
48
|
-
import {
|
|
39
|
+
} from "sap/fe/core/helpers/BindingToolkit";
|
|
40
|
+
import type ConverterContext from "../../ConverterContext";
|
|
41
|
+
import type { ConfigurableObject, ConfigurableRecord, CustomElement } from "../../helpers/ConfigurableObject";
|
|
42
|
+
import { insertCustomElements, Placement } from "../../helpers/ConfigurableObject";
|
|
43
|
+
import { getCustomSubSectionID, getFormID, getSideContentID, getSubSectionID } from "../../helpers/ID";
|
|
44
|
+
import type { ManifestAction, ManifestSubSection } from "../../ManifestSettings";
|
|
45
|
+
import { ActionType } from "../../ManifestSettings";
|
|
49
46
|
import { getFormActions, getFormHiddenActions, getVisibilityEnablementFormMenuActions } from "../../objectPage/FormMenuActions";
|
|
50
|
-
import { DataVisualizationDefinition
|
|
51
|
-
import {
|
|
47
|
+
import type { DataVisualizationDefinition } from "../Common/DataVisualization";
|
|
48
|
+
import { getDataVisualizationConfiguration } from "../Common/DataVisualization";
|
|
49
|
+
import type { FormDefinition } from "../Common/Form";
|
|
50
|
+
import { createFormDefinition, isReferenceFacet } from "../Common/Form";
|
|
52
51
|
|
|
53
52
|
export enum SubSectionType {
|
|
54
53
|
Unknown = "Unknown", // Default Type
|
|
@@ -71,10 +70,10 @@ export type ObjectPageSubSection =
|
|
|
71
70
|
type BaseSubSection = {
|
|
72
71
|
id: string;
|
|
73
72
|
key: string;
|
|
74
|
-
title:
|
|
73
|
+
title: CompiledBindingToolkitExpression;
|
|
75
74
|
annotationPath: string;
|
|
76
75
|
type: SubSectionType;
|
|
77
|
-
visible:
|
|
76
|
+
visible: CompiledBindingToolkitExpression;
|
|
78
77
|
isVisibilityDynamic?: boolean | "";
|
|
79
78
|
flexSettings?: FlexSettings;
|
|
80
79
|
stashed?: boolean;
|
|
@@ -102,10 +101,6 @@ type XMLFragmentSubSection = Omit<BaseSubSection, "annotationPath"> & {
|
|
|
102
101
|
actions: Record<string, CustomAction>;
|
|
103
102
|
};
|
|
104
103
|
|
|
105
|
-
type Emphasized = {
|
|
106
|
-
path: string;
|
|
107
|
-
};
|
|
108
|
-
|
|
109
104
|
type PlaceholderFragmentSubSection = Omit<BaseSubSection, "annotationPath"> & {
|
|
110
105
|
type: SubSectionType.Placeholder;
|
|
111
106
|
actions: Record<string, CustomAction>;
|
|
@@ -119,13 +114,14 @@ export type FormSubSection = BaseSubSection & {
|
|
|
119
114
|
type: SubSectionType.Form;
|
|
120
115
|
formDefinition: FormDefinition;
|
|
121
116
|
actions: ConverterAction[] | BaseAction[];
|
|
117
|
+
commandActions: Record<string, CustomAction>;
|
|
122
118
|
};
|
|
123
119
|
|
|
124
120
|
export type ObjectPageSection = ConfigurableObject & {
|
|
125
121
|
id: string;
|
|
126
|
-
title:
|
|
127
|
-
showTitle?:
|
|
128
|
-
visible:
|
|
122
|
+
title: CompiledBindingToolkitExpression;
|
|
123
|
+
showTitle?: boolean;
|
|
124
|
+
visible: CompiledBindingToolkitExpression;
|
|
129
125
|
subSections: ObjectPageSubSection[];
|
|
130
126
|
};
|
|
131
127
|
|
|
@@ -144,6 +140,7 @@ export type CustomObjectPageSubSection = CustomElement<ObjectPageSubSection>;
|
|
|
144
140
|
|
|
145
141
|
const targetTerms: string[] = [
|
|
146
142
|
UIAnnotationTerms.LineItem,
|
|
143
|
+
UIAnnotationTerms.Chart,
|
|
147
144
|
UIAnnotationTerms.PresentationVariant,
|
|
148
145
|
UIAnnotationTerms.SelectionPresentationVariant
|
|
149
146
|
];
|
|
@@ -156,10 +153,10 @@ const hasTable = (facets: any[] = []) => {
|
|
|
156
153
|
/**
|
|
157
154
|
* Create subsections based on facet definition.
|
|
158
155
|
*
|
|
159
|
-
* @param
|
|
160
|
-
* @param
|
|
161
|
-
* @param
|
|
162
|
-
* @returns
|
|
156
|
+
* @param facetCollection Collection of facets
|
|
157
|
+
* @param converterContext The converter context
|
|
158
|
+
* @param isHeaderSection True if header section is generated in this iteration
|
|
159
|
+
* @returns The current subsections
|
|
163
160
|
*/
|
|
164
161
|
export function createSubSections(
|
|
165
162
|
facetCollection: FacetTypes[],
|
|
@@ -197,8 +194,8 @@ export function createSubSections(
|
|
|
197
194
|
/**
|
|
198
195
|
* Creates subsections based on the definition of the custom header facet.
|
|
199
196
|
*
|
|
200
|
-
* @param
|
|
201
|
-
* @returns
|
|
197
|
+
* @param converterContext The converter context
|
|
198
|
+
* @returns The current subsections
|
|
202
199
|
*/
|
|
203
200
|
export function createCustomHeaderFacetSubSections(converterContext: ConverterContext): ObjectPageSubSection[] {
|
|
204
201
|
const customHeaderFacets: Record<string, CustomObjectPageHeaderFacet> = getHeaderFacetsFromManifest(
|
|
@@ -223,11 +220,10 @@ export function createCustomHeaderFacetSubSections(converterContext: ConverterCo
|
|
|
223
220
|
* Creates a subsection based on a custom header facet.
|
|
224
221
|
*
|
|
225
222
|
* @param customHeaderFacet A custom header facet
|
|
226
|
-
*
|
|
227
|
-
* @returns {ObjectPageSubSection} A definition for a subsection
|
|
223
|
+
* @returns A definition for a subsection
|
|
228
224
|
*/
|
|
229
225
|
function createCustomHeaderFacetSubSection(customHeaderFacet: CustomObjectPageHeaderFacet): ObjectPageSubSection {
|
|
230
|
-
const subSectionID =
|
|
226
|
+
const subSectionID = getCustomSubSectionID(customHeaderFacet.key);
|
|
231
227
|
const subSection: XMLFragmentSubSection = {
|
|
232
228
|
id: subSectionID,
|
|
233
229
|
key: customHeaderFacet.key,
|
|
@@ -252,73 +248,72 @@ const getSubSectionKey = (facetDefinition: FacetTypes, fallback: string): string
|
|
|
252
248
|
};
|
|
253
249
|
/**
|
|
254
250
|
* Adds Form menu action to all form actions, removes duplicate actions and hidden actions.
|
|
251
|
+
*
|
|
255
252
|
* @param actions The actions involved
|
|
256
253
|
* @param facetDefinition The definition for the facet
|
|
257
254
|
* @param converterContext The converter context
|
|
258
|
-
* @returns
|
|
255
|
+
* @returns The form menu actions
|
|
259
256
|
*/
|
|
260
|
-
function addFormMenuActions(
|
|
261
|
-
actions: ConverterAction[],
|
|
262
|
-
facetDefinition: FacetTypes,
|
|
263
|
-
converterContext: ConverterContext
|
|
264
|
-
): BaseAction[] | ConverterAction[] {
|
|
257
|
+
function addFormMenuActions(actions: ConverterAction[], facetDefinition: FacetTypes, converterContext: ConverterContext): CombinedAction {
|
|
265
258
|
const hiddenActions: BaseAction[] = getFormHiddenActions(facetDefinition, converterContext) || [],
|
|
266
259
|
formActions: ConfigurableRecord<ManifestAction> = getFormActions(facetDefinition, converterContext),
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
260
|
+
manifestActions = getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions),
|
|
261
|
+
formAllActions = insertCustomElements(actions, manifestActions.actions, { command: "overwrite" });
|
|
262
|
+
return {
|
|
263
|
+
"actions": formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions,
|
|
264
|
+
"commandActions": manifestActions.commandActions
|
|
265
|
+
};
|
|
273
266
|
}
|
|
274
267
|
|
|
275
268
|
/**
|
|
276
269
|
* Retrieves the action form a facet.
|
|
270
|
+
*
|
|
277
271
|
* @param facetDefinition
|
|
278
272
|
* @param converterContext
|
|
279
|
-
* @returns
|
|
273
|
+
* @returns The current facet actions
|
|
280
274
|
*/
|
|
281
|
-
function getFacetActions(facetDefinition: FacetTypes, converterContext: ConverterContext):
|
|
275
|
+
function getFacetActions(facetDefinition: FacetTypes, converterContext: ConverterContext): CombinedAction {
|
|
282
276
|
let actions = new Array<ConverterAction>();
|
|
283
277
|
switch (facetDefinition.$Type) {
|
|
284
278
|
case UIAnnotationTypes.CollectionFacet:
|
|
285
279
|
actions = (
|
|
286
|
-
facetDefinition.Facets.filter((
|
|
280
|
+
facetDefinition.Facets.filter((subFacetDefinition) => isReferenceFacet(subFacetDefinition)) as ReferenceFacetTypes[]
|
|
287
281
|
).reduce(
|
|
288
|
-
(
|
|
282
|
+
(actionReducer: ConverterAction[], referenceFacet) =>
|
|
283
|
+
createFormActionReducer(actionReducer, referenceFacet, converterContext),
|
|
289
284
|
[]
|
|
290
285
|
);
|
|
291
286
|
break;
|
|
292
287
|
case UIAnnotationTypes.ReferenceFacet:
|
|
293
|
-
actions = createFormActionReducer([], facetDefinition
|
|
288
|
+
actions = createFormActionReducer([], facetDefinition, converterContext);
|
|
289
|
+
break;
|
|
290
|
+
default:
|
|
294
291
|
break;
|
|
295
292
|
}
|
|
296
293
|
return addFormMenuActions(actions, facetDefinition, converterContext);
|
|
297
294
|
}
|
|
298
295
|
/**
|
|
299
|
-
*
|
|
300
|
-
*
|
|
301
|
-
* @
|
|
296
|
+
* Returns the button type based on @UI.Emphasized annotation.
|
|
297
|
+
*
|
|
298
|
+
* @param emphasized Emphasized annotation value.
|
|
299
|
+
* @returns The button type or path based expression.
|
|
302
300
|
*/
|
|
303
|
-
function getButtonType(
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
} else if (Emphasized) {
|
|
308
|
-
return ButtonType.Ghost;
|
|
309
|
-
}
|
|
310
|
-
return ButtonType.Transparent;
|
|
301
|
+
function getButtonType(emphasized: Emphasized | undefined): ButtonType {
|
|
302
|
+
// Emphasized is a boolean so if it's equal to true we show the button as Ghost, otherwise as Transparent
|
|
303
|
+
const buttonTypeCondition = equal(getExpressionFromAnnotation(emphasized), true);
|
|
304
|
+
return compileExpression(ifElse(buttonTypeCondition, ButtonType.Ghost, ButtonType.Transparent)) as ButtonType;
|
|
311
305
|
}
|
|
312
306
|
|
|
313
307
|
/**
|
|
314
308
|
* Create a subsection based on FacetTypes.
|
|
309
|
+
*
|
|
315
310
|
* @param facetDefinition
|
|
316
311
|
* @param facetsToCreate
|
|
317
312
|
* @param converterContext
|
|
318
313
|
* @param level
|
|
319
314
|
* @param hasSingleContent
|
|
320
315
|
* @param isHeaderSection
|
|
321
|
-
* @returns
|
|
316
|
+
* @returns A subsection definition
|
|
322
317
|
*/
|
|
323
318
|
export function createSubSection(
|
|
324
319
|
facetDefinition: FacetTypes,
|
|
@@ -328,14 +323,14 @@ export function createSubSection(
|
|
|
328
323
|
hasSingleContent: boolean,
|
|
329
324
|
isHeaderSection?: boolean
|
|
330
325
|
): ObjectPageSubSection {
|
|
331
|
-
const subSectionID =
|
|
326
|
+
const subSectionID = getSubSectionID({ Facet: facetDefinition });
|
|
332
327
|
const oHiddenAnnotation: any = facetDefinition.annotations?.UI?.Hidden;
|
|
333
|
-
const isVisible =
|
|
328
|
+
const isVisible = compileExpression(not(equal(true, getExpressionFromAnnotation(oHiddenAnnotation))));
|
|
334
329
|
const isDynamicExpression =
|
|
335
330
|
isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0 && oHiddenAnnotation?.type !== "Path";
|
|
336
331
|
const isVisibleDynamicExpression =
|
|
337
332
|
isVisible && isDynamicExpression ? isVisible.substring(isVisible.indexOf("{=") + 2, isVisible.lastIndexOf("}")) : false;
|
|
338
|
-
const title =
|
|
333
|
+
const title = compileExpression(getExpressionFromAnnotation(facetDefinition.Label));
|
|
339
334
|
const subSection: BaseSubSection = {
|
|
340
335
|
id: subSectionID,
|
|
341
336
|
key: getSubSectionKey(facetDefinition, subSectionID),
|
|
@@ -388,13 +383,14 @@ export function createSubSection(
|
|
|
388
383
|
};
|
|
389
384
|
return mixedSubSection;
|
|
390
385
|
} else {
|
|
391
|
-
const
|
|
386
|
+
const facetActions = getFacetActions(facetDefinition, converterContext),
|
|
392
387
|
formCollectionSubSection: FormSubSection = {
|
|
393
388
|
...subSection,
|
|
394
389
|
type: SubSectionType.Form,
|
|
395
|
-
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
|
|
390
|
+
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, facetActions.actions),
|
|
396
391
|
level: level,
|
|
397
|
-
actions: actions.filter((action) => action.facetName === undefined)
|
|
392
|
+
actions: facetActions.actions.filter((action) => action.facetName === undefined),
|
|
393
|
+
commandActions: facetActions.commandActions
|
|
398
394
|
};
|
|
399
395
|
return formCollectionSubSection;
|
|
400
396
|
}
|
|
@@ -436,13 +432,14 @@ export function createSubSection(
|
|
|
436
432
|
case UIAnnotationTerms.StatusInfo:
|
|
437
433
|
case CommunicationAnnotationTerms.Contact:
|
|
438
434
|
// All those element belong to a form facet
|
|
439
|
-
const
|
|
435
|
+
const facetActions = getFacetActions(facetDefinition, converterContext),
|
|
440
436
|
formElementSubSection: FormSubSection = {
|
|
441
437
|
...subSection,
|
|
442
438
|
type: SubSectionType.Form,
|
|
443
439
|
level: level,
|
|
444
|
-
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
|
|
445
|
-
actions: actions.filter((action) => action.facetName === undefined)
|
|
440
|
+
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, facetActions.actions),
|
|
441
|
+
actions: facetActions.actions.filter((action) => action.facetName === undefined),
|
|
442
|
+
commandActions: facetActions.commandActions
|
|
446
443
|
};
|
|
447
444
|
return formElementSubSection;
|
|
448
445
|
|
|
@@ -465,7 +462,11 @@ export function createSubSection(
|
|
|
465
462
|
};
|
|
466
463
|
return unsupportedSubSection;
|
|
467
464
|
}
|
|
468
|
-
function isSubsectionTitleShown(
|
|
465
|
+
function isSubsectionTitleShown(
|
|
466
|
+
hasSingleContent: boolean,
|
|
467
|
+
subSectionTitle: CompiledBindingToolkitExpression,
|
|
468
|
+
controlTitle: string
|
|
469
|
+
): boolean {
|
|
469
470
|
if (hasSingleContent && controlTitle === subSectionTitle) {
|
|
470
471
|
return false;
|
|
471
472
|
}
|
|
@@ -476,7 +477,7 @@ function createFormActionReducer(
|
|
|
476
477
|
facetDefinition: ReferenceFacetTypes,
|
|
477
478
|
converterContext: ConverterContext
|
|
478
479
|
): ConverterAction[] {
|
|
479
|
-
const referenceTarget
|
|
480
|
+
const referenceTarget = facetDefinition.Target.$target;
|
|
480
481
|
const targetValue = facetDefinition.Target.value;
|
|
481
482
|
let manifestActions: Record<string, CustomAction> = {};
|
|
482
483
|
let dataFieldCollection: DataFieldAbstractTypes[] = [];
|
|
@@ -500,20 +501,21 @@ function createFormActionReducer(
|
|
|
500
501
|
undefined,
|
|
501
502
|
undefined,
|
|
502
503
|
undefined,
|
|
503
|
-
facetDefinition.fullyQualifiedName
|
|
504
|
-
);
|
|
504
|
+
facetDefinition.fullyQualifiedName
|
|
505
|
+
).actions;
|
|
505
506
|
break;
|
|
506
507
|
case UIAnnotationTerms.Identification:
|
|
507
508
|
case UIAnnotationTerms.StatusInfo:
|
|
508
509
|
if (referenceTarget.qualifier) {
|
|
509
|
-
dataFieldCollection = referenceTarget
|
|
510
|
+
dataFieldCollection = referenceTarget;
|
|
510
511
|
}
|
|
511
512
|
break;
|
|
513
|
+
default:
|
|
514
|
+
break;
|
|
512
515
|
}
|
|
513
516
|
}
|
|
514
517
|
|
|
515
|
-
actions = dataFieldCollection.reduce((
|
|
516
|
-
const UIAnnotation: any = dataField?.annotations?.UI;
|
|
518
|
+
actions = dataFieldCollection.reduce((actionReducer, dataField: DataFieldAbstractTypes) => {
|
|
517
519
|
switch (dataField.$Type) {
|
|
518
520
|
case UIAnnotationTypes.DataFieldForIntentBasedNavigation:
|
|
519
521
|
if (dataField.RequiresContext?.valueOf() === true) {
|
|
@@ -535,57 +537,57 @@ function createFormActionReducer(
|
|
|
535
537
|
if (dataField.Mapping) {
|
|
536
538
|
mNavigationParameters.semanticObjectMapping = getSemanticObjectMapping(dataField.Mapping);
|
|
537
539
|
}
|
|
538
|
-
|
|
540
|
+
actionReducer.push({
|
|
539
541
|
type: ActionType.DataFieldForIntentBasedNavigation,
|
|
540
|
-
id:
|
|
542
|
+
id: getFormID({ Facet: facetDefinition }, dataField),
|
|
541
543
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
542
544
|
text: dataField.Label?.toString(),
|
|
543
545
|
annotationPath: "",
|
|
544
546
|
enabled:
|
|
545
547
|
dataField.NavigationAvailable !== undefined
|
|
546
|
-
?
|
|
547
|
-
: true,
|
|
548
|
-
visible:
|
|
549
|
-
buttonType: getButtonType(
|
|
550
|
-
press:
|
|
548
|
+
? compileExpression(equal(getExpressionFromAnnotation(dataField.NavigationAvailable?.valueOf()), true))
|
|
549
|
+
: "true",
|
|
550
|
+
visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden?.valueOf()), true))),
|
|
551
|
+
buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
|
|
552
|
+
press: compileExpression(
|
|
551
553
|
fn("._intentBasedNavigation.navigate", [
|
|
552
|
-
|
|
553
|
-
|
|
554
|
+
getExpressionFromAnnotation(dataField.SemanticObject),
|
|
555
|
+
getExpressionFromAnnotation(dataField.Action),
|
|
554
556
|
mNavigationParameters
|
|
555
557
|
])
|
|
556
558
|
),
|
|
557
|
-
customData:
|
|
558
|
-
semanticObject:
|
|
559
|
-
action:
|
|
559
|
+
customData: compileExpression({
|
|
560
|
+
semanticObject: getExpressionFromAnnotation(dataField.SemanticObject),
|
|
561
|
+
action: getExpressionFromAnnotation(dataField.Action)
|
|
560
562
|
})
|
|
561
563
|
});
|
|
562
564
|
break;
|
|
563
565
|
case UIAnnotationTypes.DataFieldForAction:
|
|
564
566
|
const formManifestActionsConfiguration: any = converterContext.getManifestControlConfiguration(referenceTarget).actions;
|
|
565
567
|
const key: string = KeyHelper.generateKeyFromDataField(dataField);
|
|
566
|
-
|
|
568
|
+
actionReducer.push({
|
|
567
569
|
type: ActionType.DataFieldForAction,
|
|
568
|
-
id:
|
|
570
|
+
id: getFormID({ Facet: facetDefinition }, dataField),
|
|
569
571
|
key: key,
|
|
570
572
|
text: dataField.Label?.toString(),
|
|
571
573
|
annotationPath: "",
|
|
572
574
|
enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
|
|
573
|
-
binding: navigationPropertyPath ?
|
|
574
|
-
visible:
|
|
575
|
+
binding: navigationPropertyPath ? `{ 'path' : '${navigationPropertyPath}'}` : undefined,
|
|
576
|
+
visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden?.valueOf()), true))),
|
|
575
577
|
requiresDialog: isDialog(dataField.ActionTarget),
|
|
576
|
-
buttonType: getButtonType(
|
|
577
|
-
press:
|
|
578
|
+
buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
|
|
579
|
+
press: compileExpression(
|
|
578
580
|
fn(
|
|
579
581
|
"invokeAction",
|
|
580
582
|
[
|
|
581
583
|
dataField.Action,
|
|
582
584
|
{
|
|
583
|
-
contexts: fn("getBindingContext", [],
|
|
585
|
+
contexts: fn("getBindingContext", [], pathInModel("", "$source")),
|
|
584
586
|
invocationGrouping: (dataField.InvocationGrouping === "UI.OperationGroupingType/ChangeSet"
|
|
585
587
|
? "ChangeSet"
|
|
586
588
|
: "Isolated") as OperationGroupingType,
|
|
587
|
-
label:
|
|
588
|
-
model: fn("getModel", [],
|
|
589
|
+
label: getExpressionFromAnnotation(dataField.Label),
|
|
590
|
+
model: fn("getModel", [], pathInModel("/", "$source")),
|
|
589
591
|
isNavigable: isActionNavigable(
|
|
590
592
|
formManifestActionsConfiguration && formManifestActionsConfiguration[key]
|
|
591
593
|
)
|
|
@@ -594,11 +596,13 @@ function createFormActionReducer(
|
|
|
594
596
|
ref(".editFlow")
|
|
595
597
|
)
|
|
596
598
|
),
|
|
597
|
-
facetName: dataField.Inline ?
|
|
599
|
+
facetName: dataField.Inline ? facetDefinition.fullyQualifiedName : undefined
|
|
598
600
|
});
|
|
599
601
|
break;
|
|
602
|
+
default:
|
|
603
|
+
break;
|
|
600
604
|
}
|
|
601
|
-
return
|
|
605
|
+
return actionReducer;
|
|
602
606
|
}, actions);
|
|
603
607
|
return insertCustomElements(actions, manifestActions);
|
|
604
608
|
}
|
|
@@ -636,7 +640,7 @@ export function createCustomSubSection(
|
|
|
636
640
|
const sideContent: SideContentDef | undefined = manifestSubSection.sideContent
|
|
637
641
|
? {
|
|
638
642
|
template: manifestSubSection.sideContent.template,
|
|
639
|
-
id:
|
|
643
|
+
id: getSideContentID(subSectionKey),
|
|
640
644
|
visible: false,
|
|
641
645
|
equalSplit: manifestSubSection.sideContent.equalSplit
|
|
642
646
|
}
|
|
@@ -649,10 +653,11 @@ export function createCustomSubSection(
|
|
|
649
653
|
}
|
|
650
654
|
const isVisible = manifestSubSection.visible !== undefined ? manifestSubSection.visible : true;
|
|
651
655
|
const isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0;
|
|
656
|
+
const manifestActions = getActionsFromManifest(manifestSubSection.actions, converterContext);
|
|
652
657
|
const subSectionDefinition = {
|
|
653
658
|
type: SubSectionType.Unknown,
|
|
654
|
-
id: manifestSubSection.id ||
|
|
655
|
-
actions:
|
|
659
|
+
id: manifestSubSection.id || getCustomSubSectionID(subSectionKey),
|
|
660
|
+
actions: manifestActions.actions,
|
|
656
661
|
key: subSectionKey,
|
|
657
662
|
title: manifestSubSection.title,
|
|
658
663
|
level: 1,
|
|
@@ -676,8 +681,7 @@ export function createCustomSubSection(
|
|
|
676
681
|
* @param currentFacet
|
|
677
682
|
* @param facetsToCreateInSection
|
|
678
683
|
* @param converterContext
|
|
679
|
-
*
|
|
680
|
-
* @returns {boolean} `true` for compliant, false otherwise
|
|
684
|
+
* @returns `true` for compliant, false otherwise
|
|
681
685
|
*/
|
|
682
686
|
function getCondensedTableLayoutCompliance(
|
|
683
687
|
currentFacet: FacetTypes,
|
|
@@ -702,7 +706,7 @@ function hasNoOtherVisibleTableInTargets(currentFacet: FacetTypes, facetsToCreat
|
|
|
702
706
|
return facetsToCreateInSection.every(function (subFacet) {
|
|
703
707
|
if (subFacet !== currentFacet) {
|
|
704
708
|
if (subFacet.$Type === UIAnnotationTypes.ReferenceFacet) {
|
|
705
|
-
const refFacet = subFacet
|
|
709
|
+
const refFacet = subFacet;
|
|
706
710
|
if (
|
|
707
711
|
refFacet.Target?.$target?.term === UIAnnotationTerms.LineItem ||
|
|
708
712
|
refFacet.Target?.$target?.term === UIAnnotationTerms.PresentationVariant ||
|
|
@@ -156,9 +156,7 @@ sap.ui.define([], function () {
|
|
|
156
156
|
};
|
|
157
157
|
|
|
158
158
|
_proto.getTransAggregations = function getTransAggregations() {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return aTransAggregationAnnotations;
|
|
159
|
+
return this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [this._converterContext.getEntityContainer(), this._converterContext.getEntityType()]);
|
|
162
160
|
}
|
|
163
161
|
/**
|
|
164
162
|
* Returns the list of custom aggregate definitions for the entity type.
|
|
@@ -194,4 +192,4 @@ sap.ui.define([], function () {
|
|
|
194
192
|
_exports.AggregationHelper = AggregationHelper;
|
|
195
193
|
return _exports;
|
|
196
194
|
}, false);
|
|
197
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFnZ3JlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZW50aXR5VHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJfZW50aXR5VHlwZSIsIl9jb252ZXJ0ZXJDb250ZXh0IiwiX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQiLCJfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0IiwiX3R5cGUiLCJvVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJfYkFwcGx5U3VwcG9ydGVkIiwiQXBwbHlTdXBwb3J0ZWQiLCJfYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24iLCJnZXRFbnRpdHlDb250YWluZXIiLCJiSXNQYXJhbWV0ZXJpemVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVNldCIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0VudGl0eVR5cGVPYmplY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwib0VudGl0eVNldE9iamVjdCIsImdldEVudGl0eVNldCIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImlzUHJvcGVydHlHcm91cGFibGUiLCJwcm9wZXJ0eSIsInVuZGVmaW5lZCIsImxlbmd0aCIsImZpbmRJbmRleCIsInBhdGgiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEFubm90YXRpb25zQnlUZXJtIiwic29tZSIsImFubm90YXRpb24iLCJuYW1lIiwicXVhbGlmaWVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJnZXRUcmFuc0FnZ3JlZ2F0aW9ucyIsImFUcmFuc0FnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJUcmFuc2Zvcm1hdGlvbnMiLCJBcHBseVN1cHBvcnRlZERlZmF1bHRzIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7QUFVQTtBQUNBO0FBQ0E7TUFDYUEsaUI7QUFjWjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQywrQkFBWUMsVUFBWixFQUFvQ0MsZ0JBQXBDLEVBQXdFO0FBQUE7O0FBQ3ZFLFdBQUtDLFdBQUwsR0FBbUJGLFVBQW5CO0FBQ0EsV0FBS0csaUJBQUwsR0FBeUJGLGdCQUF6QjtBQUVBLFdBQUtHLDZCQUFMLEdBQXFDLEtBQUtDLHFDQUFMLEVBQXJDOztBQUNBLFVBQUksK0JBQUtELDZCQUFMLGdGQUFvQ0UsS0FBcEMsTUFBOEMsb0JBQWxELEVBQXdFO0FBQUE7O0FBQ3ZFLGFBQUtDLDZCQUFMLDZCQUFxQyxLQUFLSCw2QkFBMUMscUZBQXFDLHVCQUFvQ0ksV0FBekUsMkRBQXFDLHVCQUNsQ0MsV0FESDtBQUVBLE9BSEQsTUFHTyxJQUFJLGdDQUFLTCw2QkFBTCxrRkFBb0NFLEtBQXBDLE1BQThDLFlBQWxELEVBQWdFO0FBQUE7O0FBQ3RFLGFBQUtDLDZCQUFMLDZCQUFxQyxLQUFLSCw2QkFBMUMscUZBQXFDLHVCQUFvQ0ksV0FBekUsMkRBQXFDLHVCQUNsQ0MsV0FESDtBQUVBLE9BSE0sTUFHQSxJQUFJLGdDQUFLTCw2QkFBTCxrRkFBb0NFLEtBQXBDLE1BQThDLFdBQWxELEVBQStEO0FBQUE7O0FBQ3JFLGFBQUtD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Q0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNRQyw2QixHQUFQLHlDQUF1QztBQUN0QztBQUNBLFVBQU1WLDJCQUE4RCxHQUFHLEtBQUt2QyxpQkFBTCxDQUF1QndDLG9CQUF2QixDQUN0RSxhQURzRSw4Q0FHdEUsQ0FBQyxLQUFLdkMsNkJBQU4sQ0FIc0UsQ0FBdkU7O0FBTUEsYUFBT3NDLDJCQUFQO0FBQ0E7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNRVyx5QixHQUFQLHFDQUF5RDtBQUFBOztBQUN4RCxhQUNDLDJCQUFDLEtBQUs5Qyw2QkFBTixxRkFBQyx1QkFBb0NJLGNBQXJDLDJEQUFDLHVCQUFvRDJDLGVBQXJELCtCQUNDLEtBQUt0QywrQkFETixvRkFDQyxzQkFBc0N1QyxzQkFEdkMsMkRBQ0MsdUJBQThERCxlQUQvRCxDQUREO0FBSUEsSyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5U2V0LCBFbnRpdHlUeXBlLCBOYXZpZ2F0aW9uUHJvcGVydHksIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCB7IEFubm90YXRpb25UZXJtIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgeyBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9FZG1cIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRlcm1zLCBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7XG5cdENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvbixcblx0RW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb24sXG5cdEVudGl0eVNldEFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQWdncmVnYXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvZ2VuZXJhdGVkL0FnZ3JlZ2F0aW9uX0VkbVwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuLyoqXG4gKiBoZWxwZXIgY2xhc3MgZm9yIEFnZ3JlZ2F0aW9uIGFubm90YXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgQWdncmVnYXRpb25IZWxwZXIge1xuXHRfZW50aXR5VHlwZTogRW50aXR5VHlwZTtcblx0X2NvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQ7XG5cdF9iQXBwbHlTdXBwb3J0ZWQ6IGJvb2xlYW47XG5cdF9hR3JvdXBhYmxlUHJvcGVydGllcz86IFByb3BlcnR5UGF0aFtdO1xuXHRfYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM/O1xuXHRfb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldDogRW50aXR5VHlwZSB8IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eTtcblx0b1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/OlxuXHRcdHwgQ29sbGVjdGlvbkFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG5cdFx0fCBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQWdncmVnYXRpb25cblx0XHR8IEVudGl0eVNldEFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXG5cdG9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24/OiBFbnRpdHlDb250YWluZXJBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIGhlbHBlciBmb3IgYSBzcGVjaWZpYyBlbnRpdHkgdHlwZSBhbmQgYSBjb252ZXJ0ZXIgY29udGV4dC5cblx0ICpcblx0ICogQHBhcmFtIGVudGl0eVR5cGUgVGhlIEVudGl0eVR5cGVcblx0ICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIENvbnZlcnRlckNvbnRleHRcblx0ICovXG5cdGNvbnN0cnVjdG9yKGVudGl0eVR5cGU6IEVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQpIHtcblx0XHR0aGlzLl9lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcblx0XHR0aGlzLl9jb252ZXJ0ZXJDb250ZXh0ID0gY29udmVydGVyQ29udGV4dDtcblxuXHRcdHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQgPSB0aGlzLl9kZXRlcm1pbmVBZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQoKTtcblx0XHRpZiAodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uX3R5cGUgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/LkFnZ3JlZ2F0aW9uIGFzIENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIkVudGl0eVR5cGVcIikge1xuXHRcdFx0dGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/LmFubm90YXRpb25zXG5cdFx0XHRcdD8uQWdncmVnYXRpb24gYXMgRW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uX3R5cGUgPT09IFwiRW50aXR5U2V0XCIpIHtcblx0XHRcdHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/LkFnZ3JlZ2F0aW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXHRcdH1cblx0XHR0aGlzLl9iQXBwbHlTdXBwb3J0ZWQgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZCA/IHRydWUgOiBmYWxzZTtcblxuXHRcdGlmICh0aGlzLl9iQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQ/Lkdyb3VwYWJsZVByb3BlcnRpZXMgYXMgUHJvcGVydHlQYXRoW107XG5cdFx0XHR0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcyA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5BZ2dyZWdhdGFibGVQcm9wZXJ0aWVzO1xuXG5cdFx0XHR0aGlzLm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24gPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpLmFubm90YXRpb25zXG5cdFx0XHRcdC5BZ2dyZWdhdGlvbiBhcyBFbnRpdHlDb250YWluZXJBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIERldGVybWluZXMgdGhlIG1vc3QgYXBwcm9wcmlhdGUgdGFyZ2V0IGZvciB0aGUgYWdncmVnYXRpb24gYW5ub3RhdGlvbnMuXG5cdCAqXG5cdCAqIEByZXR1cm5zICBFbnRpdHlUeXBlLCBFbnRpdHlTZXQgb3IgTmF2aWdhdGlvblByb3BlcnR5IHdoZXJlIGFnZ3JlZ2F0aW9uIGFubm90YXRpb25zIHNob3VsZCBiZSByZWFkIGZyb20uXG5cdCAqL1xuXHRwcml2YXRlIF9kZXRlcm1pbmVBZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQoKTogRW50aXR5VHlwZSB8IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSB7XG5cdFx0Y29uc3QgYklzUGFyYW1ldGVyaXplZCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpPy50YXJnZXRFbnRpdHlTZXQ/LmVudGl0eVR5cGU/LmFubm90YXRpb25zPy5Db21tb25cblx0XHRcdD8uUmVzdWx0Q29udGV4dFxuXHRcdFx0PyB0cnVlXG5cdFx0XHQ6IGZhbHNlO1xuXHRcdGxldCBvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlO1xuXG5cdFx0Ly8gZmluZCBBcHBseVN1cHBvcnRlZFxuXHRcdGlmIChiSXNQYXJhbWV0ZXJpemVkKSB7XG5cdFx0XHQvLyBpZiB0aGlzIGlzIGEgcGFyYW1ldGVyaXplZCB2aWV3IHRoZW4gYXBwbHlzdXBwb3J0ZWQgY2FuIGJlIGZvdW5kIGF0IGVpdGhlciB0aGUgbmF2UHJvcCBwb2ludGluZyB0byB0aGUgcmVzdWx0IHNldCBvciBlbnRpdHlUeXBlLlxuXHRcdFx0Ly8gSWYgYXBwbHlTdXBwb3J0ZWQgaXMgcHJlc2VudCBhdCBib3RoIHRoZSBuYXZQcm9wIGFuZCB0aGUgZW50aXR5VHlwZSB0aGVuIG5hdlByb3AgaXMgbW9yZSBzcGVjaWZpYyBzbyB0YWtlIGFubm90YXRpb25zIGZyb20gdGhlcmVcblx0XHRcdC8vIHRhcmdldE9iamVjdCBpbiB0aGUgY29udmVydGVyIGNvbnRleHQgZm9yIGEgcGFyYW1ldGVyaXplZCB2aWV3IGlzIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnR5IHBvaW50aW5nIHRvIHRoIHJlc3VsdCBzZXRcblx0XHRcdGNvbnN0IG9EYXRhTW9kZWxPYmplY3RQYXRoID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk7XG5cdFx0XHRjb25zdCBvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldE9iamVjdDtcblx0XHRcdGNvbnN0IG9FbnRpdHlUeXBlT2JqZWN0ID0gb0RhdGFNb2RlbE9iamVjdFBhdGg/LnRhcmdldEVudGl0eVR5cGU7XG5cdFx0XHRpZiAob05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdD8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5BcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlID0gb05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdDtcblx0XHRcdH0gZWxzZSBpZiAob0VudGl0eVR5cGVPYmplY3Q/LmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IG9FbnRpdHlUeXBlT2JqZWN0O1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBGb3IgdGhlIHRpbWUgYmVpbmcsIHdlIGlnbm9yZSBhbm5vdGF0aW9ucyBhdCB0aGUgY29udGFpbmVyIGxldmVsLCB1bnRpbCB0aGUgdm9jYWJ1bGFyeSBpcyBzdGFiaWxpemVkXG5cdFx0XHRjb25zdCBvRW50aXR5U2V0T2JqZWN0ID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXQoKTtcblx0XHRcdGlmIChvRW50aXR5U2V0T2JqZWN0Py5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvRW50aXR5U2V0T2JqZWN0O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGVudGl0eSBzdXBwb3J0cyBhbmFseXRpY2FsIHF1ZXJpZXMuXG5cdCAqXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBhbmFseXRpY2FsIHF1ZXJpZXMgYXJlIHN1cHBvcnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQgKi9cblx0cHVibGljIGlzQW5hbHl0aWNzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9iQXBwbHlTdXBwb3J0ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgaXMgZ3JvdXBhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcywgdHJ1ZSBvciBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHB1YmxpYyBpc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSBpZiAoIXRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzIHx8IHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gTm8gZ3JvdXBhYmxlUHJvcGVydGllcyAtLT4gYWxsIHByb3BlcnRpZXMgYXJlIGdyb3VwYWJsZVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcy5maW5kSW5kZXgoKHBhdGgpID0+IHBhdGguJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUgPT09IHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSkgPj0gMDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcywgdHJ1ZSBvciBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHB1YmxpYyBpc1Byb3BlcnR5QWdncmVnYXRhYmxlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBHZXQgdGhlIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdFx0XHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM6IEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT5bXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcdFwiQWdncmVnYXRpb25cIixcblx0XHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0XHRbdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldF1cblx0XHRcdCk7XG5cblx0XHRcdC8vIENoZWNrIGlmIGEgY3VzdG9tIGFnZ3JlZ2F0ZSBoYXMgYSBxdWFsaWZpZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvcGVydHkgbmFtZVxuXHRcdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5zb21lKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0eS5uYW1lID09PSBhbm5vdGF0aW9uLnF1YWxpZmllcjtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRHcm91cGFibGVQcm9wZXJ0aWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRUcmFuc0FnZ3JlZ2F0aW9ucygpIHtcblx0XHRjb25zdCBhVHJhbnNBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcblx0XHRcdFwiQW5hbHl0aWNzXCIsXG5cdFx0XHRcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydGllc1wiLFxuXHRcdFx0W3RoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCksIHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpXVxuXHRcdCk7XG5cdFx0cmV0dXJuIGFUcmFuc0FnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM7XG5cdH1cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGxpc3Qgb2YgY3VzdG9tIGFnZ3JlZ2F0ZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVudGl0eSB0eXBlLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBIG1hcCAocHJvcGVydHlOYW1lIC0tPiBhcnJheSBvZiBjb250ZXh0LWRlZmluaW5nIHByb3BlcnR5IG5hbWVzKSBmb3IgZWFjaCBjdXN0b20gYWdncmVnYXRlIGNvcnJlc3BvbmRpbmcgdG8gYSBwcm9wZXJ0eS4gVGhlIGFycmF5IG9mXG5cdCAqIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkgbmFtZXMgaXMgZW1wdHkgaWYgdGhlIGN1c3RvbSBhZ2dyZWdhdGUgZG9lc24ndCBoYXZlIGFueSBjb250ZXh0LWRlZmluaW5nIHByb3BlcnR5LlxuXHQgKi9cblx0cHVibGljIGdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCkge1xuXHRcdC8vIEdldCB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZXNcblx0XHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM6IEFubm90YXRpb25UZXJtPEN1c3RvbUFnZ3JlZ2F0ZT5bXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcIkFnZ3JlZ2F0aW9uXCIsXG5cdFx0XHRBZ2dyZWdhdGlvbkFubm90YXRpb25UZXJtcy5DdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHRbdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldF1cblx0XHQpO1xuXG5cdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGFsbG93ZWQgdHJhbnNmb3JtYXRpb25zIGluIHRoZSAkYXBwbHkuXG5cdCAqIEZpcnN0IGxvb2sgYXQgdGhlIGN1cnJlbnQgRW50aXR5U2V0LCB0aGVuIGxvb2sgYXQgdGhlIGRlZmF1bHQgdmFsdWVzIHByb3ZpZGVkIGF0IHRoZSBjb250YWluZXIgbGV2ZWwuXG5cdCAqXG5cdCAqIEByZXR1cm5zIFRoZSBsaXN0IG9mIHRyYW5zZm9ybWF0aW9ucywgb3IgdW5kZWZpbmVkIGlmIG5vIGxpc3QgaXMgZm91bmRcblx0ICovXG5cdHB1YmxpYyBnZXRBbGxvd2VkVHJhbnNmb3JtYXRpb25zKCk6IFN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0KHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5UcmFuc2Zvcm1hdGlvbnMgYXMgU3RyaW5nW10pIHx8XG5cdFx0XHQodGhpcy5vQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uPy5BcHBseVN1cHBvcnRlZERlZmF1bHRzPy5UcmFuc2Zvcm1hdGlvbnMgYXMgU3RyaW5nW10pXG5cdFx0KTtcblx0fVxufVxuIl19
|
|
195
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBZ2dyZWdhdGlvbkhlbHBlciIsImVudGl0eVR5cGUiLCJjb252ZXJ0ZXJDb250ZXh0IiwiX2VudGl0eVR5cGUiLCJfY29udmVydGVyQ29udGV4dCIsIl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0IiwiX2RldGVybWluZUFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCIsIl90eXBlIiwib1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMiLCJhbm5vdGF0aW9ucyIsIkFnZ3JlZ2F0aW9uIiwiX2JBcHBseVN1cHBvcnRlZCIsIkFwcGx5U3VwcG9ydGVkIiwiX2FHcm91cGFibGVQcm9wZXJ0aWVzIiwiR3JvdXBhYmxlUHJvcGVydGllcyIsIl9hQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uIiwiZ2V0RW50aXR5Q29udGFpbmVyIiwiYklzUGFyYW1ldGVyaXplZCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJ0YXJnZXRFbnRpdHlTZXQiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0Iiwib0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSIsIm9EYXRhTW9kZWxPYmplY3RQYXRoIiwib05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdCIsInRhcmdldE9iamVjdCIsIm9FbnRpdHlUeXBlT2JqZWN0IiwidGFyZ2V0RW50aXR5VHlwZSIsIm9FbnRpdHlTZXRPYmplY3QiLCJnZXRFbnRpdHlTZXQiLCJnZXRFbnRpdHlUeXBlIiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwicHJvcGVydHkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJmaW5kSW5kZXgiLCJwYXRoIiwiJHRhcmdldCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHlBZ2dyZWdhdGFibGUiLCJhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInNvbWUiLCJhbm5vdGF0aW9uIiwibmFtZSIsInF1YWxpZmllciIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImdldEFsbG93ZWRUcmFuc2Zvcm1hdGlvbnMiLCJUcmFuc2Zvcm1hdGlvbnMiLCJBcHBseVN1cHBvcnRlZERlZmF1bHRzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBZ2dyZWdhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSwgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRlcm1zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHR5cGUge1xuXHRDb2xsZWN0aW9uQW5ub3RhdGlvbnNfQWdncmVnYXRpb24sXG5cdEVudGl0eUNvbnRhaW5lckFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbixcblx0RW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25fRWRtXCI7XG5pbXBvcnQgdHlwZSBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9Db252ZXJ0ZXJDb250ZXh0XCI7XG5cbi8qKlxuICogaGVscGVyIGNsYXNzIGZvciBBZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uSGVscGVyIHtcblx0X2VudGl0eVR5cGU6IEVudGl0eVR5cGU7XG5cdF9jb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0O1xuXHRfYkFwcGx5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRfYUdyb3VwYWJsZVByb3BlcnRpZXM/OiBQcm9wZXJ0eVBhdGhbXTtcblx0X2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzPztcblx0X29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ6IEVudGl0eVR5cGUgfCBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdG9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPzpcblx0XHR8IENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxuXHRcdHwgRW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG5cdFx0fCBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblxuXHRvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uPzogRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgYW5kIGEgY29udmVydGVyIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBFbnRpdHlUeXBlXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBDb252ZXJ0ZXJDb250ZXh0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0dGhpcy5fZW50aXR5VHlwZSA9IGVudGl0eVR5cGU7XG5cdFx0dGhpcy5fY29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQ7XG5cblx0XHR0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0ID0gdGhpcy5fZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk7XG5cdFx0aWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBDb2xsZWN0aW9uQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5fdHlwZSA9PT0gXCJFbnRpdHlUeXBlXCIpIHtcblx0XHRcdHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/LkFnZ3JlZ2F0aW9uIGFzIEVudGl0eVR5cGVBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIkVudGl0eVNldFwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9XG5cdFx0dGhpcy5fYkFwcGx5U3VwcG9ydGVkID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRpZiAodGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHR0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcyA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5Hcm91cGFibGVQcm9wZXJ0aWVzIGFzIFByb3BlcnR5UGF0aFtdO1xuXHRcdFx0dGhpcy5fYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uQWdncmVnYXRhYmxlUHJvcGVydGllcztcblxuXHRcdFx0dGhpcy5vQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9uc1xuXHRcdFx0XHQuQWdncmVnYXRpb24gYXMgRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHRhcmdldCBmb3IgdGhlIGFnZ3JlZ2F0aW9uIGFubm90YXRpb25zLlxuXHQgKlxuXHQgKiBAcmV0dXJucyAgRW50aXR5VHlwZSwgRW50aXR5U2V0IG9yIE5hdmlnYXRpb25Qcm9wZXJ0eSB3aGVyZSBhZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucyBzaG91bGQgYmUgcmVhZCBmcm9tLlxuXHQgKi9cblx0cHJpdmF0ZSBfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk6IEVudGl0eVR5cGUgfCBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRcdGNvbnN0IGJJc1BhcmFtZXRlcml6ZWQgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKT8udGFyZ2V0RW50aXR5U2V0Py5lbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uXG5cdFx0XHQ/LlJlc3VsdENvbnRleHRcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0XHRsZXQgb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZTtcblxuXHRcdC8vIGZpbmQgQXBwbHlTdXBwb3J0ZWRcblx0XHRpZiAoYklzUGFyYW1ldGVyaXplZCkge1xuXHRcdFx0Ly8gaWYgdGhpcyBpcyBhIHBhcmFtZXRlcml6ZWQgdmlldyB0aGVuIGFwcGx5c3VwcG9ydGVkIGNhbiBiZSBmb3VuZCBhdCBlaXRoZXIgdGhlIG5hdlByb3AgcG9pbnRpbmcgdG8gdGhlIHJlc3VsdCBzZXQgb3IgZW50aXR5VHlwZS5cblx0XHRcdC8vIElmIGFwcGx5U3VwcG9ydGVkIGlzIHByZXNlbnQgYXQgYm90aCB0aGUgbmF2UHJvcCBhbmQgdGhlIGVudGl0eVR5cGUgdGhlbiBuYXZQcm9wIGlzIG1vcmUgc3BlY2lmaWMgc28gdGFrZSBhbm5vdGF0aW9ucyBmcm9tIHRoZXJlXG5cdFx0XHQvLyB0YXJnZXRPYmplY3QgaW4gdGhlIGNvbnZlcnRlciBjb250ZXh0IGZvciBhIHBhcmFtZXRlcml6ZWQgdmlldyBpcyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBwb2ludGluZyB0byB0aCByZXN1bHQgc2V0XG5cdFx0XHRjb25zdCBvRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvRW50aXR5VHlwZU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdFx0aWYgKG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q/LmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q7XG5cdFx0XHR9IGVsc2UgaWYgKG9FbnRpdHlUeXBlT2JqZWN0Py5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvRW50aXR5VHlwZU9iamVjdDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCB3ZSBpZ25vcmUgYW5ub3RhdGlvbnMgYXQgdGhlIGNvbnRhaW5lciBsZXZlbCwgdW50aWwgdGhlIHZvY2FidWxhcnkgaXMgc3RhYmlsaXplZFxuXHRcdFx0Y29uc3Qgb0VudGl0eVNldE9iamVjdCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0XHRpZiAob0VudGl0eVNldE9iamVjdD8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5BcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlID0gb0VudGl0eVNldE9iamVjdDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2U7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBlbnRpdHkgc3VwcG9ydHMgYW5hbHl0aWNhbCBxdWVyaWVzLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYW5hbHl0aWNhbCBxdWVyaWVzIGFyZSBzdXBwb3J0ZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdHB1YmxpYyBpc0FuYWx5dGljc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5fYkFwcGx5U3VwcG9ydGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHByb3BlcnR5IGlzIGdyb3VwYWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMsIHRydWUgb3IgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwdWJsaWMgaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2UgaWYgKCF0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcyB8fCB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGggPT09IDApIHtcblx0XHRcdC8vIE5vIGdyb3VwYWJsZVByb3BlcnRpZXMgLS0+IGFsbCBwcm9wZXJ0aWVzIGFyZSBncm91cGFibGVcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMuZmluZEluZGV4KChwYXRoKSA9PiBwYXRoLiR0YXJnZXQuZnVsbHlRdWFsaWZpZWROYW1lID09PSBwcm9wZXJ0eS5mdWxseVF1YWxpZmllZE5hbWUpID49IDA7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBhIHByb3BlcnR5IGlzIGFnZ3JlZ2F0YWJsZS5cblx0ICpcblx0ICogQHBhcmFtIHByb3BlcnR5IFRoZSBwcm9wZXJ0eSB0byBjaGVja1xuXHQgKiBAcmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZW50aXR5IGRvZXNuJ3Qgc3VwcG9ydCBhbmFseXRpY2FsIHF1ZXJpZXMsIHRydWUgb3IgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwdWJsaWMgaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZShwcm9wZXJ0eTogUHJvcGVydHkpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gR2V0IHRoZSBjdXN0b20gYWdncmVnYXRlc1xuXHRcdFx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zOiBDdXN0b21BZ2dyZWdhdGVbXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcdFwiQWdncmVnYXRpb25cIixcblx0XHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0XHRbdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldF1cblx0XHRcdCk7XG5cblx0XHRcdC8vIENoZWNrIGlmIGEgY3VzdG9tIGFnZ3JlZ2F0ZSBoYXMgYSBxdWFsaWZpZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvcGVydHkgbmFtZVxuXHRcdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5zb21lKChhbm5vdGF0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBwcm9wZXJ0eS5uYW1lID09PSBhbm5vdGF0aW9uLnF1YWxpZmllcjtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBnZXRHcm91cGFibGVQcm9wZXJ0aWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzKCkge1xuXHRcdHJldHVybiB0aGlzLl9hQWdncmVnYXRhYmxlUHJvcGVydGllcztcblx0fVxuXG5cdHB1YmxpYyBnZXRUcmFuc0FnZ3JlZ2F0aW9ucygpIHtcblx0XHRyZXR1cm4gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcIkFuYWx5dGljc1wiLCBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkFuYWx5dGljcy52MS5BZ2dyZWdhdGVkUHJvcGVydGllc1wiLCBbXG5cdFx0XHR0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpLFxuXHRcdFx0dGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKClcblx0XHRdKTtcblx0fVxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBjdXN0b20gYWdncmVnYXRlIGRlZmluaXRpb25zIGZvciB0aGUgZW50aXR5IHR5cGUuXG5cdCAqXG5cdCAqIEByZXR1cm5zIEEgbWFwIChwcm9wZXJ0eU5hbWUgLS0+IGFycmF5IG9mIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkgbmFtZXMpIGZvciBlYWNoIGN1c3RvbSBhZ2dyZWdhdGUgY29ycmVzcG9uZGluZyB0byBhIHByb3BlcnR5LiBUaGUgYXJyYXkgb2Zcblx0ICogY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eSBuYW1lcyBpcyBlbXB0eSBpZiB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZSBkb2Vzbid0IGhhdmUgYW55IGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydHkuXG5cdCAqL1xuXHRwdWJsaWMgZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKSB7XG5cdFx0Ly8gR2V0IHRoZSBjdXN0b20gYWdncmVnYXRlc1xuXHRcdGNvbnN0IGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9uczogQ3VzdG9tQWdncmVnYXRlW10gPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJBZ2dyZWdhdGlvblwiLFxuXHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0W3RoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXRdXG5cdFx0KTtcblxuXHRcdHJldHVybiBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGxvd2VkIHRyYW5zZm9ybWF0aW9ucyBpbiB0aGUgJGFwcGx5LlxuXHQgKiBGaXJzdCBsb29rIGF0IHRoZSBjdXJyZW50IEVudGl0eVNldCwgdGhlbiBsb29rIGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBwcm92aWRlZCBhdCB0aGUgY29udGFpbmVyIGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB0cmFuc2Zvcm1hdGlvbnMsIG9yIHVuZGVmaW5lZCBpZiBubyBsaXN0IGlzIGZvdW5kXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpOiBTdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCh0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKSB8fFxuXHRcdFx0KHRoaXMub0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbj8uQXBwbHlTdXBwb3J0ZWREZWZhdWx0cz8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKVxuXHRcdCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0VBV0E7QUFDQTtBQUNBO01BQ2FBLGlCO0lBY1o7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBQ0MsMkJBQVlDLFVBQVosRUFBb0NDLGdCQUFwQyxFQUF3RTtNQUFBOztNQUN2RSxLQUFLQyxXQUFMLEdBQW1CRixVQUFuQjtNQUNBLEtBQUtHLGlCQUFMLEdBQXlCRixnQkFBekI7TUFFQSxLQUFLRyw2QkFBTCxHQUFxQyxLQUFLQyxxQ0FBTCxFQUFyQzs7TUFDQSxJQUFJLCtCQUFLRCw2QkFBTCxnRkFBb0NFLEtBQXBDLE1BQThDLG9CQUFsRCxF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
|