@sapui5/sap.fe.core 1.101.0 → 1.103.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 +5 -5
- package/src/sap/fe/core/.library +1 -1
- package/src/sap/fe/core/AppComponent.js +66 -30
- package/src/sap/fe/core/AppComponent.ts +68 -51
- package/src/sap/fe/core/AppStateHandler.js +13 -13
- package/src/sap/fe/core/AppStateHandler.ts +18 -18
- package/src/sap/fe/core/BaseController.js +11 -9
- package/src/sap/fe/core/BaseController.ts +15 -13
- package/src/sap/fe/core/CommonUtils.js +279 -188
- package/src/sap/fe/core/CommonUtils.ts +306 -215
- package/src/sap/fe/core/ExtensionAPI.js +25 -30
- package/src/sap/fe/core/ExtensionAPI.ts +37 -41
- package/src/sap/fe/core/PageController.js +12 -7
- package/src/sap/fe/core/PageController.ts +10 -5
- package/src/sap/fe/core/TemplateComponent.js +6 -6
- package/src/sap/fe/core/TemplateComponent.ts +11 -11
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +3 -3
- package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
- package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
- package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
- package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +351 -229
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +59 -34
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
- package/src/sap/fe/core/controllerextensions/MassEdit.js +11 -10
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
- package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
- package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
- package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
- package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
- package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
- package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
- package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
- package/src/sap/fe/core/controllerextensions/Share.js +39 -21
- package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
- package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
- package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
- package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
- package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- 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 +21 -24
- package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
- package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
- package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +48 -43
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
- package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
- package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
- package/src/sap/fe/core/controls/FileWrapper.js +50 -3
- package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
- package/src/sap/fe/core/controls/FilterBar.js +6 -2
- package/src/sap/fe/core/controls/FilterBar.ts +13 -9
- package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
- package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
- package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
- package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
- package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +48 -48
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
- package/src/sap/fe/core/converters/ConverterContext.js +26 -33
- package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
- 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 +56 -67
- package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
- 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 +73 -37
- package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
- package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
- package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
- package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
- 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 +28 -28
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
- package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
- package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
- package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
- package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
- package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
- 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 +67 -64
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +92 -89
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
- package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
- package/src/sap/fe/core/converters/helpers/ID.js +46 -46
- package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
- 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 -4
- 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 +46 -62
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
- 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 +89 -0
- package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
- package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
- package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
- 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 +2 -2
- package/src/sap/fe/core/fpm/Component.ts +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
- package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
- package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
- package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
- package/src/sap/fe/core/helpers/ClassSupport.ts +15 -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 +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
- 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/MassEditHelper.js +532 -264
- package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
- package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
- package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
- 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 +16 -12
- package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
- package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
- package/src/sap/fe/core/library.js +51 -3
- package/src/sap/fe/core/library.ts +47 -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 +151 -197
- package/src/sap/fe/core/messagebundle_ar.properties +36 -63
- package/src/sap/fe/core/messagebundle_bg.properties +36 -63
- package/src/sap/fe/core/messagebundle_ca.properties +36 -63
- package/src/sap/fe/core/messagebundle_cs.properties +36 -63
- package/src/sap/fe/core/messagebundle_cy.properties +36 -63
- package/src/sap/fe/core/messagebundle_da.properties +37 -64
- package/src/sap/fe/core/messagebundle_de.properties +36 -63
- package/src/sap/fe/core/messagebundle_el.properties +38 -65
- package/src/sap/fe/core/messagebundle_en.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
- package/src/sap/fe/core/messagebundle_es.properties +36 -63
- package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
- package/src/sap/fe/core/messagebundle_et.properties +36 -63
- package/src/sap/fe/core/messagebundle_fi.properties +36 -63
- package/src/sap/fe/core/messagebundle_fr.properties +39 -66
- package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
- package/src/sap/fe/core/messagebundle_hi.properties +36 -63
- package/src/sap/fe/core/messagebundle_hr.properties +36 -63
- package/src/sap/fe/core/messagebundle_hu.properties +35 -62
- package/src/sap/fe/core/messagebundle_id.properties +37 -64
- package/src/sap/fe/core/messagebundle_it.properties +54 -81
- package/src/sap/fe/core/messagebundle_iw.properties +36 -63
- package/src/sap/fe/core/messagebundle_ja.properties +36 -63
- package/src/sap/fe/core/messagebundle_kk.properties +36 -63
- package/src/sap/fe/core/messagebundle_ko.properties +36 -63
- package/src/sap/fe/core/messagebundle_lt.properties +36 -63
- package/src/sap/fe/core/messagebundle_lv.properties +36 -63
- package/src/sap/fe/core/messagebundle_ms.properties +37 -64
- package/src/sap/fe/core/messagebundle_nl.properties +37 -64
- package/src/sap/fe/core/messagebundle_no.properties +36 -63
- package/src/sap/fe/core/messagebundle_pl.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt.properties +37 -64
- package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
- package/src/sap/fe/core/messagebundle_ro.properties +36 -63
- package/src/sap/fe/core/messagebundle_ru.properties +36 -63
- package/src/sap/fe/core/messagebundle_sh.properties +36 -63
- package/src/sap/fe/core/messagebundle_sk.properties +36 -63
- package/src/sap/fe/core/messagebundle_sl.properties +38 -65
- package/src/sap/fe/core/messagebundle_sv.properties +36 -63
- package/src/sap/fe/core/messagebundle_th.properties +36 -63
- package/src/sap/fe/core/messagebundle_tr.properties +36 -63
- package/src/sap/fe/core/messagebundle_uk.properties +37 -64
- package/src/sap/fe/core/messagebundle_vi.properties +37 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
- package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
- package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
- package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
- package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
- package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
- package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +63 -60
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
- package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
- package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +24 -18
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
- 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/templating/CommonFormatters.js +84 -0
- package/src/sap/fe/core/templating/CommonFormatters.ts +86 -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 +16 -15
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +3 -4
- package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
- package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
- 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 +12 -11
- package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
- 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 +79 -56
- package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
- package/src/sap/fe/core/templating/UIFormatters.js +163 -97
- package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/type/Email.js +2 -2
- package/src/sap/fe/core/type/Email.ts +2 -2
- package/src/sap/fe/core/AnnotationHelper.js +0 -331
- package/src/sap/fe/core/AnnotationHelper.ts +0 -321
- package/src/sap/fe/core/RouterProxy.js +0 -938
- package/src/sap/fe/core/TransactionHelper.js +0 -1577
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
- package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
- package/src/sap/fe/core/actions/draft.js +0 -665
- package/src/sap/fe/core/actions/messageHandling.js +0 -579
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/actions/sticky.ts +0 -119
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
- package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import type { AnnotationTerm } from "@sap-ux/vocabularies-types";
|
|
2
|
+
import { CommunicationAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Communication";
|
|
3
|
+
import type {
|
|
4
4
|
CollectionFacetTypes,
|
|
5
5
|
DataFieldAbstractTypes,
|
|
6
|
+
Emphasized,
|
|
6
7
|
FacetTypes,
|
|
7
8
|
FieldGroup,
|
|
8
|
-
Identification,
|
|
9
9
|
OperationGroupingType,
|
|
10
|
-
ReferenceFacetTypes
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
} from "@sap-ux/vocabularies-types";
|
|
15
|
-
import { CommunicationAnnotationTerms } from "@sap-ux/vocabularies-types/dist/generated/Communication";
|
|
16
|
-
import { CustomSubSectionID, FormID, SubSectionID, SideContentID } from "../../helpers/ID";
|
|
17
|
-
import { createFormDefinition, FormDefinition, isReferenceFacet } from "../Common/Form";
|
|
18
|
-
import { DataVisualizationDefinition, getDataVisualizationConfiguration } from "../Common/DataVisualization";
|
|
19
|
-
import { ConfigurableObject, ConfigurableRecord, CustomElement, insertCustomElements, Placement } from "../../helpers/ConfigurableObject";
|
|
10
|
+
ReferenceFacetTypes
|
|
11
|
+
} from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
12
|
+
import { UIAnnotationTerms, UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
13
|
+
import type { BaseAction, ConverterAction, CustomAction } from "sap/fe/core/converters/controls/Common/Action";
|
|
20
14
|
import {
|
|
21
|
-
ConverterAction,
|
|
22
|
-
CustomAction,
|
|
23
|
-
getActionsFromManifest,
|
|
24
|
-
isActionNavigable,
|
|
25
15
|
ButtonType,
|
|
16
|
+
getActionsFromManifest,
|
|
17
|
+
getEnabledForAnnotationAction,
|
|
26
18
|
getSemanticObjectMapping,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
getEnabledForAnnotationAction
|
|
19
|
+
isActionNavigable,
|
|
20
|
+
removeDuplicateActions
|
|
30
21
|
} from "sap/fe/core/converters/controls/Common/Action";
|
|
22
|
+
import type { CustomObjectPageHeaderFacet, FlexSettings } from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
|
|
23
|
+
import {
|
|
24
|
+
getDesignTimeMetadataSettingsForHeaderFacet,
|
|
25
|
+
getHeaderFacetsFromManifest,
|
|
26
|
+
getStashedSettingsForHeaderFacet
|
|
27
|
+
} from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
|
|
28
|
+
import { IssueCategory, IssueSeverity, IssueType } from "sap/fe/core/converters/helpers/IssueManager";
|
|
31
29
|
import { KeyHelper } from "sap/fe/core/converters/helpers/Key";
|
|
30
|
+
import type { CompiledBindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
|
|
32
31
|
import {
|
|
33
|
-
|
|
34
|
-
bindingExpression,
|
|
35
|
-
BindingExpression,
|
|
36
|
-
compileBinding,
|
|
32
|
+
compileExpression,
|
|
37
33
|
equal,
|
|
38
34
|
fn,
|
|
35
|
+
getExpressionFromAnnotation,
|
|
36
|
+
ifElse,
|
|
39
37
|
not,
|
|
38
|
+
pathInModel,
|
|
40
39
|
ref
|
|
41
|
-
} from "sap/fe/core/helpers/
|
|
42
|
-
import
|
|
43
|
-
import {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
} from "
|
|
50
|
-
import {
|
|
51
|
-
import
|
|
40
|
+
} from "sap/fe/core/helpers/BindingToolkit";
|
|
41
|
+
import type ConverterContext from "../../ConverterContext";
|
|
42
|
+
import type { ConfigurableObject, ConfigurableRecord, CustomElement } from "../../helpers/ConfigurableObject";
|
|
43
|
+
import { insertCustomElements, Placement } from "../../helpers/ConfigurableObject";
|
|
44
|
+
import { getCustomSubSectionID, getFormID, getSideContentID, getSubSectionID } from "../../helpers/ID";
|
|
45
|
+
import type { ManifestAction, ManifestSubSection } from "../../ManifestSettings";
|
|
46
|
+
import { ActionType } from "../../ManifestSettings";
|
|
47
|
+
import { getFormActions, getFormHiddenActions, getVisibilityEnablementFormMenuActions } from "../../objectPage/FormMenuActions";
|
|
48
|
+
import type { DataVisualizationDefinition } from "../Common/DataVisualization";
|
|
49
|
+
import { getDataVisualizationConfiguration } from "../Common/DataVisualization";
|
|
50
|
+
import type { FormDefinition } from "../Common/Form";
|
|
51
|
+
import { createFormDefinition, isReferenceFacet } from "../Common/Form";
|
|
52
52
|
|
|
53
53
|
export enum SubSectionType {
|
|
54
54
|
Unknown = "Unknown", // Default Type
|
|
@@ -71,10 +71,10 @@ export type ObjectPageSubSection =
|
|
|
71
71
|
type BaseSubSection = {
|
|
72
72
|
id: string;
|
|
73
73
|
key: string;
|
|
74
|
-
title:
|
|
74
|
+
title: CompiledBindingToolkitExpression;
|
|
75
75
|
annotationPath: string;
|
|
76
76
|
type: SubSectionType;
|
|
77
|
-
visible:
|
|
77
|
+
visible: CompiledBindingToolkitExpression;
|
|
78
78
|
isVisibilityDynamic?: boolean | "";
|
|
79
79
|
flexSettings?: FlexSettings;
|
|
80
80
|
stashed?: boolean;
|
|
@@ -102,10 +102,6 @@ type XMLFragmentSubSection = Omit<BaseSubSection, "annotationPath"> & {
|
|
|
102
102
|
actions: Record<string, CustomAction>;
|
|
103
103
|
};
|
|
104
104
|
|
|
105
|
-
type Emphasized = {
|
|
106
|
-
path: string;
|
|
107
|
-
};
|
|
108
|
-
|
|
109
105
|
type PlaceholderFragmentSubSection = Omit<BaseSubSection, "annotationPath"> & {
|
|
110
106
|
type: SubSectionType.Placeholder;
|
|
111
107
|
actions: Record<string, CustomAction>;
|
|
@@ -123,9 +119,9 @@ export type FormSubSection = BaseSubSection & {
|
|
|
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
|
|
|
@@ -150,16 +146,16 @@ const targetTerms: string[] = [
|
|
|
150
146
|
|
|
151
147
|
// TODO: Need to handle Table case inside createSubSection function if CollectionFacet has Table ReferenceFacet
|
|
152
148
|
const hasTable = (facets: any[] = []) => {
|
|
153
|
-
return facets.some(facetType => targetTerms.indexOf(facetType?.Target?.$target?.term) > -1);
|
|
149
|
+
return facets.some((facetType) => targetTerms.indexOf(facetType?.Target?.$target?.term) > -1);
|
|
154
150
|
};
|
|
155
151
|
|
|
156
152
|
/**
|
|
157
153
|
* Create subsections based on facet definition.
|
|
158
154
|
*
|
|
159
|
-
* @param
|
|
160
|
-
* @param
|
|
161
|
-
* @param
|
|
162
|
-
* @returns
|
|
155
|
+
* @param facetCollection Collection of facets
|
|
156
|
+
* @param converterContext The converter context
|
|
157
|
+
* @param isHeaderSection True if header section is generated in this iteration
|
|
158
|
+
* @returns The current subsections
|
|
163
159
|
*/
|
|
164
160
|
export function createSubSections(
|
|
165
161
|
facetCollection: FacetTypes[],
|
|
@@ -175,7 +171,7 @@ export function createSubSections(
|
|
|
175
171
|
case UIAnnotationTypes.CollectionFacet:
|
|
176
172
|
// TODO If the Collection Facet has a child of type Collection Facet we bring them up one level (Form + Table use case) ?
|
|
177
173
|
// first case facet Collection is combination of collection and reference facet or not all facets are reference facets.
|
|
178
|
-
if (facetDefinition.Facets.find(facetType => facetType.$Type === UIAnnotationTypes.CollectionFacet)) {
|
|
174
|
+
if (facetDefinition.Facets.find((facetType) => facetType.$Type === UIAnnotationTypes.CollectionFacet)) {
|
|
179
175
|
facetsToCreate.splice(facetsToCreate.length, 0, ...facetDefinition.Facets);
|
|
180
176
|
} else {
|
|
181
177
|
facetsToCreate.push(facetDefinition);
|
|
@@ -189,7 +185,7 @@ export function createSubSections(
|
|
|
189
185
|
}, []);
|
|
190
186
|
|
|
191
187
|
// Then we create the actual subsections
|
|
192
|
-
return facetsToCreate.map(facet =>
|
|
188
|
+
return facetsToCreate.map((facet) =>
|
|
193
189
|
createSubSection(facet, facetsToCreate, converterContext, 0, !(facet as any)?.Facets?.length, isHeaderSection)
|
|
194
190
|
);
|
|
195
191
|
}
|
|
@@ -197,15 +193,15 @@ export function createSubSections(
|
|
|
197
193
|
/**
|
|
198
194
|
* Creates subsections based on the definition of the custom header facet.
|
|
199
195
|
*
|
|
200
|
-
* @param
|
|
201
|
-
* @returns
|
|
196
|
+
* @param converterContext The converter context
|
|
197
|
+
* @returns The current subsections
|
|
202
198
|
*/
|
|
203
199
|
export function createCustomHeaderFacetSubSections(converterContext: ConverterContext): ObjectPageSubSection[] {
|
|
204
200
|
const customHeaderFacets: Record<string, CustomObjectPageHeaderFacet> = getHeaderFacetsFromManifest(
|
|
205
201
|
converterContext.getManifestWrapper().getHeaderFacets()
|
|
206
202
|
);
|
|
207
203
|
const aCustomHeaderFacets: CustomObjectPageHeaderFacet[] = [];
|
|
208
|
-
Object.keys(customHeaderFacets).forEach(function(key) {
|
|
204
|
+
Object.keys(customHeaderFacets).forEach(function (key) {
|
|
209
205
|
aCustomHeaderFacets.push(customHeaderFacets[key]);
|
|
210
206
|
return aCustomHeaderFacets;
|
|
211
207
|
});
|
|
@@ -216,18 +212,17 @@ export function createCustomHeaderFacetSubSections(converterContext: ConverterCo
|
|
|
216
212
|
return facetsToCreate;
|
|
217
213
|
}, []);
|
|
218
214
|
|
|
219
|
-
return facetsToCreate.map(customHeaderFacet => createCustomHeaderFacetSubSection(customHeaderFacet));
|
|
215
|
+
return facetsToCreate.map((customHeaderFacet) => createCustomHeaderFacetSubSection(customHeaderFacet));
|
|
220
216
|
}
|
|
221
217
|
|
|
222
218
|
/**
|
|
223
219
|
* Creates a subsection based on a custom header facet.
|
|
224
220
|
*
|
|
225
221
|
* @param customHeaderFacet A custom header facet
|
|
226
|
-
*
|
|
227
|
-
* @returns {ObjectPageSubSection} A definition for a subsection
|
|
222
|
+
* @returns A definition for a subsection
|
|
228
223
|
*/
|
|
229
224
|
function createCustomHeaderFacetSubSection(customHeaderFacet: CustomObjectPageHeaderFacet): ObjectPageSubSection {
|
|
230
|
-
const subSectionID =
|
|
225
|
+
const subSectionID = getCustomSubSectionID(customHeaderFacet.key);
|
|
231
226
|
const subSection: XMLFragmentSubSection = {
|
|
232
227
|
id: subSectionID,
|
|
233
228
|
key: customHeaderFacet.key,
|
|
@@ -252,10 +247,11 @@ const getSubSectionKey = (facetDefinition: FacetTypes, fallback: string): string
|
|
|
252
247
|
};
|
|
253
248
|
/**
|
|
254
249
|
* Adds Form menu action to all form actions, removes duplicate actions and hidden actions.
|
|
250
|
+
*
|
|
255
251
|
* @param actions The actions involved
|
|
256
252
|
* @param facetDefinition The definition for the facet
|
|
257
253
|
* @param converterContext The converter context
|
|
258
|
-
* @returns
|
|
254
|
+
* @returns The form menu actions
|
|
259
255
|
*/
|
|
260
256
|
function addFormMenuActions(
|
|
261
257
|
actions: ConverterAction[],
|
|
@@ -266,56 +262,61 @@ function addFormMenuActions(
|
|
|
266
262
|
formActions: ConfigurableRecord<ManifestAction> = getFormActions(facetDefinition, converterContext),
|
|
267
263
|
formAllActions = insertCustomElements(
|
|
268
264
|
actions,
|
|
269
|
-
getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions)
|
|
265
|
+
getActionsFromManifest(formActions, converterContext, actions, undefined, undefined, hiddenActions),
|
|
266
|
+
{ command: "overwrite" }
|
|
270
267
|
);
|
|
271
268
|
return formAllActions ? getVisibilityEnablementFormMenuActions(removeDuplicateActions(formAllActions)) : actions;
|
|
272
269
|
}
|
|
273
270
|
|
|
274
271
|
/**
|
|
275
272
|
* Retrieves the action form a facet.
|
|
273
|
+
*
|
|
276
274
|
* @param facetDefinition
|
|
277
275
|
* @param converterContext
|
|
278
|
-
* @returns
|
|
276
|
+
* @returns The current facet actions
|
|
279
277
|
*/
|
|
280
278
|
function getFacetActions(facetDefinition: FacetTypes, converterContext: ConverterContext): BaseAction[] | ConverterAction[] {
|
|
281
279
|
let actions = new Array<ConverterAction>();
|
|
282
280
|
switch (facetDefinition.$Type) {
|
|
283
281
|
case UIAnnotationTypes.CollectionFacet:
|
|
284
|
-
actions = (
|
|
285
|
-
(
|
|
282
|
+
actions = (
|
|
283
|
+
facetDefinition.Facets.filter((subFacetDefinition) => isReferenceFacet(subFacetDefinition)) as ReferenceFacetTypes[]
|
|
284
|
+
).reduce(
|
|
285
|
+
(actionReducer: ConverterAction[], referenceFacet) =>
|
|
286
|
+
createFormActionReducer(actionReducer, referenceFacet, converterContext),
|
|
286
287
|
[]
|
|
287
288
|
);
|
|
288
289
|
break;
|
|
289
290
|
case UIAnnotationTypes.ReferenceFacet:
|
|
290
|
-
actions = createFormActionReducer([], facetDefinition
|
|
291
|
+
actions = createFormActionReducer([], facetDefinition, converterContext);
|
|
292
|
+
break;
|
|
293
|
+
default:
|
|
291
294
|
break;
|
|
292
295
|
}
|
|
293
296
|
return addFormMenuActions(actions, facetDefinition, converterContext);
|
|
294
297
|
}
|
|
295
298
|
/**
|
|
296
|
-
*
|
|
297
|
-
*
|
|
298
|
-
* @
|
|
299
|
+
* Returns the button type based on @UI.Emphasized annotation.
|
|
300
|
+
*
|
|
301
|
+
* @param emphasized Emphasized annotation value.
|
|
302
|
+
* @returns The button type or path based expression.
|
|
299
303
|
*/
|
|
300
|
-
function getButtonType(
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
} else if (Emphasized) {
|
|
305
|
-
return ButtonType.Ghost;
|
|
306
|
-
}
|
|
307
|
-
return ButtonType.Transparent;
|
|
304
|
+
function getButtonType(emphasized: Emphasized | undefined): ButtonType {
|
|
305
|
+
// Emphasized is a boolean so if it's equal to true we show the button as Ghost, otherwise as Transparent
|
|
306
|
+
const buttonTypeCondition = equal(getExpressionFromAnnotation(emphasized), true);
|
|
307
|
+
return compileExpression(ifElse(buttonTypeCondition, ButtonType.Ghost, ButtonType.Transparent)) as ButtonType;
|
|
308
308
|
}
|
|
309
309
|
|
|
310
310
|
/**
|
|
311
311
|
* Create a subsection based on FacetTypes.
|
|
312
|
+
*
|
|
312
313
|
* @param facetDefinition
|
|
313
314
|
* @param facetsToCreate
|
|
314
315
|
* @param converterContext
|
|
315
316
|
* @param level
|
|
316
317
|
* @param hasSingleContent
|
|
317
318
|
* @param isHeaderSection
|
|
318
|
-
* @returns
|
|
319
|
+
* @returns A subsection definition
|
|
319
320
|
*/
|
|
320
321
|
export function createSubSection(
|
|
321
322
|
facetDefinition: FacetTypes,
|
|
@@ -325,14 +326,14 @@ export function createSubSection(
|
|
|
325
326
|
hasSingleContent: boolean,
|
|
326
327
|
isHeaderSection?: boolean
|
|
327
328
|
): ObjectPageSubSection {
|
|
328
|
-
const subSectionID =
|
|
329
|
+
const subSectionID = getSubSectionID({ Facet: facetDefinition });
|
|
329
330
|
const oHiddenAnnotation: any = facetDefinition.annotations?.UI?.Hidden;
|
|
330
|
-
const isVisible =
|
|
331
|
+
const isVisible = compileExpression(not(equal(true, getExpressionFromAnnotation(oHiddenAnnotation))));
|
|
331
332
|
const isDynamicExpression =
|
|
332
333
|
isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0 && oHiddenAnnotation?.type !== "Path";
|
|
333
334
|
const isVisibleDynamicExpression =
|
|
334
335
|
isVisible && isDynamicExpression ? isVisible.substring(isVisible.indexOf("{=") + 2, isVisible.lastIndexOf("}")) : false;
|
|
335
|
-
const title =
|
|
336
|
+
const title = compileExpression(getExpressionFromAnnotation(facetDefinition.Label));
|
|
336
337
|
const subSection: BaseSubSection = {
|
|
337
338
|
id: subSectionID,
|
|
338
339
|
key: getSubSectionKey(facetDefinition, subSectionID),
|
|
@@ -391,7 +392,7 @@ export function createSubSection(
|
|
|
391
392
|
type: SubSectionType.Form,
|
|
392
393
|
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
|
|
393
394
|
level: level,
|
|
394
|
-
actions: actions.filter(action => action.facetName === undefined)
|
|
395
|
+
actions: actions.filter((action) => action.facetName === undefined)
|
|
395
396
|
};
|
|
396
397
|
return formCollectionSubSection;
|
|
397
398
|
}
|
|
@@ -439,7 +440,7 @@ export function createSubSection(
|
|
|
439
440
|
type: SubSectionType.Form,
|
|
440
441
|
level: level,
|
|
441
442
|
formDefinition: createFormDefinition(facetDefinition, isVisible, converterContext, actions),
|
|
442
|
-
actions: actions.filter(action => action.facetName === undefined)
|
|
443
|
+
actions: actions.filter((action) => action.facetName === undefined)
|
|
443
444
|
};
|
|
444
445
|
return formElementSubSection;
|
|
445
446
|
|
|
@@ -462,7 +463,11 @@ export function createSubSection(
|
|
|
462
463
|
};
|
|
463
464
|
return unsupportedSubSection;
|
|
464
465
|
}
|
|
465
|
-
function isSubsectionTitleShown(
|
|
466
|
+
function isSubsectionTitleShown(
|
|
467
|
+
hasSingleContent: boolean,
|
|
468
|
+
subSectionTitle: CompiledBindingToolkitExpression,
|
|
469
|
+
controlTitle: string
|
|
470
|
+
): boolean {
|
|
466
471
|
if (hasSingleContent && controlTitle === subSectionTitle) {
|
|
467
472
|
return false;
|
|
468
473
|
}
|
|
@@ -497,20 +502,19 @@ function createFormActionReducer(
|
|
|
497
502
|
undefined,
|
|
498
503
|
undefined,
|
|
499
504
|
undefined,
|
|
500
|
-
facetDefinition.fullyQualifiedName
|
|
505
|
+
facetDefinition.fullyQualifiedName
|
|
501
506
|
);
|
|
502
507
|
break;
|
|
503
508
|
case UIAnnotationTerms.Identification:
|
|
504
509
|
case UIAnnotationTerms.StatusInfo:
|
|
505
510
|
if (referenceTarget.qualifier) {
|
|
506
|
-
dataFieldCollection = referenceTarget
|
|
511
|
+
dataFieldCollection = referenceTarget;
|
|
507
512
|
}
|
|
508
513
|
break;
|
|
509
514
|
}
|
|
510
515
|
}
|
|
511
516
|
|
|
512
|
-
actions = dataFieldCollection.reduce((
|
|
513
|
-
const UIAnnotation: any = dataField?.annotations?.UI;
|
|
517
|
+
actions = dataFieldCollection.reduce((actionReducer, dataField: DataFieldAbstractTypes) => {
|
|
514
518
|
switch (dataField.$Type) {
|
|
515
519
|
case UIAnnotationTypes.DataFieldForIntentBasedNavigation:
|
|
516
520
|
if (dataField.RequiresContext?.valueOf() === true) {
|
|
@@ -532,57 +536,57 @@ function createFormActionReducer(
|
|
|
532
536
|
if (dataField.Mapping) {
|
|
533
537
|
mNavigationParameters.semanticObjectMapping = getSemanticObjectMapping(dataField.Mapping);
|
|
534
538
|
}
|
|
535
|
-
|
|
539
|
+
actionReducer.push({
|
|
536
540
|
type: ActionType.DataFieldForIntentBasedNavigation,
|
|
537
|
-
id:
|
|
541
|
+
id: getFormID({ Facet: facetDefinition }, dataField),
|
|
538
542
|
key: KeyHelper.generateKeyFromDataField(dataField),
|
|
539
543
|
text: dataField.Label?.toString(),
|
|
540
544
|
annotationPath: "",
|
|
541
545
|
enabled:
|
|
542
546
|
dataField.NavigationAvailable !== undefined
|
|
543
|
-
?
|
|
544
|
-
: true,
|
|
545
|
-
visible:
|
|
546
|
-
buttonType: getButtonType(
|
|
547
|
-
press:
|
|
547
|
+
? compileExpression(equal(getExpressionFromAnnotation(dataField.NavigationAvailable?.valueOf()), true))
|
|
548
|
+
: "true",
|
|
549
|
+
visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden?.valueOf()), true))),
|
|
550
|
+
buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
|
|
551
|
+
press: compileExpression(
|
|
548
552
|
fn("._intentBasedNavigation.navigate", [
|
|
549
|
-
|
|
550
|
-
|
|
553
|
+
getExpressionFromAnnotation(dataField.SemanticObject),
|
|
554
|
+
getExpressionFromAnnotation(dataField.Action),
|
|
551
555
|
mNavigationParameters
|
|
552
556
|
])
|
|
553
557
|
),
|
|
554
|
-
customData:
|
|
555
|
-
semanticObject:
|
|
556
|
-
action:
|
|
558
|
+
customData: compileExpression({
|
|
559
|
+
semanticObject: getExpressionFromAnnotation(dataField.SemanticObject),
|
|
560
|
+
action: getExpressionFromAnnotation(dataField.Action)
|
|
557
561
|
})
|
|
558
562
|
});
|
|
559
563
|
break;
|
|
560
564
|
case UIAnnotationTypes.DataFieldForAction:
|
|
561
565
|
const formManifestActionsConfiguration: any = converterContext.getManifestControlConfiguration(referenceTarget).actions;
|
|
562
566
|
const key: string = KeyHelper.generateKeyFromDataField(dataField);
|
|
563
|
-
|
|
567
|
+
actionReducer.push({
|
|
564
568
|
type: ActionType.DataFieldForAction,
|
|
565
|
-
id:
|
|
569
|
+
id: getFormID({ Facet: facetDefinition }, dataField),
|
|
566
570
|
key: key,
|
|
567
571
|
text: dataField.Label?.toString(),
|
|
568
572
|
annotationPath: "",
|
|
569
573
|
enabled: getEnabledForAnnotationAction(converterContext, dataField.ActionTarget),
|
|
570
|
-
binding: navigationPropertyPath ?
|
|
571
|
-
visible:
|
|
574
|
+
binding: navigationPropertyPath ? `{ 'path' : '${navigationPropertyPath}'}` : undefined,
|
|
575
|
+
visible: compileExpression(not(equal(getExpressionFromAnnotation(dataField.annotations?.UI?.Hidden?.valueOf()), true))),
|
|
572
576
|
requiresDialog: isDialog(dataField.ActionTarget),
|
|
573
|
-
buttonType: getButtonType(
|
|
574
|
-
press:
|
|
577
|
+
buttonType: getButtonType(dataField.annotations?.UI?.Emphasized),
|
|
578
|
+
press: compileExpression(
|
|
575
579
|
fn(
|
|
576
580
|
"invokeAction",
|
|
577
581
|
[
|
|
578
582
|
dataField.Action,
|
|
579
583
|
{
|
|
580
|
-
contexts: fn("getBindingContext", [],
|
|
584
|
+
contexts: fn("getBindingContext", [], pathInModel("", "$source")),
|
|
581
585
|
invocationGrouping: (dataField.InvocationGrouping === "UI.OperationGroupingType/ChangeSet"
|
|
582
586
|
? "ChangeSet"
|
|
583
587
|
: "Isolated") as OperationGroupingType,
|
|
584
|
-
label:
|
|
585
|
-
model: fn("getModel", [],
|
|
588
|
+
label: getExpressionFromAnnotation(dataField.Label),
|
|
589
|
+
model: fn("getModel", [], pathInModel("/", "$source")),
|
|
586
590
|
isNavigable: isActionNavigable(
|
|
587
591
|
formManifestActionsConfiguration && formManifestActionsConfiguration[key]
|
|
588
592
|
)
|
|
@@ -591,11 +595,13 @@ function createFormActionReducer(
|
|
|
591
595
|
ref(".editFlow")
|
|
592
596
|
)
|
|
593
597
|
),
|
|
594
|
-
facetName: dataField.Inline ?
|
|
598
|
+
facetName: dataField.Inline ? facetDefinition.fullyQualifiedName : undefined
|
|
595
599
|
});
|
|
596
600
|
break;
|
|
601
|
+
default:
|
|
602
|
+
break;
|
|
597
603
|
}
|
|
598
|
-
return
|
|
604
|
+
return actionReducer;
|
|
599
605
|
}, actions);
|
|
600
606
|
return insertCustomElements(actions, manifestActions);
|
|
601
607
|
}
|
|
@@ -619,7 +625,7 @@ export function createCustomSubSections(
|
|
|
619
625
|
): Record<string, CustomObjectPageSubSection> {
|
|
620
626
|
const subSections: Record<string, CustomObjectPageSubSection> = {};
|
|
621
627
|
Object.keys(manifestSubSections).forEach(
|
|
622
|
-
subSectionKey =>
|
|
628
|
+
(subSectionKey) =>
|
|
623
629
|
(subSections[subSectionKey] = createCustomSubSection(manifestSubSections[subSectionKey], subSectionKey, converterContext))
|
|
624
630
|
);
|
|
625
631
|
return subSections;
|
|
@@ -633,7 +639,7 @@ export function createCustomSubSection(
|
|
|
633
639
|
const sideContent: SideContentDef | undefined = manifestSubSection.sideContent
|
|
634
640
|
? {
|
|
635
641
|
template: manifestSubSection.sideContent.template,
|
|
636
|
-
id:
|
|
642
|
+
id: getSideContentID(subSectionKey),
|
|
637
643
|
visible: false,
|
|
638
644
|
equalSplit: manifestSubSection.sideContent.equalSplit
|
|
639
645
|
}
|
|
@@ -648,7 +654,7 @@ export function createCustomSubSection(
|
|
|
648
654
|
const isDynamicExpression = isVisible && typeof isVisible === "string" && isVisible.indexOf("{=") === 0;
|
|
649
655
|
const subSectionDefinition = {
|
|
650
656
|
type: SubSectionType.Unknown,
|
|
651
|
-
id: manifestSubSection.id ||
|
|
657
|
+
id: manifestSubSection.id || getCustomSubSectionID(subSectionKey),
|
|
652
658
|
actions: getActionsFromManifest(manifestSubSection.actions, converterContext),
|
|
653
659
|
key: subSectionKey,
|
|
654
660
|
title: manifestSubSection.title,
|
|
@@ -660,8 +666,7 @@ export function createCustomSubSection(
|
|
|
660
666
|
};
|
|
661
667
|
if (manifestSubSection.template || manifestSubSection.name) {
|
|
662
668
|
subSectionDefinition.type = SubSectionType.XMLFragment;
|
|
663
|
-
(
|
|
664
|
-
manifestSubSection.template || manifestSubSection.name || "";
|
|
669
|
+
(subSectionDefinition as unknown as XMLFragmentSubSection).template = manifestSubSection.template || manifestSubSection.name || "";
|
|
665
670
|
} else {
|
|
666
671
|
subSectionDefinition.type = SubSectionType.Placeholder;
|
|
667
672
|
}
|
|
@@ -674,8 +679,7 @@ export function createCustomSubSection(
|
|
|
674
679
|
* @param currentFacet
|
|
675
680
|
* @param facetsToCreateInSection
|
|
676
681
|
* @param converterContext
|
|
677
|
-
*
|
|
678
|
-
* @returns {boolean} `true` for compliant, false otherwise
|
|
682
|
+
* @returns `true` for compliant, false otherwise
|
|
679
683
|
*/
|
|
680
684
|
function getCondensedTableLayoutCompliance(
|
|
681
685
|
currentFacet: FacetTypes,
|
|
@@ -697,10 +701,10 @@ function getCondensedTableLayoutCompliance(
|
|
|
697
701
|
}
|
|
698
702
|
|
|
699
703
|
function hasNoOtherVisibleTableInTargets(currentFacet: FacetTypes, facetsToCreateInSection: FacetTypes[]): boolean {
|
|
700
|
-
return facetsToCreateInSection.every(function(subFacet) {
|
|
704
|
+
return facetsToCreateInSection.every(function (subFacet) {
|
|
701
705
|
if (subFacet !== currentFacet) {
|
|
702
706
|
if (subFacet.$Type === UIAnnotationTypes.ReferenceFacet) {
|
|
703
|
-
const refFacet = subFacet
|
|
707
|
+
const refFacet = subFacet;
|
|
704
708
|
if (
|
|
705
709
|
refFacet.Target?.$target?.term === UIAnnotationTerms.LineItem ||
|
|
706
710
|
refFacet.Target?.$target?.term === UIAnnotationTerms.PresentationVariant ||
|
|
@@ -711,7 +715,7 @@ function hasNoOtherVisibleTableInTargets(currentFacet: FacetTypes, facetsToCreat
|
|
|
711
715
|
return true;
|
|
712
716
|
} else {
|
|
713
717
|
const subCollectionFacet = subFacet as CollectionFacetTypes;
|
|
714
|
-
return subCollectionFacet.Facets.every(function(facet) {
|
|
718
|
+
return subCollectionFacet.Facets.every(function (facet) {
|
|
715
719
|
const subRefFacet = facet as ReferenceFacetTypes;
|
|
716
720
|
if (
|
|
717
721
|
subRefFacet.Target?.$target?.term === UIAnnotationTerms.LineItem ||
|
|
@@ -81,8 +81,16 @@ sap.ui.define([], function () {
|
|
|
81
81
|
oAggregationAnnotationSource = oEntityTypeObject;
|
|
82
82
|
}
|
|
83
83
|
} else {
|
|
84
|
+
var _oEntitySetObject$ann, _oEntitySetObject$ann2;
|
|
85
|
+
|
|
84
86
|
// For the time being, we ignore annotations at the container level, until the vocabulary is stabilized
|
|
85
|
-
|
|
87
|
+
var oEntitySetObject = this._converterContext.getEntitySet();
|
|
88
|
+
|
|
89
|
+
if (oEntitySetObject !== null && oEntitySetObject !== void 0 && (_oEntitySetObject$ann = oEntitySetObject.annotations) !== null && _oEntitySetObject$ann !== void 0 && (_oEntitySetObject$ann2 = _oEntitySetObject$ann.Aggregation) !== null && _oEntitySetObject$ann2 !== void 0 && _oEntitySetObject$ann2.ApplySupported) {
|
|
90
|
+
oAggregationAnnotationSource = oEntitySetObject;
|
|
91
|
+
} else {
|
|
92
|
+
oAggregationAnnotationSource = this._converterContext.getEntityType();
|
|
93
|
+
}
|
|
86
94
|
}
|
|
87
95
|
|
|
88
96
|
return oAggregationAnnotationSource;
|
|
@@ -148,9 +156,7 @@ sap.ui.define([], function () {
|
|
|
148
156
|
};
|
|
149
157
|
|
|
150
158
|
_proto.getTransAggregations = function getTransAggregations() {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return aTransAggregationAnnotations;
|
|
159
|
+
return this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [this._converterContext.getEntityContainer(), this._converterContext.getEntityType()]);
|
|
154
160
|
}
|
|
155
161
|
/**
|
|
156
162
|
* Returns the list of custom aggregate definitions for the entity type.
|
|
@@ -186,4 +192,4 @@ sap.ui.define([], function () {
|
|
|
186
192
|
_exports.AggregationHelper = AggregationHelper;
|
|
187
193
|
return _exports;
|
|
188
194
|
}, false);
|
|
189
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFnZ3JlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZW50aXR5VHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJfZW50aXR5VHlwZSIsIl9jb252ZXJ0ZXJDb250ZXh0IiwiX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQiLCJfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0IiwiX3R5cGUiLCJvVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJfYkFwcGx5U3VwcG9ydGVkIiwiQXBwbHlTdXBwb3J0ZWQiLCJfYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24iLCJnZXRFbnRpdHlDb250YWluZXIiLCJiSXNQYXJhbWV0ZXJpemVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVNldCIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0VudGl0eVR5cGVPYmplY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZ2V0RW50aXR5U2V0IiwiaXNBbmFseXRpY3NTdXBwb3J0ZWQiLCJpc1Byb3BlcnR5R3JvdXBhYmxlIiwicHJvcGVydHkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJmaW5kSW5kZXgiLCJwYXRoIiwiJHRhcmdldCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHlBZ2dyZWdhdGFibGUiLCJhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnMiLCJnZXRBbm5vdGF0aW9uc0J5VGVybSIsInNvbWUiLCJhbm5vdGF0aW9uIiwibmFtZSIsInF1YWxpZmllciIsImdldEdyb3VwYWJsZVByb3BlcnRpZXMiLCJnZXRBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiZ2V0VHJhbnNBZ2dyZWdhdGlvbnMiLCJhVHJhbnNBZ2dyZWdhdGlvbkFubm90YXRpb25zIiwiZ2V0RW50aXR5VHlwZSIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsIlRyYW5zZm9ybWF0aW9ucyIsIkFwcGx5U3VwcG9ydGVkRGVmYXVsdHMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQVVBO0FBQ0E7QUFDQTtNQUNhQSxpQjtBQWNaO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDLCtCQUFZQyxVQUFaLEVBQW9DQyxnQkFBcEMsRUFBd0U7QUFBQTs7QUFDdkUsV0FBS0MsV0FBTCxHQUFtQkYsVUFBbkI7QUFDQSxXQUFLRyxpQkFBTCxHQUF5QkYsZ0JBQXpCO0FBRUEsV0FBS0csNkJBQUwsR0FBcUMsS0FBS0MscUNBQUwsRUFBckM7O0FBQ0EsVUFBSSwrQkFBS0QsNkJBQUwsZ0ZBQW9DRSxLQUFwQyxNQUE4QyxvQkFBbEQsRUFBd0U7QUFBQTs7QUFDdkUsYUFBS0MsNkJBQUwsNkJBQXFDLEtBQUtILDZCQUExQyxxRkFBcUMsdUJBQW9DSSxXQUF6RSwyREFBcUMsdUJBQ2xDQyxXQURIO0FBRUEsT0FIRCxNQUdPLElBQUksZ0NBQUtMLDZCQUFMLGtGQUFvQ0UsS0FBcEMsTUFBOEMsWUFBbEQsRUFBZ0U7QUFBQTs7QUFDdEUsYUFBS0MsNkJBQUwsNkJBQXFDLEtBQUtILDZCQUExQyxxRkFBcUMsdUJBQW9DSSxXQUF6RSwyREFBcUMsdUJBQ2xDQyxXQURIO0FBRUEsT0FITSxNQUdBLElBQUksZ0NBQUtMLDZCQUFMLGtGQUFvQ0UsS0FBcEMsTUFBOEMsV0FBbEQsRUFBK0Q7QUFBQTs7QUFDckUsYUFBS0MsNkJBQUwsNkJBQXFDLEtBQUtI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QywyQkFBQyxLQUFLN0MsNkJBQU4scUZBQUMsdUJBQW9DSSxjQUFyQywyREFBQyx1QkFBb0QwQyxlQUFyRCwrQkFDQyxLQUFLckMsK0JBRE4sb0ZBQ0Msc0JBQXNDc0Msc0JBRHZDLDJEQUNDLHVCQUE4REQsZUFEL0QsQ0FERDtBQUlBLEsiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVR5cGUsIFByb3BlcnR5LCBFbnRpdHlTZXQsIE5hdmlnYXRpb25Qcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBBbm5vdGF0aW9uVGVybSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMsIEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L2dlbmVyYXRlZC9BZ2dyZWdhdGlvblwiO1xuaW1wb3J0IHsgUHJvcGVydHlQYXRoIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL2Rpc3QvRWRtXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHtcblx0Q29sbGVjdGlvbkFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQWdncmVnYXRpb24sXG5cdEVudGl0eVNldEFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlDb250YWluZXJBbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9nZW5lcmF0ZWQvQWdncmVnYXRpb25fRWRtXCI7XG5cbi8qKlxuICogaGVscGVyIGNsYXNzIGZvciBBZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFnZ3JlZ2F0aW9uSGVscGVyIHtcblx0X2VudGl0eVR5cGU6IEVudGl0eVR5cGU7XG5cdF9jb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0O1xuXHRfYkFwcGx5U3VwcG9ydGVkOiBib29sZWFuO1xuXHRfYUdyb3VwYWJsZVByb3BlcnRpZXM/OiBQcm9wZXJ0eVBhdGhbXTtcblx0X2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzPztcblx0X29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ6IEVudGl0eVR5cGUgfCBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHk7XG5cdG9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPzpcblx0XHR8IENvbGxlY3Rpb25Bbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxuXHRcdHwgRW50aXR5VHlwZUFubm90YXRpb25zX0FnZ3JlZ2F0aW9uXG5cdFx0fCBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblxuXHRvQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uPzogRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBoZWxwZXIgZm9yIGEgc3BlY2lmaWMgZW50aXR5IHR5cGUgYW5kIGEgY29udmVydGVyIGNvbnRleHQuXG5cdCAqXG5cdCAqIEBwYXJhbSBlbnRpdHlUeXBlIFRoZSBFbnRpdHlUeXBlXG5cdCAqIEBwYXJhbSBjb252ZXJ0ZXJDb250ZXh0IFRoZSBDb252ZXJ0ZXJDb250ZXh0XG5cdCAqL1xuXHRjb25zdHJ1Y3RvcihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0KSB7XG5cdFx0dGhpcy5fZW50aXR5VHlwZSA9IGVudGl0eVR5cGU7XG5cdFx0dGhpcy5fY29udmVydGVyQ29udGV4dCA9IGNvbnZlcnRlckNvbnRleHQ7XG5cblx0XHR0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0ID0gdGhpcy5fZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk7XG5cdFx0aWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBDb2xsZWN0aW9uQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5fdHlwZSA9PT0gXCJFbnRpdHlUeXBlXCIpIHtcblx0XHRcdHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMgPSB0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5hbm5vdGF0aW9uc1xuXHRcdFx0XHQ/LkFnZ3JlZ2F0aW9uIGFzIEVudGl0eVR5cGVBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9IGVsc2UgaWYgKHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/Ll90eXBlID09PSBcIkVudGl0eVNldFwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbjtcblx0XHR9XG5cdFx0dGhpcy5fYkFwcGx5U3VwcG9ydGVkID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cblx0XHRpZiAodGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHR0aGlzLl9hR3JvdXBhYmxlUHJvcGVydGllcyA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkPy5Hcm91cGFibGVQcm9wZXJ0aWVzIGFzIFByb3BlcnR5UGF0aFtdO1xuXHRcdFx0dGhpcy5fYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uQWdncmVnYXRhYmxlUHJvcGVydGllcztcblxuXHRcdFx0dGhpcy5vQ29udGFpbmVyQWdncmVnYXRpb25Bbm5vdGF0aW9uID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlDb250YWluZXIoKS5hbm5vdGF0aW9uc1xuXHRcdFx0XHQuQWdncmVnYXRpb24gYXMgRW50aXR5Q29udGFpbmVyQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHRhcmdldCBmb3IgdGhlIGFnZ3JlZ2F0aW9uIGFubm90YXRpb25zLlxuXHQgKlxuXHQgKiBAcmV0dXJucyAgRW50aXR5VHlwZSwgRW50aXR5U2V0IG9yIE5hdmlnYXRpb25Qcm9wZXJ0eSB3aGVyZSBhZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucyBzaG91bGQgYmUgcmVhZCBmcm9tLlxuXHQgKi9cblx0cHJpdmF0ZSBfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0KCk6IEVudGl0eVR5cGUgfCBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHkge1xuXHRcdGNvbnN0IGJJc1BhcmFtZXRlcml6ZWQgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKT8udGFyZ2V0RW50aXR5U2V0Py5lbnRpdHlUeXBlPy5hbm5vdGF0aW9ucz8uQ29tbW9uXG5cdFx0XHQ/LlJlc3VsdENvbnRleHRcblx0XHRcdD8gdHJ1ZVxuXHRcdFx0OiBmYWxzZTtcblx0XHRsZXQgb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZTtcblxuXHRcdC8vIGZpbmQgQXBwbHlTdXBwb3J0ZWRcblx0XHRpZiAoYklzUGFyYW1ldGVyaXplZCkge1xuXHRcdFx0Ly8gaWYgdGhpcyBpcyBhIHBhcmFtZXRlcml6ZWQgdmlldyB0aGVuIGFwcGx5c3VwcG9ydGVkIGNhbiBiZSBmb3VuZCBhdCBlaXRoZXIgdGhlIG5hdlByb3AgcG9pbnRpbmcgdG8gdGhlIHJlc3VsdCBzZXQgb3IgZW50aXR5VHlwZS5cblx0XHRcdC8vIElmIGFwcGx5U3VwcG9ydGVkIGlzIHByZXNlbnQgYXQgYm90aCB0aGUgbmF2UHJvcCBhbmQgdGhlIGVudGl0eVR5cGUgdGhlbiBuYXZQcm9wIGlzIG1vcmUgc3BlY2lmaWMgc28gdGFrZSBhbm5vdGF0aW9ucyBmcm9tIHRoZXJlXG5cdFx0XHQvLyB0YXJnZXRPYmplY3QgaW4gdGhlIGNvbnZlcnRlciBjb250ZXh0IGZvciBhIHBhcmFtZXRlcml6ZWQgdmlldyBpcyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSBwb2ludGluZyB0byB0aCByZXN1bHQgc2V0XG5cdFx0XHRjb25zdCBvRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpO1xuXHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Qcm9wZXJ0eU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdFx0XHRjb25zdCBvRW50aXR5VHlwZU9iamVjdCA9IG9EYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlO1xuXHRcdFx0aWYgKG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q/LmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3Q7XG5cdFx0XHR9IGVsc2UgaWYgKG9FbnRpdHlUeXBlT2JqZWN0Py5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvRW50aXR5VHlwZU9iamVjdDtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gRm9yIHRoZSB0aW1lIGJlaW5nLCB3ZSBpZ25vcmUgYW5ub3RhdGlvbnMgYXQgdGhlIGNvbnRhaW5lciBsZXZlbCwgdW50aWwgdGhlIHZvY2FidWxhcnkgaXMgc3RhYmlsaXplZFxuXHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0KCk7XG5cdFx0fVxuXHRcdHJldHVybiBvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZW50aXR5IHN1cHBvcnRzIGFuYWx5dGljYWwgcXVlcmllcy5cblx0ICpcblx0ICogQHJldHVybnMgYHRydWVgIGlmIGFuYWx5dGljYWwgcXVlcmllcyBhcmUgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaXNBbmFseXRpY3NTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2JBcHBseVN1cHBvcnRlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBpcyBncm91cGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcblx0ICogQHJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLCB0cnVlIG9yIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0cHVibGljIGlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLl9iQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMgfHwgdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBObyBncm91cGFibGVQcm9wZXJ0aWVzIC0tPiBhbGwgcHJvcGVydGllcyBhcmUgZ3JvdXBhYmxlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzLmZpbmRJbmRleChwYXRoID0+IHBhdGguJHRhcmdldC5mdWxseVF1YWxpZmllZE5hbWUgPT09IHByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSkgPj0gMDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgcHJvcGVydHkgaXMgYWdncmVnYXRhYmxlLlxuXHQgKlxuXHQgKiBAcGFyYW0gcHJvcGVydHkgVGhlIHByb3BlcnR5IHRvIGNoZWNrXG5cdCAqIEByZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBlbnRpdHkgZG9lc24ndCBzdXBwb3J0IGFuYWx5dGljYWwgcXVlcmllcywgdHJ1ZSBvciBmYWxzZSBvdGhlcndpc2Vcblx0ICovXG5cdHB1YmxpYyBpc1Byb3BlcnR5QWdncmVnYXRhYmxlKHByb3BlcnR5OiBQcm9wZXJ0eSk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5fYkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBHZXQgdGhlIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdFx0XHRjb25zdCBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM6IEFubm90YXRpb25UZXJtPFxuXHRcdFx0XHRDdXN0b21BZ2dyZWdhdGVcblx0XHRcdD5bXSA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXCJBZ2dyZWdhdGlvblwiLCBBZ2dyZWdhdGlvbkFubm90YXRpb25UZXJtcy5DdXN0b21BZ2dyZWdhdGUsIFtcblx0XHRcdFx0dGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldFxuXHRcdFx0XSk7XG5cblx0XHRcdC8vIENoZWNrIGlmIGEgY3VzdG9tIGFnZ3JlZ2F0ZSBoYXMgYSBxdWFsaWZpZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgcHJvcGVydHkgbmFtZVxuXHRcdFx0cmV0dXJuIGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucy5zb21lKGFubm90YXRpb24gPT4ge1xuXHRcdFx0XHRyZXR1cm4gcHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0R3JvdXBhYmxlUHJvcGVydGllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QWdncmVnYXRhYmxlUHJvcGVydGllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5fYUFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKSB7XG5cdFx0Y29uc3QgYVRyYW5zQWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0QW5ub3RhdGlvbnNCeVRlcm0oXG5cdFx0XHRcIkFuYWx5dGljc1wiLFxuXHRcdFx0XCJjb20uc2FwLnZvY2FidWxhcmllcy5BbmFseXRpY3MudjEuQWdncmVnYXRlZFByb3BlcnRpZXNcIixcblx0XHRcdFt0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eUNvbnRhaW5lcigpLCB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKV1cblx0XHQpO1xuXHRcdHJldHVybiBhVHJhbnNBZ2dyZWdhdGlvbkFubm90YXRpb25zO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGN1c3RvbSBhZ2dyZWdhdGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBlbnRpdHkgdHlwZS5cblx0ICpcblx0ICogQHJldHVybnMgQSBtYXAgKHByb3BlcnR5TmFtZSAtLT4gYXJyYXkgb2YgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eSBuYW1lcykgZm9yIGVhY2ggY3VzdG9tIGFnZ3JlZ2F0ZSBjb3JyZXNwb25kaW5nIHRvIGEgcHJvcGVydHkuIFRoZSBhcnJheSBvZlxuXHQgKiBjb250ZXh0LWRlZmluaW5nIHByb3BlcnR5IG5hbWVzIGlzIGVtcHR5IGlmIHRoZSBjdXN0b20gYWdncmVnYXRlIGRvZXNuJ3QgaGF2ZSBhbnkgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eS5cblx0ICovXG5cdHB1YmxpYyBnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpIHtcblx0XHQvLyBHZXQgdGhlIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdFx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zOiBBbm5vdGF0aW9uVGVybTxDdXN0b21BZ2dyZWdhdGU+W10gPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJBZ2dyZWdhdGlvblwiLFxuXHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0W3RoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXRdXG5cdFx0KTtcblxuXHRcdHJldHVybiBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGxvd2VkIHRyYW5zZm9ybWF0aW9ucyBpbiB0aGUgJGFwcGx5LlxuXHQgKiBGaXJzdCBsb29rIGF0IHRoZSBjdXJyZW50IEVudGl0eVNldCwgdGhlbiBsb29rIGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBwcm92aWRlZCBhdCB0aGUgY29udGFpbmVyIGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB0cmFuc2Zvcm1hdGlvbnMsIG9yIHVuZGVmaW5lZCBpZiBubyBsaXN0IGlzIGZvdW5kXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpOiBTdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCh0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKSB8fFxuXHRcdFx0KHRoaXMub0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbj8uQXBwbHlTdXBwb3J0ZWREZWZhdWx0cz8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKVxuXHRcdCk7XG5cdH1cbn1cbiJdfQ==
|
|
195
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFnZ3JlZ2F0aW9uLnRzIl0sIm5hbWVzIjpbIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZW50aXR5VHlwZSIsImNvbnZlcnRlckNvbnRleHQiLCJfZW50aXR5VHlwZSIsIl9jb252ZXJ0ZXJDb250ZXh0IiwiX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQiLCJfZGV0ZXJtaW5lQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0IiwiX3R5cGUiLCJvVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyIsImFubm90YXRpb25zIiwiQWdncmVnYXRpb24iLCJfYkFwcGx5U3VwcG9ydGVkIiwiQXBwbHlTdXBwb3J0ZWQiLCJfYUdyb3VwYWJsZVByb3BlcnRpZXMiLCJHcm91cGFibGVQcm9wZXJ0aWVzIiwiX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzIiwiQWdncmVnYXRhYmxlUHJvcGVydGllcyIsIm9Db250YWluZXJBZ2dyZWdhdGlvbkFubm90YXRpb24iLCJnZXRFbnRpdHlDb250YWluZXIiLCJiSXNQYXJhbWV0ZXJpemVkIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldEVudGl0eVNldCIsIkNvbW1vbiIsIlJlc3VsdENvbnRleHQiLCJvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlIiwib0RhdGFNb2RlbE9iamVjdFBhdGgiLCJvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0IiwidGFyZ2V0T2JqZWN0Iiwib0VudGl0eVR5cGVPYmplY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwib0VudGl0eVNldE9iamVjdCIsImdldEVudGl0eVNldCIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsImlzUHJvcGVydHlHcm91cGFibGUiLCJwcm9wZXJ0eSIsInVuZGVmaW5lZCIsImxlbmd0aCIsImZpbmRJbmRleCIsInBhdGgiLCIkdGFyZ2V0IiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9ucyIsImdldEFubm90YXRpb25zQnlUZXJtIiwic29tZSIsImFubm90YXRpb24iLCJuYW1lIiwicXVhbGlmaWVyIiwiZ2V0R3JvdXBhYmxlUHJvcGVydGllcyIsImdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMiLCJnZXRUcmFuc0FnZ3JlZ2F0aW9ucyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwiZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucyIsIlRyYW5zZm9ybWF0aW9ucyIsIkFwcGx5U3VwcG9ydGVkRGVmYXVsdHMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7OztBQVNBO0FBQ0E7QUFDQTtNQUNhQSxpQjtBQWNaO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNDLCtCQUFZQyxVQUFaLEVBQW9DQyxnQkFBcEMsRUFBd0U7QUFBQTs7QUFDdkUsV0FBS0MsV0FBTCxHQUFtQkYsVUFBbkI7QUFDQSxXQUFLRyxpQkFBTCxHQUF5QkYsZ0JBQXpCO0FBRUEsV0FBS0csNkJBQUwsR0FBcUMsS0FBS0MscUNBQUwsRUFBckM7O0FBQ0EsVUFBSSwrQkFBS0QsNkJBQUwsZ0ZBQW9DRSxLQUFwQyxNQUE4QyxvQkFBbEQsRUFBd0U7QUFBQTs7QUFDdkUsYUFBS0MsNkJBQUwsNkJBQXFDLEtBQUtILDZCQUExQyxxRkFBcUMsdUJBQW9DSSxXQUF6RSwyREFBcUMsdUJBQ2xDQyxXQURIO0FBRUEsT0FIRCxNQUdPLElBQUksZ0NBQUtMLDZCQUFMLGtGQUFvQ0UsS0FBcEMsTUFBOEMsWUFBbEQsRUFBZ0U7QUFBQTs7QUFDdEUsYUFBS0MsNkJBQUwsNkJBQXFDLEtBQUtILDZCQUExQyxxRkFBcUMsdUJBQW9DSSxXQUF6RSwyREFBcUMsdUJBQ2xDQyxXQURIO0FBRUEsT0FITSxNQUdBLElBQUksZ0NBQUtMLDZCQUFMLGtGQUFvQ0UsS0FBcEMsTUFBOEMsV0FBbEQsRUFBK0Q7QUFBQTs7QUFDckUsYUFBS0MsNkJBQUwsNkJBQXFDLEtBQUtILDZCQUExQyxxRkFB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QThELEdBQUcsS0FBS3ZDLGlCQUFMLENBQXVCd0Msb0JBQXZCLENBQ3RFLGFBRHNFLDhDQUd0RSxDQUFDLEtBQUt2Qyw2QkFBTixDQUhzRSxDQUF2RTs7QUFNQSxhQUFPc0MsMkJBQVA7QUFDQTtBQUVEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O1dBQ1FVLHlCLEdBQVAscUNBQXlEO0FBQUE7O0FBQ3hELGFBQ0MsMkJBQUMsS0FBSzdDLDZCQUFOLHFGQUFDLHVCQUFvQ0ksY0FBckMsMkRBQUMsdUJBQW9EMEMsZUFBckQsK0JBQ0MsS0FBS3JDLCtCQUROLG9GQUNDLHNCQUFzQ3NDLHNCQUR2QywyREFDQyx1QkFBOERELGVBRC9ELENBREQ7QUFJQSxLIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFubm90YXRpb25UZXJtLCBFbnRpdHlTZXQsIEVudGl0eVR5cGUsIE5hdmlnYXRpb25Qcm9wZXJ0eSwgUHJvcGVydHksIFByb3BlcnR5UGF0aCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkFubm90YXRpb25UZXJtcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB0eXBlIHtcblx0Q29sbGVjdGlvbkFubm90YXRpb25zX0FnZ3JlZ2F0aW9uLFxuXHRFbnRpdHlDb250YWluZXJBbm5vdGF0aW9uc19BZ2dyZWdhdGlvbixcblx0RW50aXR5U2V0QW5ub3RhdGlvbnNfQWdncmVnYXRpb24sXG5cdEVudGl0eVR5cGVBbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuXG4vKipcbiAqIGhlbHBlciBjbGFzcyBmb3IgQWdncmVnYXRpb24gYW5ub3RhdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdGlvbkhlbHBlciB7XG5cdF9lbnRpdHlUeXBlOiBFbnRpdHlUeXBlO1xuXHRfY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDtcblx0X2JBcHBseVN1cHBvcnRlZDogYm9vbGVhbjtcblx0X2FHcm91cGFibGVQcm9wZXJ0aWVzPzogUHJvcGVydHlQYXRoW107XG5cdF9hQWdncmVnYXRhYmxlUHJvcGVydGllcz87XG5cdF9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0OiBFbnRpdHlUeXBlIHwgRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5O1xuXHRvVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz86XG5cdFx0fCBDb2xsZWN0aW9uQW5ub3RhdGlvbnNfQWdncmVnYXRpb25cblx0XHR8IEVudGl0eVR5cGVBbm5vdGF0aW9uc19BZ2dyZWdhdGlvblxuXHRcdHwgRW50aXR5U2V0QW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cblx0b0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbj86IEVudGl0eUNvbnRhaW5lckFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgaGVscGVyIGZvciBhIHNwZWNpZmljIGVudGl0eSB0eXBlIGFuZCBhIGNvbnZlcnRlciBjb250ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZSBUaGUgRW50aXR5VHlwZVxuXHQgKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBUaGUgQ29udmVydGVyQ29udGV4dFxuXHQgKi9cblx0Y29uc3RydWN0b3IoZW50aXR5VHlwZTogRW50aXR5VHlwZSwgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCkge1xuXHRcdHRoaXMuX2VudGl0eVR5cGUgPSBlbnRpdHlUeXBlO1xuXHRcdHRoaXMuX2NvbnZlcnRlckNvbnRleHQgPSBjb252ZXJ0ZXJDb250ZXh0O1xuXG5cdFx0dGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCA9IHRoaXMuX2RldGVybWluZUFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCgpO1xuXHRcdGlmICh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5fdHlwZSA9PT0gXCJOYXZpZ2F0aW9uUHJvcGVydHlcIikge1xuXHRcdFx0dGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/LmFubm90YXRpb25zXG5cdFx0XHRcdD8uQWdncmVnYXRpb24gYXMgQ29sbGVjdGlvbkFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uX3R5cGUgPT09IFwiRW50aXR5VHlwZVwiKSB7XG5cdFx0XHR0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zID0gdGhpcy5fb0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldD8uYW5ub3RhdGlvbnNcblx0XHRcdFx0Py5BZ2dyZWdhdGlvbiBhcyBFbnRpdHlUeXBlQW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0Py5fdHlwZSA9PT0gXCJFbnRpdHlTZXRcIikge1xuXHRcdFx0dGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IHRoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXQ/LmFubm90YXRpb25zXG5cdFx0XHRcdD8uQWdncmVnYXRpb24gYXMgRW50aXR5U2V0QW5ub3RhdGlvbnNfQWdncmVnYXRpb247XG5cdFx0fVxuXHRcdHRoaXMuX2JBcHBseVN1cHBvcnRlZCA9IHRoaXMub1RhcmdldEFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnM/LkFwcGx5U3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXG5cdFx0aWYgKHRoaXMuX2JBcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0dGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMgPSB0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uR3JvdXBhYmxlUHJvcGVydGllcyBhcyBQcm9wZXJ0eVBhdGhbXTtcblx0XHRcdHRoaXMuX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzID0gdGhpcy5vVGFyZ2V0QWdncmVnYXRpb25Bbm5vdGF0aW9ucz8uQXBwbHlTdXBwb3J0ZWQ/LkFnZ3JlZ2F0YWJsZVByb3BlcnRpZXM7XG5cblx0XHRcdHRoaXMub0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbiA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCkuYW5ub3RhdGlvbnNcblx0XHRcdFx0LkFnZ3JlZ2F0aW9uIGFzIEVudGl0eUNvbnRhaW5lckFubm90YXRpb25zX0FnZ3JlZ2F0aW9uO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICogRGV0ZXJtaW5lcyB0aGUgbW9zdCBhcHByb3ByaWF0ZSB0YXJnZXQgZm9yIHRoZSBhZ2dyZWdhdGlvbiBhbm5vdGF0aW9ucy5cblx0ICpcblx0ICogQHJldHVybnMgIEVudGl0eVR5cGUsIEVudGl0eVNldCBvciBOYXZpZ2F0aW9uUHJvcGVydHkgd2hlcmUgYWdncmVnYXRpb24gYW5ub3RhdGlvbnMgc2hvdWxkIGJlIHJlYWQgZnJvbS5cblx0ICovXG5cdHByaXZhdGUgX2RldGVybWluZUFnZ3JlZ2F0aW9uQW5ub3RhdGlvblRhcmdldCgpOiBFbnRpdHlUeXBlIHwgRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5IHtcblx0XHRjb25zdCBiSXNQYXJhbWV0ZXJpemVkID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXREYXRhTW9kZWxPYmplY3RQYXRoKCk/LnRhcmdldEVudGl0eVNldD8uZW50aXR5VHlwZT8uYW5ub3RhdGlvbnM/LkNvbW1vblxuXHRcdFx0Py5SZXN1bHRDb250ZXh0XG5cdFx0XHQ/IHRydWVcblx0XHRcdDogZmFsc2U7XG5cdFx0bGV0IG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2U7XG5cblx0XHQvLyBmaW5kIEFwcGx5U3VwcG9ydGVkXG5cdFx0aWYgKGJJc1BhcmFtZXRlcml6ZWQpIHtcblx0XHRcdC8vIGlmIHRoaXMgaXMgYSBwYXJhbWV0ZXJpemVkIHZpZXcgdGhlbiBhcHBseXN1cHBvcnRlZCBjYW4gYmUgZm91bmQgYXQgZWl0aGVyIHRoZSBuYXZQcm9wIHBvaW50aW5nIHRvIHRoZSByZXN1bHQgc2V0IG9yIGVudGl0eVR5cGUuXG5cdFx0XHQvLyBJZiBhcHBseVN1cHBvcnRlZCBpcyBwcmVzZW50IGF0IGJvdGggdGhlIG5hdlByb3AgYW5kIHRoZSBlbnRpdHlUeXBlIHRoZW4gbmF2UHJvcCBpcyBtb3JlIHNwZWNpZmljIHNvIHRha2UgYW5ub3RhdGlvbnMgZnJvbSB0aGVyZVxuXHRcdFx0Ly8gdGFyZ2V0T2JqZWN0IGluIHRoZSBjb252ZXJ0ZXIgY29udGV4dCBmb3IgYSBwYXJhbWV0ZXJpemVkIHZpZXcgaXMgdGhlIG5hdmlnYXRpb24gcHJvcGVydHkgcG9pbnRpbmcgdG8gdGggcmVzdWx0IHNldFxuXHRcdFx0Y29uc3Qgb0RhdGFNb2RlbE9iamVjdFBhdGggPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0XHRcdGNvbnN0IG9OYXZpZ2F0aW9uUHJvcGVydHlPYmplY3QgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0T2JqZWN0O1xuXHRcdFx0Y29uc3Qgb0VudGl0eVR5cGVPYmplY3QgPSBvRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZTtcblx0XHRcdGlmIChvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0Py5hbm5vdGF0aW9ucz8uQWdncmVnYXRpb24/LkFwcGx5U3VwcG9ydGVkKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGlvbkFubm90YXRpb25Tb3VyY2UgPSBvTmF2aWdhdGlvblByb3BlcnR5T2JqZWN0O1xuXHRcdFx0fSBlbHNlIGlmIChvRW50aXR5VHlwZU9iamVjdD8uYW5ub3RhdGlvbnM/LkFnZ3JlZ2F0aW9uPy5BcHBseVN1cHBvcnRlZCkge1xuXHRcdFx0XHRvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlID0gb0VudGl0eVR5cGVPYmplY3Q7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEZvciB0aGUgdGltZSBiZWluZywgd2UgaWdub3JlIGFubm90YXRpb25zIGF0IHRoZSBjb250YWluZXIgbGV2ZWwsIHVudGlsIHRoZSB2b2NhYnVsYXJ5IGlzIHN0YWJpbGl6ZWRcblx0XHRcdGNvbnN0IG9FbnRpdHlTZXRPYmplY3QgPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVNldCgpO1xuXHRcdFx0aWYgKG9FbnRpdHlTZXRPYmplY3Q/LmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0aW9uQW5ub3RhdGlvblNvdXJjZSA9IG9FbnRpdHlTZXRPYmplY3Q7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvQWdncmVnYXRpb25Bbm5vdGF0aW9uU291cmNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZW50aXR5IHN1cHBvcnRzIGFuYWx5dGljYWwgcXVlcmllcy5cblx0ICpcblx0ICogQHJldHVybnMgYHRydWVgIGlmIGFuYWx5dGljYWwgcXVlcmllcyBhcmUgc3VwcG9ydGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRwdWJsaWMgaXNBbmFseXRpY3NTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX2JBcHBseVN1cHBvcnRlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBpcyBncm91cGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcblx0ICogQHJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLCB0cnVlIG9yIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0cHVibGljIGlzUHJvcGVydHlHcm91cGFibGUocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLl9iQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIGlmICghdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMgfHwgdGhpcy5fYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHQvLyBObyBncm91cGFibGVQcm9wZXJ0aWVzIC0tPiBhbGwgcHJvcGVydGllcyBhcmUgZ3JvdXBhYmxlXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzLmZpbmRJbmRleCgocGF0aCkgPT4gcGF0aC4kdGFyZ2V0LmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gcHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lKSA+PSAwO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBwcm9wZXJ0eSBpcyBhZ2dyZWdhdGFibGUuXG5cdCAqXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gY2hlY2tcblx0ICogQHJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIGVudGl0eSBkb2Vzbid0IHN1cHBvcnQgYW5hbHl0aWNhbCBxdWVyaWVzLCB0cnVlIG9yIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0cHVibGljIGlzUHJvcGVydHlBZ2dyZWdhdGFibGUocHJvcGVydHk6IFByb3BlcnR5KTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLl9iQXBwbHlTdXBwb3J0ZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIEdldCB0aGUgY3VzdG9tIGFnZ3JlZ2F0ZXNcblx0XHRcdGNvbnN0IGFDdXN0b21BZ2dyZWdhdGVBbm5vdGF0aW9uczogQW5ub3RhdGlvblRlcm08Q3VzdG9tQWdncmVnYXRlPltdID0gdGhpcy5fY29udmVydGVyQ29udGV4dC5nZXRBbm5vdGF0aW9uc0J5VGVybShcblx0XHRcdFx0XCJBZ2dyZWdhdGlvblwiLFxuXHRcdFx0XHRBZ2dyZWdhdGlvbkFubm90YXRpb25UZXJtcy5DdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHRcdFt0aGlzLl9vQWdncmVnYXRpb25Bbm5vdGF0aW9uVGFyZ2V0XVxuXHRcdFx0KTtcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBjdXN0b20gYWdncmVnYXRlIGhhcyBhIHF1YWxpZmllciB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwcm9wZXJ0eSBuYW1lXG5cdFx0XHRyZXR1cm4gYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zLnNvbWUoKGFubm90YXRpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIHByb3BlcnR5Lm5hbWUgPT09IGFubm90YXRpb24ucXVhbGlmaWVyO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGdldEdyb3VwYWJsZVByb3BlcnRpZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2FHcm91cGFibGVQcm9wZXJ0aWVzO1xuXHR9XG5cblx0cHVibGljIGdldEFnZ3JlZ2F0YWJsZVByb3BlcnRpZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2FBZ2dyZWdhdGFibGVQcm9wZXJ0aWVzO1xuXHR9XG5cblx0cHVibGljIGdldFRyYW5zQWdncmVnYXRpb25zKCkge1xuXHRcdHJldHVybiB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFwiQW5hbHl0aWNzXCIsIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQW5hbHl0aWNzLnYxLkFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzXCIsIFtcblx0XHRcdHRoaXMuX2NvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5Q29udGFpbmVyKCksXG5cdFx0XHR0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKVxuXHRcdF0pO1xuXHR9XG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsaXN0IG9mIGN1c3RvbSBhZ2dyZWdhdGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBlbnRpdHkgdHlwZS5cblx0ICpcblx0ICogQHJldHVybnMgQSBtYXAgKHByb3BlcnR5TmFtZSAtLT4gYXJyYXkgb2YgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eSBuYW1lcykgZm9yIGVhY2ggY3VzdG9tIGFnZ3JlZ2F0ZSBjb3JyZXNwb25kaW5nIHRvIGEgcHJvcGVydHkuIFRoZSBhcnJheSBvZlxuXHQgKiBjb250ZXh0LWRlZmluaW5nIHByb3BlcnR5IG5hbWVzIGlzIGVtcHR5IGlmIHRoZSBjdXN0b20gYWdncmVnYXRlIGRvZXNuJ3QgaGF2ZSBhbnkgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0eS5cblx0ICovXG5cdHB1YmxpYyBnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpIHtcblx0XHQvLyBHZXQgdGhlIGN1c3RvbSBhZ2dyZWdhdGVzXG5cdFx0Y29uc3QgYUN1c3RvbUFnZ3JlZ2F0ZUFubm90YXRpb25zOiBBbm5vdGF0aW9uVGVybTxDdXN0b21BZ2dyZWdhdGU+W10gPSB0aGlzLl9jb252ZXJ0ZXJDb250ZXh0LmdldEFubm90YXRpb25zQnlUZXJtKFxuXHRcdFx0XCJBZ2dyZWdhdGlvblwiLFxuXHRcdFx0QWdncmVnYXRpb25Bbm5vdGF0aW9uVGVybXMuQ3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0W3RoaXMuX29BZ2dyZWdhdGlvbkFubm90YXRpb25UYXJnZXRdXG5cdFx0KTtcblxuXHRcdHJldHVybiBhQ3VzdG9tQWdncmVnYXRlQW5ub3RhdGlvbnM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgbGlzdCBvZiBhbGxvd2VkIHRyYW5zZm9ybWF0aW9ucyBpbiB0aGUgJGFwcGx5LlxuXHQgKiBGaXJzdCBsb29rIGF0IHRoZSBjdXJyZW50IEVudGl0eVNldCwgdGhlbiBsb29rIGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBwcm92aWRlZCBhdCB0aGUgY29udGFpbmVyIGxldmVsLlxuXHQgKlxuXHQgKiBAcmV0dXJucyBUaGUgbGlzdCBvZiB0cmFuc2Zvcm1hdGlvbnMsIG9yIHVuZGVmaW5lZCBpZiBubyBsaXN0IGlzIGZvdW5kXG5cdCAqL1xuXHRwdWJsaWMgZ2V0QWxsb3dlZFRyYW5zZm9ybWF0aW9ucygpOiBTdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCh0aGlzLm9UYXJnZXRBZ2dyZWdhdGlvbkFubm90YXRpb25zPy5BcHBseVN1cHBvcnRlZD8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKSB8fFxuXHRcdFx0KHRoaXMub0NvbnRhaW5lckFnZ3JlZ2F0aW9uQW5ub3RhdGlvbj8uQXBwbHlTdXBwb3J0ZWREZWZhdWx0cz8uVHJhbnNmb3JtYXRpb25zIGFzIFN0cmluZ1tdKVxuXHRcdCk7XG5cdH1cbn1cbiJdfQ==
|