@sapui5/sap.fe.core 1.131.0 → 1.133.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 (317) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +17 -23
  4. package/src/sap/fe/core/AppComponent.js +74 -36
  5. package/src/sap/fe/core/AppComponent.ts +70 -3
  6. package/src/sap/fe/core/AppStateHandler.js +44 -13
  7. package/src/sap/fe/core/AppStateHandler.ts +38 -0
  8. package/src/sap/fe/core/BaseController.js +3 -3
  9. package/src/sap/fe/core/CommonUtils.js +30 -37
  10. package/src/sap/fe/core/CommonUtils.ts +15 -13
  11. package/src/sap/fe/core/ExtensionAPI.js +29 -34
  12. package/src/sap/fe/core/ExtensionAPI.ts +3 -0
  13. package/src/sap/fe/core/InsightsFormattersExtension.js +2 -2
  14. package/src/sap/fe/core/PageController.js +40 -31
  15. package/src/sap/fe/core/PageController.ts +14 -1
  16. package/src/sap/fe/core/ResourceModel.js +4 -4
  17. package/src/sap/fe/core/ReuseComponent.js +27 -13
  18. package/src/sap/fe/core/ReuseComponent.ts +18 -0
  19. package/src/sap/fe/core/TemplateComponent.js +102 -89
  20. package/src/sap/fe/core/TemplateComponent.ts +20 -1
  21. package/src/sap/fe/core/TemplateModel.js +6 -7
  22. package/src/sap/fe/core/UIProvider.js +1 -1
  23. package/src/sap/fe/core/UIProvider.ts +2 -9
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +63 -48
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +56 -27
  26. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.js +9 -0
  27. package/src/sap/fe/core/buildingBlocks/IBuildingBlockOwnerComponent.ts +48 -0
  28. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +4 -6
  29. package/src/sap/fe/core/buildingBlocks/templating/AttributeModel.js +2 -2
  30. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +2 -3
  31. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +32 -18
  32. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +30 -3
  33. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +9 -13
  34. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +2 -1
  35. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlock.js +2 -2
  36. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +19 -25
  37. package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -1
  38. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +3 -4
  39. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +20 -24
  40. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +10 -15
  41. package/src/sap/fe/core/controllerextensions/ContextSharing.js +3 -3
  42. package/src/sap/fe/core/controllerextensions/EditFlow.js +296 -246
  43. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -175
  44. package/src/sap/fe/core/controllerextensions/Feedback.js +10 -11
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +6 -6
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +1 -0
  47. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +27 -36
  48. package/src/sap/fe/core/controllerextensions/InternalRouting.js +57 -78
  49. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +42 -50
  50. package/src/sap/fe/core/controllerextensions/KPIManagement.js +12 -19
  51. package/src/sap/fe/core/controllerextensions/MessageHandler.js +23 -17
  52. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -7
  53. package/src/sap/fe/core/controllerextensions/PageReady.js +15 -21
  54. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -3
  55. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/Recommendations.js +23 -36
  57. package/src/sap/fe/core/controllerextensions/Recommendations.ts +1 -1
  58. package/src/sap/fe/core/controllerextensions/Routing.js +3 -3
  59. package/src/sap/fe/core/controllerextensions/Share.js +19 -28
  60. package/src/sap/fe/core/controllerextensions/SideEffects.js +68 -32
  61. package/src/sap/fe/core/controllerextensions/SideEffects.ts +58 -6
  62. package/src/sap/fe/core/controllerextensions/Telemetry.js +4 -5
  63. package/src/sap/fe/core/controllerextensions/ViewState.js +23 -24
  64. package/src/sap/fe/core/controllerextensions/ViewState.ts +6 -1
  65. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +13 -10
  66. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +13 -8
  67. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +15 -16
  69. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +3 -4
  70. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.js +288 -0
  71. package/src/sap/fe/core/controllerextensions/dialog/{OperationsDialog.block.tsx → OperationsDialog.tsx} +27 -29
  72. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +41 -5
  73. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +61 -8
  74. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.js +404 -0
  75. package/src/sap/fe/core/controllerextensions/editFlow/ODataOperation.ts +502 -0
  76. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +35 -43
  77. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +34 -14
  78. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -27
  79. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +27 -15
  80. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +51 -39
  81. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +75 -34
  82. package/src/sap/fe/core/controllerextensions/editFlow/editFlowConstants.js +4 -4
  83. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +88 -427
  84. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +82 -620
  85. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +9 -5
  86. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +6 -5
  87. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +116 -79
  88. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +87 -13
  89. package/src/sap/fe/core/controllerextensions/pageReady/DataQueryWatcher.js +4 -6
  90. package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +5 -7
  91. package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +6 -7
  92. package/src/sap/fe/core/controllerextensions/routing/NavigationReason.js +4 -4
  93. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +58 -20
  94. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +55 -4
  95. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +1 -1
  96. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +1 -1
  97. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +9 -12
  98. package/src/sap/fe/core/controls/CommandExecution.js +2 -2
  99. package/src/sap/fe/core/controls/ComponentLoader.js +20 -21
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +250 -0
  101. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/{DraftDataLossDialog.block.tsx → DraftDataLossDialog.tsx} +31 -19
  102. package/src/sap/fe/core/controls/FormElementWrapper.js +19 -21
  103. package/src/sap/fe/core/controls/HideFormGroupAutomatically.js +114 -0
  104. package/src/sap/fe/core/controls/HideFormGroupAutomatically.ts +115 -0
  105. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +454 -0
  106. package/src/sap/fe/core/controls/Recommendations/{ConfirmRecommendationDialog.block.tsx → ConfirmRecommendationDialog.tsx} +5 -9
  107. package/src/sap/fe/core/converters/ConverterContext.js +17 -18
  108. package/src/sap/fe/core/converters/ConverterContext.ts +10 -15
  109. package/src/sap/fe/core/converters/ManifestSettings.js +29 -28
  110. package/src/sap/fe/core/converters/ManifestSettings.ts +22 -1
  111. package/src/sap/fe/core/converters/ManifestWrapper.js +26 -48
  112. package/src/sap/fe/core/converters/MetaModelConverter.js +21 -28
  113. package/src/sap/fe/core/converters/MetaModelConverter.ts +2 -0
  114. package/src/sap/fe/core/converters/TemplateConverter.js +17 -21
  115. package/src/sap/fe/core/converters/TemplateConverter.ts +5 -3
  116. package/src/sap/fe/core/converters/annotations/DataField.js +69 -66
  117. package/src/sap/fe/core/converters/annotations/DataField.ts +30 -0
  118. package/src/sap/fe/core/converters/common/AnnotationConverter.js +20 -23
  119. package/src/sap/fe/core/converters/controls/Common/Action.js +178 -43
  120. package/src/sap/fe/core/converters/controls/Common/Action.ts +202 -19
  121. package/src/sap/fe/core/converters/controls/Common/Chart.js +47 -22
  122. package/src/sap/fe/core/converters/controls/Common/Chart.ts +50 -5
  123. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +16 -23
  124. package/src/sap/fe/core/converters/controls/Common/Form.js +25 -38
  125. package/src/sap/fe/core/converters/controls/Common/Form.ts +3 -0
  126. package/src/sap/fe/core/converters/controls/Common/KPI.js +32 -47
  127. package/src/sap/fe/core/converters/controls/Common/Table.js +464 -506
  128. package/src/sap/fe/core/converters/controls/Common/Table.ts +335 -219
  129. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +17 -28
  130. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -2
  131. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +66 -90
  132. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +10 -1
  133. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +49 -73
  134. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +6 -10
  135. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +35 -50
  136. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +110 -60
  137. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +137 -41
  138. package/src/sap/fe/core/converters/helpers/Aggregation.js +19 -30
  139. package/src/sap/fe/core/converters/helpers/Aggregation.ts +5 -5
  140. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +11 -14
  141. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +14 -21
  142. package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +4 -6
  143. package/src/sap/fe/core/converters/helpers/IssueManager.js +7 -7
  144. package/src/sap/fe/core/converters/helpers/Key.js +1 -1
  145. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +2 -3
  146. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +18 -52
  147. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -34
  148. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +103 -74
  149. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +111 -39
  150. package/src/sap/fe/core/converters/templates/ListReportConverter.js +28 -31
  151. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -9
  152. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +61 -52
  153. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +60 -21
  154. package/src/sap/fe/core/definition/FEDefinition.js +104 -44
  155. package/src/sap/fe/core/designtime/AppComponent.designtime.js +37 -7
  156. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +42 -2
  157. package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -5
  158. package/src/sap/fe/core/formatters/FiscalFormat.js +24 -24
  159. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -23
  160. package/src/sap/fe/core/formatters/ValueFormatter.ts +0 -18
  161. package/src/sap/fe/core/fpm/Component.js +12 -14
  162. package/src/sap/fe/core/fpm/manifest.json +1 -1
  163. package/src/sap/fe/core/helpers/AppStartupHelper.js +20 -15
  164. package/src/sap/fe/core/helpers/AppStartupHelper.ts +22 -13
  165. package/src/sap/fe/core/helpers/BindingHelper.js +3 -3
  166. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  167. package/src/sap/fe/core/helpers/DeleteHelper.js +55 -62
  168. package/src/sap/fe/core/helpers/DeleteHelper.ts +48 -51
  169. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +4 -7
  170. package/src/sap/fe/core/helpers/FPMHelper.js +4 -7
  171. package/src/sap/fe/core/helpers/HTTP503Handler.js +2 -1
  172. package/src/sap/fe/core/helpers/HTTP503Handler.ts +4 -3
  173. package/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -5
  174. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +6 -6
  175. package/src/sap/fe/core/helpers/LoaderUtils.js +8 -3
  176. package/src/sap/fe/core/helpers/LoaderUtils.ts +15 -4
  177. package/src/sap/fe/core/helpers/MessageStrip.js +3 -4
  178. package/src/sap/fe/core/helpers/MetaModelFunction.js +26 -40
  179. package/src/sap/fe/core/helpers/MetaPath.js +9 -7
  180. package/src/sap/fe/core/helpers/MetaPath.ts +9 -3
  181. package/src/sap/fe/core/helpers/ModelHelper.js +33 -57
  182. package/src/sap/fe/core/helpers/ModelHelper.ts +3 -3
  183. package/src/sap/fe/core/helpers/PasteHelper.js +11 -19
  184. package/src/sap/fe/core/helpers/PromiseKeeper.js +1 -1
  185. package/src/sap/fe/core/helpers/RecommendationHelper.js +3 -4
  186. package/src/sap/fe/core/helpers/ResourceModelHelper.js +3 -5
  187. package/src/sap/fe/core/helpers/SizeHelper.js +3 -5
  188. package/src/sap/fe/core/helpers/StableIdHelper.js +13 -11
  189. package/src/sap/fe/core/helpers/StableIdHelper.ts +5 -1
  190. package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +28 -38
  191. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  192. package/src/sap/fe/core/helpers/TitleHelper.js +19 -40
  193. package/src/sap/fe/core/helpers/TitleHelper.ts +5 -25
  194. package/src/sap/fe/core/helpers/TypeGuards.js +25 -18
  195. package/src/sap/fe/core/helpers/TypeGuards.ts +7 -0
  196. package/src/sap/fe/core/helpers/WebSocket.js +4 -4
  197. package/src/sap/fe/core/library.js +8 -7
  198. package/src/sap/fe/core/library.ts +2 -0
  199. package/src/sap/fe/core/manifestMerger/AddNewPage.js +9 -11
  200. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +14 -25
  201. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +15 -17
  202. package/src/sap/fe/core/messagebundle.properties +21 -0
  203. package/src/sap/fe/core/messagebundle_ar.properties +5 -1
  204. package/src/sap/fe/core/messagebundle_bg.properties +4 -0
  205. package/src/sap/fe/core/messagebundle_ca.properties +4 -0
  206. package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
  207. package/src/sap/fe/core/messagebundle_cs.properties +8 -4
  208. package/src/sap/fe/core/messagebundle_cy.properties +4 -0
  209. package/src/sap/fe/core/messagebundle_da.properties +4 -0
  210. package/src/sap/fe/core/messagebundle_de.properties +4 -0
  211. package/src/sap/fe/core/messagebundle_el.properties +4 -0
  212. package/src/sap/fe/core/messagebundle_en.properties +4 -0
  213. package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
  214. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
  215. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +249 -231
  216. package/src/sap/fe/core/messagebundle_es.properties +5 -1
  217. package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
  218. package/src/sap/fe/core/messagebundle_et.properties +4 -0
  219. package/src/sap/fe/core/messagebundle_fi.properties +4 -0
  220. package/src/sap/fe/core/messagebundle_fr.properties +6 -2
  221. package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
  222. package/src/sap/fe/core/messagebundle_hi.properties +4 -0
  223. package/src/sap/fe/core/messagebundle_hr.properties +4 -0
  224. package/src/sap/fe/core/messagebundle_hu.properties +4 -0
  225. package/src/sap/fe/core/messagebundle_id.properties +4 -0
  226. package/src/sap/fe/core/messagebundle_it.properties +4 -0
  227. package/src/sap/fe/core/messagebundle_iw.properties +4 -0
  228. package/src/sap/fe/core/messagebundle_ja.properties +4 -0
  229. package/src/sap/fe/core/messagebundle_kk.properties +4 -0
  230. package/src/sap/fe/core/messagebundle_ko.properties +4 -0
  231. package/src/sap/fe/core/messagebundle_lt.properties +4 -0
  232. package/src/sap/fe/core/messagebundle_lv.properties +4 -0
  233. package/src/sap/fe/core/messagebundle_mk.properties +4 -0
  234. package/src/sap/fe/core/messagebundle_ms.properties +4 -0
  235. package/src/sap/fe/core/messagebundle_nl.properties +4 -0
  236. package/src/sap/fe/core/messagebundle_no.properties +4 -0
  237. package/src/sap/fe/core/messagebundle_pl.properties +4 -0
  238. package/src/sap/fe/core/messagebundle_pt.properties +4 -0
  239. package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
  240. package/src/sap/fe/core/messagebundle_ro.properties +4 -0
  241. package/src/sap/fe/core/messagebundle_ru.properties +4 -0
  242. package/src/sap/fe/core/messagebundle_sh.properties +4 -0
  243. package/src/sap/fe/core/messagebundle_sk.properties +4 -0
  244. package/src/sap/fe/core/messagebundle_sl.properties +4 -0
  245. package/src/sap/fe/core/messagebundle_sr.properties +4 -0
  246. package/src/sap/fe/core/messagebundle_sv.properties +4 -0
  247. package/src/sap/fe/core/messagebundle_th.properties +4 -0
  248. package/src/sap/fe/core/messagebundle_tr.properties +5 -1
  249. package/src/sap/fe/core/messagebundle_uk.properties +4 -0
  250. package/src/sap/fe/core/messagebundle_vi.properties +4 -0
  251. package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
  252. package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
  253. package/src/sap/fe/core/operationsHelper.js +23 -27
  254. package/src/sap/fe/core/operationsHelper.ts +6 -7
  255. package/src/sap/fe/core/rootView/Fcl.controller.js +53 -40
  256. package/src/sap/fe/core/rootView/Fcl.controller.ts +42 -7
  257. package/src/sap/fe/core/rootView/NavContainer.controller.js +7 -10
  258. package/src/sap/fe/core/rootView/RootViewBaseController.js +22 -21
  259. package/src/sap/fe/core/rootView/RootViewBaseController.ts +10 -2
  260. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  261. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +4 -3
  262. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +1 -0
  263. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +12 -10
  264. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +6 -2
  265. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +8 -13
  266. package/src/sap/fe/core/services/ContextSharingServiceFactory.js +5 -7
  267. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +31 -8
  268. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +31 -5
  269. package/src/sap/fe/core/services/InlineEditServiceFactory.js +190 -0
  270. package/src/sap/fe/core/services/InlineEditServiceFactory.ts +226 -0
  271. package/src/sap/fe/core/services/NavigationServiceFactory.js +10 -15
  272. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  273. package/src/sap/fe/core/services/RoutingServiceFactory.js +76 -56
  274. package/src/sap/fe/core/services/RoutingServiceFactory.ts +47 -14
  275. package/src/sap/fe/core/services/ShellServicesFactory.js +32 -34
  276. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +75 -60
  277. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +58 -12
  278. package/src/sap/fe/core/services/TelemetryServiceFactory.js +8 -9
  279. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +13 -18
  280. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -0
  281. package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +7 -9
  282. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +12 -16
  283. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +1 -1
  284. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +4 -7
  285. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +5 -6
  286. package/src/sap/fe/core/support/CommonHelper.js +2 -3
  287. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  288. package/src/sap/fe/core/templating/ActionHelper.js +3 -4
  289. package/src/sap/fe/core/templating/CommonFormatters.js +6 -8
  290. package/src/sap/fe/core/templating/CommonFormatters.ts +2 -2
  291. package/src/sap/fe/core/templating/CriticalityFormatters.js +53 -5
  292. package/src/sap/fe/core/templating/CriticalityFormatters.ts +129 -7
  293. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -11
  294. package/src/sap/fe/core/templating/DataFieldFormatters.ts +1 -1
  295. package/src/sap/fe/core/templating/DataModelPathHelper.js +33 -56
  296. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  297. package/src/sap/fe/core/templating/EntitySetHelper.js +11 -19
  298. package/src/sap/fe/core/templating/EntityTypeHelper.js +4 -5
  299. package/src/sap/fe/core/templating/FieldControlHelper.js +13 -20
  300. package/src/sap/fe/core/templating/FilterTemplating.js +6 -9
  301. package/src/sap/fe/core/templating/PropertyHelper.js +33 -63
  302. package/src/sap/fe/core/templating/PropertyHelper.ts +0 -1
  303. package/src/sap/fe/core/templating/SemanticObjectHelper.js +13 -21
  304. package/src/sap/fe/core/templating/UIFormatters.js +57 -78
  305. package/src/sap/fe/core/templating/UIFormatters.ts +2 -1
  306. package/src/sap/fe/core/type/Date.js +2 -2
  307. package/src/sap/fe/core/type/DateTimeWithTimezone.js +3 -3
  308. package/src/sap/fe/core/type/EDM.js +3 -5
  309. package/src/sap/fe/core/type/Email.js +17 -6
  310. package/src/sap/fe/core/type/Email.ts +23 -4
  311. package/src/sap/fe/core/type/FiscalDate.js +8 -9
  312. package/src/sap/fe/core/type/InputMask.js +3 -4
  313. package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +0 -299
  314. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +0 -87
  315. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +0 -43
  316. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +0 -251
  317. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +0 -471
@@ -20,4 +20,4 @@ sap.ui.define([], function () {
20
20
  _exports.setCoreUIFactory = setCoreUIFactory;
21
21
  return _exports;
22
22
  }, false);
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjdXJyZW50RmFjdG9yeSIsImdldENvcmVVSUZhY3RvcnkiLCJ1bmRlZmluZWQiLCJFcnJvciIsIl9leHBvcnRzIiwic2V0Q29yZVVJRmFjdG9yeSIsInByb3ZpZGVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJVSVByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgQ29udGV4dCwgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwiLi9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMgfSBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL2ZhY2FkZVwiO1xuaW1wb3J0IHR5cGUgeyBTaG93TWVzc2FnZVBhcmFtZXRlcnMgfSBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgfSBmcm9tIFwiLi9vcGVyYXRpb25zSGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEV4aXREaWFsb2dFdmVudCA9IEV2ZW50PHtcblx0YWNjZXB0OiBib29sZWFuO1xufT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhcmREaWFsb2cge1xuXHRvcGVuRGlhbG9nKCk6IHZvaWQ7XG5cdGNsb3NlRGlhbG9nKCk6IHZvaWQ7XG5cdHNldEJ1c3koYnVzeTogYm9vbGVhbik6IHZvaWQ7XG5cdGF0dGFjaEV4aXREaWFsb2coZGF0YTogb2JqZWN0LCBoYW5kbGVyOiAoZTogRXhpdERpYWxvZ0V2ZW50KSA9PiB2b2lkLCBsaXN0ZW5lcj86IG9iamVjdCk6IHZvaWQ7XG5cdGlzT3BlbigpOiBib29sZWFuO1xuXHRkaXNwbGF5RXJyb3JNZXNzYWdlcyhtZXNzYWdlczogTWVzc2FnZVtdKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZFBhcmFtZXRlckRpYWxvZyB7XG5cdGNyZWF0ZURpYWxvZygpOiBQcm9taXNlPERpYWxvZz47XG5cdG9wZW5EaWFsb2cob3duZXI6IENvbnRyb2wpOiBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10gfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvcmVVSUZhY3Rvcnkge1xuXHRuZXdDcmVhdGVEaWFsb2coXG5cdFx0Y29udGV4dFRvVXBkYXRlOiBPRGF0YVY0Q29udGV4dCxcblx0XHRmaWVsZE5hbWVzOiBzdHJpbmdbXSxcblx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRtb2RlOiBcIlN0YW5kYWxvbmVcIiB8IFwiV2l0aE5hdmlnYXRpb25cIixcblx0XHRwYXJlbnRDb250cm9sPzogQ29udHJvbFxuXHQpOiBTdGFuZGFyZERpYWxvZztcblx0bmV3UGFyYW1ldGVyRGlhbG9nKFxuXHRcdGFjdGlvbjogQWN0aW9uLFxuXHRcdGFjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdFx0cGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdFx0cGFyYW1ldGVyVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgdW5kZWZpbmVkLFxuXG5cdFx0ZW50aXR5U2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRcdHZpZXc6IEZFVmlldyB8IG51bGwsXG5cdFx0bWVzc2FnZUhhbmRsZXI6IE1lc3NhZ2VIYW5kbGVyLFxuXHRcdHN0cmljdEhhbmRsaW5nVXRpbGl0aWVzOiBTdHJpY3RIYW5kbGluZ1V0aWxpdGllcyxcblx0XHRjYWxsYmFja3M6IHtcblx0XHRcdGFjdGlvblRvQmVFeGVjdXRlZDogKFxuXHRcdFx0XHRhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRcdFx0cGFyYW1ldGVyczogU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMsXG5cdFx0XHRcdHBhcmVudENvbnRyb2w6IENvbnRyb2wsXG5cdFx0XHRcdG1lc3NhZ2VIYW5kbGVyOiBNZXNzYWdlSGFuZGxlcixcblx0XHRcdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM6IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdFx0XHRpZ25vcmVFVGFnPzogYm9vbGVhblxuXHRcdFx0KSA9PiBQcm9taXNlPE9EYXRhVjRDb250ZXh0IHwgUHJvbWlzZVNldHRsZWRSZXN1bHQ8T0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ+W10+O1xuXHRcdFx0YmVmb3JlU2hvd2luZ01lc3NhZ2U6IChcblx0XHRcdFx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRcdFx0XHRhQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdFx0XHRcdG9EaWFsb2c6IERpYWxvZyB8IHVuZGVmaW5lZCxcblx0XHRcdFx0bWVzc2FnZXM6IE1lc3NhZ2VbXSxcblx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQ6IGJvb2xlYW5cblx0XHRcdCkgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHRcdH0sXG5cdFx0aWdub3JlRVRhZz86IGJvb2xlYW5cblx0KTogU3RhbmRhcmRQYXJhbWV0ZXJEaWFsb2c7XG59XG5cbmxldCBjdXJyZW50RmFjdG9yeTogQ29yZVVJRmFjdG9yeSB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvcmVVSUZhY3RvcnkoKTogQ29yZVVJRmFjdG9yeSB7XG5cdGlmIChjdXJyZW50RmFjdG9yeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwic2FwLmZlLmNvcmUgVUkgcHJvdmlkZXIgbm90IGRlZmluZWRcIik7XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudEZhY3Rvcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb3JlVUlGYWN0b3J5KHByb3ZpZGVyPzogQ29yZVVJRmFjdG9yeSk6IHZvaWQge1xuXHRjdXJyZW50RmFjdG9yeSA9IHByb3ZpZGVyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQXVFQSxJQUFJQSxjQUF5QztFQUV0QyxTQUFTQyxnQkFBZ0JBLENBQUEsRUFBa0I7SUFDakQsSUFBSUQsY0FBYyxLQUFLRSxTQUFTLEVBQUU7TUFDakMsTUFBTSxJQUFJQyxLQUFLLENBQUMscUNBQXFDLENBQUM7SUFDdkQ7SUFFQSxPQUFPSCxjQUFjO0VBQ3RCO0VBQUNJLFFBQUEsQ0FBQUgsZ0JBQUEsR0FBQUEsZ0JBQUE7RUFFTSxTQUFTSSxnQkFBZ0JBLENBQUNDLFFBQXdCLEVBQVE7SUFDaEVOLGNBQWMsR0FBR00sUUFBUTtFQUMxQjtFQUFDRixRQUFBLENBQUFDLGdCQUFBLEdBQUFBLGdCQUFBO0VBQUEsT0FBQUQsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
23
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjdXJyZW50RmFjdG9yeSIsImdldENvcmVVSUZhY3RvcnkiLCJ1bmRlZmluZWQiLCJFcnJvciIsIl9leHBvcnRzIiwic2V0Q29yZVVJRmFjdG9yeSIsInByb3ZpZGVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJVSVByb3ZpZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgRGlhbG9nIGZyb20gXCJzYXAvbS9EaWFsb2dcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgQ29udGV4dCwgZGVmYXVsdCBhcyBPRGF0YVY0Q29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwiLi9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZUhhbmRsZXIgZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvTWVzc2FnZUhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgT3BlcmF0aW9uUmVzdWx0IH0gZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvT0RhdGFPcGVyYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgU2hvd0FjdGlvbkRpYWxvZ1BhcmFtZXRlcnMgfSBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9lZGl0Rmxvdy9vcGVyYXRpb25zL2ZhY2FkZVwiO1xuaW1wb3J0IHR5cGUgeyBTaG93TWVzc2FnZVBhcmFtZXRlcnMgfSBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCB0eXBlIHsgU3RyaWN0SGFuZGxpbmdVdGlsaXRpZXMgfSBmcm9tIFwiLi9vcGVyYXRpb25zSGVscGVyXCI7XG5cbmV4cG9ydCB0eXBlIEV4aXREaWFsb2dFdmVudCA9IEV2ZW50PHtcblx0YWNjZXB0OiBib29sZWFuO1xufT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhbmRhcmREaWFsb2cge1xuXHRvcGVuRGlhbG9nKCk6IHZvaWQ7XG5cdGNsb3NlRGlhbG9nKCk6IHZvaWQ7XG5cdHNldEJ1c3koYnVzeTogYm9vbGVhbik6IHZvaWQ7XG5cdGF0dGFjaEV4aXREaWFsb2coZGF0YTogb2JqZWN0LCBoYW5kbGVyOiAoZTogRXhpdERpYWxvZ0V2ZW50KSA9PiB2b2lkLCBsaXN0ZW5lcj86IG9iamVjdCk6IHZvaWQ7XG5cdGlzT3BlbigpOiBib29sZWFuO1xuXHRkaXNwbGF5RXJyb3JNZXNzYWdlcyhtZXNzYWdlczogTWVzc2FnZVtdKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFuZGFyZFBhcmFtZXRlckRpYWxvZyB7XG5cdGNyZWF0ZURpYWxvZygpOiBQcm9taXNlPERpYWxvZz47XG5cdG9wZW5EaWFsb2cob3duZXI6IENvbnRyb2wpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29yZVVJRmFjdG9yeSB7XG5cdG5ld0NyZWF0ZURpYWxvZyhcblx0XHRjb250ZXh0VG9VcGRhdGU6IE9EYXRhVjRDb250ZXh0LFxuXHRcdGZpZWxkTmFtZXM6IHN0cmluZ1tdLFxuXHRcdGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdG1vZGU6IFwiU3RhbmRhbG9uZVwiIHwgXCJXaXRoTmF2aWdhdGlvblwiLFxuXHRcdHBhcmVudENvbnRyb2w/OiBDb250cm9sXG5cdCk6IFN0YW5kYXJkRGlhbG9nO1xuXHRuZXdQYXJhbWV0ZXJEaWFsb2coXG5cdFx0YWN0aW9uOiBBY3Rpb24sXG5cdFx0YWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0XHRwYXJhbWV0ZXJzOiBTaG93QWN0aW9uRGlhbG9nUGFyYW1ldGVycyxcblx0XHRwYXJhbWV0ZXJWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCB1bmRlZmluZWQsXG5cblx0XHRlbnRpdHlTZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdFx0dmlldzogRkVWaWV3IHwgbnVsbCxcblx0XHRtZXNzYWdlSGFuZGxlcjogTWVzc2FnZUhhbmRsZXIsXG5cdFx0c3RyaWN0SGFuZGxpbmdVdGlsaXRpZXM6IFN0cmljdEhhbmRsaW5nVXRpbGl0aWVzLFxuXHRcdGNhbGxiYWNrczoge1xuXHRcdFx0YmVmb3JlU2hvd2luZ01lc3NhZ2U6IChcblx0XHRcdFx0bVBhcmFtZXRlcnM6IFNob3dBY3Rpb25EaWFsb2dQYXJhbWV0ZXJzLFxuXHRcdFx0XHRhQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10sXG5cdFx0XHRcdG9EaWFsb2c6IERpYWxvZyB8IHVuZGVmaW5lZCxcblx0XHRcdFx0bWVzc2FnZXM6IE1lc3NhZ2VbXSxcblx0XHRcdFx0c2hvd01lc3NhZ2VQYXJhbWV0ZXJzSW46IFNob3dNZXNzYWdlUGFyYW1ldGVycyxcblx0XHRcdFx0c2hvd0dlbmVyaWNFcnJvck1lc3NhZ2VGb3JDaGFuZ2VTZXQ6IGJvb2xlYW5cblx0XHRcdCkgPT4gU2hvd01lc3NhZ2VQYXJhbWV0ZXJzO1xuXHRcdH0sXG5cdFx0aWdub3JlRVRhZz86IGJvb2xlYW5cblx0KTogU3RhbmRhcmRQYXJhbWV0ZXJEaWFsb2c7XG59XG5cbmxldCBjdXJyZW50RmFjdG9yeTogQ29yZVVJRmFjdG9yeSB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvcmVVSUZhY3RvcnkoKTogQ29yZVVJRmFjdG9yeSB7XG5cdGlmIChjdXJyZW50RmFjdG9yeSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwic2FwLmZlLmNvcmUgVUkgcHJvdmlkZXIgbm90IGRlZmluZWRcIik7XG5cdH1cblxuXHRyZXR1cm4gY3VycmVudEZhY3Rvcnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb3JlVUlGYWN0b3J5KHByb3ZpZGVyPzogQ29yZVVJRmFjdG9yeSk6IHZvaWQge1xuXHRjdXJyZW50RmFjdG9yeSA9IHByb3ZpZGVyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQWdFQSxJQUFJQSxjQUF5QztFQUV0QyxTQUFTQyxnQkFBZ0JBLENBQUEsRUFBa0I7SUFDakQsSUFBSUQsY0FBYyxLQUFLRSxTQUFTLEVBQUU7TUFDakMsTUFBTSxJQUFJQyxLQUFLLENBQUMscUNBQXFDLENBQUM7SUFDdkQ7SUFFQSxPQUFPSCxjQUFjO0VBQ3RCO0VBQUNJLFFBQUEsQ0FBQUgsZ0JBQUEsR0FBQUEsZ0JBQUE7RUFFTSxTQUFTSSxnQkFBZ0JBLENBQUNDLFFBQXdCLEVBQVE7SUFDaEVOLGNBQWMsR0FBR00sUUFBUTtFQUMxQjtFQUFDRixRQUFBLENBQUFDLGdCQUFBLEdBQUFBLGdCQUFBO0VBQUEsT0FBQUQsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
@@ -7,6 +7,7 @@ import type Message from "sap/ui/core/message/Message";
7
7
  import type { default as Context, default as ODataV4Context } from "sap/ui/model/odata/v4/Context";
8
8
  import type { FEView } from "./BaseController";
9
9
  import type MessageHandler from "./controllerextensions/MessageHandler";
10
+ import type { OperationResult } from "./controllerextensions/editFlow/ODataOperation";
10
11
  import type { ShowActionDialogParameters } from "./controllerextensions/editFlow/operations/facade";
11
12
  import type { ShowMessageParameters } from "./controllerextensions/messageHandler/messageHandling";
12
13
  import type { StrictHandlingUtilities } from "./operationsHelper";
@@ -26,7 +27,7 @@ export interface StandardDialog {
26
27
 
27
28
  export interface StandardParameterDialog {
28
29
  createDialog(): Promise<Dialog>;
29
- openDialog(owner: Control): Promise<ODataV4Context | PromiseSettledResult<ODataV4Context | undefined>[] | undefined>;
30
+ openDialog(owner: Control): Promise<PromiseSettledResult<OperationResult>[]>;
30
31
  }
31
32
 
32
33
  export interface CoreUIFactory {
@@ -48,14 +49,6 @@ export interface CoreUIFactory {
48
49
  messageHandler: MessageHandler,
49
50
  strictHandlingUtilities: StrictHandlingUtilities,
50
51
  callbacks: {
51
- actionToBeExecuted: (
52
- appComponent: AppComponent,
53
- parameters: ShowActionDialogParameters,
54
- parentControl: Control,
55
- messageHandler: MessageHandler,
56
- strictHandlingUtilities: StrictHandlingUtilities,
57
- ignoreETag?: boolean
58
- ) => Promise<ODataV4Context | PromiseSettledResult<ODataV4Context | undefined>[]>;
59
52
  beforeShowingMessage: (
60
53
  mParameters: ShowActionDialogParameters,
61
54
  aContexts: ODataV4Context[],
@@ -2,17 +2,18 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/ClassSupport", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/MetaPath", "sap/fe/core/helpers/StableIdHelper", "sap/ui/core/Component", "sap/ui/core/ElementRegistry"], function (Log, BuildingBlockBase, ClassSupport, MetaModelConverter, MetaPath, StableIdHelper, Component, ElementRegistry) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/ClassSupport", "sap/fe/base/HookSupport", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/MetaPath", "sap/fe/core/helpers/StableIdHelper", "sap/ui/core/Component", "sap/ui/core/ElementRegistry"], function (Log, BuildingBlockBase, ClassSupport, HookSupport, MetaModelConverter, MetaPath, StableIdHelper, Component, ElementRegistry) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _class, _class2, _descriptor, _class3;
8
+ var _dec, _dec2, _class, _class2, _descriptor, _BuildingBlock;
9
9
  var generate = StableIdHelper.generate;
10
10
  var getInvolvedDataModelObjectsForTargetPath = MetaModelConverter.getInvolvedDataModelObjectsForTargetPath;
11
11
  var convertTypes = MetaModelConverter.convertTypes;
12
+ var removeControllerExtensionHookHandlers = HookSupport.removeControllerExtensionHookHandlers;
13
+ var initControllerExtensionHookHandlers = HookSupport.initControllerExtensionHookHandlers;
12
14
  var property = ClassSupport.property;
13
15
  var defineUI5Class = ClassSupport.defineUI5Class;
14
16
  function _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }
15
- function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
16
17
  function _inheritsLoose(t, o) { t.prototype = Object.create(o.prototype), t.prototype.constructor = t, _setPrototypeOf(t, o); }
17
18
  function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
18
19
  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
@@ -26,20 +27,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/Cla
26
27
  */
27
28
  let BuildingBlock = (_dec = defineUI5Class("sap.fe.core.buildingBlocks.BuildingBlock"), _dec2 = property({
28
29
  type: "string"
29
- }), _dec(_class = (_class2 = (_class3 = /*#__PURE__*/function (_BuildingBlockBase) {
30
- _inheritsLoose(BuildingBlock, _BuildingBlockBase);
31
- /**
32
- * The metamodel name or id to be used for this building block
33
- */
34
-
30
+ }), _dec(_class = (_class2 = (_BuildingBlock = /*#__PURE__*/function (_BuildingBlockBase) {
35
31
  function BuildingBlock(settings, others) {
36
32
  var _this;
37
33
  _this = _BuildingBlockBase.call(this, settings, others) || this;
38
- _initializerDefineProperty(_this, "metaModel", _descriptor, _assertThisInitialized(_this));
34
+ /**
35
+ * The metamodel name or id to be used for this building block
36
+ */
37
+ _initializerDefineProperty(_this, "metaModel", _descriptor, _this);
39
38
  _this._applyingSettings = false;
40
39
  _this.notifyBBObservers();
41
40
  return _this;
42
41
  }
42
+ _inheritsLoose(BuildingBlock, _BuildingBlockBase);
43
43
  var _proto = BuildingBlock.prototype;
44
44
  _proto.applySettings = function applySettings(mSettings, oScope) {
45
45
  this._applyingSettings = true;
@@ -98,7 +98,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/Cla
98
98
  * for example becuase of lazy loading, then it is recommended not to await on the promise and instead use Promise.then().
99
99
  */;
100
100
  _proto._getOwner = function _getOwner() {
101
- var _owner;
102
101
  //eslint-disable-next-line @typescript-eslint/no-this-alias
103
102
  let control = this;
104
103
  let owner = Component.getOwnerComponentFor(control);
@@ -108,18 +107,34 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/Cla
108
107
  owner = Component.getOwnerComponentFor(control);
109
108
  }
110
109
  }
111
- if ((_owner = owner) !== null && _owner !== void 0 && _owner.isA("sap.fe.core.TemplateComponent")) {
110
+ if (owner?.isA("sap.fe.core.TemplateComponent")) {
112
111
  return owner;
113
112
  }
114
- };
113
+ if (owner?.isA("sap.fe.core.buildingBlocks.IBuildingBlockOwnerComponent")) {
114
+ return owner;
115
+ }
116
+ }
117
+
118
+ /*
119
+ * Get the page controller instance
120
+ * @returns The page controller instance
121
+ */;
115
122
  _proto.getPageController = function getPageController() {
116
- var _this$_getOwner;
117
- return (_this$_getOwner = this._getOwner()) === null || _this$_getOwner === void 0 ? void 0 : _this$_getOwner.getRootController();
123
+ const pageController = this._getOwner()?.getRootController?.();
124
+ if (!pageController) {
125
+ Log.error("No sap.fe.core.PageController found");
126
+ }
127
+ return pageController;
128
+ };
129
+ _proto.getMetaModel = function getMetaModel() {
130
+ return this._getOwner()?.getMetaModel(this.metaModel);
118
131
  };
119
132
  _proto.destroy = function destroy(suppressInvalidate) {
120
133
  if (this.isA("sap.fe.core.controllerextensions.viewState.IViewStateContributor")) {
121
- var _this$getPageControll, _this$getPageControll2;
122
- (_this$getPageControll = this.getPageController()) === null || _this$getPageControll === void 0 ? void 0 : (_this$getPageControll2 = _this$getPageControll.viewState) === null || _this$getPageControll2 === void 0 ? void 0 : _this$getPageControll2.deregisterStateContributor(this);
134
+ this.getPageController()?.viewState?.deregisterStateContributor(this);
135
+ }
136
+ if (this.getPageController()) {
137
+ removeControllerExtensionHookHandlers(this, this.getPageController());
123
138
  }
124
139
  this.notifyBBObservers(true);
125
140
  _BuildingBlockBase.prototype.destroy.call(this, suppressInvalidate);
@@ -130,23 +145,29 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/Cla
130
145
  if (owner) {
131
146
  this.onMetadataAvailable(owner);
132
147
  if (this.isA("sap.fe.core.controllerextensions.viewState.IViewStateContributor")) {
133
- var _this$getPageControll3;
134
- (_this$getPageControll3 = this.getPageController()) === null || _this$getPageControll3 === void 0 ? void 0 : _this$getPageControll3.viewState.registerStateContributor(this);
148
+ this.getPageController()?.viewState.registerStateContributor(this);
135
149
  }
136
- if (this._modelContextChangeEventHandler) {
137
- this.detachEvent("modelContextChange", this._modelContextChangeEventHandler);
150
+ if (this.getPageController()) {
151
+ initControllerExtensionHookHandlers(this, this.getPageController());
138
152
  }
139
153
  } else {
140
154
  if (!fromApplySettings && !this.content) {
141
155
  // In case couldn't create the content during the applySettings, try again
142
156
  Log.warning("The building block was not created within an ExtensionAPI.runWithFPMContext call, for performance reason it's recommended to do so.", this);
143
157
  }
144
- if (!this._modelContextChangeEventHandler) {
145
- this._modelContextChangeEventHandler = function () {
146
- this._checkIfMetadataReady();
147
- };
148
- this.attachEvent("modelContextChange", this._modelContextChangeEventHandler);
149
- }
158
+ this.attachEventOnce("modelContextChange", function () {
159
+ this._checkIfMetadataReady();
160
+ });
161
+ }
162
+ };
163
+ _proto.clone = function clone(sIdSuffix, aLocalIds) {
164
+ const owner = this._getOwner();
165
+ if (owner) {
166
+ return owner.runAsOwner(() => {
167
+ return _BuildingBlockBase.prototype.clone.call(this, sIdSuffix, aLocalIds);
168
+ });
169
+ } else {
170
+ return _BuildingBlockBase.prototype.clone.call(this, sIdSuffix, aLocalIds);
150
171
  }
151
172
  };
152
173
  _proto.onMetadataAvailable = function onMetadataAvailable(_ownerComponent) {
@@ -154,17 +175,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/Cla
154
175
  };
155
176
  _proto.getAppComponent = function getAppComponent() {
156
177
  const owner = this._getOwner();
157
- if (owner !== null && owner !== void 0 && owner.isA("sap.fe.core.TemplateComponent")) {
158
- var _owner$getPreprocesso;
159
- return (_owner$getPreprocesso = owner.getPreprocessorContext()) === null || _owner$getPreprocesso === void 0 ? void 0 : _owner$getPreprocesso.appComponent;
160
- } else {
161
- return undefined;
162
- }
178
+ return owner?.getAppComponent();
163
179
  };
164
180
  _proto.getDataModelObjectPath = function getDataModelObjectPath(targetPath) {
165
181
  const owner = this._getOwner();
166
182
  const metaModel = owner.getMetaModel(this.metaModel);
167
- const targetPathToUse = targetPath ?? owner.getFullContextPath(this.metaModel);
183
+ const targetPathToUse = targetPath ?? this.getOwnerContextPath();
168
184
  return getInvolvedDataModelObjectsForTargetPath(targetPathToUse, metaModel);
169
185
  }
170
186
 
@@ -173,9 +189,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/Cla
173
189
  * @returns The context path
174
190
  */;
175
191
  _proto.getOwnerContextPath = function getOwnerContextPath() {
176
- var _owner$preprocessorCo;
177
192
  const owner = this._getOwner();
178
- return (_owner$preprocessorCo = owner.preprocessorContext) === null || _owner$preprocessorCo === void 0 ? void 0 : _owner$preprocessorCo.fullContextPath;
193
+ return owner.getFullContextPath(this.metaModel);
179
194
  }
180
195
 
181
196
  /**
@@ -185,11 +200,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/Cla
185
200
  * @returns The data model object path
186
201
  */;
187
202
  _proto.getDataModelObjectForMetaPath = function getDataModelObjectForMetaPath(metapath, contextPath) {
188
- var _contextPathToUse;
189
203
  const owner = this._getOwner();
190
204
  const metaModel = owner.getMetaModel(this.metaModel);
191
- let contextPathToUse = contextPath ?? owner.getFullContextPath(this.metaModel);
192
- contextPathToUse = (_contextPathToUse = contextPathToUse) !== null && _contextPathToUse !== void 0 && _contextPathToUse.startsWith("/") ? contextPathToUse : undefined;
205
+ let contextPathToUse = contextPath ?? this.getOwnerContextPath();
206
+ contextPathToUse = contextPathToUse?.startsWith("/") ? contextPathToUse : undefined;
193
207
  if (!metaModel || !(contextPathToUse || metapath.charAt(0) === "/")) {
194
208
  throw new Error("No metamodel or metapath is not reachable with contextPath");
195
209
  }
@@ -206,12 +220,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/Cla
206
220
  * @returns A MetaPath pointing to the target {metaPath, contextPath}
207
221
  */;
208
222
  _proto.getMetaPathObject = function getMetaPathObject(metaPath, contextPath) {
209
- var _contextPathToUse2;
210
223
  const owner = this._getOwner();
211
224
  const metaModel = owner.getMetaModel(this.metaModel);
212
- let contextPathToUse = contextPath ?? owner.getFullContextPath(this.metaModel);
213
- contextPathToUse = (_contextPathToUse2 = contextPathToUse) !== null && _contextPathToUse2 !== void 0 && _contextPathToUse2.startsWith("/") ? contextPathToUse : undefined;
214
- if (!owner.preprocessorContext || !metaModel || !(contextPathToUse || metaPath.charAt(0) === "/")) {
225
+ let contextPathToUse = contextPath ?? this.getOwnerContextPath();
226
+ contextPathToUse = contextPathToUse?.startsWith("/") ? contextPathToUse : undefined;
227
+ if (!metaModel || !(contextPathToUse || metaPath.charAt(0) === "/")) {
215
228
  Log.warning(`No metamodel or metaPath is not reachable with ${contextPath}:${metaPath}`);
216
229
  return null;
217
230
  }
@@ -233,16 +246,18 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BuildingBlockBase", "sap/fe/base/Cla
233
246
  return undefined;
234
247
  };
235
248
  _proto.getTranslatedText = function getTranslatedText(textID, parameters, metaPath) {
236
- var _ref, _this$_getOwner2, _this$_getOwner2$prep;
237
- return ((_ref = this.getModel("sap.fe.i18n") ?? ((_this$_getOwner2 = this._getOwner()) === null || _this$_getOwner2 === void 0 ? void 0 : (_this$_getOwner2$prep = _this$_getOwner2.preprocessorContext) === null || _this$_getOwner2$prep === void 0 ? void 0 : _this$_getOwner2$prep.models["sap.fe.i18n"])) === null || _ref === void 0 ? void 0 : _ref.getText(textID, parameters, metaPath)) || textID;
249
+ return (this.getModel("sap.fe.i18n") ?? this._getOwner()?.getModel("sap.fe.i18n"))?.getText(textID, parameters, metaPath) || textID;
250
+ };
251
+ _proto.getManifestWrapper = function getManifestWrapper() {
252
+ return this._getOwner()?.getManifestWrapper();
238
253
  };
239
254
  return BuildingBlock;
240
- }(BuildingBlockBase), _class3._bbobserverMap = new Map(), _class3), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "metaModel", [_dec2], {
255
+ }(BuildingBlockBase), _BuildingBlock._bbobserverMap = new Map(), _BuildingBlock), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "metaModel", [_dec2], {
241
256
  configurable: true,
242
257
  enumerable: true,
243
258
  writable: true,
244
259
  initializer: null
245
- })), _class2)) || _class);
260
+ }), _class2)) || _class);
246
261
  return BuildingBlock;
247
262
  }, false);
248
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX2NsYXNzMyIsIl9CdWlsZGluZ0Jsb2NrQmFzZSIsIl9pbmhlcml0c0xvb3NlIiwic2V0dGluZ3MiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIl9hcHBseWluZ1NldHRpbmdzIiwibm90aWZ5QkJPYnNlcnZlcnMiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJhcHBseVNldHRpbmdzIiwibVNldHRpbmdzIiwib1Njb3BlIiwiX2NoZWNrSWZNZXRhZGF0YVJlYWR5IiwiZGVzdHJveSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImJib2JzZXJ2ZXJNYXAiLCJfYmJvYnNlcnZlck1hcCIsImdldCIsImdldElkIiwib2JzZXJ2ZUJCIiwib25EZXN0cm95Iiwib25BdmFpbGFibGUiLCJvYnNlcnZlQnVpbGRpbmdCbG9jayIsImlkIiwicGFyYW1ldGVycyIsImVsZW1lbnQiLCJFbGVtZW50UmVnaXN0cnkiLCJwdXNoIiwic2V0IiwiX2dldE93bmVyIiwiX293bmVyIiwiY29udHJvbCIsIm93bmVyIiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJpc0EiLCJnZXRQYXJlbnQiLCJnZXRQYWdlQ29udHJvbGxlciIsIl90aGlzJF9nZXRPd25lciIsImdldFJvb3RDb250cm9sbGVyIiwic3VwcHJlc3NJbnZhbGlkYXRlIiwiX3RoaXMkZ2V0UGFnZUNvbnRyb2xsIiwiX3RoaXMkZ2V0UGFnZUNvbnRyb2xsMiIsInZpZXdTdGF0ZSIsImRlcmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yIiwiZnJvbUFwcGx5U2V0dGluZ3MiLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwiX3RoaXMkZ2V0UGFnZUNvbnRyb2xsMyIsInJlZ2lzdGVyU3RhdGVDb250cmlidXRvciIsIl9tb2RlbENvbnRleHRDaGFuZ2VFdmVudEhhbmRsZXIiLCJkZXRhY2hFdmVudCIsImNvbnRlbnQiLCJMb2ciLCJ3YXJuaW5nIiwiYXR0YWNoRXZlbnQiLCJfb3duZXJDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJfb3duZXIkZ2V0UHJlcHJvY2Vzc28iLCJnZXRQcmVwcm9jZXNzb3JDb250ZXh0IiwiYXBwQ29tcG9uZW50IiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRhcmdldFBhdGgiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJ0YXJnZXRQYXRoVG9Vc2UiLCJnZXRGdWxsQ29udGV4dFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIiwiZ2V0T3duZXJDb250ZXh0UGF0aCIsIl9vd25lciRwcmVwcm9jZXNzb3JDbyIsInByZXByb2Nlc3NvckNvbnRleHQiLCJmdWxsQ29udGV4dFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsIm1ldGFwYXRoIiwiY29udGV4dFBhdGgiLCJfY29udGV4dFBhdGhUb1VzZSIsImNvbnRleHRQYXRoVG9Vc2UiLCJzdGFydHNXaXRoIiwiY2hhckF0IiwiRXJyb3IiLCJtZXRhQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwibWV0YVBhdGhDb250ZXh0IiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZ2V0TWV0YVBhdGhPYmplY3QiLCJtZXRhUGF0aCIsIl9jb250ZXh0UGF0aFRvVXNlMiIsIk1ldGFQYXRoIiwiY29udmVydFR5cGVzIiwiZSIsImNyZWF0ZUlkIiwiX2xlbiIsInN0cmluZ1BhcnRzIiwiQXJyYXkiLCJfa2V5IiwiZ2VuZXJhdGUiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInRleHRJRCIsIl9yZWYiLCJfdGhpcyRfZ2V0T3duZXIyIiwiX3RoaXMkX2dldE93bmVyMiRwcmVwIiwiZ2V0TW9kZWwiLCJtb2RlbHMiLCJnZXRUZXh0IiwiQnVpbGRpbmdCbG9ja0Jhc2UiLCJNYXAiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9ja0Jhc2UgZnJvbSBcInNhcC9mZS9iYXNlL0J1aWxkaW5nQmxvY2tCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1LCBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIElWaWV3U3RhdGVDb250cmlidXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvdmlld1N0YXRlL0lWaWV3U3RhdGVDb250cmlidXRvclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTWV0YVBhdGggZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YVBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQXV0aG9yaXplZElkQW5ub3RhdGlvbnNUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgJE1hbmFnZWRPYmplY3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBFbGVtZW50UmVnaXN0cnkgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRSZWdpc3RyeVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi9BcHBDb21wb25lbnRcIjtcblxuZXhwb3J0IHR5cGUgT2JzZXJ2ZUJ1aWxkaW5nQmxvY2sgPSB7XG5cdG9uQXZhaWxhYmxlPzogKGJiOiBVSTVFbGVtZW50KSA9PiB2b2lkO1xuXHRvbkRlc3Ryb3k/OiAoYmI6IFVJNUVsZW1lbnQpID0+IHZvaWQ7XG59O1xuLyoqXG4gKiBEZWZpbmVzIGEgY29udHJvbCB0aGF0IHdpbGwgbm90IGV4aXN0IGluIHRoZSBET00uXG4gKiBJbnN0ZWFkLCBvbmx5IGl0cyBjaGlsZCB3aWxsIGJlIHRoZXJlIGFuZCB0aGlzIGNvbnRyb2wgd2lsbCBmb3J3YXJkIGFsbCBET00gcmVsYXRlZCBpbnN0cnVjdGlvbiB0byBpdC5cbiAqIEBleHBlcmltZW50YWxcbiAqIEBzaW5jZSAxLjEyMS4wXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tcIilcbmNsYXNzIEJ1aWxkaW5nQmxvY2s8VCBleHRlbmRzIFVJNUVsZW1lbnQgPSBDb250cm9sPiBleHRlbmRzIEJ1aWxkaW5nQmxvY2tCYXNlPFQ+IHtcblx0LyoqXG5cdCAqIFRoZSBtZXRhbW9kZWwgbmFtZSBvciBpZCB0byBiZSB1c2VkIGZvciB0aGlzIGJ1aWxkaW5nIGJsb2NrXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdG1ldGFNb2RlbD86IHN0cmluZztcblxuXHRwcm90ZWN0ZWQgX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblxuXHRwcml2YXRlIF9tb2RlbENvbnRleHRDaGFuZ2VFdmVudEhhbmRsZXI/OiBGdW5jdGlvbjtcblxuXHRwcml2YXRlIHN0YXRpYyBfYmJvYnNlcnZlck1hcDogTWFwPHN0cmluZywgT2JzZXJ2ZUJ1aWxkaW5nQmxvY2tbXT4gPSBuZXcgTWFwKCk7XG5cblx0Y29uc3RydWN0b3Ioc2V0dGluZ3M/OiBzdHJpbmcgfCBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+LCBvdGhlcnM/OiBQcm9wZXJ0aWVzT2Y8QnVpbGRpbmdCbG9ja0Jhc2U8VD4+KSB7XG5cdFx0c3VwZXIoc2V0dGluZ3MsIG90aGVycyk7XG5cdFx0dGhpcy5ub3RpZnlCQk9ic2VydmVycygpO1xuXHR9XG5cblx0b3ZlcnJpZGUgYXBwbHlTZXR0aW5ncyhtU2V0dGluZ3M6ICRNYW5hZ2VkT2JqZWN0U2V0dGluZ3MsIG9TY29wZT86IG9iamVjdCk6IHRoaXMge1xuXHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSB0cnVlO1xuXHRcdHN1cGVyLmFwcGx5U2V0dGluZ3MobVNldHRpbmdzLCBvU2NvcGUpO1xuXHRcdHRoaXMuX2FwcGx5aW5nU2V0dGluZ3MgPSBmYWxzZTtcblx0XHR0aGlzLl9jaGVja0lmTWV0YWRhdGFSZWFkeSh0cnVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdG5vdGlmeUJCT2JzZXJ2ZXJzKGRlc3Ryb3kgPSBmYWxzZSk6IHZvaWQge1xuXHRcdGNvbnN0IGJib2JzZXJ2ZXJNYXAgPSBCdWlsZGluZ0Jsb2NrLl9iYm9ic2VydmVyTWFwLmdldCh0aGlzLmdldElkKCkpO1xuXHRcdGlmIChiYm9ic2VydmVyTWFwICYmIGJib2JzZXJ2ZXJNYXAubGVuZ3RoID4gMCkge1xuXHRcdFx0Zm9yIChjb25zdCBvYnNlcnZlQkIgb2YgYmJvYnNlcnZlck1hcCkge1xuXHRcdFx0XHRpZiAoZGVzdHJveSkge1xuXHRcdFx0XHRcdGlmIChvYnNlcnZlQkIub25EZXN0cm95KSB7XG5cdFx0XHRcdFx0XHRvYnNlcnZlQkIub25EZXN0cm95KHRoaXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvYnNlcnZlQkIub25BdmFpbGFibGUpIHtcblx0XHRcdFx0XHRvYnNlcnZlQkIub25BdmFpbGFibGUodGhpcyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWxsb3dzIHRvIG9ic2VydmUgYnVpbGRpbmcgYmxvY2sgb25jZSBpdCBpcyBjcmVhdGVkLlxuXHQgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBidWlsZGluZyBibG9jayB3aGljaCB3aWxsIGJlIG9ic2VydmVkXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzIFRoZSBpZCBvZiB0aGUgYnVpbGRpbmcgYmxvY2sgd2hpY2ggaXMgYmVpbmcgcmVxdXN0ZWRcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMub25BdmFpbGFibGUgQ2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIHRoZSBCQiB3aGVuIGl0IGlzIGF2YWlsYWJsZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycy5vbkRlc3Ryb3kgQ2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIHRoZSBCQiB3aGVuIGl0IGlzIGRlc3Ryb3llZFxuXHQgKi9cblx0c3RhdGljIG9ic2VydmVCdWlsZGluZ0Jsb2NrKGlkOiBzdHJpbmcsIHBhcmFtZXRlcnM6IE9ic2VydmVCdWlsZGluZ0Jsb2NrKTogdm9pZCB7XG5cdFx0Ly9pZiAocGFyYW1ldGVycylcblx0XHRjb25zdCBlbGVtZW50ID0gRWxlbWVudFJlZ2lzdHJ5LmdldChpZCk7XG5cdFx0Ly8gaWYgdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSByZWdpc3RlcmVkXG5cdFx0aWYgKGVsZW1lbnQpIHtcblx0XHRcdGlmIChwYXJhbWV0ZXJzLm9uQXZhaWxhYmxlKSB7XG5cdFx0XHRcdHBhcmFtZXRlcnMub25BdmFpbGFibGUoZWxlbWVudCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGJib2JzZXJ2ZXJNYXAgPSBCdWlsZGluZ0Jsb2NrLl9iYm9ic2VydmVyTWFwLmdldChpZCk7XG5cdFx0XHRpZiAoYmJvYnNlcnZlck1hcCkge1xuXHRcdFx0XHRiYm9ic2VydmVyTWFwLnB1c2gocGFyYW1ldGVycyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRCdWlsZGluZ0Jsb2NrLl9iYm9ic2VydmVyTWFwLnNldChpZCwgW3BhcmFtZXRlcnNdKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBpbnN0YW5jZSBvZiBhIGJ1aWxkaW5nIGJsb2NrIGJhc2VkIG9uY2UgaXQgaXMgcmVnaXN0ZXJlZC5cblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgYnVpbGRpbmcgYmxvY2sgd2hpY2ggaXMgYmVpbmcgcmVxdXN0ZWRcblx0ICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZlZCB3aXRoIGFuIGluc3RhbmNlIG9mIHRoZSBidWlsZGluZyBibG9jayBvbmNlIGl0IGlzIHJlZ2lzdGVyZWQvaW5zdGFudGllZC5cblx0ICogXHQgVGhlIHByb21pc2UgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgYnVpbGRpbmcgYmxvY2sgaXMgaW50YW50aWVkIGhlbmNlIGl0IHJlY29tbWVuZGVkIHRvIG9ubHkgYXdhaXQgb24gdGhlIHByb21pc2Vcblx0ICogXHQgd2hlbiBpdCBpcyBrbm93biB0aGF0IHRoZSBidWlsZGluZyBibG9jayB3aWxsIGJlIGF2YWlsYWJsZS4gSW4gY2FzZXMgaGVyZSB0aGUgYnVpbGRpbmcgYmxvY2sgbWlnaHQgbm90IGJlIGF2YWlsYWJsZSxcblx0ICogXHQgZm9yIGV4YW1wbGUgYmVjdWFzZSBvZiBsYXp5IGxvYWRpbmcsIHRoZW4gaXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIGF3YWl0IG9uIHRoZSBwcm9taXNlIGFuZCBpbnN0ZWFkIHVzZSBQcm9taXNlLnRoZW4oKS5cblx0ICovXG5cblx0X2dldE93bmVyKCk6IFRlbXBsYXRlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcblx0XHQvL2VzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdGxldCBjb250cm9sOiBDb250cm9sIHwgdW5kZWZpbmVkID0gdGhpcztcblx0XHRsZXQgb3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IoY29udHJvbCk7XG5cdFx0d2hpbGUgKCFvd25lciAmJiBjb250cm9sICYmICFjb250cm9sLmlzQTxGRVZpZXc+KFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikpIHtcblx0XHRcdGNvbnRyb2wgPSBjb250cm9sLmdldFBhcmVudCgpIGFzIENvbnRyb2wgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAoY29udHJvbCkge1xuXHRcdFx0XHRvd25lciA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihjb250cm9sKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG93bmVyPy5pc0E8VGVtcGxhdGVDb21wb25lbnQ+KFwic2FwLmZlLmNvcmUuVGVtcGxhdGVDb21wb25lbnRcIikpIHtcblx0XHRcdHJldHVybiBvd25lcjtcblx0XHR9XG5cdH1cblxuXHRnZXRQYWdlQ29udHJvbGxlcigpOiBQYWdlQ29udHJvbGxlciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCk7XG5cdH1cblxuXHRvdmVycmlkZSBkZXN0cm95KHN1cHByZXNzSW52YWxpZGF0ZT86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5pc0E8SVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPHVua25vd24+ICYgTWFuYWdlZE9iamVjdD4oXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy52aWV3U3RhdGUuSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCIpKSB7XG5cdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LnZpZXdTdGF0ZT8uZGVyZWdpc3RlclN0YXRlQ29udHJpYnV0b3IodGhpcyk7XG5cdFx0fVxuXHRcdHRoaXMubm90aWZ5QkJPYnNlcnZlcnModHJ1ZSk7XG5cdFx0c3VwZXIuZGVzdHJveShzdXBwcmVzc0ludmFsaWRhdGUpO1xuXHR9XG5cblx0X2NoZWNrSWZNZXRhZGF0YVJlYWR5KGZyb21BcHBseVNldHRpbmdzID0gZmFsc2UpOiB2b2lkIHtcblx0XHRjb25zdCBvd25lciA9IHRoaXMuX2dldE93bmVyKCk7XG5cdFx0aWYgKG93bmVyKSB7XG5cdFx0XHR0aGlzLm9uTWV0YWRhdGFBdmFpbGFibGUob3duZXIpO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHR0aGlzLmlzQTxJVmlld1N0YXRlQ29udHJpYnV0b3I8dW5rbm93bj4gJiBNYW5hZ2VkT2JqZWN0PihcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLnZpZXdTdGF0ZS5JVmlld1N0YXRlQ29udHJpYnV0b3JcIilcblx0XHRcdCkge1xuXHRcdFx0XHR0aGlzLmdldFBhZ2VDb250cm9sbGVyKCk/LnZpZXdTdGF0ZS5yZWdpc3RlclN0YXRlQ29udHJpYnV0b3IodGhpcyk7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5fbW9kZWxDb250ZXh0Q2hhbmdlRXZlbnRIYW5kbGVyKSB7XG5cdFx0XHRcdHRoaXMuZGV0YWNoRXZlbnQoXCJtb2RlbENvbnRleHRDaGFuZ2VcIiwgdGhpcy5fbW9kZWxDb250ZXh0Q2hhbmdlRXZlbnRIYW5kbGVyKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCFmcm9tQXBwbHlTZXR0aW5ncyAmJiAhdGhpcy5jb250ZW50KSB7XG5cdFx0XHRcdC8vIEluIGNhc2UgY291bGRuJ3QgY3JlYXRlIHRoZSBjb250ZW50IGR1cmluZyB0aGUgYXBwbHlTZXR0aW5ncywgdHJ5IGFnYWluXG5cdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFwiVGhlIGJ1aWxkaW5nIGJsb2NrIHdhcyBub3QgY3JlYXRlZCB3aXRoaW4gYW4gRXh0ZW5zaW9uQVBJLnJ1bldpdGhGUE1Db250ZXh0IGNhbGwsIGZvciBwZXJmb3JtYW5jZSByZWFzb24gaXQncyByZWNvbW1lbmRlZCB0byBkbyBzby5cIixcblx0XHRcdFx0XHR0aGlzIGFzIHVua25vd24gYXMgc3RyaW5nXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXRoaXMuX21vZGVsQ29udGV4dENoYW5nZUV2ZW50SGFuZGxlcikge1xuXHRcdFx0XHR0aGlzLl9tb2RlbENvbnRleHRDaGFuZ2VFdmVudEhhbmRsZXIgPSBmdW5jdGlvbiAoKTogdm9pZCB7XG5cdFx0XHRcdFx0dGhpcy5fY2hlY2tJZk1ldGFkYXRhUmVhZHkoKTtcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5hdHRhY2hFdmVudChcIm1vZGVsQ29udGV4dENoYW5nZVwiLCB0aGlzLl9tb2RlbENvbnRleHRDaGFuZ2VFdmVudEhhbmRsZXIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCk6IHZvaWQge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlbiBieSB0aGUgY2hpbGQgY2xhc3Ncblx0fVxuXG5cdGdldEFwcENvbXBvbmVudCgpOiBBcHBDb21wb25lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKTtcblx0XHRpZiAob3duZXI/LmlzQTxFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD4+KFwic2FwLmZlLmNvcmUuVGVtcGxhdGVDb21wb25lbnRcIikpIHtcblx0XHRcdHJldHVybiBvd25lci5nZXRQcmVwcm9jZXNzb3JDb250ZXh0KCk/LmFwcENvbXBvbmVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHRnZXREYXRhTW9kZWxPYmplY3RQYXRoPE4+KHRhcmdldFBhdGg6IHN0cmluZyk6IERhdGFNb2RlbE9iamVjdFBhdGg8Tj4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKSE7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gb3duZXIuZ2V0TWV0YU1vZGVsKHRoaXMubWV0YU1vZGVsKTtcblx0XHRjb25zdCB0YXJnZXRQYXRoVG9Vc2UgPSB0YXJnZXRQYXRoID8/IG93bmVyLmdldEZ1bGxDb250ZXh0UGF0aCh0aGlzLm1ldGFNb2RlbCk7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgodGFyZ2V0UGF0aFRvVXNlLCBtZXRhTW9kZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgY29udGV4dCBwYXRoIGZyb20gdGhlIG93bmVyIGNvbXBvbmVudC5cblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgcGF0aFxuXHQgKi9cblx0Z2V0T3duZXJDb250ZXh0UGF0aCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKSE7XG5cdFx0cmV0dXJuIG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/LmZ1bGxDb250ZXh0UGF0aDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGRhdGEgbW9kZWwgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gbWV0YXBhdGggYW5kIG9wdGlvbmFsIGNvbnRleHRQYXRoLlxuXHQgKiBAcGFyYW0gbWV0YXBhdGhcblx0ICogQHBhcmFtIGNvbnRleHRQYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBkYXRhIG1vZGVsIG9iamVjdCBwYXRoXG5cdCAqL1xuXHRnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxFeHBlY3RlZERhdGFNb2RlbFR5cGU+KFxuXHRcdG1ldGFwYXRoOiBzdHJpbmcsXG5cdFx0Y29udGV4dFBhdGg/OiBzdHJpbmdcblx0KTogRGF0YU1vZGVsT2JqZWN0UGF0aDxFeHBlY3RlZERhdGFNb2RlbFR5cGU+IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvd25lciA9IHRoaXMuX2dldE93bmVyKCkhO1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IG93bmVyLmdldE1ldGFNb2RlbCh0aGlzLm1ldGFNb2RlbCk7XG5cdFx0bGV0IGNvbnRleHRQYXRoVG9Vc2UgPSBjb250ZXh0UGF0aCA/PyBvd25lci5nZXRGdWxsQ29udGV4dFBhdGgodGhpcy5tZXRhTW9kZWwpO1xuXHRcdGNvbnRleHRQYXRoVG9Vc2UgPSBjb250ZXh0UGF0aFRvVXNlPy5zdGFydHNXaXRoKFwiL1wiKSA/IGNvbnRleHRQYXRoVG9Vc2UgOiB1bmRlZmluZWQ7XG5cdFx0aWYgKCFtZXRhTW9kZWwgfHwgIShjb250ZXh0UGF0aFRvVXNlIHx8IG1ldGFwYXRoLmNoYXJBdCgwKSA9PT0gXCIvXCIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJObyBtZXRhbW9kZWwgb3IgbWV0YXBhdGggaXMgbm90IHJlYWNoYWJsZSB3aXRoIGNvbnRleHRQYXRoXCIpO1xuXHRcdH1cblx0XHRsZXQgbWV0YUNvbnRleHQgPSBjb250ZXh0UGF0aFRvVXNlID8gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbnRleHRQYXRoVG9Vc2UpIDogdW5kZWZpbmVkO1xuXHRcdG1ldGFDb250ZXh0ID0gbWV0YUNvbnRleHQgPyBtZXRhQ29udGV4dCA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBtZXRhUGF0aENvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YXBhdGgsIG1ldGFDb250ZXh0KTtcblx0XHRyZXR1cm4gbWV0YVBhdGhDb250ZXh0XG5cdFx0XHQ/IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RXhwZWN0ZWREYXRhTW9kZWxUeXBlPihtZXRhUGF0aENvbnRleHQsIG1ldGFDb250ZXh0KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBNZXRhUGF0aCBvYmplY3QgZm9yIHRoZSBnaXZlbiBtZXRhUGF0aCBhbmQgb3B0aW9uYWwgY29udGV4dFBhdGguXG5cdCAqIEBwYXJhbSBtZXRhUGF0aFxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICogQHJldHVybnMgQSBNZXRhUGF0aCBwb2ludGluZyB0byB0aGUgdGFyZ2V0IHttZXRhUGF0aCwgY29udGV4dFBhdGh9XG5cdCAqL1xuXHRnZXRNZXRhUGF0aE9iamVjdDxFeHBlY3RlZERhdGFNb2RlbFR5cGU+KG1ldGFQYXRoOiBzdHJpbmcsIGNvbnRleHRQYXRoPzogc3RyaW5nKTogTWV0YVBhdGg8RXhwZWN0ZWREYXRhTW9kZWxUeXBlPiB8IG51bGwge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKSE7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gb3duZXIuZ2V0TWV0YU1vZGVsKHRoaXMubWV0YU1vZGVsKTtcblx0XHRsZXQgY29udGV4dFBhdGhUb1VzZSA9IGNvbnRleHRQYXRoID8/IG93bmVyLmdldEZ1bGxDb250ZXh0UGF0aCh0aGlzLm1ldGFNb2RlbCk7XG5cdFx0Y29udGV4dFBhdGhUb1VzZSA9IGNvbnRleHRQYXRoVG9Vc2U/LnN0YXJ0c1dpdGgoXCIvXCIpID8gY29udGV4dFBhdGhUb1VzZSA6IHVuZGVmaW5lZDtcblx0XHRpZiAoIW93bmVyLnByZXByb2Nlc3NvckNvbnRleHQgfHwgIW1ldGFNb2RlbCB8fCAhKGNvbnRleHRQYXRoVG9Vc2UgfHwgbWV0YVBhdGguY2hhckF0KDApID09PSBcIi9cIikpIHtcblx0XHRcdExvZy53YXJuaW5nKGBObyBtZXRhbW9kZWwgb3IgbWV0YVBhdGggaXMgbm90IHJlYWNoYWJsZSB3aXRoICR7Y29udGV4dFBhdGh9OiR7bWV0YVBhdGh9YCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBuZXcgTWV0YVBhdGgoY29udmVydFR5cGVzKG1ldGFNb2RlbCksIG1ldGFQYXRoLCBjb250ZXh0UGF0aFRvVXNlISk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLndhcm5pbmcoYE5vIG1ldGFtb2RlbCBvciBtZXRhUGF0aCBpcyBub3QgcmVhY2hhYmxlIHdpdGggJHtjb250ZXh0UGF0aH06JHttZXRhUGF0aH1gKTtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fVxuXG5cdHByb3RlY3RlZCBjcmVhdGVJZCguLi5zdHJpbmdQYXJ0czogKHN0cmluZyB8IHVuZGVmaW5lZCB8IERhdGFNb2RlbE9iamVjdFBhdGg8QXV0aG9yaXplZElkQW5ub3RhdGlvbnNUeXBlPilbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Ly8gSWYgdGhlIGNoaWxkIGluc3RhbmNlIGhhcyBhbiBJRCBwcm9wZXJ0eSB1c2UgaXQgb3RoZXJ3aXNlIHJldHVybiB1bmRlZmluZWRcblx0XHRpZiAodGhpcy5nZXRJZCgpKSB7XG5cdFx0XHRyZXR1cm4gZ2VuZXJhdGUoW3RoaXMuZ2V0SWQoKSwgLi4uc3RyaW5nUGFydHNdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdGdldFRyYW5zbGF0ZWRUZXh0KHRleHRJRDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogdW5rbm93bltdLCBtZXRhUGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCgodGhpcy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpID8/IHRoaXMuX2dldE93bmVyKCk/LnByZXByb2Nlc3NvckNvbnRleHQ/Lm1vZGVsc1tcInNhcC5mZS5pMThuXCJdKSBhcyBSZXNvdXJjZU1vZGVsKT8uZ2V0VGV4dChcblx0XHRcdFx0dGV4dElELFxuXHRcdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0XHRtZXRhUGF0aFxuXHRcdFx0KSB8fCB0ZXh0SURcblx0XHQpO1xuXHR9XG59XG5cbmludGVyZmFjZSBCdWlsZGluZ0Jsb2NrPFQgZXh0ZW5kcyBVSTVFbGVtZW50PiB7XG5cdGdldENvbnRlbnQoKTogVCB8IHVuZGVmaW5lZDtcblx0Z2V0QXJpYUxhYmVsbGVkQnkoKTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1aWxkaW5nQmxvY2s7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFOQSxJQVFNQSxhQUFhLElBQUFDLElBQUEsR0FEbEJDLGNBQWMsQ0FBQywwQ0FBMEMsQ0FBQyxFQUFBQyxLQUFBLEdBS3pEQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFD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
263
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1aWxkaW5nQmxvY2siLCJfQnVpbGRpbmdCbG9ja0Jhc2UiLCJzZXR0aW5ncyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfYXBwbHlpbmdTZXR0aW5ncyIsIm5vdGlmeUJCT2JzZXJ2ZXJzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJhcHBseVNldHRpbmdzIiwibVNldHRpbmdzIiwib1Njb3BlIiwiX2NoZWNrSWZNZXRhZGF0YVJlYWR5IiwiZGVzdHJveSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImJib2JzZXJ2ZXJNYXAiLCJfYmJvYnNlcnZlck1hcCIsImdldCIsImdldElkIiwib2JzZXJ2ZUJCIiwib25EZXN0cm95Iiwib25BdmFpbGFibGUiLCJvYnNlcnZlQnVpbGRpbmdCbG9jayIsImlkIiwicGFyYW1ldGVycyIsImVsZW1lbnQiLCJFbGVtZW50UmVnaXN0cnkiLCJwdXNoIiwic2V0IiwiX2dldE93bmVyIiwiY29udHJvbCIsIm93bmVyIiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJpc0EiLCJnZXRQYXJlbnQiLCJnZXRQYWdlQ29udHJvbGxlciIsInBhZ2VDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2xsZXIiLCJMb2ciLCJlcnJvciIsImdldE1ldGFNb2RlbCIsIm1ldGFNb2RlbCIsInN1cHByZXNzSW52YWxpZGF0ZSIsInZpZXdTdGF0ZSIsImRlcmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yIiwicmVtb3ZlQ29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyIsImZyb21BcHBseVNldHRpbmdzIiwib25NZXRhZGF0YUF2YWlsYWJsZSIsInJlZ2lzdGVyU3RhdGVDb250cmlidXRvciIsImluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIiwiY29udGVudCIsIndhcm5pbmciLCJhdHRhY2hFdmVudE9uY2UiLCJjbG9uZSIsInNJZFN1ZmZpeCIsImFMb2NhbElkcyIsInJ1bkFzT3duZXIiLCJfb3duZXJDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGFyZ2V0UGF0aCIsInRhcmdldFBhdGhUb1VzZSIsImdldE93bmVyQ29udGV4dFBhdGgiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIiwiZ2V0RnVsbENvbnRleHRQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGgiLCJtZXRhcGF0aCIsImNvbnRleHRQYXRoIiwiY29udGV4dFBhdGhUb1VzZSIsInN0YXJ0c1dpdGgiLCJjaGFyQXQiLCJFcnJvciIsIm1ldGFDb250ZXh0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJtZXRhUGF0aENvbnRleHQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJnZXRNZXRhUGF0aE9iamVjdCIsIm1ldGFQYXRoIiwiTWV0YVBhdGgiLCJjb252ZXJ0VHlwZXMiLCJlIiwiY3JlYXRlSWQiLCJfbGVuIiwic3RyaW5nUGFydHMiLCJBcnJheSIsIl9rZXkiLCJnZW5lcmF0ZSIsImdldFRyYW5zbGF0ZWRUZXh0IiwidGV4dElEIiwiZ2V0TW9kZWwiLCJnZXRUZXh0IiwiZ2V0TWFuaWZlc3RXcmFwcGVyIiwiQnVpbGRpbmdCbG9ja0Jhc2UiLCJNYXAiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9ja0Jhc2UgZnJvbSBcInNhcC9mZS9iYXNlL0J1aWxkaW5nQmxvY2tCYXNlXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBwcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzLCByZW1vdmVDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0hvb2tTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCJzYXAvZmUvY29yZS9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIElWaWV3U3RhdGVDb250cmlidXRvciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvdmlld1N0YXRlL0lWaWV3U3RhdGVDb250cmlidXRvclwiO1xuaW1wb3J0IHR5cGUgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgTWV0YVBhdGggZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWV0YVBhdGhcIjtcbmltcG9ydCB0eXBlIHsgQXV0aG9yaXplZElkQW5ub3RhdGlvbnNUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgJE1hbmFnZWRPYmplY3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBFbGVtZW50UmVnaXN0cnkgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRSZWdpc3RyeVwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCIuLi9BcHBDb21wb25lbnRcIjtcblxuZXhwb3J0IHR5cGUgT2JzZXJ2ZUJ1aWxkaW5nQmxvY2sgPSB7XG5cdG9uQXZhaWxhYmxlPzogKGJiOiBVSTVFbGVtZW50KSA9PiB2b2lkO1xuXHRvbkRlc3Ryb3k/OiAoYmI6IFVJNUVsZW1lbnQpID0+IHZvaWQ7XG59O1xuLyoqXG4gKiBEZWZpbmVzIGEgY29udHJvbCB0aGF0IHdpbGwgbm90IGV4aXN0IGluIHRoZSBET00uXG4gKiBJbnN0ZWFkLCBvbmx5IGl0cyBjaGlsZCB3aWxsIGJlIHRoZXJlIGFuZCB0aGlzIGNvbnRyb2wgd2lsbCBmb3J3YXJkIGFsbCBET00gcmVsYXRlZCBpbnN0cnVjdGlvbiB0byBpdC5cbiAqIEBleHBlcmltZW50YWxcbiAqIEBzaW5jZSAxLjEyMS4wXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLkJ1aWxkaW5nQmxvY2tcIilcbmNsYXNzIEJ1aWxkaW5nQmxvY2s8VCBleHRlbmRzIFVJNUVsZW1lbnQgPSBDb250cm9sLCBLIGV4dGVuZHMgb2JqZWN0ID0ge30+IGV4dGVuZHMgQnVpbGRpbmdCbG9ja0Jhc2U8VCwgSz4ge1xuXHQvKipcblx0ICogVGhlIG1ldGFtb2RlbCBuYW1lIG9yIGlkIHRvIGJlIHVzZWQgZm9yIHRoaXMgYnVpbGRpbmcgYmxvY2tcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0bWV0YU1vZGVsPzogc3RyaW5nO1xuXG5cdHByb3RlY3RlZCBfYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXG5cdHByaXZhdGUgc3RhdGljIF9iYm9ic2VydmVyTWFwOiBNYXA8c3RyaW5nLCBPYnNlcnZlQnVpbGRpbmdCbG9ja1tdPiA9IG5ldyBNYXAoKTtcblxuXHRjb25zdHJ1Y3RvcihzZXR0aW5ncz86IHN0cmluZyB8IFByb3BlcnRpZXNPZjxCdWlsZGluZ0Jsb2NrQmFzZTxUPj4sIG90aGVycz86IFByb3BlcnRpZXNPZjxCdWlsZGluZ0Jsb2NrQmFzZTxUPj4pIHtcblx0XHRzdXBlcihzZXR0aW5ncywgb3RoZXJzKTtcblx0XHR0aGlzLm5vdGlmeUJCT2JzZXJ2ZXJzKCk7XG5cdH1cblxuXHRvdmVycmlkZSBhcHBseVNldHRpbmdzKG1TZXR0aW5nczogJE1hbmFnZWRPYmplY3RTZXR0aW5ncywgb1Njb3BlPzogb2JqZWN0KTogdGhpcyB7XG5cdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IHRydWU7XG5cdFx0c3VwZXIuYXBwbHlTZXR0aW5ncyhtU2V0dGluZ3MsIG9TY29wZSk7XG5cdFx0dGhpcy5fYXBwbHlpbmdTZXR0aW5ncyA9IGZhbHNlO1xuXHRcdHRoaXMuX2NoZWNrSWZNZXRhZGF0YVJlYWR5KHRydWUpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRub3RpZnlCQk9ic2VydmVycyhkZXN0cm95ID0gZmFsc2UpOiB2b2lkIHtcblx0XHRjb25zdCBiYm9ic2VydmVyTWFwID0gQnVpbGRpbmdCbG9jay5fYmJvYnNlcnZlck1hcC5nZXQodGhpcy5nZXRJZCgpKTtcblx0XHRpZiAoYmJvYnNlcnZlck1hcCAmJiBiYm9ic2VydmVyTWFwLmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAoY29uc3Qgb2JzZXJ2ZUJCIG9mIGJib2JzZXJ2ZXJNYXApIHtcblx0XHRcdFx0aWYgKGRlc3Ryb3kpIHtcblx0XHRcdFx0XHRpZiAob2JzZXJ2ZUJCLm9uRGVzdHJveSkge1xuXHRcdFx0XHRcdFx0b2JzZXJ2ZUJCLm9uRGVzdHJveSh0aGlzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAob2JzZXJ2ZUJCLm9uQXZhaWxhYmxlKSB7XG5cdFx0XHRcdFx0b2JzZXJ2ZUJCLm9uQXZhaWxhYmxlKHRoaXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEFsbG93cyB0byBvYnNlcnZlIGJ1aWxkaW5nIGJsb2NrIG9uY2UgaXQgaXMgY3JlYXRlZC5cblx0ICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgYnVpbGRpbmcgYmxvY2sgd2hpY2ggd2lsbCBiZSBvYnNlcnZlZFxuXHQgKiBAcGFyYW0gcGFyYW1ldGVycyBUaGUgaWQgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrIHdoaWNoIGlzIGJlaW5nIHJlcXVzdGVkXG5cdCAqIEBwYXJhbSBwYXJhbWV0ZXJzLm9uQXZhaWxhYmxlIENhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiB0aGUgQkIgd2hlbiBpdCBpcyBhdmFpbGFibGVcblx0ICogQHBhcmFtIHBhcmFtZXRlcnMub25EZXN0cm95IENhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiB0aGUgQkIgd2hlbiBpdCBpcyBkZXN0cm95ZWRcblx0ICovXG5cdHN0YXRpYyBvYnNlcnZlQnVpbGRpbmdCbG9jayhpZDogc3RyaW5nLCBwYXJhbWV0ZXJzOiBPYnNlcnZlQnVpbGRpbmdCbG9jayk6IHZvaWQge1xuXHRcdC8vaWYgKHBhcmFtZXRlcnMpXG5cdFx0Y29uc3QgZWxlbWVudCA9IEVsZW1lbnRSZWdpc3RyeS5nZXQoaWQpO1xuXHRcdC8vIGlmIHRoZSBlbGVtZW50IGlzIGFscmVhZHkgcmVnaXN0ZXJlZFxuXHRcdGlmIChlbGVtZW50KSB7XG5cdFx0XHRpZiAocGFyYW1ldGVycy5vbkF2YWlsYWJsZSkge1xuXHRcdFx0XHRwYXJhbWV0ZXJzLm9uQXZhaWxhYmxlKGVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBiYm9ic2VydmVyTWFwID0gQnVpbGRpbmdCbG9jay5fYmJvYnNlcnZlck1hcC5nZXQoaWQpO1xuXHRcdFx0aWYgKGJib2JzZXJ2ZXJNYXApIHtcblx0XHRcdFx0YmJvYnNlcnZlck1hcC5wdXNoKHBhcmFtZXRlcnMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0QnVpbGRpbmdCbG9jay5fYmJvYnNlcnZlck1hcC5zZXQoaWQsIFtwYXJhbWV0ZXJzXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgaW5zdGFuY2Ugb2YgYSBidWlsZGluZyBibG9jayBiYXNlZCBvbmNlIGl0IGlzIHJlZ2lzdGVyZWQuXG5cdCAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIGJ1aWxkaW5nIGJsb2NrIHdoaWNoIGlzIGJlaW5nIHJlcXVzdGVkXG5cdCAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2ZWQgd2l0aCBhbiBpbnN0YW5jZSBvZiB0aGUgYnVpbGRpbmcgYmxvY2sgb25jZSBpdCBpcyByZWdpc3RlcmVkL2luc3RhbnRpZWQuXG5cdCAqIFx0IFRoZSBwcm9taXNlIGlzIHJlc29sdmVkIHdoZW4gdGhlIGJ1aWxkaW5nIGJsb2NrIGlzIGludGFudGllZCBoZW5jZSBpdCByZWNvbW1lbmRlZCB0byBvbmx5IGF3YWl0IG9uIHRoZSBwcm9taXNlXG5cdCAqIFx0IHdoZW4gaXQgaXMga25vd24gdGhhdCB0aGUgYnVpbGRpbmcgYmxvY2sgd2lsbCBiZSBhdmFpbGFibGUuIEluIGNhc2VzIGhlcmUgdGhlIGJ1aWxkaW5nIGJsb2NrIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUsXG5cdCAqIFx0IGZvciBleGFtcGxlIGJlY3Vhc2Ugb2YgbGF6eSBsb2FkaW5nLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIG5vdCB0byBhd2FpdCBvbiB0aGUgcHJvbWlzZSBhbmQgaW5zdGVhZCB1c2UgUHJvbWlzZS50aGVuKCkuXG5cdCAqL1xuXG5cdF9nZXRPd25lcigpOiBUZW1wbGF0ZUNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XG5cdFx0Ly9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRsZXQgY29udHJvbDogQ29udHJvbCB8IHVuZGVmaW5lZCA9IHRoaXM7XG5cdFx0bGV0IG93bmVyID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKGNvbnRyb2wpO1xuXHRcdHdoaWxlICghb3duZXIgJiYgY29udHJvbCAmJiAhY29udHJvbC5pc0E8RkVWaWV3PihcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpKSB7XG5cdFx0XHRjb250cm9sID0gY29udHJvbC5nZXRQYXJlbnQoKSBhcyBDb250cm9sIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGNvbnRyb2wpIHtcblx0XHRcdFx0b3duZXIgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IoY29udHJvbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChvd25lcj8uaXNBPFRlbXBsYXRlQ29tcG9uZW50PihcInNhcC5mZS5jb3JlLlRlbXBsYXRlQ29tcG9uZW50XCIpKSB7XG5cdFx0XHRyZXR1cm4gb3duZXI7XG5cdFx0fVxuXHRcdGlmIChvd25lcj8uaXNBPFRlbXBsYXRlQ29tcG9uZW50PihcInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLklCdWlsZGluZ0Jsb2NrT3duZXJDb21wb25lbnRcIikpIHtcblx0XHRcdHJldHVybiBvd25lcjtcblx0XHR9XG5cdH1cblxuXHQvKlxuXHQgKiBHZXQgdGhlIHBhZ2UgY29udHJvbGxlciBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBUaGUgcGFnZSBjb250cm9sbGVyIGluc3RhbmNlXG5cdCAqL1xuXHRnZXRQYWdlQ29udHJvbGxlcigpOiBQYWdlQ29udHJvbGxlciB7XG5cdFx0Y29uc3QgcGFnZUNvbnRyb2xsZXIgPSB0aGlzLl9nZXRPd25lcigpPy5nZXRSb290Q29udHJvbGxlcj8uKCk7XG5cdFx0aWYgKCFwYWdlQ29udHJvbGxlcikge1xuXHRcdFx0TG9nLmVycm9yKFwiTm8gc2FwLmZlLmNvcmUuUGFnZUNvbnRyb2xsZXIgZm91bmRcIik7XG5cdFx0fVxuXHRcdHJldHVybiBwYWdlQ29udHJvbGxlciE7XG5cdH1cblxuXHRnZXRNZXRhTW9kZWwoKTogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl9nZXRPd25lcigpPy5nZXRNZXRhTW9kZWwodGhpcy5tZXRhTW9kZWwpO1xuXHR9XG5cblx0b3ZlcnJpZGUgZGVzdHJveShzdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuaXNBPElWaWV3U3RhdGVDb250cmlidXRvcjx1bmtub3duPiAmIE1hbmFnZWRPYmplY3Q+KFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMudmlld1N0YXRlLklWaWV3U3RhdGVDb250cmlidXRvclwiKSkge1xuXHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy52aWV3U3RhdGU/LmRlcmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yKHRoaXMpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5nZXRQYWdlQ29udHJvbGxlcigpKSB7XG5cdFx0XHRyZW1vdmVDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzKHRoaXMsIHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSEpO1xuXHRcdH1cblx0XHR0aGlzLm5vdGlmeUJCT2JzZXJ2ZXJzKHRydWUpO1xuXHRcdHN1cGVyLmRlc3Ryb3koc3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0fVxuXG5cdF9jaGVja0lmTWV0YWRhdGFSZWFkeShmcm9tQXBwbHlTZXR0aW5ncyA9IGZhbHNlKTogdm9pZCB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpO1xuXHRcdGlmIChvd25lcikge1xuXHRcdFx0dGhpcy5vbk1ldGFkYXRhQXZhaWxhYmxlKG93bmVyKTtcblx0XHRcdGlmIChcblx0XHRcdFx0dGhpcy5pc0E8SVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPHVua25vd24+ICYgTWFuYWdlZE9iamVjdD4oXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy52aWV3U3RhdGUuSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCIpXG5cdFx0XHQpIHtcblx0XHRcdFx0dGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy52aWV3U3RhdGUucmVnaXN0ZXJTdGF0ZUNvbnRyaWJ1dG9yKHRoaXMpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRpbml0Q29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyh0aGlzLCB0aGlzLmdldFBhZ2VDb250cm9sbGVyKCkhKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCFmcm9tQXBwbHlTZXR0aW5ncyAmJiAhdGhpcy5jb250ZW50KSB7XG5cdFx0XHRcdC8vIEluIGNhc2UgY291bGRuJ3QgY3JlYXRlIHRoZSBjb250ZW50IGR1cmluZyB0aGUgYXBwbHlTZXR0aW5ncywgdHJ5IGFnYWluXG5cdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFwiVGhlIGJ1aWxkaW5nIGJsb2NrIHdhcyBub3QgY3JlYXRlZCB3aXRoaW4gYW4gRXh0ZW5zaW9uQVBJLnJ1bldpdGhGUE1Db250ZXh0IGNhbGwsIGZvciBwZXJmb3JtYW5jZSByZWFzb24gaXQncyByZWNvbW1lbmRlZCB0byBkbyBzby5cIixcblx0XHRcdFx0XHR0aGlzIGFzIHVua25vd24gYXMgc3RyaW5nXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuYXR0YWNoRXZlbnRPbmNlKFwibW9kZWxDb250ZXh0Q2hhbmdlXCIsIGZ1bmN0aW9uICh0aGlzOiBCdWlsZGluZ0Jsb2NrKTogdm9pZCB7XG5cdFx0XHRcdHRoaXMuX2NoZWNrSWZNZXRhZGF0YVJlYWR5KCk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRjbG9uZShzSWRTdWZmaXg6IHN0cmluZywgYUxvY2FsSWRzOiBzdHJpbmdbXSk6IHRoaXMge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKTtcblx0XHRpZiAob3duZXIpIHtcblx0XHRcdHJldHVybiBvd25lci5ydW5Bc093bmVyKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHN1cGVyLmNsb25lKHNJZFN1ZmZpeCwgYUxvY2FsSWRzKTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gc3VwZXIuY2xvbmUoc0lkU3VmZml4LCBhTG9jYWxJZHMpO1xuXHRcdH1cblx0fVxuXG5cdG9uTWV0YWRhdGFBdmFpbGFibGUoX293bmVyQ29tcG9uZW50OiBUZW1wbGF0ZUNvbXBvbmVudCk6IHZvaWQge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlbiBieSB0aGUgY2hpbGQgY2xhc3Ncblx0fVxuXG5cdGdldEFwcENvbXBvbmVudCgpOiBBcHBDb21wb25lbnQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKTtcblx0XHRyZXR1cm4gb3duZXI/LmdldEFwcENvbXBvbmVudCgpO1xuXHR9XG5cblx0Z2V0RGF0YU1vZGVsT2JqZWN0UGF0aDxOPih0YXJnZXRQYXRoPzogc3RyaW5nKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxOPiB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpITtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBvd25lci5nZXRNZXRhTW9kZWwodGhpcy5tZXRhTW9kZWwpO1xuXHRcdGNvbnN0IHRhcmdldFBhdGhUb1VzZSA9IHRhcmdldFBhdGggPz8gdGhpcy5nZXRPd25lckNvbnRleHRQYXRoKCk7XG5cdFx0cmV0dXJuIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0c0ZvclRhcmdldFBhdGgodGFyZ2V0UGF0aFRvVXNlISwgbWV0YU1vZGVsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRleHQgcGF0aCBmcm9tIHRoZSBvd25lciBjb21wb25lbnQuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250ZXh0IHBhdGhcblx0ICovXG5cdGdldE93bmVyQ29udGV4dFBhdGgoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvd25lciA9IHRoaXMuX2dldE93bmVyKCkhO1xuXHRcdHJldHVybiBvd25lci5nZXRGdWxsQ29udGV4dFBhdGgodGhpcy5tZXRhTW9kZWwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgZGF0YSBtb2RlbCBvYmplY3QgZm9yIHRoZSBnaXZlbiBtZXRhcGF0aCBhbmQgb3B0aW9uYWwgY29udGV4dFBhdGguXG5cdCAqIEBwYXJhbSBtZXRhcGF0aFxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICogQHJldHVybnMgVGhlIGRhdGEgbW9kZWwgb2JqZWN0IHBhdGhcblx0ICovXG5cdGdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPEV4cGVjdGVkRGF0YU1vZGVsVHlwZT4oXG5cdFx0bWV0YXBhdGg6IHN0cmluZyxcblx0XHRjb250ZXh0UGF0aD86IHN0cmluZ1xuXHQpOiBEYXRhTW9kZWxPYmplY3RQYXRoPEV4cGVjdGVkRGF0YU1vZGVsVHlwZT4gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKSE7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gb3duZXIuZ2V0TWV0YU1vZGVsKHRoaXMubWV0YU1vZGVsKTtcblx0XHRsZXQgY29udGV4dFBhdGhUb1VzZSA9IGNvbnRleHRQYXRoID8/IHRoaXMuZ2V0T3duZXJDb250ZXh0UGF0aCgpO1xuXHRcdGNvbnRleHRQYXRoVG9Vc2UgPSBjb250ZXh0UGF0aFRvVXNlPy5zdGFydHNXaXRoKFwiL1wiKSA/IGNvbnRleHRQYXRoVG9Vc2UgOiB1bmRlZmluZWQ7XG5cdFx0aWYgKCFtZXRhTW9kZWwgfHwgIShjb250ZXh0UGF0aFRvVXNlIHx8IG1ldGFwYXRoLmNoYXJBdCgwKSA9PT0gXCIvXCIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJObyBtZXRhbW9kZWwgb3IgbWV0YXBhdGggaXMgbm90IHJlYWNoYWJsZSB3aXRoIGNvbnRleHRQYXRoXCIpO1xuXHRcdH1cblx0XHRsZXQgbWV0YUNvbnRleHQgPSBjb250ZXh0UGF0aFRvVXNlID8gbWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGNvbnRleHRQYXRoVG9Vc2UpIDogdW5kZWZpbmVkO1xuXHRcdG1ldGFDb250ZXh0ID0gbWV0YUNvbnRleHQgPyBtZXRhQ29udGV4dCA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCBtZXRhUGF0aENvbnRleHQgPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWV0YXBhdGgsIG1ldGFDb250ZXh0KTtcblx0XHRyZXR1cm4gbWV0YVBhdGhDb250ZXh0XG5cdFx0XHQ/IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RXhwZWN0ZWREYXRhTW9kZWxUeXBlPihtZXRhUGF0aENvbnRleHQsIG1ldGFDb250ZXh0KVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBNZXRhUGF0aCBvYmplY3QgZm9yIHRoZSBnaXZlbiBtZXRhUGF0aCBhbmQgb3B0aW9uYWwgY29udGV4dFBhdGguXG5cdCAqIEBwYXJhbSBtZXRhUGF0aFxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGhcblx0ICogQHJldHVybnMgQSBNZXRhUGF0aCBwb2ludGluZyB0byB0aGUgdGFyZ2V0IHttZXRhUGF0aCwgY29udGV4dFBhdGh9XG5cdCAqL1xuXHRnZXRNZXRhUGF0aE9iamVjdDxFeHBlY3RlZERhdGFNb2RlbFR5cGU+KG1ldGFQYXRoOiBzdHJpbmcsIGNvbnRleHRQYXRoPzogc3RyaW5nKTogTWV0YVBhdGg8RXhwZWN0ZWREYXRhTW9kZWxUeXBlPiB8IG51bGwge1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKSE7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gb3duZXIuZ2V0TWV0YU1vZGVsKHRoaXMubWV0YU1vZGVsKTtcblx0XHRsZXQgY29udGV4dFBhdGhUb1VzZSA9IGNvbnRleHRQYXRoID8/IHRoaXMuZ2V0T3duZXJDb250ZXh0UGF0aCgpO1xuXHRcdGNvbnRleHRQYXRoVG9Vc2UgPSBjb250ZXh0UGF0aFRvVXNlPy5zdGFydHNXaXRoKFwiL1wiKSA/IGNvbnRleHRQYXRoVG9Vc2UgOiB1bmRlZmluZWQ7XG5cdFx0aWYgKCFtZXRhTW9kZWwgfHwgIShjb250ZXh0UGF0aFRvVXNlIHx8IG1ldGFQYXRoLmNoYXJBdCgwKSA9PT0gXCIvXCIpKSB7XG5cdFx0XHRMb2cud2FybmluZyhgTm8gbWV0YW1vZGVsIG9yIG1ldGFQYXRoIGlzIG5vdCByZWFjaGFibGUgd2l0aCAke2NvbnRleHRQYXRofToke21ldGFQYXRofWApO1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gbmV3IE1ldGFQYXRoKGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpLCBtZXRhUGF0aCwgY29udGV4dFBhdGhUb1VzZSEpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy53YXJuaW5nKGBObyBtZXRhbW9kZWwgb3IgbWV0YVBhdGggaXMgbm90IHJlYWNoYWJsZSB3aXRoICR7Y29udGV4dFBhdGh9OiR7bWV0YVBhdGh9YCk7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRwcm90ZWN0ZWQgY3JlYXRlSWQoLi4uc3RyaW5nUGFydHM6IChzdHJpbmcgfCB1bmRlZmluZWQgfCBEYXRhTW9kZWxPYmplY3RQYXRoPEF1dGhvcml6ZWRJZEFubm90YXRpb25zVHlwZT4pW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdC8vIElmIHRoZSBjaGlsZCBpbnN0YW5jZSBoYXMgYW4gSUQgcHJvcGVydHkgdXNlIGl0IG90aGVyd2lzZSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0aWYgKHRoaXMuZ2V0SWQoKSkge1xuXHRcdFx0cmV0dXJuIGdlbmVyYXRlKFt0aGlzLmdldElkKCksIC4uLnN0cmluZ1BhcnRzXSk7XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRnZXRUcmFuc2xhdGVkVGV4dCh0ZXh0SUQ6IHN0cmluZywgcGFyYW1ldGVycz86IHVua25vd25bXSwgbWV0YVBhdGg/OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiAoXG5cdFx0XHQoKHRoaXMuZ2V0TW9kZWwoXCJzYXAuZmUuaTE4blwiKSA/PyB0aGlzLl9nZXRPd25lcigpPy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpKSBhcyBSZXNvdXJjZU1vZGVsKT8uZ2V0VGV4dChcblx0XHRcdFx0dGV4dElELFxuXHRcdFx0XHRwYXJhbWV0ZXJzLFxuXHRcdFx0XHRtZXRhUGF0aFxuXHRcdFx0KSB8fCB0ZXh0SURcblx0XHQpO1xuXHR9XG5cblx0Z2V0TWFuaWZlc3RXcmFwcGVyKCk6IE1hbmlmZXN0V3JhcHBlciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldE93bmVyKCk/LmdldE1hbmlmZXN0V3JhcHBlcigpO1xuXHR9XG59XG5cbmludGVyZmFjZSBCdWlsZGluZ0Jsb2NrPFQgZXh0ZW5kcyBVSTVFbGVtZW50PiB7XG5cdGdldENvbnRlbnQoKTogVCB8IHVuZGVmaW5lZDtcblx0Z2V0QXJpYUxhYmVsbGVkQnkoKTogc3RyaW5nW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1aWxkaW5nQmxvY2s7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBOEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTkEsSUFRTUEsYUFBYSxJQUFBQyxJQUFBLEdBRGxCQyxjQUFjLENBQUMsMENBQTBDLENBQUMsRUFBQUMsS0FBQSxHQUt6REMsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSixJQUFBLENBQUFLLE1BQUEsSUFBQUMsT0FBQSxJQUFBQyxjQUFBLDBCQUFBQyxrQkFBQTtJQU83QixTQUFBVCxjQUFZVSxRQUFzRCxFQUFFQyxNQUEyQyxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUNoSEEsS0FBQSxHQUFBSCxrQkFBQSxDQUFBSSxJQUFBLE9BQU1ILFFBQVEsRUFBRUMsTUFBTSxDQUFDO01BWHhCO0FBQ0Q7QUFDQTtNQUZDRywwQkFBQSxDQUFBRixLQUFBLGVBQUFHLFdBQUEsRUFBQUgsS0FBQTtNQUFBQSxLQUFBLENBTVVJLGlCQUFpQixHQUFHLEtBQUs7TUFNbENKLEtBQUEsQ0FBS0ssaUJBQWlC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
@@ -1,12 +1,14 @@
1
1
  import Log from "sap/base/Log";
2
2
  import BuildingBlockBase from "sap/fe/base/BuildingBlockBase";
3
- import type { EnhanceWithUI5, PropertiesOf } from "sap/fe/base/ClassSupport";
3
+ import type { PropertiesOf } from "sap/fe/base/ClassSupport";
4
4
  import { defineUI5Class, property } from "sap/fe/base/ClassSupport";
5
+ import { initControllerExtensionHookHandlers, removeControllerExtensionHookHandlers } from "sap/fe/base/HookSupport";
5
6
  import type { FEView } from "sap/fe/core/BaseController";
6
7
  import type PageController from "sap/fe/core/PageController";
7
8
  import type ResourceModel from "sap/fe/core/ResourceModel";
8
9
  import type TemplateComponent from "sap/fe/core/TemplateComponent";
9
10
  import type IViewStateContributor from "sap/fe/core/controllerextensions/viewState/IViewStateContributor";
11
+ import type ManifestWrapper from "sap/fe/core/converters/ManifestWrapper";
10
12
  import * as MetaModelConverter from "sap/fe/core/converters/MetaModelConverter";
11
13
  import { convertTypes, getInvolvedDataModelObjectsForTargetPath } from "sap/fe/core/converters/MetaModelConverter";
12
14
  import MetaPath from "sap/fe/core/helpers/MetaPath";
@@ -19,6 +21,7 @@ import Component from "sap/ui/core/Component";
19
21
  import type Control from "sap/ui/core/Control";
20
22
  import type UI5Element from "sap/ui/core/Element";
21
23
  import ElementRegistry from "sap/ui/core/ElementRegistry";
24
+ import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
22
25
  import type AppComponent from "../AppComponent";
23
26
 
24
27
  export type ObserveBuildingBlock = {
@@ -33,7 +36,7 @@ export type ObserveBuildingBlock = {
33
36
  * @public
34
37
  */
35
38
  @defineUI5Class("sap.fe.core.buildingBlocks.BuildingBlock")
36
- class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T> {
39
+ class BuildingBlock<T extends UI5Element = Control, K extends object = {}> extends BuildingBlockBase<T, K> {
37
40
  /**
38
41
  * The metamodel name or id to be used for this building block
39
42
  */
@@ -42,8 +45,6 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
42
45
 
43
46
  protected _applyingSettings = false;
44
47
 
45
- private _modelContextChangeEventHandler?: Function;
46
-
47
48
  private static _bbobserverMap: Map<string, ObserveBuildingBlock[]> = new Map();
48
49
 
49
50
  constructor(settings?: string | PropertiesOf<BuildingBlockBase<T>>, others?: PropertiesOf<BuildingBlockBase<T>>) {
@@ -56,6 +57,7 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
56
57
  super.applySettings(mSettings, oScope);
57
58
  this._applyingSettings = false;
58
59
  this._checkIfMetadataReady(true);
60
+
59
61
  return this;
60
62
  }
61
63
 
@@ -121,16 +123,34 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
121
123
  if (owner?.isA<TemplateComponent>("sap.fe.core.TemplateComponent")) {
122
124
  return owner;
123
125
  }
126
+ if (owner?.isA<TemplateComponent>("sap.fe.core.buildingBlocks.IBuildingBlockOwnerComponent")) {
127
+ return owner;
128
+ }
124
129
  }
125
130
 
126
- getPageController(): PageController | undefined {
127
- return this._getOwner()?.getRootController();
131
+ /*
132
+ * Get the page controller instance
133
+ * @returns The page controller instance
134
+ */
135
+ getPageController(): PageController {
136
+ const pageController = this._getOwner()?.getRootController?.();
137
+ if (!pageController) {
138
+ Log.error("No sap.fe.core.PageController found");
139
+ }
140
+ return pageController!;
141
+ }
142
+
143
+ getMetaModel(): ODataMetaModel | undefined {
144
+ return this._getOwner()?.getMetaModel(this.metaModel);
128
145
  }
129
146
 
130
147
  override destroy(suppressInvalidate?: boolean): void {
131
148
  if (this.isA<IViewStateContributor<unknown> & ManagedObject>("sap.fe.core.controllerextensions.viewState.IViewStateContributor")) {
132
149
  this.getPageController()?.viewState?.deregisterStateContributor(this);
133
150
  }
151
+ if (this.getPageController()) {
152
+ removeControllerExtensionHookHandlers(this, this.getPageController()!);
153
+ }
134
154
  this.notifyBBObservers(true);
135
155
  super.destroy(suppressInvalidate);
136
156
  }
@@ -144,8 +164,8 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
144
164
  ) {
145
165
  this.getPageController()?.viewState.registerStateContributor(this);
146
166
  }
147
- if (this._modelContextChangeEventHandler) {
148
- this.detachEvent("modelContextChange", this._modelContextChangeEventHandler);
167
+ if (this.getPageController()) {
168
+ initControllerExtensionHookHandlers(this, this.getPageController()!);
149
169
  }
150
170
  } else {
151
171
  if (!fromApplySettings && !this.content) {
@@ -155,12 +175,21 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
155
175
  this as unknown as string
156
176
  );
157
177
  }
158
- if (!this._modelContextChangeEventHandler) {
159
- this._modelContextChangeEventHandler = function (): void {
160
- this._checkIfMetadataReady();
161
- };
162
- this.attachEvent("modelContextChange", this._modelContextChangeEventHandler);
163
- }
178
+
179
+ this.attachEventOnce("modelContextChange", function (this: BuildingBlock): void {
180
+ this._checkIfMetadataReady();
181
+ });
182
+ }
183
+ }
184
+
185
+ clone(sIdSuffix: string, aLocalIds: string[]): this {
186
+ const owner = this._getOwner();
187
+ if (owner) {
188
+ return owner.runAsOwner(() => {
189
+ return super.clone(sIdSuffix, aLocalIds);
190
+ });
191
+ } else {
192
+ return super.clone(sIdSuffix, aLocalIds);
164
193
  }
165
194
  }
166
195
 
@@ -170,18 +199,14 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
170
199
 
171
200
  getAppComponent(): AppComponent | undefined {
172
201
  const owner = this._getOwner();
173
- if (owner?.isA<EnhanceWithUI5<TemplateComponent>>("sap.fe.core.TemplateComponent")) {
174
- return owner.getPreprocessorContext()?.appComponent;
175
- } else {
176
- return undefined;
177
- }
202
+ return owner?.getAppComponent();
178
203
  }
179
204
 
180
- getDataModelObjectPath<N>(targetPath: string): DataModelObjectPath<N> | undefined {
205
+ getDataModelObjectPath<N>(targetPath?: string): DataModelObjectPath<N> | undefined {
181
206
  const owner = this._getOwner()!;
182
207
  const metaModel = owner.getMetaModel(this.metaModel);
183
- const targetPathToUse = targetPath ?? owner.getFullContextPath(this.metaModel);
184
- return getInvolvedDataModelObjectsForTargetPath(targetPathToUse, metaModel);
208
+ const targetPathToUse = targetPath ?? this.getOwnerContextPath();
209
+ return getInvolvedDataModelObjectsForTargetPath(targetPathToUse!, metaModel);
185
210
  }
186
211
 
187
212
  /**
@@ -190,7 +215,7 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
190
215
  */
191
216
  getOwnerContextPath(): string | undefined {
192
217
  const owner = this._getOwner()!;
193
- return owner.preprocessorContext?.fullContextPath;
218
+ return owner.getFullContextPath(this.metaModel);
194
219
  }
195
220
 
196
221
  /**
@@ -205,7 +230,7 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
205
230
  ): DataModelObjectPath<ExpectedDataModelType> | undefined {
206
231
  const owner = this._getOwner()!;
207
232
  const metaModel = owner.getMetaModel(this.metaModel);
208
- let contextPathToUse = contextPath ?? owner.getFullContextPath(this.metaModel);
233
+ let contextPathToUse = contextPath ?? this.getOwnerContextPath();
209
234
  contextPathToUse = contextPathToUse?.startsWith("/") ? contextPathToUse : undefined;
210
235
  if (!metaModel || !(contextPathToUse || metapath.charAt(0) === "/")) {
211
236
  throw new Error("No metamodel or metapath is not reachable with contextPath");
@@ -227,9 +252,9 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
227
252
  getMetaPathObject<ExpectedDataModelType>(metaPath: string, contextPath?: string): MetaPath<ExpectedDataModelType> | null {
228
253
  const owner = this._getOwner()!;
229
254
  const metaModel = owner.getMetaModel(this.metaModel);
230
- let contextPathToUse = contextPath ?? owner.getFullContextPath(this.metaModel);
255
+ let contextPathToUse = contextPath ?? this.getOwnerContextPath();
231
256
  contextPathToUse = contextPathToUse?.startsWith("/") ? contextPathToUse : undefined;
232
- if (!owner.preprocessorContext || !metaModel || !(contextPathToUse || metaPath.charAt(0) === "/")) {
257
+ if (!metaModel || !(contextPathToUse || metaPath.charAt(0) === "/")) {
233
258
  Log.warning(`No metamodel or metaPath is not reachable with ${contextPath}:${metaPath}`);
234
259
  return null;
235
260
  }
@@ -251,13 +276,17 @@ class BuildingBlock<T extends UI5Element = Control> extends BuildingBlockBase<T>
251
276
 
252
277
  getTranslatedText(textID: string, parameters?: unknown[], metaPath?: string): string {
253
278
  return (
254
- ((this.getModel("sap.fe.i18n") ?? this._getOwner()?.preprocessorContext?.models["sap.fe.i18n"]) as ResourceModel)?.getText(
279
+ ((this.getModel("sap.fe.i18n") ?? this._getOwner()?.getModel("sap.fe.i18n")) as ResourceModel)?.getText(
255
280
  textID,
256
281
  parameters,
257
282
  metaPath
258
283
  ) || textID
259
284
  );
260
285
  }
286
+
287
+ getManifestWrapper(): ManifestWrapper | undefined {
288
+ return this._getOwner()?.getManifestWrapper();
289
+ }
261
290
  }
262
291
 
263
292
  interface BuildingBlock<T extends UI5Element> {
@@ -0,0 +1,9 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define([], function () {
6
+ "use strict";
7
+
8
+ }, false);
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJQnVpbGRpbmdCbG9ja093bmVyQ29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBJQnVpbGRpbmdCbG9ja093bmVyQ29tcG9uZW50IHtcblx0X19pbXBsZW1lbnRzX19zYXBfZmVfY29yZV9idWlsZGluZ0Jsb2Nrc19JQnVpbGRpbmdCbG9ja093bmVyQ29tcG9uZW50OiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBTdGFuZGFyZCBVSTUgbWV0aG9kIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IG9iamVjdCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZVxuXHQgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSB0byBjaGVjayBmb3Jcblx0ICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgY3VycmVudCBvYmplY3QgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGdpdmVuIHR5cGVcblx0ICovXG5cdGlzQSh0eXBlOiBzdHJpbmcpOiBib29sZWFuO1xuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBjdXJyZW50IHBhZ2Ugb3IgdW5kZWZpbmVkIGlmIG5vbmUgZXhpc3RzLlxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbGxlciBmb3IgdGhlIGN1cnJlbnQgcGFnZSBvciB1bmRlZmluZWQgaWYgbm9uZSBleGlzdHMuXG5cdCAqL1xuXHRnZXRSb290Q29udHJvbGxlcigpOiBQYWdlQ29udHJvbGxlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBBcHBDb21wb25lbnQgZm9yIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uXG5cdCAqIEByZXR1cm5zIFRoZSBBcHBDb21wb25lbnQgZm9yIHRoZSBjdXJyZW50IGFwcGxpY2F0aW9uXG5cdCAqL1xuXHRnZXRBcHBDb21wb25lbnQoKTogQXBwQ29tcG9uZW50O1xuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGZ1bGwgY29udGV4dCBwYXRoIGZvciB0aGUgZ2l2ZW4gbWV0YU1vZGVsTmFtZS5cblx0ICogVGhpcyBzaG91bGQgcmVwcmVzZW50IHRoZSBmdWxsIHBhdGggdG8gdGhlIGN1cnJlbnQgb2JqZWN0IGRpc3BsYXllZCBpbiB0aGUgVUksIG9yIHVuZGVmaW5lZCBpZiBub25lIGV4aXN0cy5cblx0ICogQHBhcmFtIG1ldGFNb2RlbE5hbWUgVGhlIG5hbWUgb2YgdGhlIG1ldGFNb2RlbCB0byByZXRyaWV2ZSB0aGUgY29udGV4dCBwYXRoIGZvclxuXHQgKiBAcmV0dXJucyBUaGUgZnVsbCBjb250ZXh0IHBhdGggZm9yIHRoZSBnaXZlbiBtZXRhTW9kZWxOYW1lXG5cdCAqL1xuXHRnZXRGdWxsQ29udGV4dFBhdGgobWV0YU1vZGVsTmFtZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBtb2RlbCBmb3IgdGhlIGdpdmVuIG1vZGVsTmFtZSBvciB0aGUgZGVmYXVsdCBtb2RlbCBpZiBub25lIGlzIHByb3ZpZGVkLlxuXHQgKiBAcGFyYW0gbW9kZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2RlbCB0byByZXRyaWV2ZVxuXHQgKiBAcmV0dXJucyBUaGUgbW9kZWwgZm9yIHRoZSBnaXZlbiBtb2RlbE5hbWUgb3IgdW5kZWZpbmVkIGlmIHRoZXJlIGlzIG5vbmUgb2YgdGhhdCBuYW1lXG5cdCAqL1xuXHRnZXRNb2RlbChtb2RlbE5hbWU/OiBzdHJpbmcpOiBNb2RlbCB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBPRGF0YU1ldGFNb2RlbCBmb3IgdGhlIGdpdmVuIG1ldGFNb2RlbE5hbWVcblx0ICogQHBhcmFtIG1ldGFNb2RlbE5hbWVcblx0ICovXG5cdGdldE1ldGFNb2RlbChtZXRhTW9kZWxOYW1lPzogc3RyaW5nKTogT0RhdGFNZXRhTW9kZWwgfCB1bmRlZmluZWQ7XG59XG4iXSwibWFwcGluZ3MiOiIiLCJpZ25vcmVMaXN0IjpbXX0=