@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.
Files changed (339) hide show
  1. package/package.json +5 -5
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +66 -30
  4. package/src/sap/fe/core/AppComponent.ts +68 -51
  5. package/src/sap/fe/core/AppStateHandler.js +13 -13
  6. package/src/sap/fe/core/AppStateHandler.ts +18 -18
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +279 -188
  10. package/src/sap/fe/core/CommonUtils.ts +306 -215
  11. package/src/sap/fe/core/ExtensionAPI.js +25 -30
  12. package/src/sap/fe/core/ExtensionAPI.ts +37 -41
  13. package/src/sap/fe/core/PageController.js +12 -7
  14. package/src/sap/fe/core/PageController.ts +10 -5
  15. package/src/sap/fe/core/TemplateComponent.js +6 -6
  16. package/src/sap/fe/core/TemplateComponent.ts +11 -11
  17. package/src/sap/fe/core/TemplateModel.js +2 -2
  18. package/src/sap/fe/core/TemplateModel.ts +3 -3
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +306 -78
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +280 -70
  23. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +27 -27
  24. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +28 -26
  25. package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
  26. package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +351 -229
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +321 -246
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +59 -34
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -45
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +72 -72
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +82 -80
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +152 -131
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +171 -152
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +11 -10
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +31 -37
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +30 -15
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +19 -11
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +22 -14
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +39 -21
  52. package/src/sap/fe/core/controllerextensions/Share.ts +45 -26
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -62
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +75 -62
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +78 -63
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +99 -0
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
  60. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +58 -112
  61. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +7 -7
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +262 -0
  64. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +20 -21
  65. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
  66. package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
  67. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1631 -0
  68. package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +270 -211
  69. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +772 -0
  70. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +240 -100
  71. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1199 -0
  72. package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +364 -229
  73. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +188 -0
  74. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +185 -0
  75. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +626 -0
  76. package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +112 -69
  77. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +937 -0
  78. package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +72 -73
  79. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
  80. package/src/sap/fe/core/controls/Any.js +9 -5
  81. package/src/sap/fe/core/controls/Any.ts +10 -4
  82. package/src/sap/fe/core/controls/CommandExecution.js +21 -24
  83. package/src/sap/fe/core/controls/CommandExecution.ts +19 -24
  84. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  85. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  86. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +48 -43
  87. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +51 -46
  88. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  89. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +3 -2
  90. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
  91. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +19 -9
  92. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +14 -8
  93. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  94. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/FileWrapper.js +50 -3
  96. package/src/sap/fe/core/controls/FileWrapper.ts +45 -12
  97. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  98. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  99. package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
  100. package/src/sap/fe/core/controls/FormElementWrapper.ts +14 -3
  101. package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
  102. package/src/sap/fe/core/controls/MassEditSelect.ts +41 -0
  103. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  104. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  105. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  106. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  107. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  108. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +48 -48
  109. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +71 -76
  110. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +36 -65
  111. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
  112. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +551 -36
  113. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +605 -36
  114. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  115. package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
  116. package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
  117. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -14
  118. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  119. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  120. package/src/sap/fe/core/converters/MetaModelConverter.js +56 -67
  121. package/src/sap/fe/core/converters/MetaModelConverter.ts +183 -193
  122. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  123. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  124. package/src/sap/fe/core/converters/annotations/DataField.js +73 -37
  125. package/src/sap/fe/core/converters/annotations/DataField.ts +121 -77
  126. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  127. package/src/sap/fe/core/converters/controls/Common/Action.js +51 -49
  128. package/src/sap/fe/core/converters/controls/Common/Action.ts +58 -54
  129. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -15
  130. package/src/sap/fe/core/converters/controls/Common/Chart.ts +29 -27
  131. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  132. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  133. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
  134. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
  135. package/src/sap/fe/core/converters/controls/Common/Form.js +30 -34
  136. package/src/sap/fe/core/converters/controls/Common/Form.ts +48 -58
  137. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  138. package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
  139. package/src/sap/fe/core/converters/controls/Common/Table.js +318 -244
  140. package/src/sap/fe/core/converters/controls/Common/Table.ts +368 -297
  141. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +135 -125
  142. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +162 -148
  143. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +51 -45
  144. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +79 -67
  145. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  146. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  147. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  148. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  149. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  150. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  151. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +92 -89
  152. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +124 -120
  153. package/src/sap/fe/core/converters/helpers/Aggregation.js +11 -5
  154. package/src/sap/fe/core/converters/helpers/Aggregation.ts +25 -23
  155. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -30
  156. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +31 -29
  157. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  158. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  159. package/src/sap/fe/core/converters/helpers/ID.js +46 -46
  160. package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
  161. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  162. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  163. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  164. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
  165. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  166. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  167. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  168. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  169. package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
  170. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
  171. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +56 -55
  172. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +65 -77
  173. package/src/sap/fe/core/designtime/AppComponent.designtime.js +6 -6
  174. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +10 -8
  175. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  176. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  177. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  178. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  179. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  180. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  181. package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
  182. package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
  183. package/src/sap/fe/core/formatters/TableFormatter.js +83 -22
  184. package/src/sap/fe/core/formatters/TableFormatter.ts +80 -25
  185. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  186. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  187. package/src/sap/fe/core/fpm/Component.js +2 -2
  188. package/src/sap/fe/core/fpm/Component.ts +1 -1
  189. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  190. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  191. package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
  192. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +388 -285
  193. package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
  194. package/src/sap/fe/core/helpers/ClassSupport.ts +15 -10
  195. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  196. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  197. package/src/sap/fe/core/helpers/EditState.js +1 -6
  198. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  199. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  200. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  201. package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
  202. package/src/sap/fe/core/helpers/FPMHelper.ts +10 -9
  203. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  204. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  205. package/src/sap/fe/core/helpers/MassEditHelper.js +532 -264
  206. package/src/sap/fe/core/helpers/MassEditHelper.ts +560 -289
  207. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  208. package/src/sap/fe/core/helpers/ModelHelper.ts +50 -58
  209. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  210. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  211. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  212. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  213. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  214. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  215. package/src/sap/fe/core/helpers/StableIdHelper.js +16 -12
  216. package/src/sap/fe/core/helpers/StableIdHelper.ts +20 -16
  217. package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
  218. package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
  219. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  220. package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
  221. package/src/sap/fe/core/library.js +51 -3
  222. package/src/sap/fe/core/library.ts +47 -0
  223. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  224. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  225. package/src/sap/fe/core/messagebundle.properties +151 -197
  226. package/src/sap/fe/core/messagebundle_ar.properties +36 -63
  227. package/src/sap/fe/core/messagebundle_bg.properties +36 -63
  228. package/src/sap/fe/core/messagebundle_ca.properties +36 -63
  229. package/src/sap/fe/core/messagebundle_cs.properties +36 -63
  230. package/src/sap/fe/core/messagebundle_cy.properties +36 -63
  231. package/src/sap/fe/core/messagebundle_da.properties +37 -64
  232. package/src/sap/fe/core/messagebundle_de.properties +36 -63
  233. package/src/sap/fe/core/messagebundle_el.properties +38 -65
  234. package/src/sap/fe/core/messagebundle_en.properties +37 -64
  235. package/src/sap/fe/core/messagebundle_en_GB.properties +37 -64
  236. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +44 -73
  237. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +37 -64
  238. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +52 -81
  239. package/src/sap/fe/core/messagebundle_es.properties +36 -63
  240. package/src/sap/fe/core/messagebundle_es_MX.properties +36 -63
  241. package/src/sap/fe/core/messagebundle_et.properties +36 -63
  242. package/src/sap/fe/core/messagebundle_fi.properties +36 -63
  243. package/src/sap/fe/core/messagebundle_fr.properties +39 -66
  244. package/src/sap/fe/core/messagebundle_fr_CA.properties +36 -63
  245. package/src/sap/fe/core/messagebundle_hi.properties +36 -63
  246. package/src/sap/fe/core/messagebundle_hr.properties +36 -63
  247. package/src/sap/fe/core/messagebundle_hu.properties +35 -62
  248. package/src/sap/fe/core/messagebundle_id.properties +37 -64
  249. package/src/sap/fe/core/messagebundle_it.properties +54 -81
  250. package/src/sap/fe/core/messagebundle_iw.properties +36 -63
  251. package/src/sap/fe/core/messagebundle_ja.properties +36 -63
  252. package/src/sap/fe/core/messagebundle_kk.properties +36 -63
  253. package/src/sap/fe/core/messagebundle_ko.properties +36 -63
  254. package/src/sap/fe/core/messagebundle_lt.properties +36 -63
  255. package/src/sap/fe/core/messagebundle_lv.properties +36 -63
  256. package/src/sap/fe/core/messagebundle_ms.properties +37 -64
  257. package/src/sap/fe/core/messagebundle_nl.properties +37 -64
  258. package/src/sap/fe/core/messagebundle_no.properties +36 -63
  259. package/src/sap/fe/core/messagebundle_pl.properties +37 -64
  260. package/src/sap/fe/core/messagebundle_pt.properties +37 -64
  261. package/src/sap/fe/core/messagebundle_pt_PT.properties +36 -63
  262. package/src/sap/fe/core/messagebundle_ro.properties +36 -63
  263. package/src/sap/fe/core/messagebundle_ru.properties +36 -63
  264. package/src/sap/fe/core/messagebundle_sh.properties +36 -63
  265. package/src/sap/fe/core/messagebundle_sk.properties +36 -63
  266. package/src/sap/fe/core/messagebundle_sl.properties +38 -65
  267. package/src/sap/fe/core/messagebundle_sv.properties +36 -63
  268. package/src/sap/fe/core/messagebundle_th.properties +36 -63
  269. package/src/sap/fe/core/messagebundle_tr.properties +36 -63
  270. package/src/sap/fe/core/messagebundle_uk.properties +37 -64
  271. package/src/sap/fe/core/messagebundle_vi.properties +37 -64
  272. package/src/sap/fe/core/messagebundle_zh_CN.properties +36 -63
  273. package/src/sap/fe/core/messagebundle_zh_TW.properties +37 -64
  274. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  275. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  276. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
  278. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
  279. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +12 -10
  280. package/src/sap/fe/core/services/NavigationServiceFactory.js +54 -45
  281. package/src/sap/fe/core/services/NavigationServiceFactory.ts +61 -49
  282. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  283. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  284. package/src/sap/fe/core/services/RoutingServiceFactory.js +63 -60
  285. package/src/sap/fe/core/services/RoutingServiceFactory.ts +76 -73
  286. package/src/sap/fe/core/services/ShellServicesFactory.js +102 -71
  287. package/src/sap/fe/core/services/ShellServicesFactory.ts +109 -78
  288. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  289. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  290. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +24 -18
  291. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +53 -50
  292. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  293. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  294. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  295. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  296. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  297. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  298. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  299. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  300. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  301. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  302. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  303. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  304. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  305. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +3 -4
  306. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -15
  307. package/src/sap/fe/core/templating/EntitySetHelper.ts +14 -18
  308. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  309. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  310. package/src/sap/fe/core/templating/FilterHelper.js +12 -11
  311. package/src/sap/fe/core/templating/FilterHelper.ts +17 -16
  312. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  313. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  314. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  315. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  316. package/src/sap/fe/core/templating/PropertyHelper.js +79 -56
  317. package/src/sap/fe/core/templating/PropertyHelper.ts +41 -27
  318. package/src/sap/fe/core/templating/UIFormatters.js +163 -97
  319. package/src/sap/fe/core/templating/UIFormatters.ts +210 -129
  320. package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
  321. package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/AnnotationHelper.js +0 -331
  325. package/src/sap/fe/core/AnnotationHelper.ts +0 -321
  326. package/src/sap/fe/core/RouterProxy.js +0 -938
  327. package/src/sap/fe/core/TransactionHelper.js +0 -1577
  328. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
  329. package/src/sap/fe/core/actions/collaboration/Manage.js +0 -264
  330. package/src/sap/fe/core/actions/draft.js +0 -665
  331. package/src/sap/fe/core/actions/messageHandling.js +0 -579
  332. package/src/sap/fe/core/actions/nonDraft.js +0 -20
  333. package/src/sap/fe/core/actions/nonDraft.ts +0 -12
  334. package/src/sap/fe/core/actions/operations.js +0 -1096
  335. package/src/sap/fe/core/actions/sticky.js +0 -130
  336. package/src/sap/fe/core/actions/sticky.ts +0 -119
  337. package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
  338. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
  339. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1729
@@ -1,13 +1,13 @@
1
+ import type ResourceBundle from "sap/base/i18n/ResourceBundle";
1
2
  import Log from "sap/base/Log";
2
- import BaseObject from "sap/ui/base/Object";
3
- import Synchronization from "sap/fe/core/Synchronization";
4
- import URI from "sap/ui/thirdparty/URI";
5
- import { IShellServices } from "sap/fe/core/services/ShellServicesFactory";
6
- import Router from "sap/ui/core/routing/Router";
7
3
  import { defineUI5Class } from "sap/fe/core/helpers/ClassSupport";
8
- import ResourceBundle from "sap/base/i18n/ResourceBundle";
9
- import { CoreEx } from "types/extension_types";
4
+ import Synchronization from "sap/fe/core/helpers/Synchronization";
5
+ import type { IShellServices } from "sap/fe/core/services/ShellServicesFactory";
6
+ import BaseObject from "sap/ui/base/Object";
10
7
  import Core from "sap/ui/core/Core";
8
+ import type Router from "sap/ui/core/routing/Router";
9
+ import URI from "sap/ui/thirdparty/URI";
10
+ import type { CoreEx } from "types/extension_types";
11
11
 
12
12
  const enumState = {
13
13
  EQUAL: 0,
@@ -23,13 +23,13 @@ const enumURLParams = {
23
23
  /**
24
24
  * Creates a HashGuard object.
25
25
  *
26
- * @param {string} sGuardHash The hash used for the guard
27
- * @returns {object} The created hash guard
26
+ * @param sGuardHash The hash used for the guard
27
+ * @returns The created hash guard
28
28
  */
29
29
  function createGuardFromHash(sGuardHash: string) {
30
30
  return {
31
31
  _guardHash: sGuardHash.replace(/\?[^\?]*$/, ""), // Remove query part
32
- check: function(sHash: any) {
32
+ check: function (sHash: any) {
33
33
  return sHash.indexOf(this._guardHash) === 0;
34
34
  }
35
35
  };
@@ -37,43 +37,43 @@ function createGuardFromHash(sGuardHash: string) {
37
37
  /**
38
38
  * Returns the iAppState part from a hash (or null if not found).
39
39
  *
40
- * @param {string} sHash The hash
41
- * @returns {string} The iAppState part of the hash
40
+ * @param sHash The hash
41
+ * @returns The iAppState part of the hash
42
42
  */
43
43
  function findAppStateInHash(sHash: string): string | null {
44
- const aAppState = sHash.match(new RegExp("\\?.*" + enumURLParams.IAPPSTATEPARAM + "=([^&]*)"));
44
+ const aAppState = sHash.match(new RegExp(`\\?.*${enumURLParams.IAPPSTATEPARAM}=([^&]*)`));
45
45
  return aAppState && aAppState.length > 1 ? aAppState[1] : null;
46
46
  }
47
47
  /**
48
48
  * Returns a hash without its iAppState part.
49
49
  *
50
- * @param {string} sHash The hash
51
- * @returns {string} The hash without the iAppState
50
+ * @param sHash The hash
51
+ * @returns The hash without the iAppState
52
52
  */
53
53
  function removeAppStateInHash(sHash: string) {
54
- return sHash.replace(new RegExp("[&?]*" + enumURLParams.IAPPSTATEPARAM + "=[^&]*"), "");
54
+ return sHash.replace(new RegExp(`[&?]*${enumURLParams.IAPPSTATEPARAM}=[^&]*`), "");
55
55
  }
56
56
  /**
57
57
  * Adds an iAppState inside a hash (or replaces an existing one).
58
58
  *
59
- * @param {*} sHash The hash
60
- * @param {*} sAppStateKey The iAppState to add
61
- * @returns {string} The hash with the app state
59
+ * @param sHash The hash
60
+ * @param sAppStateKey The iAppState to add
61
+ * @returns The hash with the app state
62
62
  */
63
63
  function setAppStateInHash(sHash: any, sAppStateKey: any) {
64
64
  let sNewHash;
65
65
 
66
66
  if (sHash.indexOf(enumURLParams.IAPPSTATEPARAM) >= 0) {
67
67
  // If there's already an iAppState parameter in the hash, replace it
68
- sNewHash = sHash.replace(new RegExp(enumURLParams.IAPPSTATEPARAM + "=[^&]*"), enumURLParams.IAPPSTATEPARAM + "=" + sAppStateKey);
68
+ sNewHash = sHash.replace(new RegExp(`${enumURLParams.IAPPSTATEPARAM}=[^&]*`), `${enumURLParams.IAPPSTATEPARAM}=${sAppStateKey}`);
69
69
  } else {
70
70
  // Add the iAppState parameter in the hash
71
71
  if (sHash.indexOf("?") < 0) {
72
- sNewHash = sHash + "?";
72
+ sNewHash = `${sHash}?`;
73
73
  } else {
74
- sNewHash = sHash + "&";
74
+ sNewHash = `${sHash}&`;
75
75
  }
76
- sNewHash += enumURLParams.IAPPSTATEPARAM + "=" + sAppStateKey;
76
+ sNewHash += `${enumURLParams.IAPPSTATEPARAM}=${sAppStateKey}`;
77
77
  }
78
78
 
79
79
  return sNewHash;
@@ -129,7 +129,7 @@ class RouterProxy extends BaseObject {
129
129
  this._fnBlockingNavFilter = this._blockingNavigationFilter.bind(this);
130
130
  this._oShellServices.registerNavigationFilter(this._fnBlockingNavFilter);
131
131
  })
132
- .catch(function(oError: any) {
132
+ .catch(function (oError: any) {
133
133
  Log.error("Cannot retrieve the shell services", oError);
134
134
  });
135
135
  this._fnHashGuard = this.hashGuard.bind(this);
@@ -149,7 +149,7 @@ class RouterProxy extends BaseObject {
149
149
  /**
150
150
  * Raw initialization (for unit tests).
151
151
  *
152
- * @param {sap.ui.core.routing.Router} oRouter The router used by this proxy
152
+ * @param oRouter The router used by this proxy
153
153
  */
154
154
  initRaw(oRouter: Router) {
155
155
  this._oRouter = oRouter;
@@ -180,7 +180,6 @@ class RouterProxy extends BaseObject {
180
180
  *
181
181
  * @function
182
182
  * @name sap.fe.core.RouterProxy#removeIAppStateKey
183
- *
184
183
  * @ui5-restricted
185
184
  */
186
185
  removeIAppStateKey() {
@@ -194,12 +193,12 @@ class RouterProxy extends BaseObject {
194
193
  * @name sap.fe.core.RouterProxy#navToHash
195
194
  * @memberof sap.fe.core.RouterProxy
196
195
  * @static
197
- * @param {string} sHash Hash to be navigated to
198
- * @param {boolean} bPreserveHistory If set to true, non-ancestor entries in history will be retained
199
- * @param {boolean} bDisablePreservationCache If set to true, cache preservation mechanism is disabled for the current navigation
200
- * @param {boolean} bForceFocus If set to true, the logic to set the focus once the navigation is finalized will be triggered (onPageReady)
201
- * @param {boolean} bPreserveShellBackNavigationHandler If not set to false, the back navigation is set to undefined
202
- * @returns {Promise} Promise (resolved when the navigation is finalized) that returns 'true' if a navigation took place, 'false' if the navigation didn't happen
196
+ * @param sHash Hash to be navigated to
197
+ * @param bPreserveHistory If set to true, non-ancestor entries in history will be retained
198
+ * @param bDisablePreservationCache If set to true, cache preservation mechanism is disabled for the current navigation
199
+ * @param bForceFocus If set to true, the logic to set the focus once the navigation is finalized will be triggered (onPageReady)
200
+ * @param bPreserveShellBackNavigationHandler If not set to false, the back navigation is set to undefined
201
+ * @returns Promise (resolved when the navigation is finalized) that returns 'true' if a navigation took place, 'false' if the navigation didn't happen
203
202
  * @ui5-restricted
204
203
  */
205
204
  navToHash(
@@ -208,7 +207,7 @@ class RouterProxy extends BaseObject {
208
207
  bDisablePreservationCache?: boolean,
209
208
  bForceFocus?: boolean,
210
209
  bPreserveShellBackNavigationHandler?: boolean
211
- ) {
210
+ ): Promise<boolean> {
212
211
  if (bPreserveShellBackNavigationHandler !== false) {
213
212
  this._oShellServices.setBackNavigation();
214
213
  }
@@ -225,7 +224,7 @@ class RouterProxy extends BaseObject {
225
224
  }
226
225
  }
227
226
 
228
- _internalNavToHash(sHash: any, bPreserveHistory: any, bDisablePreservationCache: any, bForceFocus?: boolean) {
227
+ _internalNavToHash(sHash: any, bPreserveHistory: any, bDisablePreservationCache: any, bForceFocus?: boolean): Promise<boolean> {
229
228
  // Add the app state in the hash if needed
230
229
  if (this.fclEnabled && this.sIAppStateKey && !findAppStateInHash(sHash)) {
231
230
  sHash = setAppStateInHash(sHash, this.sIAppStateKey);
@@ -255,7 +254,7 @@ class RouterProxy extends BaseObject {
255
254
  this._bForceFocus =
256
255
  bForceFocus ||
257
256
  (aCurrentHashKeys.length < oNewState.keys.length &&
258
- aCurrentHashKeys.every(function(key: any, index: any) {
257
+ aCurrentHashKeys.every(function (key: any, index: any) {
259
258
  return key === oNewState.keys[index];
260
259
  }));
261
260
  }
@@ -269,7 +268,7 @@ class RouterProxy extends BaseObject {
269
268
  * Clears browser history if entries have been added without using the RouterProxy.
270
269
  * Updates the internal history accordingly.
271
270
  *
272
- * @returns {Promise} Promise that is resolved once the history is rebuilt
271
+ * @returns Promise that is resolved once the history is rebuilt
273
272
  */
274
273
  restoreHistory() {
275
274
  if (this._bApplyRestore) {
@@ -289,7 +288,7 @@ class RouterProxy extends BaseObject {
289
288
  /**
290
289
  * Navigates back in the history.
291
290
  *
292
- * @returns {Promise} Promise that is resolved when the navigation is finalized
291
+ * @returns Promise that is resolved when the navigation is finalized
293
292
  */
294
293
  navBack() {
295
294
  const sCurrentHash = this.getHash();
@@ -316,9 +315,10 @@ class RouterProxy extends BaseObject {
316
315
 
317
316
  /**
318
317
  * Navigates to a route with parameters.
319
- * @param {string} sRouteName The route name to be navigated to
320
- * @param {object} oParameters Parameters for the navigation
321
- * @returns {Promise} Promise that is resolved when the navigation is finalized
318
+ *
319
+ * @param sRouteName The route name to be navigated to
320
+ * @param oParameters Parameters for the navigation
321
+ * @returns Promise that is resolved when the navigation is finalized
322
322
  * @ui5-restricted
323
323
  */
324
324
  navTo(sRouteName: string, oParameters: any) {
@@ -330,7 +330,7 @@ class RouterProxy extends BaseObject {
330
330
  * Exits the current app by navigating back
331
331
  * to the previous app (if any) or the FLP.
332
332
  *
333
- * @returns {Promise} Promise that is resolved when we exit the app
333
+ * @returns Promise that is resolved when we exit the app
334
334
  */
335
335
  exitFromApp() {
336
336
  return this._oShellServices.backToPreviousApp();
@@ -340,8 +340,8 @@ class RouterProxy extends BaseObject {
340
340
  * Checks whether a given hash can have an impact on the current state
341
341
  * i.e. if the hash is equal, compatible or an ancestor of the current state.
342
342
  *
343
- * @param {*} sHash `true` if there is an impact
344
- * @returns {boolean} If there is an impact
343
+ * @param sHash `true` if there is an impact
344
+ * @returns If there is an impact
345
345
  */
346
346
  isCurrentStateImpactedBy(sHash: any) {
347
347
  if (sHash[0] === "/") {
@@ -354,7 +354,7 @@ class RouterProxy extends BaseObject {
354
354
  /**
355
355
  * Checks if a navigation is currently being processed.
356
356
  *
357
- * @returns {boolean} `false` if a navigation has been triggered in the RouterProxy and is not yet finalized
357
+ * @returns `false` if a navigation has been triggered in the RouterProxy and is not yet finalized
358
358
  */
359
359
  isNavigationFinalized() {
360
360
  return !this.bIsRebuildHistoryRunning && !this._bDelayedRebuild;
@@ -382,7 +382,7 @@ class RouterProxy extends BaseObject {
382
382
  /**
383
383
  * Checks for the availability of the navigation guard.
384
384
  *
385
- * @returns {boolean} `true` if navigating guard is available
385
+ * @returns `true` if navigating guard is available
386
386
  */
387
387
  hasNavigationGuard() {
388
388
  return this._oNavigationGuard !== null;
@@ -391,8 +391,8 @@ class RouterProxy extends BaseObject {
391
391
  /**
392
392
  * Tests a hash against the navigation guard.
393
393
  *
394
- * @param {string} sHash The hash to be tested
395
- * @returns {boolean} `true` if navigating to the hash doesn't cross the guard
394
+ * @param sHash The hash to be tested
395
+ * @returns `true` if navigating to the hash doesn't cross the guard
396
396
  */
397
397
  checkHashWithGuard(sHash: string) {
398
398
  return this._oNavigationGuard === null || this._oNavigationGuard.check(sHash);
@@ -401,7 +401,7 @@ class RouterProxy extends BaseObject {
401
401
  /**
402
402
  * Checks if the user allowed the navigation guard to be crossed.
403
403
  *
404
- * @returns {boolean} `true` if crossing the guard has been allowed by the user
404
+ * @returns `true` if crossing the guard has been allowed by the user
405
405
  */
406
406
  isGuardCrossAllowedByUser() {
407
407
  return this.bIsGuardCrossAllowed;
@@ -441,7 +441,7 @@ class RouterProxy extends BaseObject {
441
441
  const aTokens = sHashNoParams.split("/");
442
442
  const aKeys: any[] = [];
443
443
 
444
- aTokens.forEach(function(sToken: any) {
444
+ aTokens.forEach(function (sToken: any) {
445
445
  const regexKey = /[^\(\)]+\([^\(\)]+\)/; // abc(def)
446
446
  if (regexKey.test(sToken)) {
447
447
  aKeys.push(sToken.split("(")[0]);
@@ -454,9 +454,8 @@ class RouterProxy extends BaseObject {
454
454
  /**
455
455
  * Builds a state from a hash.
456
456
  *
457
- * @param {string} sHash The hash to be used as entry
458
- * @returns {object} The state
459
- *
457
+ * @param sHash The hash to be used as entry
458
+ * @returns The state
460
459
  * @ui5-restricted
461
460
  */
462
461
  _extractStateFromHash(sHash: string) {
@@ -469,7 +468,7 @@ class RouterProxy extends BaseObject {
469
468
  };
470
469
 
471
470
  // Retrieve layout (if any)
472
- const aLayout = sHash.match(new RegExp("\\?.*" + enumURLParams.LAYOUTPARAM + "=([^&]*)"));
471
+ const aLayout = sHash.match(new RegExp(`\\?.*${enumURLParams.LAYOUTPARAM}=([^&]*)`));
473
472
  oState.sLayout = aLayout && aLayout.length > 1 ? aLayout[1] : null;
474
473
  if (oState.sLayout === "MidColumnFullScreen") {
475
474
  oState.screenMode = 1;
@@ -489,11 +488,11 @@ class RouterProxy extends BaseObject {
489
488
  * Also sets the iAppState key in the whole history.
490
489
  *
491
490
  * @memberof sap.fe.core.RouterProxy
492
- * @param {object} oNewState The new state to be added
493
- * @param {boolean} bRebuildOnly `true` if we're rebuilding the history after a shell menu navigation
494
- * @param {boolean} bPreserveHistory If set to true, non-ancestor entries in history will be retained
495
- * @param {boolean} bDisableHistoryPreservation Disable the mechanism to retained marked entries in cache
496
- * @returns {object} The new state
491
+ * @param oNewState The new state to be added
492
+ * @param bRebuildOnly `true` if we're rebuilding the history after a shell menu navigation
493
+ * @param bPreserveHistory If set to true, non-ancestor entries in history will be retained
494
+ * @param bDisableHistoryPreservation Disable the mechanism to retained marked entries in cache
495
+ * @returns The new state
497
496
  * @ui5-restricted
498
497
  * @final
499
498
  */
@@ -598,7 +597,6 @@ class RouterProxy extends BaseObject {
598
597
  *
599
598
  * @function
600
599
  * @memberof sap.fe.core.RouterProxy
601
- *
602
600
  * @ui5-restricted
603
601
  * @final
604
602
  */
@@ -613,8 +611,7 @@ class RouterProxy extends BaseObject {
613
611
  * @function
614
612
  * @name sap.fe.core.RouterProxy#_enableEventOnHashChange
615
613
  * @memberof sap.fe.core.RouterProxy
616
- * @param {boolean} [bIgnoreCurrentHash] Ignore the last hash event triggered before the router has initialized
617
- *
614
+ * @param [bIgnoreCurrentHash] Ignore the last hash event triggered before the router has initialized
618
615
  * @ui5-restricted
619
616
  * @final
620
617
  */
@@ -627,16 +624,16 @@ class RouterProxy extends BaseObject {
627
624
  * Synchronizes the browser history with the internal history of the routerProxy, and triggers a navigation if needed.
628
625
  *
629
626
  * @memberof sap.fe.core.RouterProxy
630
- * @param {object} oHistoryAction Specifies the navigation action to be performed
631
- * @param {boolean} bRebuildOnly `true` if internal history is currently being rebuilt
632
- * @returns {Promise} Promise (resolved when the navigation is finalized) that returns 'true' if a navigation took place, 'false' if the navigation didn't happen
627
+ * @param oHistoryAction Specifies the navigation action to be performed
628
+ * @param bRebuildOnly `true` if internal history is currently being rebuilt
629
+ * @returns Promise (resolved when the navigation is finalized) that returns 'true' if a navigation took place, 'false' if the navigation didn't happen
633
630
  * @ui5-restricted
634
631
  * @final
635
632
  */
636
- _rebuildBrowserHistory(oHistoryAction: any, bRebuildOnly: boolean) {
633
+ _rebuildBrowserHistory(oHistoryAction: any, bRebuildOnly: boolean): Promise<boolean> {
637
634
  // eslint-disable-next-line @typescript-eslint/no-this-alias
638
635
  const that = this;
639
- return new Promise(resolve => {
636
+ return new Promise((resolve) => {
640
637
  this.bIsRebuildHistoryRunning = true;
641
638
  const oTargetState = this._oManagedHistory[this._oManagedHistory.length - 1],
642
639
  newLevel = this._oManagedHistory.length - 1;
@@ -650,7 +647,7 @@ class RouterProxy extends BaseObject {
650
647
  history.replaceState(Object.assign({ feLevel: newLevel }, history.state), "");
651
648
 
652
649
  if (bRebuildOnly) {
653
- setTimeout(function() {
650
+ setTimeout(function () {
654
651
  // Timeout to let 'hashchange' event be processed before by the HashChanger, so that
655
652
  // onRouteMatched notification isn't raised
656
653
  that._enableEventOnHashChange(true);
@@ -664,7 +661,7 @@ class RouterProxy extends BaseObject {
664
661
  // Async callbacks when navigating back, in order to let all notifications and events get processed
665
662
  function backReplaceAsync() {
666
663
  window.removeEventListener("popstate", backReplaceAsync);
667
- setTimeout(function() {
664
+ setTimeout(function () {
668
665
  // Timeout to let 'hashchange' event be processed before by the HashChanger
669
666
  replaceAsync();
670
667
  }, 0);
@@ -717,7 +714,9 @@ class RouterProxy extends BaseObject {
717
714
  }
718
715
 
719
716
  setPathMapping(mappings: { oldPath: string; newPath: string }[]) {
720
- this._pathMappings = mappings;
717
+ this._pathMappings = mappings.filter((mapping) => {
718
+ return mapping.oldPath !== mapping.newPath;
719
+ });
721
720
  }
722
721
 
723
722
  hashGuard() {
@@ -727,7 +726,7 @@ class RouterProxy extends BaseObject {
727
726
  this._bApplyRestore = true;
728
727
  } else if (!this.bIsRebuildHistoryRunning) {
729
728
  // Check if the hash needs to be changed (this happens in FCL when switching b/w edit and read-only with 3 columns open)
730
- const mapping = this._pathMappings.find(m => {
729
+ const mapping = this._pathMappings.find((m) => {
731
730
  return sHash.indexOf(m.oldPath) >= 0;
732
731
  });
733
732
  if (mapping) {
@@ -795,8 +794,8 @@ class RouterProxy extends BaseObject {
795
794
  /**
796
795
  * Checks if back exits the present guard set.
797
796
  *
798
- * @param {string} sPresentHash The current hash. Only used for unit tests.
799
- * @returns {boolean} `true` if back exits there is a guard exit on back
797
+ * @param sPresentHash The current hash. Only used for unit tests.
798
+ * @returns `true` if back exits there is a guard exit on back
800
799
  */
801
800
  checkIfBackIsOutOfGuard(sPresentHash?: string) {
802
801
  let sPrevHash;
@@ -837,7 +836,7 @@ class RouterProxy extends BaseObject {
837
836
  /**
838
837
  * Checks if the last 2 entries in the history share the same context.
839
838
  *
840
- * @returns {boolean} `true` if they share the same context.
839
+ * @returns `true` if they share the same context.
841
840
  */
842
841
  checkIfBackHasSameContext() {
843
842
  if (this._oManagedHistory.length < 2) {
@@ -18,27 +18,27 @@
18
18
  Property: 'sap/fe/core/templating/PropertyFormatters'
19
19
  }"
20
20
  >
21
- <form:SimpleForm binding="{$Parameter}">
22
- <template:repeat list="{action>$Parameter}" var="parameter">
23
- <template:with path="parameter>" helper="COMMON.gotoActionParameter" var="actionParameter">
24
- <!-- In case of bound actions the first parameter shall be ignored -->
25
- <template:if test="{= !${action>$IsBound} || ${parameter>$Name} !== ${action>$Parameter/0/$Name} }">
26
- <Label
21
+ <form:SimpleForm binding="{$Parameter}">
22
+ <template:repeat list="{action>$Parameter}" var="parameter">
23
+ <template:with path="parameter>" helper="COMMON.gotoActionParameter" var="actionParameter">
24
+ <!-- In case of bound actions the first parameter shall be ignored -->
25
+ <template:if test="{= !${action>$IsBound} || ${parameter>$Name} !== ${action>$Parameter/0/$Name} }">
26
+ <Label
27
27
  unittest:id="ActionParameterDialogLabelExpressionTest"
28
28
  text="{= ${actionParameter>@com.sap.vocabularies.Common.v1.Label} ? ${actionParameter>@com.sap.vocabularies.Common.v1.Label} : ${parameter>$Name}}"
29
29
  />
30
- <!-- TODOs:
30
+ <!-- TODOs:
31
31
  edit mode, can there be also field control?
32
32
  value help
33
33
  additional value? (= text annotation)
34
34
  text arrangement?
35
35
  multipleLines?
36
36
  -->
37
- <!-- TODO: use new value helper -->
37
+ <!-- TODO: use new value helper -->
38
38
 
39
- <template:if test="{= !${parameter>$isCollection} }">
39
+ <template:if test="{= !${parameter>$isCollection} }">
40
40
  <template:then>
41
- <!--The payload of FieldBaseDelegate is used to control the fallback feature 'retrieveTextFromValueList' -->
41
+ <!--The payload of FieldBaseDelegate is used to control the fallback feature 'retrieveTextFromValueList' -->
42
42
  <mdc:Field
43
43
  delegate="{name:'sap/fe/macros/FieldBaseDelegate', payload:{retrieveTextFromValueList:true}}"
44
44
  unittest:id="ActionParameterDialogFieldExpressionTest"
@@ -51,9 +51,9 @@
51
51
  required="{= FIELD.isRequired(${actionParameter>@@FIELD.fieldControl}, 'Editable')}"
52
52
  change="{= '.handleChange($event, \'' + ${parameter>$Name} + '\')' }"
53
53
  fieldHelp="{= FIELD.getActionParameterDialogFieldHelp(${actionParameter>@}, ${actionName>@sapui.name}, ${parameter>$Name}) }"
54
- visible="{actionParameter>@com.sap.vocabularies.UI.v1.Hidden@@FIELD.getActionParameterVisibility}"
54
+ visible="{= (${actionParameter>$Name} === 'ResultIsActiveEntity') ? false : ${actionParameter>@com.sap.vocabularies.UI.v1.Hidden@@FIELD.getActionParameterVisibility} }"
55
55
  >
56
- <core:Fragment fragmentName="sap.fe.core.controls.ActionParameterDialogValueHelp" type="XML" />
56
+ <core:Fragment fragmentName="sap.fe.core.controls.ActionParameterDialogValueHelp" type="XML" />
57
57
  </mdc:Field>
58
58
  </template:then>
59
59
  <template:else>
@@ -70,13 +70,16 @@
70
70
  fieldHelp="{= FIELD.getActionParameterDialogFieldHelp(${actionParameter>@}, ${actionName>@sapui.name}, ${parameter>$Name}) }"
71
71
  visible="{actionParameter>@com.sap.vocabularies.UI.v1.Hidden@@FIELD.getActionParameterVisibility}"
72
72
  >
73
- <mdcField:MultiValueFieldItem key="{path: 'mvfview>Key', type:'sap.ui.model.type.String'}" description="{mvfview>Desc}" />
74
- <core:Fragment fragmentName="sap.fe.core.controls.ActionParameterDialogValueHelp" type="XML" />
73
+ <mdcField:MultiValueFieldItem
74
+ key="{path: 'mvfview>Key', type:'sap.ui.model.type.String'}"
75
+ description="{mvfview>Desc}"
76
+ />
77
+ <core:Fragment fragmentName="sap.fe.core.controls.ActionParameterDialogValueHelp" type="XML" />
75
78
  </mdc:MultiValueField>
76
79
  </template:else>
77
- </template:if>
78
80
  </template:if>
79
- </template:with>
80
- </template:repeat>
81
- </form:SimpleForm>
81
+ </template:if>
82
+ </template:with>
83
+ </template:repeat>
84
+ </form:SimpleForm>
82
85
  </core:FragmentDefinition>
@@ -8,21 +8,25 @@ sap.ui.define(["sap/ui/base/ManagedObject"], function (ManagedObject) {
8
8
  /**
9
9
  * @class
10
10
  * A custom element to evaluate the value of Binding.
11
- *
12
11
  * @name sap.fe.core.controls.Any
13
12
  * @hideconstructor
14
13
  */
15
14
  var Any = ManagedObject.extend("sap.fe.core.controls.Any", {
16
15
  metadata: {
17
16
  properties: {
18
- any: "any"
17
+ any: "any",
18
+ anyText: "string"
19
19
  }
20
20
  },
21
- updateProperty: function () {
21
+ updateProperty: function (sName) {
22
22
  // Avoid Promise processing in ManagedObject and set Promise as value directly
23
- this.setAny(this.getBindingInfo("any").binding.getExternalValue());
23
+ if (sName === "any") {
24
+ this.setAny(this.getBindingInfo(sName).binding.getExternalValue());
25
+ } else {
26
+ this.setAnyText(this.getBindingInfo(sName).binding.getExternalValue());
27
+ }
24
28
  }
25
29
  });
26
30
  return Any;
27
31
  }, false);
28
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFueS50cyJdLCJuYW1lcyI6WyJBbnkiLCJNYW5hZ2VkT2JqZWN0IiwiZXh0ZW5kIiwibWV0YWRhdGEiLCJwcm9wZXJ0aWVzIiwiYW55IiwidXBkYXRlUHJvcGVydHkiLCJzZXRBbnkiLCJnZXRCaW5kaW5nSW5mbyIsImJpbmRpbmciLCJnZXRFeHRlcm5hbFZhbHVlIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7O0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNQSxHQUFHLEdBQUdDLGFBQWEsQ0FBQ0MsTUFBZCxDQUFxQiwwQkFBckIsRUFBaUQ7QUFDNURDLElBQUFBLFFBQVEsRUFBRTtBQUNUQyxNQUFBQSxVQUFVLEVBQUU7QUFDWEMsUUFBQUEsR0FBRyxFQUFFO0FBRE07QUFESCxLQURrRDtBQU01REMsSUFBQUEsY0FBYyxFQUFFLFlBQXlCO0FBQ3hDO0FBQ0EsV0FBS0MsTUFBTCxDQUFhLEtBQUtDLGNBQUwsQ0FBb0IsS0FBcEIsQ0FBRCxDQUFvQ0MsT0FBcEMsQ0FBNENDLGdCQUE1QyxFQUFaO0FBQ0E7QUFUMkQsR0FBakQsQ0FBWjtTQVllVixHIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuXG5leHBvcnQgdHlwZSBBbnlUeXBlID0gTWFuYWdlZE9iamVjdCAmIHtcblx0bUJpbmRpbmdJbmZvczogb2JqZWN0O1xuXHRnZXRBbnkoKTogYW55O1xuXHRzZXRBbnkodmFsdWU6IGFueSk6IHZvaWQ7XG5cdGdldEJpbmRpbmdJbmZvKHByb3BlcnR5OiBzdHJpbmcpOiBvYmplY3Q7XG5cdGV4dGVuZChzTmFtZTogc3RyaW5nLCBzRXh0ZW5zaW9uOiBhbnkpOiBBbnlUeXBlO1xufTtcblxuLyoqXG4gKiBAY2xhc3NcbiAqIEEgY3VzdG9tIGVsZW1lbnQgdG8gZXZhbHVhdGUgdGhlIHZhbHVlIG9mIEJpbmRpbmcuXG4gKlxuICogQG5hbWUgc2FwLmZlLmNvcmUuY29udHJvbHMuQW55XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKi9cbmNvbnN0IEFueSA9IE1hbmFnZWRPYmplY3QuZXh0ZW5kKFwic2FwLmZlLmNvcmUuY29udHJvbHMuQW55XCIsIHtcblx0bWV0YWRhdGE6IHtcblx0XHRwcm9wZXJ0aWVzOiB7XG5cdFx0XHRhbnk6IFwiYW55XCJcblx0XHR9XG5cdH0sXG5cdHVwZGF0ZVByb3BlcnR5OiBmdW5jdGlvbiAodGhpczogQW55VHlwZSkge1xuXHRcdC8vIEF2b2lkIFByb21pc2UgcHJvY2Vzc2luZyBpbiBNYW5hZ2VkT2JqZWN0IGFuZCBzZXQgUHJvbWlzZSBhcyB2YWx1ZSBkaXJlY3RseVxuXHRcdHRoaXMuc2V0QW55KCh0aGlzLmdldEJpbmRpbmdJbmZvKFwiYW55XCIpIGFzIGFueSkuYmluZGluZy5nZXRFeHRlcm5hbFZhbHVlKCkpO1xuXHR9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQW55IGFzIGFueTtcbiJdfQ==
32
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFueS50cyJdLCJuYW1lcyI6WyJBbnkiLCJNYW5hZ2VkT2JqZWN0IiwiZXh0ZW5kIiwibWV0YWRhdGEiLCJwcm9wZXJ0aWVzIiwiYW55IiwiYW55VGV4dCIsInVwZGF0ZVByb3BlcnR5Iiwic05hbWUiLCJzZXRBbnkiLCJnZXRCaW5kaW5nSW5mbyIsImJpbmRpbmciLCJnZXRFeHRlcm5hbFZhbHVlIiwic2V0QW55VGV4dCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1BLEdBQUcsR0FBR0MsYUFBYSxDQUFDQyxNQUFkLENBQXFCLDBCQUFyQixFQUFpRDtBQUM1REMsSUFBQUEsUUFBUSxFQUFFO0FBQ1RDLE1BQUFBLFVBQVUsRUFBRTtBQUNYQyxRQUFBQSxHQUFHLEVBQUUsS0FETTtBQUVYQyxRQUFBQSxPQUFPLEVBQUU7QUFGRTtBQURILEtBRGtEO0FBTzVEQyxJQUFBQSxjQUFjLEVBQUUsVUFBeUJDLEtBQXpCLEVBQXdDO0FBQ3ZEO0FBQ0EsVUFBSUEsS0FBSyxLQUFLLEtBQWQsRUFBcUI7QUFDcEIsYUFBS0MsTUFBTCxDQUFhLEtBQUtDLGNBQUwsQ0FBb0JGLEtBQXBCLENBQUQsQ0FBb0NHLE9BQXBDLENBQTRDQyxnQkFBNUMsRUFBWjtBQUNBLE9BRkQsTUFFTztBQUNOLGFBQUtDLFVBQUwsQ0FBaUIsS0FBS0gsY0FBTCxDQUFvQkYsS0FBcEIsQ0FBRCxDQUFvQ0csT0FBcEMsQ0FBNENDLGdCQUE1QyxFQUFoQjtBQUNBO0FBQ0Q7QUFkMkQsR0FBakQsQ0FBWjtTQWlCZVosRyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcblxuZXhwb3J0IHR5cGUgQW55VHlwZSA9IE1hbmFnZWRPYmplY3QgJiB7XG5cdG1CaW5kaW5nSW5mb3M6IG9iamVjdDtcblx0Z2V0QW55KCk6IGFueTtcblx0Z2V0QW55VGV4dCgpOiBhbnk7XG5cdHNldEFueSh2YWx1ZTogYW55KTogdm9pZDtcblx0c2V0QW55VGV4dCh2YWx1ZTogYW55KTogdm9pZDtcblx0Z2V0QmluZGluZ0luZm8ocHJvcGVydHk6IHN0cmluZyk6IG9iamVjdDtcblx0ZXh0ZW5kKHNOYW1lOiBzdHJpbmcsIHNFeHRlbnNpb246IGFueSk6IEFueVR5cGU7XG59O1xuXG4vKipcbiAqIEBjbGFzc1xuICogQSBjdXN0b20gZWxlbWVudCB0byBldmFsdWF0ZSB0aGUgdmFsdWUgb2YgQmluZGluZy5cbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmNvbnRyb2xzLkFueVxuICogQGhpZGVjb25zdHJ1Y3RvclxuICovXG5jb25zdCBBbnkgPSBNYW5hZ2VkT2JqZWN0LmV4dGVuZChcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkFueVwiLCB7XG5cdG1ldGFkYXRhOiB7XG5cdFx0cHJvcGVydGllczoge1xuXHRcdFx0YW55OiBcImFueVwiLFxuXHRcdFx0YW55VGV4dDogXCJzdHJpbmdcIlxuXHRcdH1cblx0fSxcblx0dXBkYXRlUHJvcGVydHk6IGZ1bmN0aW9uICh0aGlzOiBBbnlUeXBlLCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0Ly8gQXZvaWQgUHJvbWlzZSBwcm9jZXNzaW5nIGluIE1hbmFnZWRPYmplY3QgYW5kIHNldCBQcm9taXNlIGFzIHZhbHVlIGRpcmVjdGx5XG5cdFx0aWYgKHNOYW1lID09PSBcImFueVwiKSB7XG5cdFx0XHR0aGlzLnNldEFueSgodGhpcy5nZXRCaW5kaW5nSW5mbyhzTmFtZSkgYXMgYW55KS5iaW5kaW5nLmdldEV4dGVybmFsVmFsdWUoKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0QW55VGV4dCgodGhpcy5nZXRCaW5kaW5nSW5mbyhzTmFtZSkgYXMgYW55KS5iaW5kaW5nLmdldEV4dGVybmFsVmFsdWUoKSk7XG5cdFx0fVxuXHR9XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQW55IGFzIGFueTtcbiJdfQ==
@@ -3,7 +3,9 @@ import ManagedObject from "sap/ui/base/ManagedObject";
3
3
  export type AnyType = ManagedObject & {
4
4
  mBindingInfos: object;
5
5
  getAny(): any;
6
+ getAnyText(): any;
6
7
  setAny(value: any): void;
8
+ setAnyText(value: any): void;
7
9
  getBindingInfo(property: string): object;
8
10
  extend(sName: string, sExtension: any): AnyType;
9
11
  };
@@ -11,19 +13,23 @@ export type AnyType = ManagedObject & {
11
13
  /**
12
14
  * @class
13
15
  * A custom element to evaluate the value of Binding.
14
- *
15
16
  * @name sap.fe.core.controls.Any
16
17
  * @hideconstructor
17
18
  */
18
19
  const Any = ManagedObject.extend("sap.fe.core.controls.Any", {
19
20
  metadata: {
20
21
  properties: {
21
- any: "any"
22
+ any: "any",
23
+ anyText: "string"
22
24
  }
23
25
  },
24
- updateProperty: function (this: AnyType) {
26
+ updateProperty: function (this: AnyType, sName: string) {
25
27
  // Avoid Promise processing in ManagedObject and set Promise as value directly
26
- this.setAny((this.getBindingInfo("any") as any).binding.getExternalValue());
28
+ if (sName === "any") {
29
+ this.setAny((this.getBindingInfo(sName) as any).binding.getExternalValue());
30
+ } else {
31
+ this.setAnyText((this.getBindingInfo(sName) as any).binding.getExternalValue());
32
+ }
27
33
  }
28
34
  });
29
35
 
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/ui/core/CommandExecution", "sap/ui/core/Element", "sap/ui/core/Shortcut"], function (Log, ClassSupport, CommandExecution, Element, Shortcut) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/ui/core/CommandExecution", "sap/ui/core/Component", "sap/ui/core/Element", "sap/ui/core/Shortcut"], function (Log, ClassSupport, CommandExecution, Component, Element, Shortcut) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _class;
@@ -23,9 +23,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/ui/core/
23
23
  var _proto = CustomCommandExecution.prototype;
24
24
 
25
25
  _proto.setParent = function setParent(oParent) {
26
- var aExcludedSingleKey = ["escape"]; // eslint-disable-next-line @typescript-eslint/ban-ts-comment
26
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
27
27
  // @ts-ignore
28
-
29
28
  _CommandExecution.prototype.setParent.call(this, oParent);
30
29
 
31
30
  var aCommands = oParent.data("sap.ui.core.Shortcut");
@@ -34,26 +33,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/ui/core/
34
33
  var oCommand = oParent.data("sap.ui.core.Shortcut")[aCommands.length - 1],
35
34
  oShortcut = oCommand.shortcutSpec;
36
35
 
37
- if (oShortcut && aExcludedSingleKey.indexOf(oShortcut.key) > -1) {
36
+ if (oShortcut) {
38
37
  // Check if single key shortcut
39
38
  for (var key in oShortcut) {
40
39
  if (oShortcut[key] && key !== "key") {
41
40
  return this;
42
41
  }
43
- } // Need to disable ShortCut when user press single shortcut key into an input
44
-
45
-
46
- oParent.addDelegate({
47
- "onkeydown": function (oEvent) {
48
- if (aExcludedSingleKey.indexOf(oEvent.key.toLowerCase()) > -1) {
49
- var sElement = oEvent.target ? oEvent.target.tagName.toLowerCase() : undefined;
50
-
51
- if (sElement === "input") {
52
- oEvent.setMarked();
53
- }
54
- }
55
- }
56
- }, true, undefined, true);
42
+ }
57
43
  }
58
44
 
59
45
  return this;
@@ -77,12 +63,23 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/ui/core/
77
63
  };
78
64
 
79
65
  _proto.setVisible = function setVisible(bValue) {
80
- var oCommand = this._getCommandInfo();
66
+ var oCommand,
67
+ oParentControl = this.getParent(),
68
+ oComponent;
81
69
 
82
- if (oCommand) {
83
- _CommandExecution.prototype.setVisible.call(this, bValue);
84
- } else {
85
- Log.info("There is no shortcut definition registered in the manifest for the command : " + this.getCommand());
70
+ while (!oComponent && oParentControl) {
71
+ oComponent = Component.getOwnerComponentFor(oParentControl);
72
+ oParentControl = oParentControl.getParent();
73
+ }
74
+
75
+ if (oComponent) {
76
+ oCommand = oComponent.getCommand(this.getCommand());
77
+
78
+ if (oCommand) {
79
+ _CommandExecution.prototype.setVisible.call(this, bValue);
80
+ } else {
81
+ Log.info("There is no shortcut definition registered in the manifest for the command : " + this.getCommand());
82
+ }
86
83
  }
87
84
 
88
85
  return this;
@@ -92,4 +89,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/ClassSupport", "sap/ui/core/
92
89
  }(CommandExecution)) || _class);
93
90
  return CustomCommandExecution;
94
91
  }, false);
95
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1hbmRFeGVjdXRpb24udHMiXSwibmFtZXMiOlsiQ3VzdG9tQ29tbWFuZEV4ZWN1dGlvbiIsImRlZmluZVVJNUNsYXNzIiwic2V0UGFyZW50Iiwib1BhcmVudCIsImFFeGNsdWRlZFNpbmdsZUtleSIsImFDb21tYW5kcyIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJvQ29tbWFuZCIsIm9TaG9ydGN1dCIsInNob3J0Y3V0U3BlYyIsImluZGV4T2YiLCJrZXkiLCJhZGREZWxlZ2F0ZSIsIm9FdmVudCIsInRvTG93ZXJDYXNlIiwic0VsZW1lbnQiLCJ0YXJnZXQiLCJ0YWdOYW1lIiwidW5kZWZpbmVkIiwic2V0TWFya2VkIiwiZGVzdHJveSIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJnZXRQYXJlbnQiLCJfZ2V0Q29tbWFuZEluZm8iLCJTaG9ydGN1dCIsInVucmVnaXN0ZXIiLCJzaG9ydGN1dCIsIl9jbGVhbnVwQ29udGV4dCIsIkVsZW1lbnQiLCJwcm90b3R5cGUiLCJhcHBseSIsInNldFZpc2libGUiLCJiVmFsdWUiLCJMb2ciLCJpbmZvIiwiZ2V0Q29tbWFuZCIsIkNvbW1hbmRFeGVjdXRpb24iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztNQUtNQSxzQixXQURMQyxjQUFjLENBQUMsdUNBQUQsQzs7Ozs7Ozs7O1dBRWRDLFMsR0FBQSxtQkFBVUMsT0FBVixFQUF3QjtBQUN2QixVQUFNQyxrQkFBa0IsR0FBRyxDQUFDLFFBQUQsQ0FBM0IsQ0FEdUIsQ0FFdkI7QUFDQTs7QUFDQSxrQ0FBTUYsU0FBTixZQUFnQkMsT0FBaEI7O0FBQ0EsVUFBTUUsU0FBUyxHQUFHRixPQUFPLENBQUNHLElBQVIsQ0FBYSxzQkFBYixDQUFsQjs7QUFDQSxVQUFJQyxLQUFLLENBQUNDLE9BQU4sQ0FBY0gsU0FBZCxLQUE0QkEsU0FBUyxDQUFDSSxNQUFWLEdBQW1CLENBQW5ELEVBQXNEO0FBQ3JELFlBQU1DLFFBQVEsR0FBR1AsT0FBTyxDQUFDRyxJQUFSLENBQWEsc0JBQWIsRUFBcUNELFNBQVMsQ0FBQ0ksTUFBVixHQUFtQixDQUF4RCxDQUFqQjtBQUFBLFlBQ0NFLFNBQVMsR0FBR0QsUUFBUSxDQUFDRSxZQUR0Qjs7QUFFQSxZQUFJRCxTQUFTLElBQUlQLGtCQUFrQixDQUFDUyxPQUFuQixDQUEyQkYsU0FBUyxDQUFDRyxHQUFyQyxJQUE0QyxDQUFDLENBQTlELEVBQWlFO0FBQ2hFO0FBQ0EsZUFBSyxJQUFNQSxHQUFYLElBQWtCSCxTQUFsQixFQUE2QjtBQUM1QixnQkFBSUEsU0FBUyxDQUFDRyxHQUFELENBQVQsSUFBa0JBLEdBQUcsS0FBSyxLQUE5QixFQUFxQztBQUNwQyxxQkFBTyxJQUFQO0FBQ0E7QUFDRCxXQU4rRCxDQU9oRTs7O0FBQ0FYLFVBQUFBLE9BQU8sQ0FBQ1ksV0FBUixDQUNDO0FBQ0MseUJBQWEsVUFBVUMsTUFBVixFQUF1QjtBQUNuQyxrQkFBSVosa0JBQWtCLENBQUNTLE9BQW5CLENBQTJCRyxNQUFNLENBQUNGLEdBQVAsQ0FBV0csV0FBWCxFQUEzQixJQUF1RCxDQUFDLENBQTVELEVBQStEO0FBQzlELG9CQUFNQyxRQUFRLEdBQUdGLE1BQU0sQ0FBQ0csTUFBUCxHQUFnQkgsTUFBTSxDQUFDRyxNQUFQLENBQWNDLE9BQWQsQ0FBc0JILFdBQXRCLEVBQWhCLEdBQXNESSxTQUF2RTs7QUFDQSxvQkFBSUgsUUFBUSxLQUFLLE9BQWpCLEVBQTBCO0FBQ3pCRixrQkFBQUEsTUFBTSxDQUFDTSxTQUFQO0FBQ0E7QUFDRDtBQUNEO0FBUkYsV0FERCxFQVdDLElBWEQsRUFZQ0QsU0FaRCxFQWFDLElBYkQ7QUFlQTs7QUFDRCxlQUFPLElBQVA7QUFDQTtBQUNELEs7O1dBRURFLE8sR0FBQSxpQkFBUUMsbUJBQVIsRUFBc0M7QUFDckMsVUFBTXJCLE9BQU8sR0FBRyxLQUFLc0IsU0FBTCxFQUFoQjs7QUFDQSxVQUFJdEIsT0FBSixFQUFhO0FBQ1osWUFBTU8sUUFBUSxHQUFHLEtBQUtnQixlQUFMLEVBQWpCOztBQUNBLFlBQUloQixRQUFKLEVBQWM7QUFDYmlCLFVBQUFBLFFBQVEsQ0FBQ0MsVUFBVCxDQUFvQixLQUFLSCxTQUFMLEVBQXBCLEVBQXNDZixRQUFRLENBQUNtQixRQUEvQztBQUNBOztBQUNELGFBQUtDLGVBQUwsQ0FBcUIzQixPQUFyQjtBQUNBOztBQUNENEIsTUFBQUEsT0FBTyxDQUFDQyxTQUFSLENBQWtCVCxPQUFsQixDQUEwQlUsS0FBMUIsQ0FBZ0MsSUFBaEMsRUFBc0MsQ0FBQ1QsbUJBQUQsQ0FBdEM7QUFDQSxLOztXQUVEVSxVLEdBQUEsb0JBQVdDLE1BQVgsRUFBNEI7QUFDM0IsVUFBTXpCLFFBQVEsR0FBRyxLQUFLZ0IsZUFBTCxFQUFqQjs7QUFDQSxVQUFJaEIsUUFBSixFQUFjO0FBQ2Isb0NBQU13QixVQUFOLFlBQWlCQyxNQUFqQjtBQUNBLE9BRkQsTUFFTztBQUNOQyxRQUFBQSxHQUFHLENBQUNDLElBQUosQ0FBUyxrRkFBa0YsS0FBS0MsVUFBTCxFQUEzRjtBQUNBOztBQUNELGFBQU8sSUFBUDtBQUNBLEs7OztJQTFEbUNDLGdCO1NBZ0V0QnZDLHNCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbWFuZEV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvQ29tbWFuZEV4ZWN1dGlvblwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBTaG9ydGN1dCBmcm9tIFwic2FwL3VpL2NvcmUvU2hvcnRjdXRcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbHMuQ29tbWFuZEV4ZWN1dGlvblwiKVxuY2xhc3MgQ3VzdG9tQ29tbWFuZEV4ZWN1dGlvbiBleHRlbmRzIENvbW1hbmRFeGVjdXRpb24ge1xuXHRzZXRQYXJlbnQob1BhcmVudDogYW55KSB7XG5cdFx0Y29uc3QgYUV4Y2x1ZGVkU2luZ2xlS2V5ID0gW1wiZXNjYXBlXCJdO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0c3VwZXIuc2V0UGFyZW50KG9QYXJlbnQpO1xuXHRcdGNvbnN0IGFDb21tYW5kcyA9IG9QYXJlbnQuZGF0YShcInNhcC51aS5jb3JlLlNob3J0Y3V0XCIpO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGFDb21tYW5kcykgJiYgYUNvbW1hbmRzLmxlbmd0aCA+IDApIHtcblx0XHRcdGNvbnN0IG9Db21tYW5kID0gb1BhcmVudC5kYXRhKFwic2FwLnVpLmNvcmUuU2hvcnRjdXRcIilbYUNvbW1hbmRzLmxlbmd0aCAtIDFdLFxuXHRcdFx0XHRvU2hvcnRjdXQgPSBvQ29tbWFuZC5zaG9ydGN1dFNwZWM7XG5cdFx0XHRpZiAob1Nob3J0Y3V0ICYmIGFFeGNsdWRlZFNpbmdsZUtleS5pbmRleE9mKG9TaG9ydGN1dC5rZXkpID4gLTEpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgc2luZ2xlIGtleSBzaG9ydGN1dFxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBvU2hvcnRjdXQpIHtcblx0XHRcdFx0XHRpZiAob1Nob3J0Y3V0W2tleV0gJiYga2V5ICE9PSBcImtleVwiKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gTmVlZCB0byBkaXNhYmxlIFNob3J0Q3V0IHdoZW4gdXNlciBwcmVzcyBzaW5nbGUgc2hvcnRjdXQga2V5IGludG8gYW4gaW5wdXRcblx0XHRcdFx0b1BhcmVudC5hZGREZWxlZ2F0ZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcIm9ua2V5ZG93blwiOiBmdW5jdGlvbiAob0V2ZW50OiBhbnkpIHtcblx0XHRcdFx0XHRcdFx0aWYgKGFFeGNsdWRlZFNpbmdsZUtleS5pbmRleE9mKG9FdmVudC5rZXkudG9Mb3dlckNhc2UoKSkgPiAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNFbGVtZW50ID0gb0V2ZW50LnRhcmdldCA/IG9FdmVudC50YXJnZXQudGFnTmFtZS50b0xvd2VyQ2FzZSgpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzRWxlbWVudCA9PT0gXCJpbnB1dFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvRXZlbnQuc2V0TWFya2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR0cnVlLFxuXHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdH1cblxuXHRkZXN0cm95KGJTdXBwcmVzc0ludmFsaWRhdGU6IGJvb2xlYW4pIHtcblx0XHRjb25zdCBvUGFyZW50ID0gdGhpcy5nZXRQYXJlbnQoKTtcblx0XHRpZiAob1BhcmVudCkge1xuXHRcdFx0Y29uc3Qgb0NvbW1hbmQgPSB0aGlzLl9nZXRDb21tYW5kSW5mbygpO1xuXHRcdFx0aWYgKG9Db21tYW5kKSB7XG5cdFx0XHRcdFNob3J0Y3V0LnVucmVnaXN0ZXIodGhpcy5nZXRQYXJlbnQoKSwgb0NvbW1hbmQuc2hvcnRjdXQpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fY2xlYW51cENvbnRleHQob1BhcmVudCk7XG5cdFx0fVxuXHRcdEVsZW1lbnQucHJvdG90eXBlLmRlc3Ryb3kuYXBwbHkodGhpcywgW2JTdXBwcmVzc0ludmFsaWRhdGVdKTtcblx0fVxuXG5cdHNldFZpc2libGUoYlZhbHVlOiBib29sZWFuKSB7XG5cdFx0Y29uc3Qgb0NvbW1hbmQgPSB0aGlzLl9nZXRDb21tYW5kSW5mbygpO1xuXHRcdGlmIChvQ29tbWFuZCkge1xuXHRcdFx0c3VwZXIuc2V0VmlzaWJsZShiVmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cuaW5mbyhcIlRoZXJlIGlzIG5vIHNob3J0Y3V0IGRlZmluaXRpb24gcmVnaXN0ZXJlZCBpbiB0aGUgbWFuaWZlc3QgZm9yIHRoZSBjb21tYW5kIDogXCIgKyB0aGlzLmdldENvbW1hbmQoKSk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5pbnRlcmZhY2UgQ3VzdG9tQ29tbWFuZEV4ZWN1dGlvbiB7XG5cdF9nZXRDb21tYW5kSW5mbygpOiBhbnk7XG5cdF9jbGVhbnVwQ29udGV4dChvUGFyZW50OiBhbnkpOiB2b2lkO1xufVxuZXhwb3J0IGRlZmF1bHQgQ3VzdG9tQ29tbWFuZEV4ZWN1dGlvbjtcbiJdfQ==
92
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbW1hbmRFeGVjdXRpb24udHMiXSwibmFtZXMiOlsiQ3VzdG9tQ29tbWFuZEV4ZWN1dGlvbiIsImRlZmluZVVJNUNsYXNzIiwic2V0UGFyZW50Iiwib1BhcmVudCIsImFDb21tYW5kcyIsImRhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJvQ29tbWFuZCIsIm9TaG9ydGN1dCIsInNob3J0Y3V0U3BlYyIsImtleSIsImRlc3Ryb3kiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwiZ2V0UGFyZW50IiwiX2dldENvbW1hbmRJbmZvIiwiU2hvcnRjdXQiLCJ1bnJlZ2lzdGVyIiwic2hvcnRjdXQiLCJfY2xlYW51cENvbnRleHQiLCJFbGVtZW50IiwicHJvdG90eXBlIiwiYXBwbHkiLCJzZXRWaXNpYmxlIiwiYlZhbHVlIiwib1BhcmVudENvbnRyb2wiLCJvQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJnZXRDb21tYW5kIiwiTG9nIiwiaW5mbyIsIkNvbW1hbmRFeGVjdXRpb24iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztNQU1NQSxzQixXQURMQyxjQUFjLENBQUMsdUNBQUQsQzs7Ozs7Ozs7O1dBRWRDLFMsR0FBQSxtQkFBVUMsT0FBVixFQUF3QjtBQUN2QjtBQUNBO0FBQ0Esa0NBQU1ELFNBQU4sWUFBZ0JDLE9BQWhCOztBQUNBLFVBQU1DLFNBQVMsR0FBR0QsT0FBTyxDQUFDRSxJQUFSLENBQWEsc0JBQWIsQ0FBbEI7O0FBQ0EsVUFBSUMsS0FBSyxDQUFDQyxPQUFOLENBQWNILFNBQWQsS0FBNEJBLFNBQVMsQ0FBQ0ksTUFBVixHQUFtQixDQUFuRCxFQUFzRDtBQUNyRCxZQUFNQyxRQUFRLEdBQUdOLE9BQU8sQ0FBQ0UsSUFBUixDQUFhLHNCQUFiLEVBQXFDRCxTQUFTLENBQUNJLE1BQVYsR0FBbUIsQ0FBeEQsQ0FBakI7QUFBQSxZQUNDRSxTQUFTLEdBQUdELFFBQVEsQ0FBQ0UsWUFEdEI7O0FBRUEsWUFBSUQsU0FBSixFQUFlO0FBQ2Q7QUFDQSxlQUFLLElBQU1FLEdBQVgsSUFBa0JGLFNBQWxCLEVBQTZCO0FBQzVCLGdCQUFJQSxTQUFTLENBQUNFLEdBQUQsQ0FBVCxJQUFrQkEsR0FBRyxLQUFLLEtBQTlCLEVBQXFDO0FBQ3BDLHFCQUFPLElBQVA7QUFDQTtBQUNEO0FBQ0Q7O0FBQ0QsZUFBTyxJQUFQO0FBQ0E7QUFDRCxLOztXQUVEQyxPLEdBQUEsaUJBQVFDLG1CQUFSLEVBQXNDO0FBQ3JDLFVBQU1YLE9BQU8sR0FBRyxLQUFLWSxTQUFMLEVBQWhCOztBQUNBLFVBQUlaLE9BQUosRUFBYTtBQUNaLFlBQU1NLFFBQVEsR0FBRyxLQUFLTyxlQUFMLEVBQWpCOztBQUNBLFlBQUlQLFFBQUosRUFBYztBQUNiUSxVQUFBQSxRQUFRLENBQUNDLFVBQVQsQ0FBb0IsS0FBS0gsU0FBTCxFQUFwQixFQUFzQ04sUUFBUSxDQUFDVSxRQUEvQztBQUNBOztBQUNELGFBQUtDLGVBQUwsQ0FBcUJqQixPQUFyQjtBQUNBOztBQUNEa0IsTUFBQUEsT0FBTyxDQUFDQyxTQUFSLENBQWtCVCxPQUFsQixDQUEwQlUsS0FBMUIsQ0FBZ0MsSUFBaEMsRUFBc0MsQ0FBQ1QsbUJBQUQsQ0FBdEM7QUFDQSxLOztXQUNEVSxVLEdBQUEsb0JBQVdDLE1BQVgsRUFBNEI7QUFDM0IsVUFBSWhCLFFBQUo7QUFBQSxVQUNDaUIsY0FBYyxHQUFHLEtBQUtYLFNBQUwsRUFEbEI7QUFBQSxVQUVDWSxVQUZEOztBQUlBLGFBQU8sQ0FBQ0EsVUFBRCxJQUFlRCxjQUF0QixFQUFzQztBQUNyQ0MsUUFBQUEsVUFBVSxHQUFHQyxTQUFTLENBQUNDLG9CQUFWLENBQStCSCxjQUEvQixDQUFiO0FBQ0FBLFFBQUFBLGNBQWMsR0FBR0EsY0FBYyxDQUFDWCxTQUFmLEVBQWpCO0FBQ0E7O0FBRUQsVUFBSVksVUFBSixFQUFnQjtBQUNmbEIsUUFBQUEsUUFBUSxHQUFHa0IsVUFBVSxDQUFDRyxVQUFYLENBQXNCLEtBQUtBLFVBQUwsRUFBdEIsQ0FBWDs7QUFFQSxZQUFJckIsUUFBSixFQUFjO0FBQ2Isc0NBQU1lLFVBQU4sWUFBaUJDLE1BQWpCO0FBQ0EsU0FGRCxNQUVPO0FBQ05NLFVBQUFBLEdBQUcsQ0FBQ0MsSUFBSixDQUFTLGtGQUFrRixLQUFLRixVQUFMLEVBQTNGO0FBQ0E7QUFDRDs7QUFDRCxhQUFPLElBQVA7QUFDQSxLOzs7SUFwRG1DRyxnQjtTQTBEdEJqQyxzQiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1hbmRFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL0NvbW1hbmRFeGVjdXRpb25cIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IEVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBTaG9ydGN1dCBmcm9tIFwic2FwL3VpL2NvcmUvU2hvcnRjdXRcIjtcblxuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbHMuQ29tbWFuZEV4ZWN1dGlvblwiKVxuY2xhc3MgQ3VzdG9tQ29tbWFuZEV4ZWN1dGlvbiBleHRlbmRzIENvbW1hbmRFeGVjdXRpb24ge1xuXHRzZXRQYXJlbnQob1BhcmVudDogYW55KSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRzdXBlci5zZXRQYXJlbnQob1BhcmVudCk7XG5cdFx0Y29uc3QgYUNvbW1hbmRzID0gb1BhcmVudC5kYXRhKFwic2FwLnVpLmNvcmUuU2hvcnRjdXRcIik7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoYUNvbW1hbmRzKSAmJiBhQ29tbWFuZHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3Qgb0NvbW1hbmQgPSBvUGFyZW50LmRhdGEoXCJzYXAudWkuY29yZS5TaG9ydGN1dFwiKVthQ29tbWFuZHMubGVuZ3RoIC0gMV0sXG5cdFx0XHRcdG9TaG9ydGN1dCA9IG9Db21tYW5kLnNob3J0Y3V0U3BlYztcblx0XHRcdGlmIChvU2hvcnRjdXQpIHtcblx0XHRcdFx0Ly8gQ2hlY2sgaWYgc2luZ2xlIGtleSBzaG9ydGN1dFxuXHRcdFx0XHRmb3IgKGNvbnN0IGtleSBpbiBvU2hvcnRjdXQpIHtcblx0XHRcdFx0XHRpZiAob1Nob3J0Y3V0W2tleV0gJiYga2V5ICE9PSBcImtleVwiKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0fVxuXG5cdGRlc3Ryb3koYlN1cHByZXNzSW52YWxpZGF0ZTogYm9vbGVhbikge1xuXHRcdGNvbnN0IG9QYXJlbnQgPSB0aGlzLmdldFBhcmVudCgpO1xuXHRcdGlmIChvUGFyZW50KSB7XG5cdFx0XHRjb25zdCBvQ29tbWFuZCA9IHRoaXMuX2dldENvbW1hbmRJbmZvKCk7XG5cdFx0XHRpZiAob0NvbW1hbmQpIHtcblx0XHRcdFx0U2hvcnRjdXQudW5yZWdpc3Rlcih0aGlzLmdldFBhcmVudCgpLCBvQ29tbWFuZC5zaG9ydGN1dCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl9jbGVhbnVwQ29udGV4dChvUGFyZW50KTtcblx0XHR9XG5cdFx0RWxlbWVudC5wcm90b3R5cGUuZGVzdHJveS5hcHBseSh0aGlzLCBbYlN1cHByZXNzSW52YWxpZGF0ZV0pO1xuXHR9XG5cdHNldFZpc2libGUoYlZhbHVlOiBib29sZWFuKSB7XG5cdFx0bGV0IG9Db21tYW5kLFxuXHRcdFx0b1BhcmVudENvbnRyb2wgPSB0aGlzLmdldFBhcmVudCgpLFxuXHRcdFx0b0NvbXBvbmVudDogYW55O1xuXG5cdFx0d2hpbGUgKCFvQ29tcG9uZW50ICYmIG9QYXJlbnRDb250cm9sKSB7XG5cdFx0XHRvQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKG9QYXJlbnRDb250cm9sKTtcblx0XHRcdG9QYXJlbnRDb250cm9sID0gb1BhcmVudENvbnRyb2wuZ2V0UGFyZW50KCk7XG5cdFx0fVxuXG5cdFx0aWYgKG9Db21wb25lbnQpIHtcblx0XHRcdG9Db21tYW5kID0gb0NvbXBvbmVudC5nZXRDb21tYW5kKHRoaXMuZ2V0Q29tbWFuZCgpKTtcblxuXHRcdFx0aWYgKG9Db21tYW5kKSB7XG5cdFx0XHRcdHN1cGVyLnNldFZpc2libGUoYlZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiVGhlcmUgaXMgbm8gc2hvcnRjdXQgZGVmaW5pdGlvbiByZWdpc3RlcmVkIGluIHRoZSBtYW5pZmVzdCBmb3IgdGhlIGNvbW1hbmQgOiBcIiArIHRoaXMuZ2V0Q29tbWFuZCgpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cbmludGVyZmFjZSBDdXN0b21Db21tYW5kRXhlY3V0aW9uIHtcblx0X2dldENvbW1hbmRJbmZvKCk6IGFueTtcblx0X2NsZWFudXBDb250ZXh0KG9QYXJlbnQ6IGFueSk6IHZvaWQ7XG59XG5leHBvcnQgZGVmYXVsdCBDdXN0b21Db21tYW5kRXhlY3V0aW9uO1xuIl19