@sapui5/sap.fe.core 1.102.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 (311) 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 +62 -26
  4. package/src/sap/fe/core/AppComponent.ts +56 -40
  5. package/src/sap/fe/core/AppStateHandler.js +10 -10
  6. package/src/sap/fe/core/AppStateHandler.ts +9 -9
  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 +236 -109
  10. package/src/sap/fe/core/CommonUtils.ts +252 -136
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  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 +8 -8
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +11 -10
  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/controllerextensions/EditFlow.js +129 -118
  26. package/src/sap/fe/core/controllerextensions/EditFlow.ts +154 -141
  27. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  28. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  29. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +31 -26
  30. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +34 -35
  31. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +70 -70
  32. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +77 -77
  33. package/src/sap/fe/core/controllerextensions/InternalRouting.js +84 -78
  34. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +105 -101
  35. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  36. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  37. package/src/sap/fe/core/controllerextensions/MassEdit.js +8 -8
  38. package/src/sap/fe/core/controllerextensions/MassEdit.ts +19 -26
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +29 -14
  41. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  42. package/src/sap/fe/core/controllerextensions/PageReady.ts +94 -34
  43. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  44. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  45. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  46. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  47. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  49. package/src/sap/fe/core/controllerextensions/Share.js +22 -22
  50. package/src/sap/fe/core/controllerextensions/Share.ts +30 -29
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  53. package/src/sap/fe/core/controllerextensions/ViewState.js +65 -62
  54. package/src/sap/fe/core/controllerextensions/ViewState.ts +68 -63
  55. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  56. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +6 -6
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +12 -17
  59. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  60. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  61. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  62. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  63. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +184 -137
  64. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +253 -206
  65. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +113 -121
  66. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +148 -158
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +198 -148
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +223 -159
  69. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  70. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  71. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -44
  72. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +90 -60
  73. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +52 -55
  74. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -58
  75. package/src/sap/fe/core/controls/Any.js +9 -5
  76. package/src/sap/fe/core/controls/Any.ts +10 -4
  77. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  78. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  81. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  82. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  83. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  84. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  85. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  86. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  87. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  88. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  89. package/src/sap/fe/core/controls/FileWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FileWrapper.ts +11 -11
  91. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  92. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  93. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  94. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  95. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  96. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  97. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  98. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  99. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  100. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  101. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  102. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +47 -47
  103. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +52 -52
  104. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  105. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  106. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  107. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  108. package/src/sap/fe/core/converters/ConverterContext.ts +51 -60
  109. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  110. package/src/sap/fe/core/converters/ManifestSettings.ts +14 -14
  111. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  112. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  113. package/src/sap/fe/core/converters/MetaModelConverter.js +50 -32
  114. package/src/sap/fe/core/converters/MetaModelConverter.ts +145 -127
  115. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  116. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  117. package/src/sap/fe/core/converters/annotations/DataField.js +54 -34
  118. package/src/sap/fe/core/converters/annotations/DataField.ts +97 -75
  119. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  120. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  121. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  122. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  123. package/src/sap/fe/core/converters/controls/Common/Chart.ts +23 -26
  124. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  125. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  126. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +28 -28
  127. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +40 -36
  128. package/src/sap/fe/core/converters/controls/Common/Form.js +25 -27
  129. package/src/sap/fe/core/converters/controls/Common/Form.ts +37 -45
  130. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  131. package/src/sap/fe/core/converters/controls/Common/KPI.ts +35 -39
  132. package/src/sap/fe/core/converters/controls/Common/Table.js +174 -183
  133. package/src/sap/fe/core/converters/controls/Common/Table.ts +237 -250
  134. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  135. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  136. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  137. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +64 -57
  138. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  139. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  140. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  141. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  142. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  143. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  144. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +73 -72
  145. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +98 -96
  146. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  147. package/src/sap/fe/core/converters/helpers/Aggregation.ts +10 -13
  148. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  149. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  150. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  151. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  152. package/src/sap/fe/core/converters/helpers/ID.js +46 -46
  153. package/src/sap/fe/core/converters/helpers/ID.ts +25 -25
  154. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  155. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  156. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  157. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -4
  158. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  159. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  160. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  161. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  162. package/src/sap/fe/core/converters/templates/ListReportConverter.js +30 -29
  163. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +40 -40
  164. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  165. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  166. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  167. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  168. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  169. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  170. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  171. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  172. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  173. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  174. package/src/sap/fe/core/formatters/StandardFormatter.js +89 -0
  175. package/src/sap/fe/core/formatters/StandardFormatter.ts +64 -0
  176. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  177. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  178. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  179. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  180. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  181. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  182. package/src/sap/fe/core/helpers/BindingToolkit.js +1809 -0
  183. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +365 -264
  184. package/src/sap/fe/core/helpers/ClassSupport.js +20 -11
  185. package/src/sap/fe/core/helpers/ClassSupport.ts +14 -10
  186. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  187. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  188. package/src/sap/fe/core/helpers/EditState.js +1 -6
  189. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  190. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  191. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  192. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  193. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  194. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  195. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  196. package/src/sap/fe/core/helpers/MassEditHelper.js +281 -254
  197. package/src/sap/fe/core/helpers/MassEditHelper.ts +337 -289
  198. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  199. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  200. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  201. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  202. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  203. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  204. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  205. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  206. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  207. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  208. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  209. package/src/sap/fe/core/jsx-runtime/jsx.ts +8 -8
  210. package/src/sap/fe/core/library.js +42 -3
  211. package/src/sap/fe/core/library.ts +38 -0
  212. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  213. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  214. package/src/sap/fe/core/messagebundle.properties +49 -35
  215. package/src/sap/fe/core/messagebundle_ar.properties +13 -5
  216. package/src/sap/fe/core/messagebundle_bg.properties +13 -5
  217. package/src/sap/fe/core/messagebundle_ca.properties +13 -5
  218. package/src/sap/fe/core/messagebundle_cs.properties +13 -5
  219. package/src/sap/fe/core/messagebundle_cy.properties +14 -6
  220. package/src/sap/fe/core/messagebundle_da.properties +13 -5
  221. package/src/sap/fe/core/messagebundle_de.properties +15 -7
  222. package/src/sap/fe/core/messagebundle_el.properties +14 -6
  223. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  224. package/src/sap/fe/core/messagebundle_en_GB.properties +11 -3
  225. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +7 -1
  226. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -1
  227. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +44 -85
  228. package/src/sap/fe/core/messagebundle_es.properties +13 -5
  229. package/src/sap/fe/core/messagebundle_es_MX.properties +13 -5
  230. package/src/sap/fe/core/messagebundle_et.properties +13 -5
  231. package/src/sap/fe/core/messagebundle_fi.properties +14 -6
  232. package/src/sap/fe/core/messagebundle_fr.properties +14 -6
  233. package/src/sap/fe/core/messagebundle_fr_CA.properties +14 -6
  234. package/src/sap/fe/core/messagebundle_hi.properties +14 -6
  235. package/src/sap/fe/core/messagebundle_hr.properties +14 -6
  236. package/src/sap/fe/core/messagebundle_hu.properties +13 -5
  237. package/src/sap/fe/core/messagebundle_id.properties +13 -5
  238. package/src/sap/fe/core/messagebundle_it.properties +33 -25
  239. package/src/sap/fe/core/messagebundle_iw.properties +13 -5
  240. package/src/sap/fe/core/messagebundle_ja.properties +14 -6
  241. package/src/sap/fe/core/messagebundle_kk.properties +13 -5
  242. package/src/sap/fe/core/messagebundle_ko.properties +13 -5
  243. package/src/sap/fe/core/messagebundle_lt.properties +13 -5
  244. package/src/sap/fe/core/messagebundle_lv.properties +14 -6
  245. package/src/sap/fe/core/messagebundle_ms.properties +13 -5
  246. package/src/sap/fe/core/messagebundle_nl.properties +13 -5
  247. package/src/sap/fe/core/messagebundle_no.properties +13 -5
  248. package/src/sap/fe/core/messagebundle_pl.properties +13 -5
  249. package/src/sap/fe/core/messagebundle_pt.properties +13 -5
  250. package/src/sap/fe/core/messagebundle_pt_PT.properties +14 -6
  251. package/src/sap/fe/core/messagebundle_ro.properties +13 -5
  252. package/src/sap/fe/core/messagebundle_ru.properties +13 -5
  253. package/src/sap/fe/core/messagebundle_sh.properties +13 -5
  254. package/src/sap/fe/core/messagebundle_sk.properties +13 -5
  255. package/src/sap/fe/core/messagebundle_sl.properties +17 -9
  256. package/src/sap/fe/core/messagebundle_sv.properties +14 -6
  257. package/src/sap/fe/core/messagebundle_th.properties +13 -5
  258. package/src/sap/fe/core/messagebundle_tr.properties +13 -5
  259. package/src/sap/fe/core/messagebundle_uk.properties +13 -5
  260. package/src/sap/fe/core/messagebundle_vi.properties +13 -5
  261. package/src/sap/fe/core/messagebundle_zh_CN.properties +14 -6
  262. package/src/sap/fe/core/messagebundle_zh_TW.properties +13 -5
  263. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  264. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  265. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +2 -2
  266. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +14 -14
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  268. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  269. package/src/sap/fe/core/services/NavigationServiceFactory.js +53 -44
  270. package/src/sap/fe/core/services/NavigationServiceFactory.ts +54 -46
  271. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  272. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  273. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  274. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  275. package/src/sap/fe/core/services/ShellServicesFactory.js +72 -76
  276. package/src/sap/fe/core/services/ShellServicesFactory.ts +76 -82
  277. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  278. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  279. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +20 -15
  280. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +26 -21
  281. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  282. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  283. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  284. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  285. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  286. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  287. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  288. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  289. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  290. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  291. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  292. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  293. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  294. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  295. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  296. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  297. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  298. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  299. package/src/sap/fe/core/templating/FilterHelper.js +10 -9
  300. package/src/sap/fe/core/templating/FilterHelper.ts +13 -13
  301. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  302. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  303. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  304. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  305. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  306. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  307. package/src/sap/fe/core/templating/UIFormatters.js +148 -93
  308. package/src/sap/fe/core/templating/UIFormatters.ts +196 -124
  309. package/src/sap/fe/core/type/Email.js +2 -2
  310. package/src/sap/fe/core/type/Email.ts +2 -2
  311. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -5,14 +5,14 @@
5
5
  sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./ModelHelper"], function (Log, KeepAliveRefreshTypes, ModelHelper) {
6
6
  "use strict";
7
7
 
8
- var PATH_TO_STORE = KeepAliveRefreshTypes.PATH_TO_STORE;
9
8
  var RefreshStrategyType = KeepAliveRefreshTypes.RefreshStrategyType;
9
+ var PATH_TO_STORE = KeepAliveRefreshTypes.PATH_TO_STORE;
10
10
 
11
11
  // Private functions - start
12
12
  var _fnSimplifyEntitySetPath = function (metaModel, entitySetPathToUse) {
13
13
  var entitySetPath = ModelHelper.getEntitySetPath(entitySetPathToUse);
14
14
  var entitySet = entitySetPath.indexOf("$NavigationPropertyBinding") > -1 && metaModel.getObject(entitySetPath);
15
- return entitySet ? "/" + entitySet : entitySetPathToUse;
15
+ return entitySet ? "/".concat(entitySet) : entitySetPathToUse;
16
16
  };
17
17
 
18
18
  var _fnIsApplicable = function (primaryPath, key, strategy) {
@@ -21,17 +21,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
21
21
  /**
22
22
  * Check if given path resides in the context path provided.
23
23
  *
24
- * @param {ODataMetaModel} metaModel MetaModel to be used
25
- * @param {string} contextPath Context path to be used
26
- * @param {string} path Path to be used
27
- * @param {RefreshStrategyType} strategy Strategy, it could be 'self' | 'includingDependents'
28
- * @returns {boolean} Returns true if the context path is applicable.
24
+ * @param metaModel MetaModel to be used
25
+ * @param contextPath Context path to be used
26
+ * @param path Path to be used
27
+ * @param strategy Strategy, it could be 'self' | 'includingDependents'
28
+ * @returns Returns true if the context path is applicable.
29
29
  */
30
30
 
31
31
 
32
32
  var _isPathApplicableToContextPath = function (metaModel, contextPath, path, strategy) {
33
- var contextPathToCheck = contextPath.startsWith("/") ? contextPath : "/" + contextPath,
34
- pathToCheck = path.startsWith("/") ? path : "/" + path;
33
+ var contextPathToCheck = contextPath.startsWith("/") ? contextPath : "/".concat(contextPath),
34
+ pathToCheck = path.startsWith("/") ? path : "/".concat(path);
35
35
 
36
36
  if (!_fnIsApplicable(contextPathToCheck, pathToCheck, strategy)) {
37
37
  contextPathToCheck = _fnSimplifyEntitySetPath(metaModel, contextPathToCheck);
@@ -49,9 +49,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
49
49
  /**
50
50
  * Get controls to refresh in a view.
51
51
  *
52
- * @param {View} view View of the controls
53
- * @param {Control[]} controls Context path to be used
54
- * @returns {Control[]} Returns controls that need to be refreshed.
52
+ * @param view View of the controls
53
+ * @param controls Context path to be used
54
+ * @returns Returns controls that need to be refreshed.
55
55
  */
56
56
 
57
57
 
@@ -80,9 +80,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
80
80
  /**
81
81
  * Get refresh strategy for the control for a context path.
82
82
  *
83
- * @param {Control} control Control from which refresh info is needed
84
- * @param {string} contextPath ContextPath for properities
85
- * @returns {RefreshStrategyType} Returns strategy for control refresh.
83
+ * @param control Control from which refresh info is needed
84
+ * @param contextPath ContextPath for properities
85
+ * @returns Returns strategy for control refresh.
86
86
  */
87
87
 
88
88
 
@@ -111,28 +111,28 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
111
111
  /**
112
112
  * Get refresh info from view.
113
113
  *
114
- * @param {View} view View from which refresh info is needed
115
- * @returns {RefreshStrategyType | undefined} Returns strategy for view refresh.
114
+ * @param view View from which refresh info is needed
115
+ * @returns Returns strategy for view refresh.
116
116
  */
117
117
 
118
118
 
119
119
  var getViewRefreshInfo = function (view) {
120
120
  var viewData = view.getViewData(),
121
- contextPath = viewData && ((viewData === null || viewData === void 0 ? void 0 : viewData.contextPath) || "/" + (viewData === null || viewData === void 0 ? void 0 : viewData.entitySet));
121
+ contextPath = viewData && ((viewData === null || viewData === void 0 ? void 0 : viewData.contextPath) || "/".concat(viewData === null || viewData === void 0 ? void 0 : viewData.entitySet));
122
122
  return KeepAliveHelper.getControlRefreshStrategyForContextPath(view, contextPath);
123
123
  };
124
124
  /**
125
125
  * Get refresh strategy for an intent.
126
126
  *
127
- * @param {RefreshStrategies} refreshStrategies RefreshStrategies to consider
128
- * @param {string} semanticObject Outbound Semantic Object
129
- * @param {string} action Outbound Action
130
- * @returns {SORefreshStrategy | undefined} Returns refresh strategies to use for the intent.
127
+ * @param refreshStrategies RefreshStrategies to consider
128
+ * @param semanticObject Outbound Semantic Object
129
+ * @param action Outbound Action
130
+ * @returns Returns refresh strategies to use for the intent.
131
131
  */
132
132
 
133
133
 
134
134
  var getRefreshStrategyForIntent = function (refreshStrategies, semanticObject, action) {
135
- var soAction = semanticObject && action && semanticObject + "-" + action;
135
+ var soAction = semanticObject && action && "".concat(semanticObject, "-").concat(action);
136
136
  var intents = refreshStrategies.intents;
137
137
  var soActionIntentMatch = intents && soAction && intents[soAction];
138
138
  var soIntentMatch = !soActionIntentMatch && intents && semanticObject && intents[semanticObject];
@@ -141,8 +141,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
141
141
  /**
142
142
  * Store control refresh strategy for hash in the internal model.
143
143
  *
144
- * @param {Control} control Control for the refresh strategy
145
- * @param {SOAction} hash Shell hash object
144
+ * @param control Control for the refresh strategy
145
+ * @param hash Shell hash object
146
146
  */
147
147
 
148
148
 
@@ -161,8 +161,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
161
161
  /**
162
162
  * Method to refresh and restore the view if neccessary.
163
163
  *
164
- * @param {object} view Control for the refresh strategy
165
- * @returns {object} A promise after view refresh and restore are triggered
164
+ * @param view Control for the refresh strategy
165
+ * @returns A promise after view refresh and restore are triggered
166
166
  */
167
167
 
168
168
 
@@ -176,9 +176,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
176
176
  if (viewState.refreshViewBindings) {
177
177
  refreshBindings = viewState.refreshViewBindings();
178
178
  refreshBindings.then(function () {
179
- Log.info("FE V4: Refresh was triggered successfull: " + view.getId());
179
+ Log.info("FE V4: Refresh was triggered successfull: ".concat(view.getId()));
180
180
  }).catch(function (err) {
181
- Log.warning("FE V4: Refresh was unsuccessfull: " + view.getId(), err);
181
+ Log.warning("FE V4: Refresh was unsuccessfull: ".concat(view.getId()), err);
182
182
  });
183
183
  }
184
184
 
@@ -186,7 +186,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
186
186
  viewState.onRestore();
187
187
  internalModelContext.setProperty("restoreStatus", "done");
188
188
  }).catch(function (error) {
189
- Log.warning("FE V4: Restore was unsuccessfull: " + view.getId(), error);
189
+ Log.warning("FE V4: Restore was unsuccessfull: ".concat(view.getId()), error);
190
190
  });
191
191
  }
192
192
 
@@ -207,4 +207,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/helpers/KeepAliveRefreshTypes", "./M
207
207
  };
208
208
  return KeepAliveHelper;
209
209
  }, false);
210
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktlZXBBbGl2ZUhlbHBlci50cyJdLCJuYW1lcyI6WyJfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRQYXRoVG9Vc2UiLCJlbnRpdHlTZXRQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZW50aXR5U2V0IiwiaW5kZXhPZiIsImdldE9iamVjdCIsIl9mbklzQXBwbGljYWJsZSIsInByaW1hcnlQYXRoIiwia2V5Iiwic3RyYXRlZ3kiLCJSZWZyZXNoU3RyYXRlZ3lUeXBlIiwiSW5jbHVkaW5nRGVwZW5kZW50cyIsInN0YXJ0c1dpdGgiLCJfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGgiLCJjb250ZXh0UGF0aCIsInBhdGgiLCJjb250ZXh0UGF0aFRvQ2hlY2siLCJwYXRoVG9DaGVjayIsImdldENvbnRyb2xzRm9yUmVmcmVzaCIsInZpZXciLCJjb250cm9scyIsImNvbnRyb2xzRm9yUmVmcmVzaCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW50ZXJuYWxNb2RlbCIsInJlZnJlc2hTdHJhdGVneSIsImdldFByb3BlcnR5IiwiUEFUSF9UT19TVE9SRSIsImZvckVhY2giLCJjb250cm9sIiwiZGF0YSIsInB1c2giLCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgiLCJzdHJhdGVneVRvQ2hlY2siLCJnZXRWaWV3UmVmcmVzaEluZm8iLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50IiwicmVmcmVzaFN0cmF0ZWdpZXMiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsInNvQWN0aW9uIiwiaW50ZW50cyIsInNvQWN0aW9uSW50ZW50TWF0Y2giLCJzb0ludGVudE1hdGNoIiwiZGVmYXVsdEJlaGF2aW9yIiwiX2ZlRGVmYXVsdCIsInN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2giLCJoYXNoIiwic2V0UHJvcGVydHkiLCJyZXN0b3JlVmlldyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJlZnJlc2hCaW5kaW5ncyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVmcmVzaFZpZXdCaW5kaW5ncyIsInRoZW4iLCJMb2ciLCJpbmZvIiwiZ2V0SWQiLCJjYXRjaCIsImVyciIsIndhcm5pbmciLCJvblJlc3RvcmUiLCJlcnJvciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7OztBQWFBO0FBQ0EsTUFBTUEsd0JBQXdCLEdBQUcsVUFBU0MsU0FBVCxFQUFvQ0Msa0JBQXBDLEVBQXdFO0FBQ3hHLFFBQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyxnQkFBWixDQUE2Qkgsa0JBQTdCLENBQXRCO0FBQ0EsUUFBTUksU0FBUyxHQUFHSCxhQUFhLENBQUNJLE9BQWQsQ0FBc0IsNEJBQXRCLElBQXNELENBQUMsQ0FBdkQsSUFBNEROLFNBQVMsQ0FBQ08sU0FBVixDQUFvQkwsYUFBcEIsQ0FBOUU7QUFDQSxXQUFPRyxTQUFTLEdBQUcsTUFBTUEsU0FBVCxHQUFxQkosa0JBQXJDO0FBQ0EsR0FKRDs7QUFLQSxNQUFNTyxlQUFlLEdBQUcsVUFBU0MsV0FBVCxFQUE4QkMsR0FBOUIsRUFBMkNDLFFBQTNDLEVBQW1GO0FBQzFHLFdBQU9GLFdBQVcsS0FBS0MsR0FBaEIsSUFBd0JDLFFBQVEsS0FBS0MsbUJBQW1CLENBQUNDLG1CQUFqQyxJQUF3REosV0FBVyxDQUFDSyxVQUFaLENBQXVCSixHQUF2QixDQUF2RjtBQUNBLEdBRkQ7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLE1BQU1LLDhCQUE4QixHQUFHLFVBQ3RDZixTQURzQyxFQUV0Q2dCLFdBRnNDLEVBR3RDQyxJQUhzQyxFQUl0Q04sUUFKc0MsRUFLNUI7QUFDVixRQUFJ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QUFBQSx1Q0FBdUMsRUFBdkNBLHVDQUZ1QjtBQUd2QkUsSUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFIdUI7QUFJdkJJLElBQUFBLDJCQUEyQixFQUEzQkEsMkJBSnVCO0FBS3ZCVSxJQUFBQSxrQ0FBa0MsRUFBbENBLGtDQUx1QjtBQU12QkcsSUFBQUEsV0FBVyxFQUFYQTtBQU51QixHQUF4QjtTQVFlZCxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHtcblx0UmVmcmVzaFN0cmF0ZWd5VHlwZSxcblx0U09SZWZyZXNoU3RyYXRlZ3ksXG5cdFJlZnJlc2hTdHJhdGVnaWVzLFxuXHRQQVRIX1RPX1NUT1JFLFxuXHRTT0FjdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCBNb2RlbEhlbHBlciwgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5cbi8vIFByaXZhdGUgZnVuY3Rpb25zIC0gc3RhcnRcbmNvbnN0IF9mblNpbXBsaWZ5RW50aXR5U2V0UGF0aCA9IGZ1bmN0aW9uKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGhUb1VzZTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5U2V0UGF0aFRvVXNlKTtcblx0Y29uc3QgZW50aXR5U2V0ID0gZW50aXR5U2V0UGF0aC5pbmRleE9mKFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIikgPiAtMSAmJiBtZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGgpO1xuXHRyZXR1cm4gZW50aXR5U2V0ID8gXCIvXCIgKyBlbnRpdHlTZXQgOiBlbnRpdHlTZXRQYXRoVG9Vc2U7XG59O1xuY29uc3QgX2ZuSXNBcHBsaWNhYmxlID0gZnVuY3Rpb24ocHJpbWFyeVBhdGg6IHN0cmluZywga2V5OiBzdHJpbmcsIHN0cmF0ZWd5OiBSZWZyZXNoU3RyYXRlZ3lUeXBlKTogYm9vbGVhbiB7XG5cdHJldHVybiBwcmltYXJ5UGF0aCA9PT0ga2V5IHx8IChzdHJhdGVneSA9PT0gUmVmcmVzaFN0cmF0ZWd5VHlwZS5JbmNsdWRpbmdEZXBlbmRlbnRzICYmIHByaW1hcnlQYXRoLnN0YXJ0c1dpdGgoa2V5KSk7XG59O1xuLyoqXG4gKiBDaGVjayBpZiBnaXZlbiBwYXRoIHJlc2lkZXMgaW4gdGhlIGNvbnRleHQgcGF0aCBwcm92aWRlZC5cbiAqXG4gKiBAcGFyYW0ge09EYXRhTWV0YU1vZGVsfSBtZXRhTW9kZWwgTWV0YU1vZGVsIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aCBDb250ZXh0IHBhdGggdG8gYmUgdXNlZFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggUGF0aCB0byBiZSB1c2VkXG4gKiBAcGFyYW0ge1JlZnJlc2hTdHJhdGVneVR5cGV9IHN0cmF0ZWd5IFN0cmF0ZWd5LCBpdCBjb3VsZCBiZSAnc2VsZicgfCAnaW5jbHVkaW5nRGVwZW5kZW50cydcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbnRleHQgcGF0aCBpcyBhcHBsaWNhYmxlLlxuICovXG5jb25zdCBfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGggPSBmdW5jdGlvbihcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0Y29udGV4dFBhdGg6IHN0cmluZyxcblx0cGF0aDogc3RyaW5nLFxuXHRzdHJhdGVneTogUmVmcmVzaFN0cmF0ZWd5VHlwZVxuKTogYm9vbGVhbiB7XG5cdGxldCBjb250ZXh0UGF0aFRvQ2hlY2sgPSBjb250ZXh0UGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IGNvbnRleHRQYXRoIDogXCIvXCIgKyBjb250ZXh0UGF0aCxcblx0XHRwYXRoVG9DaGVjayA9IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogXCIvXCIgKyBwYXRoO1xuXHRpZiAoIV9mbklzQXBwbGljYWJsZShjb250ZXh0UGF0aFRvQ2hlY2ssIHBhdGhUb0NoZWNrLCBzdHJhdGVneSkpIHtcblx0XHRjb250ZXh0UGF0aFRvQ2hlY2sgPSBfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgobWV0YU1vZGVsLCBjb250ZXh0UGF0aFRvQ2hlY2spO1xuXHRcdGlmICghX2ZuSXNBcHBsaWNhYmxlKGNvbnRleHRQYXRoVG9DaGVjaywgcGF0aFRvQ2hlY2ssIHN0cmF0ZWd5KSkge1xuXHRcdFx0cGF0aFRvQ2hlY2sgPSBfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgobWV0YU1vZGVsLCBwYXRoVG9DaGVjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gX2ZuSXNBcHBsaWNhYmxlKGNvbnRleHRQYXRoVG9DaGVjaywgcGF0aFRvQ2hlY2ssIHN0cmF0ZWd5KTtcbn07XG4vLyBQcml2YXRlIGZ1bmN0aW9ucyAtIGVuZFxuLyoqXG4gKiBHZXQgY29udHJvbHMgdG8gcmVmcmVzaCBpbiBhIHZpZXcuXG4gKlxuICogQHBhcmFtIHtWaWV3fSB2aWV3IFZpZXcgb2YgdGhlIGNvbnRyb2xzXG4gKiBAcGFyYW0ge0NvbnRyb2xbXX0gY29udHJvbHMgQ29udGV4dCBwYXRoIHRvIGJlIHVzZWRcbiAqIEByZXR1cm5zIHtDb250cm9sW119IFJldHVybnMgY29udHJvbHMgdGhhdCBuZWVkIHRvIGJlIHJlZnJlc2hlZC5cbiAqL1xuY29uc3QgZ2V0Q29udHJvbHNGb3JSZWZyZXNoID0gZnVuY3Rpb24odmlldzogVmlldywgY29udHJvbHM6IENvbnRyb2xbXSk6IENvbnRyb2xbXSB7XG5cdGNvbnN0IGNvbnRyb2xzRm9yUmVmcmVzaDogQ29udHJvbFtdID0gW107XG5cdGNvbnN0IG1ldGFNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgcmVmcmVzaFN0cmF0ZWd5ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShQQVRIX1RPX1NUT1JFKSB8fCB7fTtcblx0aWYgKGNvbnRyb2xzKSB7XG5cdFx0Y29udHJvbHMuZm9yRWFjaChmdW5jdGlvbihjb250cm9sKSB7XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IGNvbnRyb2wuZGF0YShcInRhcmdldENvbGxlY3Rpb25QYXRoXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBrZXkgaW4gcmVmcmVzaFN0cmF0ZWd5KSB7XG5cdFx0XHRcdGNvbnN0IHN0cmF0ZWd5ID0gcmVmcmVzaFN0cmF0ZWd5W2tleV07XG5cdFx0XHRcdGlmIChjb250cm9sc0ZvclJlZnJlc2guaW5kZXhPZihjb250cm9sKSA9PT0gLTEgJiYgX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoKG1ldGFNb2RlbCwgY29udGV4dFBhdGgsIGtleSwgc3RyYXRlZ3kpKSB7XG5cdFx0XHRcdFx0Y29udHJvbHNGb3JSZWZyZXNoLnB1c2goY29udHJvbCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gY29udHJvbHNGb3JSZWZyZXNoO1xufTtcbi8qKlxuICogR2V0IHJlZnJlc2ggc3RyYXRlZ3kgZm9yIHRoZSBjb250cm9sIGZvciBhIGNvbnRleHQgcGF0aC5cbiAqXG4gKiBAcGFyYW0ge0NvbnRyb2x9IGNvbnRyb2wgQ29udHJvbCBmcm9tIHdoaWNoIHJlZnJlc2ggaW5mbyBpcyBuZWVkZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0UGF0aCBDb250ZXh0UGF0aCBmb3IgcHJvcGVyaXRpZXNcbiAqIEByZXR1cm5zIHtSZWZyZXNoU3RyYXRlZ3lUeXBlfSBSZXR1cm5zIHN0cmF0ZWd5IGZvciBjb250cm9sIHJlZnJlc2guXG4gKi9cbmNvbnN0IGdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCA9IGZ1bmN0aW9uKGNvbnRyb2w6IENvbnRyb2wsIGNvbnRleHRQYXRoOiBzdHJpbmcpOiBSZWZyZXNoU3RyYXRlZ3lUeXBlIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgbWV0YU1vZGVsID0gY29udHJvbC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsO1xuXHRjb25zdCBpbnRlcm5hbE1vZGVsID0gY29udHJvbC5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRjb25zdCByZWZyZXNoU3RyYXRlZ3kgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFBBVEhfVE9fU1RPUkUpIHx8IHt9O1xuXHRsZXQgc3RyYXRlZ3k7XG5cdGlmIChjb250ZXh0UGF0aCkge1xuXHRcdGZvciAoY29uc3Qga2V5IGluIHJlZnJlc2hTdHJhdGVneSkge1xuXHRcdFx0Y29uc3Qgc3RyYXRlZ3lUb0NoZWNrID0gcmVmcmVzaFN0cmF0ZWd5W2tleV07XG5cdFx0XHRpZiAoX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoKG1ldGFNb2RlbCwgY29udGV4dFBhdGgsIGtleSwgc3RyYXRlZ3lUb0NoZWNrKSkge1xuXHRcdFx0XHRzdHJhdGVneSA9IHN0cmF0ZWd5VG9DaGVjaztcblx0XHRcdFx0aWYgKHN0cmF0ZWd5ID09PSBcImluY2x1ZGluZ0RlcGVuZGVudHNcIikge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzdHJhdGVneTtcbn07XG4vKipcbiAqIEdldCByZWZyZXNoIGluZm8gZnJvbSB2aWV3LlxuICpcbiAqIEBwYXJhbSB7Vmlld30gdmlldyBWaWV3IGZyb20gd2hpY2ggcmVmcmVzaCBpbmZvIGlzIG5lZWRlZFxuICogQHJldHVybnMge1JlZnJlc2hTdHJhdGVneVR5cGUgfCB1bmRlZmluZWR9IFJldHVybnMgc3RyYXRlZ3kgZm9yIHZpZXcgcmVmcmVzaC5cbiAqL1xuY29uc3QgZ2V0Vmlld1JlZnJlc2hJbmZvID0gZnVuY3Rpb24odmlldzogVmlldyk6IFJlZnJlc2hTdHJhdGVneVR5cGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0XHRjb250ZXh0UGF0aCA9IHZpZXdEYXRhICYmICh2aWV3RGF0YT8uY29udGV4dFBhdGggfHwgXCIvXCIgKyB2aWV3RGF0YT8uZW50aXR5U2V0KTtcblx0cmV0dXJuIEtlZXBBbGl2ZUhlbHBlci5nZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgodmlldywgY29udGV4dFBhdGgpO1xufTtcblxuLyoqXG4gKiBHZXQgcmVmcmVzaCBzdHJhdGVneSBmb3IgYW4gaW50ZW50LlxuICpcbiAqIEBwYXJhbSB7UmVmcmVzaFN0cmF0ZWdpZXN9IHJlZnJlc2hTdHJhdGVnaWVzIFJlZnJlc2hTdHJhdGVnaWVzIHRvIGNvbnNpZGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VtYW50aWNPYmplY3QgT3V0Ym91bmQgU2VtYW50aWMgT2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gYWN0aW9uIE91dGJvdW5kIEFjdGlvblxuICogQHJldHVybnMge1NPUmVmcmVzaFN0cmF0ZWd5IHwgdW5kZWZpbmVkfSBSZXR1cm5zIHJlZnJlc2ggc3RyYXRlZ2llcyB0byB1c2UgZm9yIHRoZSBpbnRlbnQuXG4gKi9cbmNvbnN0IGdldFJlZnJlc2hTdHJhdGVneUZvckludGVudCA9IGZ1bmN0aW9uKFxuXHRyZWZyZXNoU3RyYXRlZ2llczogUmVmcmVzaFN0cmF0ZWdpZXMsXG5cdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nLFxuXHRhY3Rpb24/OiBzdHJpbmdcbik6IFNPUmVmcmVzaFN0cmF0ZWd5IHwgdW5kZWZpbmVkIHtcblx0Y29uc3Qgc29BY3Rpb24gPSBzZW1hbnRpY09iamVjdCAmJiBhY3Rpb24gJiYgc2VtYW50aWNPYmplY3QgKyBcIi1cIiArIGFjdGlvbjtcblx0Y29uc3QgaW50ZW50cyA9IHJlZnJlc2hTdHJhdGVnaWVzLmludGVudHM7XG5cdGNvbnN0IHNvQWN0aW9uSW50ZW50TWF0Y2ggPSBpbnRlbnRzICYmIHNvQWN0aW9uICYmIGludGVudHNbc29BY3Rpb25dO1xuXHRjb25zdCBzb0ludGVudE1hdGNoID0gIXNvQWN0aW9uSW50ZW50TWF0Y2ggJiYgaW50ZW50cyAmJiBzZW1hbnRpY09iamVjdCAmJiBpbnRlbnRzW3NlbWFudGljT2JqZWN0XTtcblxuXHRyZXR1cm4gc29BY3Rpb25JbnRlbnRNYXRjaCB8fCBzb0ludGVudE1hdGNoIHx8IHJlZnJlc2hTdHJhdGVnaWVzPy5kZWZhdWx0QmVoYXZpb3IgfHwgcmVmcmVzaFN0cmF0ZWdpZXM/Ll9mZURlZmF1bHQ7XG59O1xuLyoqXG4gKiBTdG9yZSBjb250cm9sIHJlZnJlc2ggc3RyYXRlZ3kgZm9yIGhhc2ggaW4gdGhlIGludGVybmFsIG1vZGVsLlxuICpcbiAqIEBwYXJhbSB7Q29udHJvbH0gY29udHJvbCBDb250cm9sIGZvciB0aGUgcmVmcmVzaCBzdHJhdGVneVxuICogQHBhcmFtIHtTT0FjdGlvbn0gaGFzaCBTaGVsbCBoYXNoIG9iamVjdFxuICovXG5jb25zdCBzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoID0gZnVuY3Rpb24oY29udHJvbDogQ29udHJvbCwgaGFzaDogU09BY3Rpb24pOiB2b2lkIHtcblx0aWYgKGNvbnRyb2wgJiYgY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpICYmIGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSkge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpO1xuXHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVnaWVzOiBSZWZyZXNoU3RyYXRlZ2llcyA9IHZpZXdEYXRhLmdldFByb3BlcnR5KFBBVEhfVE9fU1RPUkUpO1xuXHRcdGlmIChyZWZyZXNoU3RyYXRlZ2llcykge1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVneTogU09SZWZyZXNoU3RyYXRlZ3kgfCB1bmRlZmluZWQgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50KFxuXHRcdFx0XHRyZWZyZXNoU3RyYXRlZ2llcyxcblx0XHRcdFx0aGFzaD8uc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdGhhc2g/LmFjdGlvblxuXHRcdFx0KTtcblx0XHRcdChpbnRlcm5hbE1vZGVsIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoUEFUSF9UT19TVE9SRSwgcmVmcmVzaFN0cmF0ZWd5KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIHJlZnJlc2ggYW5kIHJlc3RvcmUgdGhlIHZpZXcgaWYgbmVjY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdmlldyBDb250cm9sIGZvciB0aGUgcmVmcmVzaCBzdHJhdGVneVxuICogQHJldHVybnMge29iamVjdH0gQSBwcm9taXNlIGFmdGVyIHZpZXcgcmVmcmVzaCBhbmQgcmVzdG9yZSBhcmUgdHJpZ2dlcmVkXG4gKi9cbmNvbnN0IHJlc3RvcmVWaWV3ID0gZnVuY3Rpb24odmlldzogVmlldyk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRjb25zdCBjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCk7XG5cdGNvbnN0IHZpZXdTdGF0ZSA9IChjb250cm9sbGVyIGFzIGFueSk/LnZpZXdTdGF0ZTtcblx0bGV0IHJlZnJlc2hCaW5kaW5ncyA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRpZiAoaW50ZXJuYWxNb2RlbENvbnRleHQgJiYgaW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0UHJvcGVydHkoXCJyZXN0b3JlU3RhdHVzXCIpID09PSBcInBlbmRpbmdcIikge1xuXHRcdGlmICh2aWV3U3RhdGUucmVmcmVzaFZpZXdCaW5kaW5ncykge1xuXHRcdFx0cmVmcmVzaEJpbmRpbmdzID0gdmlld1N0YXRlLnJlZnJlc2hWaWV3QmluZGluZ3MoKTtcblx0XHRcdHJlZnJlc2hCaW5kaW5nc1xuXHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRMb2cuaW5mbyhcIkZFIFY0OiBSZWZyZXNoIHdhcyB0cmlnZ2VyZWQgc3VjY2Vzc2Z1bGw6IFwiICsgdmlldy5nZXRJZCgpKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKGVycikge1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKFwiRkUgVjQ6IFJlZnJlc2ggd2FzIHVuc3VjY2Vzc2Z1bGw6IFwiICsgdmlldy5nZXRJZCgpLCBlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHR9XG5cdFx0cmVmcmVzaEJpbmRpbmdzID0gcmVmcmVzaEJpbmRpbmdzXG5cdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0dmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlc3RvcmVTdGF0dXNcIiwgXCJkb25lXCIpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbihlcnJvcikge1xuXHRcdFx0XHRMb2cud2FybmluZyhcIkZFIFY0OiBSZXN0b3JlIHdhcyB1bnN1Y2Nlc3NmdWxsOiBcIiArIHZpZXcuZ2V0SWQoKSwgZXJyb3IpO1xuXHRcdFx0fSk7XG5cdH1cblx0cmV0dXJuIHJlZnJlc2hCaW5kaW5ncztcbn07XG5cbi8qKlxuICogaGVscGVyIGNsYXNzIGZvciBLZWVwQWxpdmUgZmVhdHVyZSBpbiBzYXAuZmUuXG4gKi9cbmNvbnN0IEtlZXBBbGl2ZUhlbHBlciA9IHtcblx0Z2V0Q29udHJvbHNGb3JSZWZyZXNoLFxuXHRnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgsXG5cdGdldFZpZXdSZWZyZXNoSW5mbyxcblx0Z2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50LFxuXHRzdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoLFxuXHRyZXN0b3JlVmlld1xufTtcbmV4cG9ydCBkZWZhdWx0IEtlZXBBbGl2ZUhlbHBlcjtcbiJdfQ==
210
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktlZXBBbGl2ZUhlbHBlci50cyJdLCJuYW1lcyI6WyJfZm5TaW1wbGlmeUVudGl0eVNldFBhdGgiLCJtZXRhTW9kZWwiLCJlbnRpdHlTZXRQYXRoVG9Vc2UiLCJlbnRpdHlTZXRQYXRoIiwiTW9kZWxIZWxwZXIiLCJnZXRFbnRpdHlTZXRQYXRoIiwiZW50aXR5U2V0IiwiaW5kZXhPZiIsImdldE9iamVjdCIsIl9mbklzQXBwbGljYWJsZSIsInByaW1hcnlQYXRoIiwia2V5Iiwic3RyYXRlZ3kiLCJSZWZyZXNoU3RyYXRlZ3lUeXBlIiwiSW5jbHVkaW5nRGVwZW5kZW50cyIsInN0YXJ0c1dpdGgiLCJfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGgiLCJjb250ZXh0UGF0aCIsInBhdGgiLCJjb250ZXh0UGF0aFRvQ2hlY2siLCJwYXRoVG9DaGVjayIsImdldENvbnRyb2xzRm9yUmVmcmVzaCIsInZpZXciLCJjb250cm9scyIsImNvbnRyb2xzRm9yUmVmcmVzaCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaW50ZXJuYWxNb2RlbCIsInJlZnJlc2hTdHJhdGVneSIsImdldFByb3BlcnR5IiwiUEFUSF9UT19TVE9SRSIsImZvckVhY2giLCJjb250cm9sIiwiZGF0YSIsInB1c2giLCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgiLCJzdHJhdGVneVRvQ2hlY2siLCJnZXRWaWV3UmVmcmVzaEluZm8iLCJ2aWV3RGF0YSIsImdldFZpZXdEYXRhIiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50IiwicmVmcmVzaFN0cmF0ZWdpZXMiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsInNvQWN0aW9uIiwiaW50ZW50cyIsInNvQWN0aW9uSW50ZW50TWF0Y2giLCJzb0ludGVudE1hdGNoIiwiZGVmYXVsdEJlaGF2aW9yIiwiX2ZlRGVmYXVsdCIsInN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2giLCJoYXNoIiwic2V0UHJvcGVydHkiLCJyZXN0b3JlVmlldyIsImludGVybmFsTW9kZWxDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJlZnJlc2hCaW5kaW5ncyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVmcmVzaFZpZXdCaW5kaW5ncyIsInRoZW4iLCJMb2ciLCJpbmZvIiwiZ2V0SWQiLCJjYXRjaCIsImVyciIsIndhcm5pbmciLCJvblJlc3RvcmUiLCJlcnJvciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7OztBQVNBO0FBQ0EsTUFBTUEsd0JBQXdCLEdBQUcsVUFBVUMsU0FBVixFQUFxQ0Msa0JBQXJDLEVBQXlFO0FBQ3pHLFFBQU1DLGFBQWEsR0FBR0MsV0FBVyxDQUFDQyxnQkFBWixDQUE2Qkgsa0JBQTdCLENBQXRCO0FBQ0EsUUFBTUksU0FBUyxHQUFHSCxhQUFhLENBQUNJLE9BQWQsQ0FBc0IsNEJBQXRCLElBQXNELENBQUMsQ0FBdkQsSUFBNEROLFNBQVMsQ0FBQ08sU0FBVixDQUFvQkwsYUFBcEIsQ0FBOUU7QUFDQSxXQUFPRyxTQUFTLGNBQU9BLFNBQVAsSUFBcUJKLGtCQUFyQztBQUNBLEdBSkQ7O0FBS0EsTUFBTU8sZUFBZSxHQUFHLFVBQVVDLFdBQVYsRUFBK0JDLEdBQS9CLEVBQTRDQyxRQUE1QyxFQUFvRjtBQUMzRyxXQUFPRixXQUFXLEtBQUtDLEdBQWhCLElBQXdCQyxRQUFRLEtBQUtDLG1CQUFtQixDQUFDQyxtQkFBakMsSUFBd0RKLFdBQVcsQ0FBQ0ssVUFBWixDQUF1QkosR0FBdkIsQ0FBdkY7QUFDQSxHQUZEO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxNQUFNSyw4QkFBOEIsR0FBRyxVQUN0Q2YsU0FEc0MsRUFFdENnQixXQUZzQyxFQUd0Q0MsSUFIc0MsRUFJdENOLFFBSnNDLEVBSzVCO0FBQ1YsUUFBSU8sa0JB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QjtBQUd2QkUsSUFBQUEsa0JBQWtCLEVBQWxCQSxrQkFIdUI7QUFJdkJJLElBQUFBLDJCQUEyQixFQUEzQkEsMkJBSnVCO0FBS3ZCVSxJQUFBQSxrQ0FBa0MsRUFBbENBLGtDQUx1QjtBQU12QkcsSUFBQUEsV0FBVyxFQUFYQTtBQU51QixHQUF4QjtTQVFlZCxlIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgQmFzZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IFJlZnJlc2hTdHJhdGVnaWVzLCBTT0FjdGlvbiwgU09SZWZyZXNoU3RyYXRlZ3kgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCB7IFBBVEhfVE9fU1RPUkUsIFJlZnJlc2hTdHJhdGVneVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCIuL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcIi4vTW9kZWxIZWxwZXJcIjtcblxuLy8gUHJpdmF0ZSBmdW5jdGlvbnMgLSBzdGFydFxuY29uc3QgX2ZuU2ltcGxpZnlFbnRpdHlTZXRQYXRoID0gZnVuY3Rpb24gKG1ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsIGVudGl0eVNldFBhdGhUb1VzZTogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgZW50aXR5U2V0UGF0aCA9IE1vZGVsSGVscGVyLmdldEVudGl0eVNldFBhdGgoZW50aXR5U2V0UGF0aFRvVXNlKTtcblx0Y29uc3QgZW50aXR5U2V0ID0gZW50aXR5U2V0UGF0aC5pbmRleE9mKFwiJE5hdmlnYXRpb25Qcm9wZXJ0eUJpbmRpbmdcIikgPiAtMSAmJiBtZXRhTW9kZWwuZ2V0T2JqZWN0KGVudGl0eVNldFBhdGgpO1xuXHRyZXR1cm4gZW50aXR5U2V0ID8gYC8ke2VudGl0eVNldH1gIDogZW50aXR5U2V0UGF0aFRvVXNlO1xufTtcbmNvbnN0IF9mbklzQXBwbGljYWJsZSA9IGZ1bmN0aW9uIChwcmltYXJ5UGF0aDogc3RyaW5nLCBrZXk6IHN0cmluZywgc3RyYXRlZ3k6IFJlZnJlc2hTdHJhdGVneVR5cGUpOiBib29sZWFuIHtcblx0cmV0dXJuIHByaW1hcnlQYXRoID09PSBrZXkgfHwgKHN0cmF0ZWd5ID09PSBSZWZyZXNoU3RyYXRlZ3lUeXBlLkluY2x1ZGluZ0RlcGVuZGVudHMgJiYgcHJpbWFyeVBhdGguc3RhcnRzV2l0aChrZXkpKTtcbn07XG4vKipcbiAqIENoZWNrIGlmIGdpdmVuIHBhdGggcmVzaWRlcyBpbiB0aGUgY29udGV4dCBwYXRoIHByb3ZpZGVkLlxuICpcbiAqIEBwYXJhbSBtZXRhTW9kZWwgTWV0YU1vZGVsIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSBjb250ZXh0UGF0aCBDb250ZXh0IHBhdGggdG8gYmUgdXNlZFxuICogQHBhcmFtIHBhdGggUGF0aCB0byBiZSB1c2VkXG4gKiBAcGFyYW0gc3RyYXRlZ3kgU3RyYXRlZ3ksIGl0IGNvdWxkIGJlICdzZWxmJyB8ICdpbmNsdWRpbmdEZXBlbmRlbnRzJ1xuICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBjb250ZXh0IHBhdGggaXMgYXBwbGljYWJsZS5cbiAqL1xuY29uc3QgX2lzUGF0aEFwcGxpY2FibGVUb0NvbnRleHRQYXRoID0gZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjb250ZXh0UGF0aDogc3RyaW5nLFxuXHRwYXRoOiBzdHJpbmcsXG5cdHN0cmF0ZWd5OiBSZWZyZXNoU3RyYXRlZ3lUeXBlXG4pOiBib29sZWFuIHtcblx0bGV0IGNvbnRleHRQYXRoVG9DaGVjayA9IGNvbnRleHRQYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gY29udGV4dFBhdGggOiBgLyR7Y29udGV4dFBhdGh9YCxcblx0XHRwYXRoVG9DaGVjayA9IHBhdGguc3RhcnRzV2l0aChcIi9cIikgPyBwYXRoIDogYC8ke3BhdGh9YDtcblx0aWYgKCFfZm5Jc0FwcGxpY2FibGUoY29udGV4dFBhdGhUb0NoZWNrLCBwYXRoVG9DaGVjaywgc3RyYXRlZ3kpKSB7XG5cdFx0Y29udGV4dFBhdGhUb0NoZWNrID0gX2ZuU2ltcGxpZnlFbnRpdHlTZXRQYXRoKG1ldGFNb2RlbCwgY29udGV4dFBhdGhUb0NoZWNrKTtcblx0XHRpZiAoIV9mbklzQXBwbGljYWJsZShjb250ZXh0UGF0aFRvQ2hlY2ssIHBhdGhUb0NoZWNrLCBzdHJhdGVneSkpIHtcblx0XHRcdHBhdGhUb0NoZWNrID0gX2ZuU2ltcGxpZnlFbnRpdHlTZXRQYXRoKG1ldGFNb2RlbCwgcGF0aFRvQ2hlY2spO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIF9mbklzQXBwbGljYWJsZShjb250ZXh0UGF0aFRvQ2hlY2ssIHBhdGhUb0NoZWNrLCBzdHJhdGVneSk7XG59O1xuLy8gUHJpdmF0ZSBmdW5jdGlvbnMgLSBlbmRcbi8qKlxuICogR2V0IGNvbnRyb2xzIHRvIHJlZnJlc2ggaW4gYSB2aWV3LlxuICpcbiAqIEBwYXJhbSB2aWV3IFZpZXcgb2YgdGhlIGNvbnRyb2xzXG4gKiBAcGFyYW0gY29udHJvbHMgQ29udGV4dCBwYXRoIHRvIGJlIHVzZWRcbiAqIEByZXR1cm5zIFJldHVybnMgY29udHJvbHMgdGhhdCBuZWVkIHRvIGJlIHJlZnJlc2hlZC5cbiAqL1xuY29uc3QgZ2V0Q29udHJvbHNGb3JSZWZyZXNoID0gZnVuY3Rpb24gKHZpZXc6IFZpZXcsIGNvbnRyb2xzOiBDb250cm9sW10pOiBDb250cm9sW10ge1xuXHRjb25zdCBjb250cm9sc0ZvclJlZnJlc2g6IENvbnRyb2xbXSA9IFtdO1xuXHRjb25zdCBtZXRhTW9kZWwgPSB2aWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdGNvbnN0IHJlZnJlc2hTdHJhdGVneSA9IGludGVybmFsTW9kZWwuZ2V0UHJvcGVydHkoUEFUSF9UT19TVE9SRSkgfHwge307XG5cdGlmIChjb250cm9scykge1xuXHRcdGNvbnRyb2xzLmZvckVhY2goZnVuY3Rpb24gKGNvbnRyb2wpIHtcblx0XHRcdGNvbnN0IGNvbnRleHRQYXRoID0gY29udHJvbC5kYXRhKFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGtleSBpbiByZWZyZXNoU3RyYXRlZ3kpIHtcblx0XHRcdFx0Y29uc3Qgc3RyYXRlZ3kgPSByZWZyZXNoU3RyYXRlZ3lba2V5XTtcblx0XHRcdFx0aWYgKGNvbnRyb2xzRm9yUmVmcmVzaC5pbmRleE9mKGNvbnRyb2wpID09PSAtMSAmJiBfaXNQYXRoQXBwbGljYWJsZVRvQ29udGV4dFBhdGgobWV0YU1vZGVsLCBjb250ZXh0UGF0aCwga2V5LCBzdHJhdGVneSkpIHtcblx0XHRcdFx0XHRjb250cm9sc0ZvclJlZnJlc2gucHVzaChjb250cm9sKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiBjb250cm9sc0ZvclJlZnJlc2g7XG59O1xuLyoqXG4gKiBHZXQgcmVmcmVzaCBzdHJhdGVneSBmb3IgdGhlIGNvbnRyb2wgZm9yIGEgY29udGV4dCBwYXRoLlxuICpcbiAqIEBwYXJhbSBjb250cm9sIENvbnRyb2wgZnJvbSB3aGljaCByZWZyZXNoIGluZm8gaXMgbmVlZGVkXG4gKiBAcGFyYW0gY29udGV4dFBhdGggQ29udGV4dFBhdGggZm9yIHByb3Blcml0aWVzXG4gKiBAcmV0dXJucyBSZXR1cm5zIHN0cmF0ZWd5IGZvciBjb250cm9sIHJlZnJlc2guXG4gKi9cbmNvbnN0IGdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCA9IGZ1bmN0aW9uIChjb250cm9sOiBDb250cm9sLCBjb250ZXh0UGF0aDogc3RyaW5nKTogUmVmcmVzaFN0cmF0ZWd5VHlwZSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0Y29uc3QgcmVmcmVzaFN0cmF0ZWd5ID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShQQVRIX1RPX1NUT1JFKSB8fCB7fTtcblx0bGV0IHN0cmF0ZWd5O1xuXHRpZiAoY29udGV4dFBhdGgpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiByZWZyZXNoU3RyYXRlZ3kpIHtcblx0XHRcdGNvbnN0IHN0cmF0ZWd5VG9DaGVjayA9IHJlZnJlc2hTdHJhdGVneVtrZXldO1xuXHRcdFx0aWYgKF9pc1BhdGhBcHBsaWNhYmxlVG9Db250ZXh0UGF0aChtZXRhTW9kZWwsIGNvbnRleHRQYXRoLCBrZXksIHN0cmF0ZWd5VG9DaGVjaykpIHtcblx0XHRcdFx0c3RyYXRlZ3kgPSBzdHJhdGVneVRvQ2hlY2s7XG5cdFx0XHRcdGlmIChzdHJhdGVneSA9PT0gXCJpbmNsdWRpbmdEZXBlbmRlbnRzXCIpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gc3RyYXRlZ3k7XG59O1xuLyoqXG4gKiBHZXQgcmVmcmVzaCBpbmZvIGZyb20gdmlldy5cbiAqXG4gKiBAcGFyYW0gdmlldyBWaWV3IGZyb20gd2hpY2ggcmVmcmVzaCBpbmZvIGlzIG5lZWRlZFxuICogQHJldHVybnMgUmV0dXJucyBzdHJhdGVneSBmb3IgdmlldyByZWZyZXNoLlxuICovXG5jb25zdCBnZXRWaWV3UmVmcmVzaEluZm8gPSBmdW5jdGlvbiAodmlldzogVmlldyk6IFJlZnJlc2hTdHJhdGVneVR5cGUgfCB1bmRlZmluZWQge1xuXHRjb25zdCB2aWV3RGF0YSA9IHZpZXcuZ2V0Vmlld0RhdGEoKSBhcyBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0XHRjb250ZXh0UGF0aCA9IHZpZXdEYXRhICYmICh2aWV3RGF0YT8uY29udGV4dFBhdGggfHwgYC8ke3ZpZXdEYXRhPy5lbnRpdHlTZXR9YCk7XG5cdHJldHVybiBLZWVwQWxpdmVIZWxwZXIuZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoKHZpZXcsIGNvbnRleHRQYXRoKTtcbn07XG5cbi8qKlxuICogR2V0IHJlZnJlc2ggc3RyYXRlZ3kgZm9yIGFuIGludGVudC5cbiAqXG4gKiBAcGFyYW0gcmVmcmVzaFN0cmF0ZWdpZXMgUmVmcmVzaFN0cmF0ZWdpZXMgdG8gY29uc2lkZXJcbiAqIEBwYXJhbSBzZW1hbnRpY09iamVjdCBPdXRib3VuZCBTZW1hbnRpYyBPYmplY3RcbiAqIEBwYXJhbSBhY3Rpb24gT3V0Ym91bmQgQWN0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIHJlZnJlc2ggc3RyYXRlZ2llcyB0byB1c2UgZm9yIHRoZSBpbnRlbnQuXG4gKi9cbmNvbnN0IGdldFJlZnJlc2hTdHJhdGVneUZvckludGVudCA9IGZ1bmN0aW9uIChcblx0cmVmcmVzaFN0cmF0ZWdpZXM6IFJlZnJlc2hTdHJhdGVnaWVzLFxuXHRzZW1hbnRpY09iamVjdD86IHN0cmluZyxcblx0YWN0aW9uPzogc3RyaW5nXG4pOiBTT1JlZnJlc2hTdHJhdGVneSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IHNvQWN0aW9uID0gc2VtYW50aWNPYmplY3QgJiYgYWN0aW9uICYmIGAke3NlbWFudGljT2JqZWN0fS0ke2FjdGlvbn1gO1xuXHRjb25zdCBpbnRlbnRzID0gcmVmcmVzaFN0cmF0ZWdpZXMuaW50ZW50cztcblx0Y29uc3Qgc29BY3Rpb25JbnRlbnRNYXRjaCA9IGludGVudHMgJiYgc29BY3Rpb24gJiYgaW50ZW50c1tzb0FjdGlvbl07XG5cdGNvbnN0IHNvSW50ZW50TWF0Y2ggPSAhc29BY3Rpb25JbnRlbnRNYXRjaCAmJiBpbnRlbnRzICYmIHNlbWFudGljT2JqZWN0ICYmIGludGVudHNbc2VtYW50aWNPYmplY3RdO1xuXG5cdHJldHVybiBzb0FjdGlvbkludGVudE1hdGNoIHx8IHNvSW50ZW50TWF0Y2ggfHwgcmVmcmVzaFN0cmF0ZWdpZXM/LmRlZmF1bHRCZWhhdmlvciB8fCByZWZyZXNoU3RyYXRlZ2llcz8uX2ZlRGVmYXVsdDtcbn07XG4vKipcbiAqIFN0b3JlIGNvbnRyb2wgcmVmcmVzaCBzdHJhdGVneSBmb3IgaGFzaCBpbiB0aGUgaW50ZXJuYWwgbW9kZWwuXG4gKlxuICogQHBhcmFtIGNvbnRyb2wgQ29udHJvbCBmb3IgdGhlIHJlZnJlc2ggc3RyYXRlZ3lcbiAqIEBwYXJhbSBoYXNoIFNoZWxsIGhhc2ggb2JqZWN0XG4gKi9cbmNvbnN0IHN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2ggPSBmdW5jdGlvbiAoY29udHJvbDogQ29udHJvbCwgaGFzaDogU09BY3Rpb24pOiB2b2lkIHtcblx0aWYgKGNvbnRyb2wgJiYgY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpICYmIGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSkge1xuXHRcdGNvbnN0IHZpZXdEYXRhID0gY29udHJvbC5nZXRNb2RlbChcInZpZXdEYXRhXCIpO1xuXHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVnaWVzOiBSZWZyZXNoU3RyYXRlZ2llcyA9IHZpZXdEYXRhLmdldFByb3BlcnR5KFBBVEhfVE9fU1RPUkUpO1xuXHRcdGlmIChyZWZyZXNoU3RyYXRlZ2llcykge1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGNvbnRyb2wuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IHJlZnJlc2hTdHJhdGVneTogU09SZWZyZXNoU3RyYXRlZ3kgfCB1bmRlZmluZWQgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50KFxuXHRcdFx0XHRyZWZyZXNoU3RyYXRlZ2llcyxcblx0XHRcdFx0aGFzaD8uc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdGhhc2g/LmFjdGlvblxuXHRcdFx0KTtcblx0XHRcdChpbnRlcm5hbE1vZGVsIGFzIEpTT05Nb2RlbCkuc2V0UHJvcGVydHkoUEFUSF9UT19TVE9SRSwgcmVmcmVzaFN0cmF0ZWd5KTtcblx0XHR9XG5cdH1cbn07XG5cbi8qKlxuICogTWV0aG9kIHRvIHJlZnJlc2ggYW5kIHJlc3RvcmUgdGhlIHZpZXcgaWYgbmVjY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gdmlldyBDb250cm9sIGZvciB0aGUgcmVmcmVzaCBzdHJhdGVneVxuICogQHJldHVybnMgQSBwcm9taXNlIGFmdGVyIHZpZXcgcmVmcmVzaCBhbmQgcmVzdG9yZSBhcmUgdHJpZ2dlcmVkXG4gKi9cbmNvbnN0IHJlc3RvcmVWaWV3ID0gZnVuY3Rpb24gKHZpZXc6IFZpZXcpOiBQcm9taXNlPGFueT4ge1xuXHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRjb25zdCB2aWV3U3RhdGUgPSAoY29udHJvbGxlciBhcyBhbnkpPy52aWV3U3RhdGU7XG5cdGxldCByZWZyZXNoQmluZGluZ3MgPSBQcm9taXNlLnJlc29sdmUoKTtcblx0aWYgKGludGVybmFsTW9kZWxDb250ZXh0ICYmIGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwicmVzdG9yZVN0YXR1c1wiKSA9PT0gXCJwZW5kaW5nXCIpIHtcblx0XHRpZiAodmlld1N0YXRlLnJlZnJlc2hWaWV3QmluZGluZ3MpIHtcblx0XHRcdHJlZnJlc2hCaW5kaW5ncyA9IHZpZXdTdGF0ZS5yZWZyZXNoVmlld0JpbmRpbmdzKCk7XG5cdFx0XHRyZWZyZXNoQmluZGluZ3Ncblx0XHRcdFx0LnRoZW4oZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdExvZy5pbmZvKGBGRSBWNDogUmVmcmVzaCB3YXMgdHJpZ2dlcmVkIHN1Y2Nlc3NmdWxsOiAke3ZpZXcuZ2V0SWQoKX1gKTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhgRkUgVjQ6IFJlZnJlc2ggd2FzIHVuc3VjY2Vzc2Z1bGw6ICR7dmlldy5nZXRJZCgpfWAsIGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZWZyZXNoQmluZGluZ3MgPSByZWZyZXNoQmluZGluZ3Ncblx0XHRcdC50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXHRcdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcInJlc3RvcmVTdGF0dXNcIiwgXCJkb25lXCIpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoYEZFIFY0OiBSZXN0b3JlIHdhcyB1bnN1Y2Nlc3NmdWxsOiAke3ZpZXcuZ2V0SWQoKX1gLCBlcnJvcik7XG5cdFx0XHR9KTtcblx0fVxuXHRyZXR1cm4gcmVmcmVzaEJpbmRpbmdzO1xufTtcblxuLyoqXG4gKiBoZWxwZXIgY2xhc3MgZm9yIEtlZXBBbGl2ZSBmZWF0dXJlIGluIHNhcC5mZS5cbiAqL1xuY29uc3QgS2VlcEFsaXZlSGVscGVyID0ge1xuXHRnZXRDb250cm9sc0ZvclJlZnJlc2gsXG5cdGdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCxcblx0Z2V0Vmlld1JlZnJlc2hJbmZvLFxuXHRnZXRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnQsXG5cdHN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2gsXG5cdHJlc3RvcmVWaWV3XG59O1xuZXhwb3J0IGRlZmF1bHQgS2VlcEFsaXZlSGVscGVyO1xuIl19
@@ -1,44 +1,40 @@
1
- import Control from "sap/ui/core/Control";
2
- import View from "sap/ui/core/mvc/View";
3
1
  import Log from "sap/base/Log";
4
- import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
5
- import { BaseManifestSettings } from "sap/fe/core/converters/ManifestSettings";
6
- import JSONModel from "sap/ui/model/json/JSONModel";
7
- import {
8
- RefreshStrategyType,
9
- SORefreshStrategy,
10
- RefreshStrategies,
11
- PATH_TO_STORE,
12
- SOAction
13
- } from "sap/fe/core/helpers/KeepAliveRefreshTypes";
14
- import ModelHelper, { InternalModelContext } from "./ModelHelper";
2
+ import type { BaseManifestSettings } from "sap/fe/core/converters/ManifestSettings";
3
+ import type { RefreshStrategies, SOAction, SORefreshStrategy } from "sap/fe/core/helpers/KeepAliveRefreshTypes";
4
+ import { PATH_TO_STORE, RefreshStrategyType } from "sap/fe/core/helpers/KeepAliveRefreshTypes";
5
+ import type Control from "sap/ui/core/Control";
6
+ import type View from "sap/ui/core/mvc/View";
7
+ import type JSONModel from "sap/ui/model/json/JSONModel";
8
+ import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
9
+ import type { InternalModelContext } from "./ModelHelper";
10
+ import ModelHelper from "./ModelHelper";
15
11
 
16
12
  // Private functions - start
17
- const _fnSimplifyEntitySetPath = function(metaModel: ODataMetaModel, entitySetPathToUse: string): string {
13
+ const _fnSimplifyEntitySetPath = function (metaModel: ODataMetaModel, entitySetPathToUse: string): string {
18
14
  const entitySetPath = ModelHelper.getEntitySetPath(entitySetPathToUse);
19
15
  const entitySet = entitySetPath.indexOf("$NavigationPropertyBinding") > -1 && metaModel.getObject(entitySetPath);
20
- return entitySet ? "/" + entitySet : entitySetPathToUse;
16
+ return entitySet ? `/${entitySet}` : entitySetPathToUse;
21
17
  };
22
- const _fnIsApplicable = function(primaryPath: string, key: string, strategy: RefreshStrategyType): boolean {
18
+ const _fnIsApplicable = function (primaryPath: string, key: string, strategy: RefreshStrategyType): boolean {
23
19
  return primaryPath === key || (strategy === RefreshStrategyType.IncludingDependents && primaryPath.startsWith(key));
24
20
  };
25
21
  /**
26
22
  * Check if given path resides in the context path provided.
27
23
  *
28
- * @param {ODataMetaModel} metaModel MetaModel to be used
29
- * @param {string} contextPath Context path to be used
30
- * @param {string} path Path to be used
31
- * @param {RefreshStrategyType} strategy Strategy, it could be 'self' | 'includingDependents'
32
- * @returns {boolean} Returns true if the context path is applicable.
24
+ * @param metaModel MetaModel to be used
25
+ * @param contextPath Context path to be used
26
+ * @param path Path to be used
27
+ * @param strategy Strategy, it could be 'self' | 'includingDependents'
28
+ * @returns Returns true if the context path is applicable.
33
29
  */
34
- const _isPathApplicableToContextPath = function(
30
+ const _isPathApplicableToContextPath = function (
35
31
  metaModel: ODataMetaModel,
36
32
  contextPath: string,
37
33
  path: string,
38
34
  strategy: RefreshStrategyType
39
35
  ): boolean {
40
- let contextPathToCheck = contextPath.startsWith("/") ? contextPath : "/" + contextPath,
41
- pathToCheck = path.startsWith("/") ? path : "/" + path;
36
+ let contextPathToCheck = contextPath.startsWith("/") ? contextPath : `/${contextPath}`,
37
+ pathToCheck = path.startsWith("/") ? path : `/${path}`;
42
38
  if (!_fnIsApplicable(contextPathToCheck, pathToCheck, strategy)) {
43
39
  contextPathToCheck = _fnSimplifyEntitySetPath(metaModel, contextPathToCheck);
44
40
  if (!_fnIsApplicable(contextPathToCheck, pathToCheck, strategy)) {
@@ -53,17 +49,17 @@ const _isPathApplicableToContextPath = function(
53
49
  /**
54
50
  * Get controls to refresh in a view.
55
51
  *
56
- * @param {View} view View of the controls
57
- * @param {Control[]} controls Context path to be used
58
- * @returns {Control[]} Returns controls that need to be refreshed.
52
+ * @param view View of the controls
53
+ * @param controls Context path to be used
54
+ * @returns Returns controls that need to be refreshed.
59
55
  */
60
- const getControlsForRefresh = function(view: View, controls: Control[]): Control[] {
56
+ const getControlsForRefresh = function (view: View, controls: Control[]): Control[] {
61
57
  const controlsForRefresh: Control[] = [];
62
58
  const metaModel = view.getModel().getMetaModel() as ODataMetaModel;
63
59
  const internalModel = view.getModel("internal");
64
60
  const refreshStrategy = internalModel.getProperty(PATH_TO_STORE) || {};
65
61
  if (controls) {
66
- controls.forEach(function(control) {
62
+ controls.forEach(function (control) {
67
63
  const contextPath = control.data("targetCollectionPath");
68
64
  for (const key in refreshStrategy) {
69
65
  const strategy = refreshStrategy[key];
@@ -78,11 +74,11 @@ const getControlsForRefresh = function(view: View, controls: Control[]): Control
78
74
  /**
79
75
  * Get refresh strategy for the control for a context path.
80
76
  *
81
- * @param {Control} control Control from which refresh info is needed
82
- * @param {string} contextPath ContextPath for properities
83
- * @returns {RefreshStrategyType} Returns strategy for control refresh.
77
+ * @param control Control from which refresh info is needed
78
+ * @param contextPath ContextPath for properities
79
+ * @returns Returns strategy for control refresh.
84
80
  */
85
- const getControlRefreshStrategyForContextPath = function(control: Control, contextPath: string): RefreshStrategyType | undefined {
81
+ const getControlRefreshStrategyForContextPath = function (control: Control, contextPath: string): RefreshStrategyType | undefined {
86
82
  const metaModel = control.getModel().getMetaModel() as ODataMetaModel;
87
83
  const internalModel = control.getModel("internal");
88
84
  const refreshStrategy = internalModel.getProperty(PATH_TO_STORE) || {};
@@ -103,29 +99,29 @@ const getControlRefreshStrategyForContextPath = function(control: Control, conte
103
99
  /**
104
100
  * Get refresh info from view.
105
101
  *
106
- * @param {View} view View from which refresh info is needed
107
- * @returns {RefreshStrategyType | undefined} Returns strategy for view refresh.
102
+ * @param view View from which refresh info is needed
103
+ * @returns Returns strategy for view refresh.
108
104
  */
109
- const getViewRefreshInfo = function(view: View): RefreshStrategyType | undefined {
105
+ const getViewRefreshInfo = function (view: View): RefreshStrategyType | undefined {
110
106
  const viewData = view.getViewData() as BaseManifestSettings,
111
- contextPath = viewData && (viewData?.contextPath || "/" + viewData?.entitySet);
107
+ contextPath = viewData && (viewData?.contextPath || `/${viewData?.entitySet}`);
112
108
  return KeepAliveHelper.getControlRefreshStrategyForContextPath(view, contextPath);
113
109
  };
114
110
 
115
111
  /**
116
112
  * Get refresh strategy for an intent.
117
113
  *
118
- * @param {RefreshStrategies} refreshStrategies RefreshStrategies to consider
119
- * @param {string} semanticObject Outbound Semantic Object
120
- * @param {string} action Outbound Action
121
- * @returns {SORefreshStrategy | undefined} Returns refresh strategies to use for the intent.
114
+ * @param refreshStrategies RefreshStrategies to consider
115
+ * @param semanticObject Outbound Semantic Object
116
+ * @param action Outbound Action
117
+ * @returns Returns refresh strategies to use for the intent.
122
118
  */
123
- const getRefreshStrategyForIntent = function(
119
+ const getRefreshStrategyForIntent = function (
124
120
  refreshStrategies: RefreshStrategies,
125
121
  semanticObject?: string,
126
122
  action?: string
127
123
  ): SORefreshStrategy | undefined {
128
- const soAction = semanticObject && action && semanticObject + "-" + action;
124
+ const soAction = semanticObject && action && `${semanticObject}-${action}`;
129
125
  const intents = refreshStrategies.intents;
130
126
  const soActionIntentMatch = intents && soAction && intents[soAction];
131
127
  const soIntentMatch = !soActionIntentMatch && intents && semanticObject && intents[semanticObject];
@@ -135,10 +131,10 @@ const getRefreshStrategyForIntent = function(
135
131
  /**
136
132
  * Store control refresh strategy for hash in the internal model.
137
133
  *
138
- * @param {Control} control Control for the refresh strategy
139
- * @param {SOAction} hash Shell hash object
134
+ * @param control Control for the refresh strategy
135
+ * @param hash Shell hash object
140
136
  */
141
- const storeControlRefreshStrategyForHash = function(control: Control, hash: SOAction): void {
137
+ const storeControlRefreshStrategyForHash = function (control: Control, hash: SOAction): void {
142
138
  if (control && control.getModel("viewData") && control.getModel("internal")) {
143
139
  const viewData = control.getModel("viewData");
144
140
  const refreshStrategies: RefreshStrategies = viewData.getProperty(PATH_TO_STORE);
@@ -157,10 +153,10 @@ const storeControlRefreshStrategyForHash = function(control: Control, hash: SOAc
157
153
  /**
158
154
  * Method to refresh and restore the view if neccessary.
159
155
  *
160
- * @param {object} view Control for the refresh strategy
161
- * @returns {object} A promise after view refresh and restore are triggered
156
+ * @param view Control for the refresh strategy
157
+ * @returns A promise after view refresh and restore are triggered
162
158
  */
163
- const restoreView = function(view: View): Promise<any> {
159
+ const restoreView = function (view: View): Promise<any> {
164
160
  const internalModelContext = view.getBindingContext("internal") as InternalModelContext;
165
161
  const controller = view.getController();
166
162
  const viewState = (controller as any)?.viewState;
@@ -169,20 +165,20 @@ const restoreView = function(view: View): Promise<any> {
169
165
  if (viewState.refreshViewBindings) {
170
166
  refreshBindings = viewState.refreshViewBindings();
171
167
  refreshBindings
172
- .then(function() {
173
- Log.info("FE V4: Refresh was triggered successfull: " + view.getId());
168
+ .then(function () {
169
+ Log.info(`FE V4: Refresh was triggered successfull: ${view.getId()}`);
174
170
  })
175
- .catch(function(err) {
176
- Log.warning("FE V4: Refresh was unsuccessfull: " + view.getId(), err);
171
+ .catch(function (err) {
172
+ Log.warning(`FE V4: Refresh was unsuccessfull: ${view.getId()}`, err);
177
173
  });
178
174
  }
179
175
  refreshBindings = refreshBindings
180
- .then(function() {
176
+ .then(function () {
181
177
  viewState.onRestore();
182
178
  internalModelContext.setProperty("restoreStatus", "done");
183
179
  })
184
- .catch(function(error) {
185
- Log.warning("FE V4: Restore was unsuccessfull: " + view.getId(), error);
180
+ .catch(function (error) {
181
+ Log.warning(`FE V4: Restore was unsuccessfull: ${view.getId()}`, error);
186
182
  });
187
183
  }
188
184
  return refreshBindings;