@sapui5/sap.fe.core 1.99.0 → 1.101.1

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 (289) hide show
  1. package/package.json +6 -4
  2. package/src/sap/fe/core/.library +2 -3
  3. package/src/sap/fe/core/AnnotationHelper.js +43 -92
  4. package/src/sap/fe/core/AnnotationHelper.ts +43 -107
  5. package/src/sap/fe/core/AppComponent.js +381 -399
  6. package/src/sap/fe/core/AppComponent.ts +397 -0
  7. package/src/sap/fe/core/AppStateHandler.js +131 -162
  8. package/src/sap/fe/core/AppStateHandler.ts +2 -2
  9. package/src/sap/fe/core/BaseController.js +82 -58
  10. package/src/sap/fe/core/BaseController.ts +67 -0
  11. package/src/sap/fe/core/CommonUtils.js +179 -31
  12. package/src/sap/fe/core/CommonUtils.ts +295 -125
  13. package/src/sap/fe/core/ExtensionAPI.js +279 -274
  14. package/src/sap/fe/core/ExtensionAPI.ts +242 -0
  15. package/src/sap/fe/core/PageController.js +158 -29
  16. package/src/sap/fe/core/PageController.ts +65 -37
  17. package/src/sap/fe/core/RouterProxy.js +700 -750
  18. package/src/sap/fe/core/RouterProxy.ts +47 -31
  19. package/src/sap/fe/core/Synchronization.js +21 -31
  20. package/src/sap/fe/core/TemplateComponent.js +193 -118
  21. package/src/sap/fe/core/TemplateComponent.ts +104 -109
  22. package/src/sap/fe/core/TemplateModel.js +24 -44
  23. package/src/sap/fe/core/TemplateModel.ts +3 -3
  24. package/src/sap/fe/core/TransactionHelper.js +1368 -1369
  25. package/src/sap/fe/core/TransactionHelper.ts +201 -171
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +406 -0
  27. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +362 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +146 -0
  29. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +129 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.js +264 -0
  31. package/src/sap/fe/core/actions/collaboration/Manage.ts +246 -0
  32. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +100 -0
  33. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  34. package/src/sap/fe/core/actions/draft.js +324 -220
  35. package/src/sap/fe/core/actions/draft.ts +209 -133
  36. package/src/sap/fe/core/actions/messageHandling.js +79 -48
  37. package/src/sap/fe/core/actions/messageHandling.ts +113 -83
  38. package/src/sap/fe/core/actions/operations.js +37 -18
  39. package/src/sap/fe/core/actions/operations.ts +51 -20
  40. package/src/sap/fe/core/actions/sticky.js +17 -4
  41. package/src/sap/fe/core/actions/sticky.ts +21 -4
  42. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +60 -0
  43. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +37 -0
  44. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +165 -0
  45. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +178 -0
  46. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +707 -0
  47. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +628 -0
  48. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +436 -0
  49. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +431 -0
  50. package/src/sap/fe/core/controllerextensions/EditFlow.js +1854 -1669
  51. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1792 -0
  52. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  53. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +60 -0
  54. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +716 -779
  55. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +785 -0
  56. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  57. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +810 -0
  58. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1056 -1005
  59. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1001 -0
  60. package/src/sap/fe/core/controllerextensions/KPIManagement.js +498 -532
  61. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +13 -12
  62. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  63. package/src/sap/fe/core/controllerextensions/MassEdit.ts +155 -0
  64. package/src/sap/fe/core/controllerextensions/MessageHandler.js +221 -244
  65. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +215 -0
  66. package/src/sap/fe/core/controllerextensions/PageReady.js +312 -345
  67. package/src/sap/fe/core/controllerextensions/PageReady.ts +57 -53
  68. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  69. package/src/sap/fe/core/controllerextensions/Paginator.ts +169 -0
  70. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  71. package/src/sap/fe/core/controllerextensions/Placeholder.ts +149 -0
  72. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  73. package/src/sap/fe/core/controllerextensions/Routing.ts +131 -0
  74. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  75. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  76. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  77. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  78. package/src/sap/fe/core/controllerextensions/SideEffects.js +603 -644
  79. package/src/sap/fe/core/controllerextensions/SideEffects.ts +68 -68
  80. package/src/sap/fe/core/controllerextensions/ViewState.js +774 -806
  81. package/src/sap/fe/core/controllerextensions/ViewState.ts +796 -0
  82. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  83. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  84. package/src/sap/fe/core/controls/Any.js +28 -0
  85. package/src/sap/fe/core/controls/Any.ts +30 -0
  86. package/src/sap/fe/core/controls/CommandExecution.js +92 -68
  87. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  88. package/src/sap/fe/core/controls/ConditionalWrapper.js +165 -79
  89. package/src/sap/fe/core/controls/ConditionalWrapper.ts +74 -0
  90. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +366 -0
  91. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +278 -0
  92. package/src/sap/fe/core/controls/CustomQuickViewPage.js +167 -125
  93. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +116 -0
  94. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +44 -5
  95. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +163 -122
  96. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +155 -0
  97. package/src/sap/fe/core/controls/FieldWrapper.js +212 -141
  98. package/src/sap/fe/core/controls/FieldWrapper.ts +104 -0
  99. package/src/sap/fe/core/controls/FileWrapper.js +313 -0
  100. package/src/sap/fe/core/controls/FileWrapper.ts +169 -0
  101. package/src/sap/fe/core/controls/FilterBar.js +197 -159
  102. package/src/sap/fe/core/controls/FilterBar.ts +148 -0
  103. package/src/sap/fe/core/controls/FormElementWrapper.js +100 -39
  104. package/src/sap/fe/core/controls/FormElementWrapper.ts +37 -0
  105. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  106. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  107. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +147 -115
  108. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +102 -0
  109. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +300 -265
  110. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +252 -0
  111. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +185 -140
  112. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  113. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  114. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  115. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +37 -42
  116. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +75 -74
  117. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +71 -0
  118. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  119. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  120. package/src/sap/fe/core/converters/ManifestSettings.js +13 -1
  121. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -2
  122. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  123. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  124. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  125. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  126. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  127. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  128. package/src/sap/fe/core/converters/annotations/DataField.js +26 -13
  129. package/src/sap/fe/core/converters/annotations/DataField.ts +40 -17
  130. package/src/sap/fe/core/converters/controls/Common/Action.js +10 -10
  131. package/src/sap/fe/core/converters/controls/Common/Action.ts +20 -19
  132. package/src/sap/fe/core/converters/controls/Common/Chart.js +8 -8
  133. package/src/sap/fe/core/converters/controls/Common/Chart.ts +12 -11
  134. package/src/sap/fe/core/converters/controls/Common/Form.js +6 -6
  135. package/src/sap/fe/core/converters/controls/Common/Form.ts +7 -3
  136. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  137. package/src/sap/fe/core/converters/controls/Common/KPI.ts +2 -2
  138. package/src/sap/fe/core/converters/controls/Common/Table.js +326 -86
  139. package/src/sap/fe/core/converters/controls/Common/Table.ts +384 -167
  140. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +120 -55
  141. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +158 -98
  142. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +206 -223
  143. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +263 -287
  144. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +6 -6
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +20 -18
  146. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -2
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -1
  148. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  149. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  150. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  151. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  152. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  153. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  154. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  155. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +1 -1
  156. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +0 -4
  157. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +51 -27
  158. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +69 -43
  159. package/src/sap/fe/core/converters/templates/ListReportConverter.js +42 -25
  160. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +91 -65
  161. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +11 -9
  162. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +8 -8
  163. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  164. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  165. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  166. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  167. package/src/sap/fe/core/formatters/KPIFormatter.js +3 -12
  168. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -2
  169. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  170. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  171. package/src/sap/fe/core/formatters/ValueFormatter.js +4 -4
  172. package/src/sap/fe/core/formatters/ValueFormatter.ts +4 -7
  173. package/src/sap/fe/core/fpm/Component.js +80 -55
  174. package/src/sap/fe/core/fpm/Component.ts +43 -0
  175. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  176. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  177. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  178. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  179. package/src/sap/fe/core/helpers/ClassSupport.js +307 -166
  180. package/src/sap/fe/core/helpers/ClassSupport.ts +348 -155
  181. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  182. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  183. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  184. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  185. package/src/sap/fe/core/helpers/MassEditHelper.js +735 -684
  186. package/src/sap/fe/core/helpers/MassEditHelper.ts +803 -0
  187. package/src/sap/fe/core/helpers/ModelHelper.js +53 -1
  188. package/src/sap/fe/core/helpers/ModelHelper.ts +46 -0
  189. package/src/sap/fe/core/helpers/PasteHelper.js +4 -4
  190. package/src/sap/fe/core/helpers/PasteHelper.ts +4 -3
  191. package/src/sap/fe/core/helpers/SemanticDateOperators.js +7 -3
  192. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +7 -1
  193. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +1 -1
  194. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +1 -1
  195. package/src/sap/fe/core/helpers/StableIdHelper.js +1 -7
  196. package/src/sap/fe/core/helpers/StableIdHelper.ts +0 -4
  197. package/src/sap/fe/core/jsx-runtime/jsx.js +35 -5
  198. package/src/sap/fe/core/jsx-runtime/jsx.ts +22 -8
  199. package/src/sap/fe/core/library.js +425 -451
  200. package/src/sap/fe/core/library.support.js +22 -33
  201. package/src/sap/fe/core/library.support.ts +23 -0
  202. package/src/sap/fe/core/library.ts +420 -0
  203. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  204. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -4
  205. package/src/sap/fe/core/messagebundle.properties +45 -13
  206. package/src/sap/fe/core/messagebundle_ar.properties +29 -7
  207. package/src/sap/fe/core/messagebundle_bg.properties +29 -7
  208. package/src/sap/fe/core/messagebundle_ca.properties +29 -7
  209. package/src/sap/fe/core/messagebundle_cs.properties +29 -7
  210. package/src/sap/fe/core/messagebundle_cy.properties +29 -7
  211. package/src/sap/fe/core/messagebundle_da.properties +29 -7
  212. package/src/sap/fe/core/messagebundle_de.properties +29 -7
  213. package/src/sap/fe/core/messagebundle_el.properties +29 -7
  214. package/src/sap/fe/core/messagebundle_en.properties +29 -7
  215. package/src/sap/fe/core/messagebundle_en_GB.properties +29 -7
  216. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +29 -7
  217. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +29 -7
  218. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +29 -7
  219. package/src/sap/fe/core/messagebundle_es.properties +29 -7
  220. package/src/sap/fe/core/messagebundle_es_MX.properties +29 -7
  221. package/src/sap/fe/core/messagebundle_et.properties +29 -7
  222. package/src/sap/fe/core/messagebundle_fi.properties +30 -8
  223. package/src/sap/fe/core/messagebundle_fr.properties +31 -9
  224. package/src/sap/fe/core/messagebundle_fr_CA.properties +31 -9
  225. package/src/sap/fe/core/messagebundle_hi.properties +29 -7
  226. package/src/sap/fe/core/messagebundle_hr.properties +29 -7
  227. package/src/sap/fe/core/messagebundle_hu.properties +29 -7
  228. package/src/sap/fe/core/messagebundle_id.properties +29 -7
  229. package/src/sap/fe/core/messagebundle_it.properties +29 -7
  230. package/src/sap/fe/core/messagebundle_iw.properties +29 -7
  231. package/src/sap/fe/core/messagebundle_ja.properties +28 -6
  232. package/src/sap/fe/core/messagebundle_kk.properties +29 -7
  233. package/src/sap/fe/core/messagebundle_ko.properties +29 -7
  234. package/src/sap/fe/core/messagebundle_lt.properties +29 -7
  235. package/src/sap/fe/core/messagebundle_lv.properties +30 -8
  236. package/src/sap/fe/core/messagebundle_ms.properties +29 -7
  237. package/src/sap/fe/core/messagebundle_nl.properties +29 -7
  238. package/src/sap/fe/core/messagebundle_no.properties +29 -7
  239. package/src/sap/fe/core/messagebundle_pl.properties +29 -7
  240. package/src/sap/fe/core/messagebundle_pt.properties +30 -8
  241. package/src/sap/fe/core/messagebundle_pt_PT.properties +29 -7
  242. package/src/sap/fe/core/messagebundle_ro.properties +29 -7
  243. package/src/sap/fe/core/messagebundle_ru.properties +29 -7
  244. package/src/sap/fe/core/messagebundle_sh.properties +29 -7
  245. package/src/sap/fe/core/messagebundle_sk.properties +29 -7
  246. package/src/sap/fe/core/messagebundle_sl.properties +29 -7
  247. package/src/sap/fe/core/messagebundle_sv.properties +30 -8
  248. package/src/sap/fe/core/messagebundle_th.properties +28 -6
  249. package/src/sap/fe/core/messagebundle_tr.properties +32 -10
  250. package/src/sap/fe/core/messagebundle_uk.properties +29 -7
  251. package/src/sap/fe/core/messagebundle_vi.properties +29 -7
  252. package/src/sap/fe/core/messagebundle_zh_CN.properties +29 -7
  253. package/src/sap/fe/core/messagebundle_zh_TW.properties +29 -7
  254. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +47 -73
  255. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +1 -1
  256. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +158 -196
  257. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +5 -6
  258. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +70 -96
  259. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
  260. package/src/sap/fe/core/services/NavigationServiceFactory.js +287 -342
  261. package/src/sap/fe/core/services/NavigationServiceFactory.ts +11 -14
  262. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +70 -105
  263. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +6 -3
  264. package/src/sap/fe/core/services/RoutingServiceFactory.js +796 -820
  265. package/src/sap/fe/core/services/RoutingServiceFactory.ts +62 -53
  266. package/src/sap/fe/core/services/ShellServicesFactory.js +694 -741
  267. package/src/sap/fe/core/services/ShellServicesFactory.ts +33 -33
  268. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +570 -595
  269. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +23 -4
  270. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +357 -389
  271. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +25 -29
  272. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +43 -5
  273. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +7 -4
  274. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  275. package/src/sap/fe/core/support/CommonHelper.ts +1 -4
  276. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  277. package/src/sap/fe/core/templating/DataModelPathHelper.js +91 -90
  278. package/src/sap/fe/core/templating/DataModelPathHelper.ts +126 -123
  279. package/src/sap/fe/core/templating/DisplayModeFormatter.js +23 -3
  280. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +26 -5
  281. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  282. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  283. package/src/sap/fe/core/templating/PropertyHelper.js +16 -2
  284. package/src/sap/fe/core/templating/PropertyHelper.ts +31 -24
  285. package/src/sap/fe/core/templating/UIFormatters.js +150 -44
  286. package/src/sap/fe/core/templating/UIFormatters.ts +165 -67
  287. package/src/sap/fe/core/type/Email.js +26 -8
  288. package/src/sap/fe/core/type/Email.ts +8 -7
  289. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +0 -75
@@ -1100,16 +1100,18 @@ export type ResolvedTarget = {
1100
1100
  };
1101
1101
 
1102
1102
  export function getInvolvedDataModelObjects(oMetaModelContext: Context, oEntitySetMetaModelContext?: Context): DataModelObjectPath {
1103
+ const oConverterOutput = convertTypes(oMetaModelContext.getModel() as ODataMetaModel);
1103
1104
  const metaModelContext = convertMetaModelContext(oMetaModelContext, true);
1104
1105
  let targetEntitySetLocation;
1105
1106
  if (oEntitySetMetaModelContext && oEntitySetMetaModelContext.getPath() !== "/") {
1106
1107
  targetEntitySetLocation = getInvolvedDataModelObjects(oEntitySetMetaModelContext);
1107
1108
  }
1108
- return getInvolvedDataModelObjectFromPath(metaModelContext, targetEntitySetLocation);
1109
+ return getInvolvedDataModelObjectFromPath(metaModelContext, oConverterOutput, targetEntitySetLocation);
1109
1110
  }
1110
1111
 
1111
1112
  export function getInvolvedDataModelObjectFromPath(
1112
1113
  metaModelContext: ResolvedTarget,
1114
+ convertedTypes: ConverterOutput,
1113
1115
  targetEntitySetLocation?: DataModelObjectPath
1114
1116
  ): DataModelObjectPath {
1115
1117
  const dataModelObjects = metaModelContext.visitedObjects.filter(
@@ -1164,7 +1166,8 @@ export function getInvolvedDataModelObjectFromPath(
1164
1166
  targetEntityType: currentEntityType,
1165
1167
  targetObject: metaModelContext.target,
1166
1168
  navigationProperties,
1167
- contextLocation: targetEntitySetLocation
1169
+ contextLocation: targetEntitySetLocation,
1170
+ convertedTypes: convertedTypes
1168
1171
  };
1169
1172
  if (!outDataModelPath.contextLocation) {
1170
1173
  outDataModelPath.contextLocation = outDataModelPath;
@@ -97,4 +97,4 @@ sap.ui.define(["./ManifestSettings", "./templates/ListReportConverter", "./templ
97
97
  _exports.convertPage = convertPage;
98
98
  return _exports;
99
99
  }, false);
100
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlQ29udmVydGVyLnRzIl0sIm5hbWVzIjpbImhhbmRsZUVycm9yRm9yQ29sbGVjdGlvbkZhY2V0cyIsIm9GYWNldHMiLCJvRGlhZ25vc3RpY3MiLCJzRW50aXR5U2V0TmFtZSIsImxldmVsIiwiZm9yRWFjaCIsIm9GYWNldCIsIk1lc3NhZ2UiLCIkVHlwZSIsIklEIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiRmFjZXRzIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZUNhdGVnb3J5VHlwZSIsIk1pc3NpbmdJRCIsIkxhYmVsIiwiTWVkaXVtIiwiVW5TdXBwb3J0ZWRMZXZlbCIsImNvbnZlcnRQYWdlIiwic1RlbXBsYXRlVHlwZSIsIm9NZXRhTW9kZWwiLCJvTWFuaWZlc3RTZXR0aW5ncyIsInNGdWxsQ29udGV4dFBhdGgiLCJvQ2FwYWJpbGl0aWVzIiwib0NvbnZlcnRlck91dHB1dCIsImNvbnZlcnRUeXBlcyIsImRpYWdub3N0aWNzIiwiYW5ub3RhdGlvbkVycm9yRGV0YWlsIiwiY2hlY2tJZklzc3VlRXhpc3RzIiwiQW5ub3RhdGlvbiIsIm1lc3NhZ2UiLCJlbnRpdHlUeXBlcyIsIm9FbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlVJIiwibmFtZSIsInNUYXJnZXRFbnRpdHlTZXROYW1lIiwiZW50aXR5U2V0Iiwic0NvbnRleHRQYXRoIiwiY29udGV4dFBhdGgiLCJvQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib0Z1bGxDb250ZXh0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwib0NvbnZlcnRlZFBhZ2UiLCJUZW1wbGF0ZVR5cGUiLCJMaXN0UmVwb3J0IiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiTGlzdFJlcG9ydENvbnZlcnRlciIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIk9iamVjdFBhZ2UiLCJPYmplY3RQYWdlQ29udmVydGVyIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiO0FBQUE7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QXhFLEVBQStFUixZQUEvRSxDQURnQixDQUFqQjtBQUdBOztBQUNELGFBQUtHLFlBQVksQ0FBQ00sVUFBbEI7QUFDQ1AsVUFBQUEsY0FBYyxHQUFHUSxtQkFBbUIsQ0FBQ2xDLFdBQXBCLENBQ2hCLElBQUkrQixnQkFBSixDQUFxQnpCLGdCQUFyQixFQUF1Q0gsaUJBQXZDLEVBQTBEckIsWUFBMUQsRUFBd0VrRCxLQUF4RSxFQUErRVIsWUFBL0UsQ0FEZ0IsQ0FBakI7QUFHQTtBQVhGOztBQWFBLGFBQU9FLGNBQVA7QUFDQTs7QUFDRCxXQUFPUyxTQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgKiBhcyBMaXN0UmVwb3J0Q29udmVydGVyIGZyb20gXCIuL3RlbXBsYXRlcy9MaXN0UmVwb3J0Q29udmVydGVyXCI7XG5pbXBvcnQgKiBhcyBPYmplY3RQYWdlQ29udmVydGVyIGZyb20gXCIuL3RlbXBsYXRlcy9PYmplY3RQYWdlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cywgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwiLi9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZUNhdGVnb3J5VHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5cbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgRmFjZXRUeXBlcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuL0NvbnZlcnRlckNvbnRleHRcIjtcblxuLyoqXG4gKiBAdHlwZWRlZiBQYWdlRGVmaW5pdGlvblxuICovXG5leHBvcnQgdHlwZSBQYWdlRGVmaW5pdGlvbiA9IHtcblx0dGVtcGxhdGU6IHN0cmluZztcbn07XG5cbi8qKiBAdHlwZWRlZiBJRGlhZ25vc3RpY3MgKiovXG5leHBvcnQgaW50ZXJmYWNlIElEaWFnbm9zdGljcyB7XG5cdGFkZElzc3VlKFxuXHRcdGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnkgfCBzdHJpbmcsXG5cdFx0aXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSxcblx0XHRkZXRhaWxzOiBzdHJpbmcsXG5cdFx0aXNzdWVDYXRlZ29yeVR5cGU/OiBhbnksXG5cdFx0aXNzdWVTdWJDYXRlZ29yeT86IHN0cmluZ1xuXHQpOiB2b2lkO1xuXHRnZXRJc3N1ZXMoKTogYW55W107XG5cdGNoZWNrSWZJc3N1ZUV4aXN0cyhcblx0XHRpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LFxuXHRcdGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksXG5cdFx0ZGV0YWlsczogc3RyaW5nLFxuXHRcdGlzc3VlQ2F0ZWdvcnlUeXBlPzogYW55LFxuXHRcdGlzc3VlU3ViQ2F0ZWdvcnk/OiBzdHJpbmdcblx0KTogYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3JGb3JDb2xsZWN0aW9uRmFjZXRzKG9GYWNldHM6IEZhY2V0VHlwZXNbXSwgb0RpYWdub3N0aWNzOiBJRGlhZ25vc3RpY3MsIHNFbnRpdHlTZXROYW1lOiBzdHJpbmcsIGxldmVsOiBudW1iZXIpIHtcblx0b0ZhY2V0cy5mb3JFYWNoKChvRmFjZXQ6IGFueSkgPT4ge1xuXHRcdGxldCBNZXNzYWdlID0gXCJGb3IgZW50aXR5IHNldCBcIiArIHNFbnRpdHlTZXROYW1lO1xuXHRcdGlmIChvRmFjZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQgJiYgIW9GYWNldD8uSUQpIHtcblx0XHRcdE1lc3NhZ2UgPSBNZXNzYWdlICsgXCIsIFwiICsgXCJsZXZlbCBcIiArIGxldmVsICsgXCIsIHRoZSBjb2xsZWN0aW9uIGZhY2V0IGRvZXMgbm90IGhhdmUgYW4gSUQuXCI7XG5cdFx0XHRvRGlhZ25vc3RpY3MuYWRkSXNzdWUoXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnkuRmFjZXRzLFxuXHRcdFx0XHRJc3N1ZVNldmVyaXR5LkhpZ2gsXG5cdFx0XHRcdE1lc3NhZ2UsXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlLFxuXHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZT8uRmFjZXRzPy5NaXNzaW5nSURcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmIChvRmFjZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5Db2xsZWN0aW9uRmFjZXQgJiYgbGV2ZWwgPj0gMykge1xuXHRcdFx0TWVzc2FnZSA9IE1lc3NhZ2UgKyBcIiwgY29sbGVjdGlvbiBmYWNldCBcIiArIG9GYWNldC5MYWJlbCArIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYXQgXCIgKyBcImxldmVsIFwiICsgbGV2ZWw7XG5cdFx0XHRvRGlhZ25vc3RpY3MuYWRkSXNzdWUoXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnkuRmFjZXRzLFxuXHRcdFx0XHRJc3N1ZVNldmVyaXR5Lk1lZGl1bSxcblx0XHRcdFx0TWVzc2FnZSxcblx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlPy5GYWNldHM/LlVuU3VwcG9ydGVkTGV2ZWxcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmIChvRmFjZXQ/LkZhY2V0cykge1xuXHRcdFx0aGFuZGxlRXJyb3JGb3JDb2xsZWN0aW9uRmFjZXRzKG9GYWNldD8uRmFjZXRzLCBvRGlhZ25vc3RpY3MsIHNFbnRpdHlTZXROYW1lLCArK2xldmVsKTtcblx0XHRcdGxldmVsID0gbGV2ZWwgLSAxO1xuXHRcdH1cblx0fSk7XG59XG5cbi8qKlxuICogQmFzZWQgb24gYSB0ZW1wbGF0ZSB0eXBlLCBjb252ZXJ0IHRoZSBtZXRhbW9kZWwgYW5kIG1hbmlmZXN0IGRlZmluaXRpb24gaW50byBhIGpzb24gc3RydWN0dXJlIGZvciB0aGUgcGFnZS5cbiAqIEBwYXJhbSB7VGVtcGxhdGVUeXBlfSBzVGVtcGxhdGVUeXBlIFRoZSB0ZW1wbGF0ZSB0eXBlXG4gKiBAcGFyYW0ge09EYXRhTWV0YU1vZGVsfSBvTWV0YU1vZGVsIFRoZSBvZGF0YSBtb2RlbCBtZXRhTW9kZWxcbiAqIEBwYXJhbSB7QmFzZU1hbmlmZXN0U2V0dGluZ3N9IG9NYW5pZmVzdFNldHRpbmdzIFRoZSBjdXJyZW50IG1hbmlmZXN0IHNldHRpbmdzXG4gKiBAcGFyYW0ge0lEaWFnbm9zdGljc30gb0RpYWdub3N0aWNzIFRoZSBkaWFnbm9zdGljcyB3cmFwcGVyXG4gKiBAcGFyYW0ge3N0cmluZ30gc0Z1bGxDb250ZXh0UGF0aCBUaGUgY29udGV4dCBwYXRoIHRvIHJlYWNoIHRoaXMgcGFnZVxuICogQHBhcmFtIG9DYXBhYmlsaXRpZXNcbiAqIEByZXR1cm5zIHtQYWdlRGVmaW5pdGlvbn0gVGhlIHRhcmdldCBwYWdlIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRQYWdlKFxuXHRzVGVtcGxhdGVUeXBlOiBUZW1wbGF0ZVR5cGUsXG5cdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRvTWFuaWZlc3RTZXR0aW5nczogQmFzZU1hbmlmZXN0U2V0dGluZ3MsXG5cdG9EaWFnbm9zdGljczogSURpYWdub3N0aWNzLFxuXHRzRnVsbENvbnRleHRQYXRoOiBzdHJpbmcsXG5cdG9DYXBhYmlsaXRpZXM/OiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1xuKSB7XG5cdGNvbnN0IG9Db252ZXJ0ZXJPdXRwdXQgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCwgb0NhcGFiaWxpdGllcyk7XG5cdG9Db252ZXJ0ZXJPdXRwdXQuZGlhZ25vc3RpY3MuZm9yRWFjaChhbm5vdGF0aW9uRXJyb3JEZXRhaWwgPT4ge1xuXHRcdGNvbnN0IGNoZWNrSWZJc3N1ZUV4aXN0cyA9IG9EaWFnbm9zdGljcy5jaGVja0lmSXNzdWVFeGlzdHMoXG5cdFx0XHRJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sXG5cdFx0XHRJc3N1ZVNldmVyaXR5LkhpZ2gsXG5cdFx0XHRhbm5vdGF0aW9uRXJyb3JEZXRhaWwubWVzc2FnZVxuXHRcdCk7XG5cdFx0aWYgKCFjaGVja0lmSXNzdWVFeGlzdHMpIHtcblx0XHRcdG9EaWFnbm9zdGljcy5hZGRJc3N1ZShJc3N1ZUNhdGVnb3J5LkFubm90YXRpb24sIElzc3VlU2V2ZXJpdHkuSGlnaCwgYW5ub3RhdGlvbkVycm9yRGV0YWlsLm1lc3NhZ2UpO1xuXHRcdH1cblx0fSk7XG5cdG9Db252ZXJ0ZXJPdXRwdXQ/LmVudGl0eVR5cGVzPy5mb3JFYWNoKChvRW50aXR5U2V0OiBhbnkpID0+IHtcblx0XHRpZiAob0VudGl0eVNldD8uYW5ub3RhdGlvbnM/LlVJPy5GYWNldHMpIHtcblx0XHRcdGhhbmRsZUVycm9yRm9yQ29sbGVjdGlvbkZhY2V0cyhvRW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cywgb0RpYWdub3N0aWNzLCBvRW50aXR5U2V0Py5uYW1lLCAxKTtcblx0XHR9XG5cdH0pO1xuXHRjb25zdCBzVGFyZ2V0RW50aXR5U2V0TmFtZSA9IG9NYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldDtcblx0Y29uc3Qgc0NvbnRleHRQYXRoID1cblx0XHRvTWFuaWZlc3RTZXR0aW5ncz8uY29udGV4dFBhdGggfHwgKHNGdWxsQ29udGV4dFBhdGggPT09IFwiL1wiID8gc0Z1bGxDb250ZXh0UGF0aCArIHNUYXJnZXRFbnRpdHlTZXROYW1lIDogc0Z1bGxDb250ZXh0UGF0aCk7XG5cdGNvbnN0IG9Db250ZXh0ID0gb01ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChzQ29udGV4dFBhdGgpO1xuXHRjb25zdCBvRnVsbENvbnRleHQgPSBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMob0NvbnRleHQpO1xuXG5cdGlmIChvRnVsbENvbnRleHQpIHtcblx0XHRsZXQgb0NvbnZlcnRlZFBhZ2UgPSB7fTtcblx0XHRzd2l0Y2ggKHNUZW1wbGF0ZVR5cGUpIHtcblx0XHRcdGNhc2UgVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQ6XG5cdFx0XHRjYXNlIFRlbXBsYXRlVHlwZS5BbmFseXRpY2FsTGlzdFBhZ2U6XG5cdFx0XHRcdG9Db252ZXJ0ZWRQYWdlID0gTGlzdFJlcG9ydENvbnZlcnRlci5jb252ZXJ0UGFnZShcblx0XHRcdFx0XHRuZXcgQ29udmVydGVyQ29udGV4dChvQ29udmVydGVyT3V0cHV0LCBvTWFuaWZlc3RTZXR0aW5ncywgb0RpYWdub3N0aWNzLCBtZXJnZSwgb0Z1bGxDb250ZXh0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVGVtcGxhdGVUeXBlLk9iamVjdFBhZ2U6XG5cdFx0XHRcdG9Db252ZXJ0ZWRQYWdlID0gT2JqZWN0UGFnZUNvbnZlcnRlci5jb252ZXJ0UGFnZShcblx0XHRcdFx0XHRuZXcgQ29udmVydGVyQ29udGV4dChvQ29udmVydGVyT3V0cHV0LCBvTWFuaWZlc3RTZXR0aW5ncywgb0RpYWdub3N0aWNzLCBtZXJnZSwgb0Z1bGxDb250ZXh0KVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIG9Db252ZXJ0ZWRQYWdlO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG4iXX0=
100
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRlbXBsYXRlQ29udmVydGVyLnRzIl0sIm5hbWVzIjpbImhhbmRsZUVycm9yRm9yQ29sbGVjdGlvbkZhY2V0cyIsIm9GYWNldHMiLCJvRGlhZ25vc3RpY3MiLCJzRW50aXR5U2V0TmFtZSIsImxldmVsIiwiZm9yRWFjaCIsIm9GYWNldCIsIk1lc3NhZ2UiLCIkVHlwZSIsIklEIiwiYWRkSXNzdWUiLCJJc3N1ZUNhdGVnb3J5IiwiRmFjZXRzIiwiSXNzdWVTZXZlcml0eSIsIkhpZ2giLCJJc3N1ZUNhdGVnb3J5VHlwZSIsIk1pc3NpbmdJRCIsIkxhYmVsIiwiTWVkaXVtIiwiVW5TdXBwb3J0ZWRMZXZlbCIsImNvbnZlcnRQYWdlIiwic1RlbXBsYXRlVHlwZSIsIm9NZXRhTW9kZWwiLCJvTWFuaWZlc3RTZXR0aW5ncyIsInNGdWxsQ29udGV4dFBhdGgiLCJvQ2FwYWJpbGl0aWVzIiwib0NvbnZlcnRlck91dHB1dCIsImNvbnZlcnRUeXBlcyIsImRpYWdub3N0aWNzIiwiYW5ub3RhdGlvbkVycm9yRGV0YWlsIiwiY2hlY2tJZklzc3VlRXhpc3RzIiwiQW5ub3RhdGlvbiIsIm1lc3NhZ2UiLCJlbnRpdHlUeXBlcyIsIm9FbnRpdHlTZXQiLCJhbm5vdGF0aW9ucyIsIlVJIiwibmFtZSIsInNUYXJnZXRFbnRpdHlTZXROYW1lIiwiZW50aXR5U2V0Iiwic0NvbnRleHRQYXRoIiwiY29udGV4dFBhdGgiLCJvQ29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0Iiwib0Z1bGxDb250ZXh0IiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwib0NvbnZlcnRlZFBhZ2UiLCJUZW1wbGF0ZVR5cGUiLCJMaXN0UmVwb3J0IiwiQW5hbHl0aWNhbExpc3RQYWdlIiwiTGlzdFJlcG9ydENvbnZlcnRlciIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIk9iamVjdFBhZ2UiLCJPYmplY3RQYWdlQ29udmVydGVyIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiO0FBQUE7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QXhFLEVBQStFUixZQUEvRSxDQURnQixDQUFqQjtBQUdBOztBQUNELGFBQUtHLFlBQVksQ0FBQ00sVUFBbEI7QUFDQ1AsVUFBQUEsY0FBYyxHQUFHUSxtQkFBbUIsQ0FBQ2xDLFdBQXBCLENBQ2hCLElBQUkrQixnQkFBSixDQUFxQnpCLGdCQUFyQixFQUF1Q0gsaUJBQXZDLEVBQTBEckIsWUFBMUQsRUFBd0VrRCxLQUF4RSxFQUErRVIsWUFBL0UsQ0FEZ0IsQ0FBakI7QUFHQTtBQVhGOztBQWFBLGFBQU9FLGNBQVA7QUFDQTs7QUFDRCxXQUFPUyxTQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwiLi9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgKiBhcyBMaXN0UmVwb3J0Q29udmVydGVyIGZyb20gXCIuL3RlbXBsYXRlcy9MaXN0UmVwb3J0Q29udmVydGVyXCI7XG5pbXBvcnQgKiBhcyBPYmplY3RQYWdlQ29udmVydGVyIGZyb20gXCIuL3RlbXBsYXRlcy9PYmplY3RQYWdlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBjb252ZXJ0VHlwZXMsIGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cywgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgfSBmcm9tIFwiLi9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5LCBJc3N1ZUNhdGVnb3J5VHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSXNzdWVNYW5hZ2VyXCI7XG5cbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgRmFjZXRUeXBlcywgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuXG4vKipcbiAqIEB0eXBlZGVmIFBhZ2VEZWZpbml0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIFBhZ2VEZWZpbml0aW9uID0ge1xuXHR0ZW1wbGF0ZTogc3RyaW5nO1xufTtcblxuLyoqIEB0eXBlZGVmIElEaWFnbm9zdGljcyAqKi9cbmV4cG9ydCBpbnRlcmZhY2UgSURpYWdub3N0aWNzIHtcblx0YWRkSXNzdWUoXG5cdFx0aXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSB8IHN0cmluZyxcblx0XHRpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LFxuXHRcdGRldGFpbHM6IHN0cmluZyxcblx0XHRpc3N1ZUNhdGVnb3J5VHlwZT86IGFueSxcblx0XHRpc3N1ZVN1YkNhdGVnb3J5Pzogc3RyaW5nXG5cdCk6IHZvaWQ7XG5cdGdldElzc3VlcygpOiBhbnlbXTtcblx0Y2hlY2tJZklzc3VlRXhpc3RzKFxuXHRcdGlzc3VlQ2F0ZWdvcnk6IElzc3VlQ2F0ZWdvcnksXG5cdFx0aXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSxcblx0XHRkZXRhaWxzOiBzdHJpbmcsXG5cdFx0aXNzdWVDYXRlZ29yeVR5cGU/OiBhbnksXG5cdFx0aXNzdWVTdWJDYXRlZ29yeT86IHN0cmluZ1xuXHQpOiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVFcnJvckZvckNvbGxlY3Rpb25GYWNldHMob0ZhY2V0czogRmFjZXRUeXBlc1tdLCBvRGlhZ25vc3RpY3M6IElEaWFnbm9zdGljcywgc0VudGl0eVNldE5hbWU6IHN0cmluZywgbGV2ZWw6IG51bWJlcikge1xuXHRvRmFjZXRzLmZvckVhY2goKG9GYWNldDogYW55KSA9PiB7XG5cdFx0bGV0IE1lc3NhZ2UgPSBcIkZvciBlbnRpdHkgc2V0IFwiICsgc0VudGl0eVNldE5hbWU7XG5cdFx0aWYgKG9GYWNldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCAmJiAhb0ZhY2V0Py5JRCkge1xuXHRcdFx0TWVzc2FnZSA9IE1lc3NhZ2UgKyBcIiwgXCIgKyBcImxldmVsIFwiICsgbGV2ZWwgKyBcIiwgdGhlIGNvbGxlY3Rpb24gZmFjZXQgZG9lcyBub3QgaGF2ZSBhbiBJRC5cIjtcblx0XHRcdG9EaWFnbm9zdGljcy5hZGRJc3N1ZShcblx0XHRcdFx0SXNzdWVDYXRlZ29yeS5GYWNldHMsXG5cdFx0XHRcdElzc3VlU2V2ZXJpdHkuSGlnaCxcblx0XHRcdFx0TWVzc2FnZSxcblx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGUsXG5cdFx0XHRcdElzc3VlQ2F0ZWdvcnlUeXBlPy5GYWNldHM/Lk1pc3NpbmdJRFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKG9GYWNldD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkNvbGxlY3Rpb25GYWNldCAmJiBsZXZlbCA+PSAzKSB7XG5cdFx0XHRNZXNzYWdlID0gTWVzc2FnZSArIFwiLCBjb2xsZWN0aW9uIGZhY2V0IFwiICsgb0ZhY2V0LkxhYmVsICsgXCIgaXMgbm90IHN1cHBvcnRlZCBhdCBcIiArIFwibGV2ZWwgXCIgKyBsZXZlbDtcblx0XHRcdG9EaWFnbm9zdGljcy5hZGRJc3N1ZShcblx0XHRcdFx0SXNzdWVDYXRlZ29yeS5GYWNldHMsXG5cdFx0XHRcdElzc3VlU2V2ZXJpdHkuTWVkaXVtLFxuXHRcdFx0XHRNZXNzYWdlLFxuXHRcdFx0XHRJc3N1ZUNhdGVnb3J5VHlwZSxcblx0XHRcdFx0SXNzdWVDYXRlZ29yeVR5cGU/LkZhY2V0cz8uVW5TdXBwb3J0ZWRMZXZlbFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKG9GYWNldD8uRmFjZXRzKSB7XG5cdFx0XHRoYW5kbGVFcnJvckZvckNvbGxlY3Rpb25GYWNldHMob0ZhY2V0Py5GYWNldHMsIG9EaWFnbm9zdGljcywgc0VudGl0eVNldE5hbWUsICsrbGV2ZWwpO1xuXHRcdFx0bGV2ZWwgPSBsZXZlbCAtIDE7XG5cdFx0fVxuXHR9KTtcbn1cblxuLyoqXG4gKiBCYXNlZCBvbiBhIHRlbXBsYXRlIHR5cGUsIGNvbnZlcnQgdGhlIG1ldGFtb2RlbCBhbmQgbWFuaWZlc3QgZGVmaW5pdGlvbiBpbnRvIGEganNvbiBzdHJ1Y3R1cmUgZm9yIHRoZSBwYWdlLlxuICogQHBhcmFtIHtUZW1wbGF0ZVR5cGV9IHNUZW1wbGF0ZVR5cGUgVGhlIHRlbXBsYXRlIHR5cGVcbiAqIEBwYXJhbSB7T0RhdGFNZXRhTW9kZWx9IG9NZXRhTW9kZWwgVGhlIG9kYXRhIG1vZGVsIG1ldGFNb2RlbFxuICogQHBhcmFtIHtCYXNlTWFuaWZlc3RTZXR0aW5nc30gb01hbmlmZXN0U2V0dGluZ3MgVGhlIGN1cnJlbnQgbWFuaWZlc3Qgc2V0dGluZ3NcbiAqIEBwYXJhbSB7SURpYWdub3N0aWNzfSBvRGlhZ25vc3RpY3MgVGhlIGRpYWdub3N0aWNzIHdyYXBwZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzRnVsbENvbnRleHRQYXRoIFRoZSBjb250ZXh0IHBhdGggdG8gcmVhY2ggdGhpcyBwYWdlXG4gKiBAcGFyYW0gb0NhcGFiaWxpdGllc1xuICogQHJldHVybnMge1BhZ2VEZWZpbml0aW9ufSBUaGUgdGFyZ2V0IHBhZ2UgZGVmaW5pdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFBhZ2UoXG5cdHNUZW1wbGF0ZVR5cGU6IFRlbXBsYXRlVHlwZSxcblx0b01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwsXG5cdG9NYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0b0RpYWdub3N0aWNzOiBJRGlhZ25vc3RpY3MsXG5cdHNGdWxsQ29udGV4dFBhdGg6IHN0cmluZyxcblx0b0NhcGFiaWxpdGllcz86IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzXG4pIHtcblx0Y29uc3Qgb0NvbnZlcnRlck91dHB1dCA9IGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsLCBvQ2FwYWJpbGl0aWVzKTtcblx0b0NvbnZlcnRlck91dHB1dC5kaWFnbm9zdGljcy5mb3JFYWNoKGFubm90YXRpb25FcnJvckRldGFpbCA9PiB7XG5cdFx0Y29uc3QgY2hlY2tJZklzc3VlRXhpc3RzID0gb0RpYWdub3N0aWNzLmNoZWNrSWZJc3N1ZUV4aXN0cyhcblx0XHRcdElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbixcblx0XHRcdElzc3VlU2V2ZXJpdHkuSGlnaCxcblx0XHRcdGFubm90YXRpb25FcnJvckRldGFpbC5tZXNzYWdlXG5cdFx0KTtcblx0XHRpZiAoIWNoZWNrSWZJc3N1ZUV4aXN0cykge1xuXHRcdFx0b0RpYWdub3N0aWNzLmFkZElzc3VlKElzc3VlQ2F0ZWdvcnkuQW5ub3RhdGlvbiwgSXNzdWVTZXZlcml0eS5IaWdoLCBhbm5vdGF0aW9uRXJyb3JEZXRhaWwubWVzc2FnZSk7XG5cdFx0fVxuXHR9KTtcblx0b0NvbnZlcnRlck91dHB1dD8uZW50aXR5VHlwZXM/LmZvckVhY2goKG9FbnRpdHlTZXQ6IGFueSkgPT4ge1xuXHRcdGlmIChvRW50aXR5U2V0Py5hbm5vdGF0aW9ucz8uVUk/LkZhY2V0cykge1xuXHRcdFx0aGFuZGxlRXJyb3JGb3JDb2xsZWN0aW9uRmFjZXRzKG9FbnRpdHlTZXQ/LmFubm90YXRpb25zPy5VST8uRmFjZXRzLCBvRGlhZ25vc3RpY3MsIG9FbnRpdHlTZXQ/Lm5hbWUsIDEpO1xuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHNUYXJnZXRFbnRpdHlTZXROYW1lID0gb01hbmlmZXN0U2V0dGluZ3MuZW50aXR5U2V0O1xuXHRjb25zdCBzQ29udGV4dFBhdGggPVxuXHRcdG9NYW5pZmVzdFNldHRpbmdzPy5jb250ZXh0UGF0aCB8fCAoc0Z1bGxDb250ZXh0UGF0aCA9PT0gXCIvXCIgPyBzRnVsbENvbnRleHRQYXRoICsgc1RhcmdldEVudGl0eVNldE5hbWUgOiBzRnVsbENvbnRleHRQYXRoKTtcblx0Y29uc3Qgb0NvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNDb250ZXh0UGF0aCkgYXMgQ29udGV4dDtcblx0Y29uc3Qgb0Z1bGxDb250ZXh0ID0gZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG9Db250ZXh0KTtcblxuXHRpZiAob0Z1bGxDb250ZXh0KSB7XG5cdFx0bGV0IG9Db252ZXJ0ZWRQYWdlID0ge307XG5cdFx0c3dpdGNoIChzVGVtcGxhdGVUeXBlKSB7XG5cdFx0XHRjYXNlIFRlbXBsYXRlVHlwZS5MaXN0UmVwb3J0OlxuXHRcdFx0Y2FzZSBUZW1wbGF0ZVR5cGUuQW5hbHl0aWNhbExpc3RQYWdlOlxuXHRcdFx0XHRvQ29udmVydGVkUGFnZSA9IExpc3RSZXBvcnRDb252ZXJ0ZXIuY29udmVydFBhZ2UoXG5cdFx0XHRcdFx0bmV3IENvbnZlcnRlckNvbnRleHQob0NvbnZlcnRlck91dHB1dCwgb01hbmlmZXN0U2V0dGluZ3MsIG9EaWFnbm9zdGljcywgbWVyZ2UsIG9GdWxsQ29udGV4dClcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlOlxuXHRcdFx0XHRvQ29udmVydGVkUGFnZSA9IE9iamVjdFBhZ2VDb252ZXJ0ZXIuY29udmVydFBhZ2UoXG5cdFx0XHRcdFx0bmV3IENvbnZlcnRlckNvbnRleHQob0NvbnZlcnRlck91dHB1dCwgb01hbmlmZXN0U2V0dGluZ3MsIG9EaWFnbm9zdGljcywgbWVyZ2UsIG9GdWxsQ29udGV4dClcblx0XHRcdFx0KTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHJldHVybiBvQ29udmVydGVkUGFnZTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
@@ -8,6 +8,7 @@ import { IssueCategory, IssueSeverity, IssueCategoryType } from "sap/fe/core/con
8
8
  import merge from "sap/base/util/merge";
9
9
  import { FacetTypes, UIAnnotationTypes } from "@sap-ux/vocabularies-types";
10
10
  import ConverterContext from "./ConverterContext";
11
+ import Context from "sap/ui/model/Context";
11
12
 
12
13
  /**
13
14
  * @typedef PageDefinition
@@ -102,7 +103,7 @@ export function convertPage(
102
103
  const sTargetEntitySetName = oManifestSettings.entitySet;
103
104
  const sContextPath =
104
105
  oManifestSettings?.contextPath || (sFullContextPath === "/" ? sFullContextPath + sTargetEntitySetName : sFullContextPath);
105
- const oContext = oMetaModel.createBindingContext(sContextPath);
106
+ const oContext = oMetaModel.createBindingContext(sContextPath) as Context;
106
107
  const oFullContext = getInvolvedDataModelObjects(oContext);
107
108
 
108
109
  if (oFullContext) {
@@ -15,7 +15,7 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
15
15
  * Identifies if the given dataFieldAbstract that is passed is a "DataFieldForActionAbstract".
16
16
  * DataFieldForActionAbstract has an inline action defined.
17
17
  *
18
- * @param {DataFieldAbstractTypes} dataField Data field to be evaluated
18
+ * @param {DataFieldAbstractTypes} dataField DataField to be evaluated
19
19
  * @returns {boolean} Validates that dataField is a DataFieldForActionAbstractType
20
20
  */
21
21
  function isDataFieldForActionAbstract(dataField) {
@@ -25,7 +25,7 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
25
25
  * Identifies if the given dataFieldAbstract that is passed is a "DataField".
26
26
  * DataField has a value defined.
27
27
  *
28
- * @param {DataFieldAbstractTypes} dataField Data field to be evaluated
28
+ * @param {DataFieldAbstractTypes} dataField DataField to be evaluated
29
29
  * @returns {boolean} Validate that dataField is a DataFieldTypes
30
30
  */
31
31
 
@@ -36,7 +36,7 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
36
36
  return dataField.hasOwnProperty("Value");
37
37
  }
38
38
  /**
39
- * Returns whether given data field has a static hidden annotation.
39
+ * Returns whether given DataField has a static hidden annotation.
40
40
  *
41
41
  * @param {DataFieldAbstractTypes} dataField The datafield to check
42
42
  * @returns {boolean} `true` if datafield or referenced property has a static Hidden annotation, false else
@@ -126,6 +126,7 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
126
126
  * @param ignoreSelf Whether to exclude the same property from related properties.
127
127
  * @param tableType The table type.
128
128
  * @param relatedProperties The related properties identified so far.
129
+ * @param addUnitInTemplate True if the unit/currency property needs to be added in the export template
129
130
  * @returns {ComplexPropertyInfo} The related properties identified.
130
131
  */
131
132
 
@@ -135,6 +136,7 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
135
136
  properties: {},
136
137
  additionalProperties: {}
137
138
  };
139
+ var addUnitInTemplate = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
138
140
 
139
141
  /**
140
142
  * Helper to push unique related properties.
@@ -192,7 +194,6 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
192
194
 
193
195
  _appendTemplate("{".concat(valueIndex, "}"));
194
196
 
195
- relatedProperties.visualSettingsToBeExcluded = textAnnotationPropertyPath;
196
197
  break;
197
198
 
198
199
  case "Description":
@@ -233,7 +234,11 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
233
234
  valueIndex = _pushUnique(path, property);
234
235
  currencyOrUoMIndex = _pushUnique(currencyOrUoMProperty.name, currencyOrUnitAnnotation.$target);
235
236
 
236
- _appendTemplate("{".concat(valueIndex, "} {").concat(currencyOrUoMIndex, "}"));
237
+ if (addUnitInTemplate) {
238
+ _appendTemplate("{".concat(valueIndex, "} {").concat(currencyOrUoMIndex, "}"));
239
+ } else {
240
+ relatedProperties.exportUnitName = currencyOrUoMProperty.name;
241
+ }
237
242
  } else if ((_property$Target = property.Target) !== null && _property$Target !== void 0 && (_property$Target$$tar = _property$Target.$target) !== null && _property$Target$$tar !== void 0 && _property$Target$$tar.Visualization) {
238
243
  var dataPointProperty = property.Target.$target.Value.$target;
239
244
  valueIndex = _pushUnique(path, dataPointProperty); // New fake property created for the Rating/Progress Target Value. It'll be used for the export on split mode.
@@ -265,6 +270,10 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
265
270
  valueIndex = _pushUnique(path, property);
266
271
 
267
272
  _appendTemplate("{".concat(valueIndex, "}"));
273
+
274
+ if (currencyOrUnitAnnotation) {
275
+ relatedProperties.exportUnitString = "".concat(currencyOrUnitAnnotation); // Hard-coded currency/unit
276
+ }
268
277
  }
269
278
  }
270
279
 
@@ -282,14 +291,15 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
282
291
  return relatedProperties;
283
292
  }
284
293
  /**
285
- * Collect properties consumed by a Data Field.
294
+ * Collect properties consumed by a DataField.
286
295
  * This is for populating the ComplexPropertyInfos of the table delegate.
287
296
  *
288
- * @param {DataFieldAbstractTypes} dataField The Data Field for which the properties need to be identified.
297
+ * @param {DataFieldAbstractTypes} dataField The DataField for which the properties need to be identified.
289
298
  * @param converterContext The converter context.
290
299
  * @param {TableType} tableType The table type.
291
300
  * @param {ComplexPropertyInfo} relatedProperties The properties identified so far.
292
- * @returns {ComplexPropertyInfo} The properties related to the Data Field.
301
+ * @param {boolean} isEmbedded True if the datafield is embedded in another annotation (e.g. FieldGroup).
302
+ * @returns {ComplexPropertyInfo} The properties related to the DataField.
293
303
  */
294
304
 
295
305
 
@@ -302,10 +312,11 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
302
312
  properties: {},
303
313
  additionalProperties: {}
304
314
  };
315
+ var isEmbedded = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
305
316
 
306
317
  if ((dataField.$Type === "com.sap.vocabularies.UI.v1.DataField" || dataField.$Type === "com.sap.vocabularies.UI.v1.DataFieldWithUrl") && dataField.Value) {
307
318
  var property = dataField.Value;
308
- relatedProperties = collectRelatedProperties(property.path, property.$target, converterContext, false, tableType, relatedProperties);
319
+ relatedProperties = collectRelatedProperties(property.path, property.$target, converterContext, false, tableType, relatedProperties, isEmbedded);
309
320
 
310
321
  var navigationPathPrefix = _getNavigationPathPrefix(property.path);
311
322
 
@@ -314,16 +325,16 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
314
325
  switch ((_dataField$Target = dataField.Target) === null || _dataField$Target === void 0 ? void 0 : (_dataField$Target$$ta = _dataField$Target.$target) === null || _dataField$Target$$ta === void 0 ? void 0 : _dataField$Target$$ta.$Type) {
315
326
  case "com.sap.vocabularies.UI.v1.FieldGroupType":
316
327
  (_dataField$Target$$ta2 = dataField.Target.$target.Data) === null || _dataField$Target$$ta2 === void 0 ? void 0 : _dataField$Target$$ta2.forEach(function (innerDataField) {
317
- relatedProperties = collectRelatedPropertiesRecursively(innerDataField, converterContext, tableType, relatedProperties);
328
+ relatedProperties = collectRelatedPropertiesRecursively(innerDataField, converterContext, tableType, relatedProperties, true);
318
329
  });
319
330
  break;
320
331
 
321
332
  case "com.sap.vocabularies.UI.v1.DataPointType":
322
- relatedProperties = collectRelatedProperties(dataField.Target.$target.Value.path, dataField, converterContext, false, tableType, relatedProperties);
333
+ relatedProperties = collectRelatedProperties(dataField.Target.$target.Value.path, dataField, converterContext, false, tableType, relatedProperties, isEmbedded);
323
334
  break;
324
335
 
325
336
  case "com.sap.vocabularies.Communication.v1.ContactType":
326
- relatedProperties = collectRelatedProperties(dataField.Target.value, dataField, converterContext, false, tableType, relatedProperties);
337
+ relatedProperties = collectRelatedProperties(dataField.Target.value, dataField, converterContext, false, tableType, relatedProperties, isEmbedded);
327
338
  break;
328
339
  }
329
340
  }
@@ -347,6 +358,8 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
347
358
  case "com.sap.vocabularies.UI.v1.DataField":
348
359
  case "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath":
349
360
  case "com.sap.vocabularies.UI.v1.DataFieldWithUrl":
361
+ case "com.sap.vocabularies.UI.v1.DataFieldWithIntentBasedNavigation":
362
+ case "com.sap.vocabularies.UI.v1.DataFieldWithAction":
350
363
  sDataType = oDataField === null || oDataField === void 0 ? void 0 : (_Value = oDataField.Value) === null || _Value === void 0 ? void 0 : (_Value$$target = _Value.$target) === null || _Value$$target === void 0 ? void 0 : _Value$$target.type;
351
364
  break;
352
365
 
@@ -382,4 +395,4 @@ sap.ui.define(["sap/fe/core/templating/DisplayModeFormatter", "sap/fe/core/templ
382
395
  _exports.getDataFieldDataType = getDataFieldDataType;
383
396
  return _exports;
384
397
  }, false);
385
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFGaWVsZC50cyJdLCJuYW1lcyI6WyJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiZGF0YUZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJpc0RhdGFGaWVsZFR5cGVzIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsIlZhbHVlIiwiJHRhcmdldCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJvYmplY3QiLCJwcm9wZXJ0eSIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwidW5kZWZpbmVkIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHkiLCJfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgiLCJwYXRoIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZSIsInRhcmdldCIsIm5hdmlnYXRpb25QYXRoUHJlZml4IiwidGFibGVUeXBlIiwicmVsYXRlZFByb3BlcnRpZXMiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiX3R5cGUiLCJoaWRkZW5Bbm5vdGF0aW9uUHJvcGVydHlQYXRoIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJpZ25vcmVTZWxmIiwicHJvcGVydGllcyIsIl9wdXNoVW5pcXVlIiwia2V5IiwidmFsdWUiLCJPYmplY3QiLCJrZXlzIiwiX2FwcGVuZFRlbXBsYXRlIiwiZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSIsInRleHRBbm5vdGF0aW9uIiwiVGV4dCIsInZhbHVlSW5kZXgiLCJ0YXJnZXRWYWx1ZSIsImN1cnJlbmN5T3JVb01JbmRleCIsImV4cG9ydFNldHRpbmdzV3JhcHBpbmciLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsInRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoIiwiZGlzcGxheU1vZGUiLCJnZXREaXNwbGF5TW9kZSIsImRlc2NyaXB0aW9uSW5kZXgiLCJ2aXN1YWxTZXR0aW5nc1RvQmVFeGNsdWRlZCIsImN1cnJlbmN5T3JVb01Qcm9wZXJ0eSIsImdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSIsImN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbiIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwibmFtZSIsIlRhcmdldCIsIlZpc3VhbGl6YXRpb24iLCJkYXRhUG9pbnRQcm9wZXJ0eSIsIlRhcmdldFZhbHVlIiwiTWF4aW11bVZhbHVlIiwidG9TdHJpbmciLCJEYXRhRmllbGREZWZhdWx0IiwiJFR5cGUiLCJkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkiLCJleHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eSIsImZuIiwibGVuZ3RoIiwiY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkiLCJEYXRhIiwiZm9yRWFjaCIsImlubmVyRGF0YUZpZWxkIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJvRGF0YUZpZWxkIiwic0RhdGFUeXBlIiwidHlwZSIsInNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCIkUGF0aCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQXlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFdBQVNBLDRCQUFULENBQXNDQyxTQUF0QyxFQUF1SDtBQUM3SCxXQUFRQSxTQUFELENBQStDQyxjQUEvQyxDQUE4RCxRQUE5RCxDQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFDTyxXQUFTQyxnQkFBVCxDQUEwQkYsU0FBMUIsRUFBMEY7QUFDaEcsV0FBUUEsU0FBRCxDQUE4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Q0VVLFVBQUQsQ0FBdUNqQixNQUR4QyxpRUFDQyxTQUErQ3hELE9BRGhELDhFQUNBLGlCQUF1RUQsS0FEdkUsMERBQ0Esc0JBQThFQyxPQUE5RSxDQUFzRjJFLElBRHRGLENBREQ7QUFHQSxXQUpNLE1BSUE7QUFDTjtBQUNBRCxZQUFBQSxTQUFTLEdBQUduRSxTQUFaO0FBQ0E7QUFDRCxTQVhELE1BV087QUFDTm1FLFVBQUFBLFNBQVMsR0FBR25FLFNBQVo7QUFDQTs7QUFDRDtBQTdCRjs7QUFnQ0EsV0FBT21FLFNBQVA7QUFDQSxHQW5DTSIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcyxcblx0Q29udGFjdCxcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBbm5vdGF0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YVBvaW50LFxuXHRVSUFubm90YXRpb25UeXBlc1xufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCAqIGFzIEVkbSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvZGlzdC9FZG1cIjtcbmltcG9ydCB7IGdldERpc3BsYXlNb2RlLCBQcm9wZXJ0eU9yUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0Rpc3BsYXlNb2RlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eSwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eSwgaXNQcm9wZXJ0eSB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwiLi4vQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHsgVGFibGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5cbmV4cG9ydCB0eXBlIENvbXBsZXhQcm9wZXJ0eUluZm8gPSB7XG5cdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pjtcblx0YWRkaXRpb25hbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIFByb3BlcnR5Pjtcblx0ZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZT86IHN0cmluZztcblx0ZXhwb3J0U2V0dGluZ3NXcmFwcGluZz86IGJvb2xlYW47XG5cdGV4cG9ydFNldHRpbmdzQ29udGFjdFByb3BlcnR5Pzogc3RyaW5nO1xuXHR2aXN1YWxTZXR0aW5nc1RvQmVFeGNsdWRlZD86IHN0cmluZztcbn07XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0XCIuXG4gKiBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCBoYXMgYW4gaW5saW5lIGFjdGlvbiBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERhdGEgZmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsaWRhdGVzIHRoYXQgZGF0YUZpZWxkIGlzIGEgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0KGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzIHtcblx0cmV0dXJuIChkYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3RUeXBlcykuaGFzT3duUHJvcGVydHkoXCJBY3Rpb25cIik7XG59XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZFwiLlxuICogRGF0YUZpZWxkIGhhcyBhIHZhbHVlIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgRGF0YSBmaWVsZCB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBWYWxpZGF0ZSB0aGF0IGRhdGFGaWVsZCBpcyBhIERhdGFGaWVsZFR5cGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RhdGFGaWVsZFR5cGVzKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGRhdGFGaWVsZCBpcyBEYXRhRmllbGRUeXBlcyB7XG5cdHJldHVybiAoZGF0YUZpZWxkIGFzIERhdGFGaWVsZFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIlZhbHVlXCIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBnaXZlbiBkYXRhIGZpZWxkIGhhcyBhIHN0YXRpYyBoaWRkZW4gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBUaGUgZGF0YWZpZWxkIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGRhdGFmaWVsZCBvciByZWZlcmVuY2VkIHByb3BlcnR5IGhhcyBhIHN0YXRpYyBIaWRkZW4gYW5ub3RhdGlvbiwgZmFsc2UgZWxzZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlIHx8XG5cdFx0KGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkKSAmJiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuID09PSB0cnVlKVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG9iamVjdDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoaXNEYXRhRmllbGRUeXBlcyhvYmplY3QpICYmIG9iamVjdC5WYWx1ZT8uJHRhcmdldCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBvYmplY3QuVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRpZiAocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eT8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzUHJvcGVydHkob2JqZWN0KSkge1xuXHRcdFx0aWYgKG9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKG9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIHBhdGggcHJlZml4IGZvciBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9Qcm9wZXJ0eVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hdmlnYXRpb24gcGF0aCBwcmVmaXggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9cbiAqL1xuZnVuY3Rpb24gX2dldE5hdmlnYXRpb25QYXRoUHJlZml4KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBwYXRoLmluZGV4T2YoXCIvXCIpID4gLTEgPyBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogXCJcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cbiAqXG4gKiBGb3IgZS5nLiBJZiBVSS5IaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHksIGluY2x1ZGUgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKiBAcGFyYW0gdGFyZ2V0IFByb3BlcnR5IG9yIERhdGFGaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUGF0aFByZWZpeCBOYXZpZ2F0aW9uIHBhdGggcHJlZml4LCBhcHBsaWNhYmxlIGluIGNhc2Ugb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHRhYmxlVHlwZSBUYWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5mdW5jdGlvbiBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKFxuXHR0YXJnZXQ6IEVkbS5QcmltaXRpdmVUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aFByZWZpeDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHRpZiAodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvbiA9IHRhcmdldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvbj8ucGF0aCAmJiBoaWRkZW5Bbm5vdGF0aW9uLiR0YXJnZXQ/Ll90eXBlID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIGhpZGRlbkFubm90YXRpb24ucGF0aDtcblx0XHRcdC8vIFRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGFkZGVkIHRvIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIG1hcCBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2hpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGhdID0gaGlkZGVuQW5ub3RhdGlvbi4kdGFyZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogQ29sbGVjdCByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5J3MgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaWdub3JlU2VsZiBXaGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIHNhbWUgcHJvcGVydHkgZnJvbSByZWxhdGVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRwYXRoOiBzdHJpbmcsXG5cdHByb3BlcnR5OiBFZG0uUHJpbWl0aXZlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aWdub3JlU2VsZjogYm9vbGVhbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvID0geyBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHt9IH1cbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHQvKipcblx0ICogSGVscGVyIHRvIHB1c2ggdW5pcXVlIHJlbGF0ZWQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnRpZXMgb2JqZWN0IGNvbnRhaW5pbmcgdmFsdWUgcHJvcGVydHksIGRlc2NyaXB0aW9uIHByb3BlcnR5Li4uXG5cdCAqIEByZXR1cm5zIEluZGV4IGF0IHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhdmFpbGFibGVcblx0ICovXG5cdGZ1bmN0aW9uIF9wdXNoVW5pcXVlKGtleTogc3RyaW5nLCB2YWx1ZTogUHJvcGVydHkpOiBudW1iZXIge1xuXHRcdGlmICghcmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmluZGV4T2Yoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgdG8gYXBwZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgdGVtcGxhdGUgd2l0aCBhIGZvcm1hdHRlZCB0ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgRm9ybWF0dGVkIHRleHRcblx0ICovXG5cdGZ1bmN0aW9uIF9hcHBlbmRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzVGVtcGxhdGVcblx0XHRcdD8gYCR7cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZX0ke3ZhbHVlfWBcblx0XHRcdDogYCR7dmFsdWV9YDtcblx0fVxuXG5cdGlmIChwYXRoICYmIHByb3BlcnR5KSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhQcmVmaXggPSBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocGF0aCk7XG5cblx0XHQvLyBDaGVjayBmb3IgVGV4dCBhbm5vdGF0aW9uLlxuXHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRsZXQgdmFsdWVJbmRleDogbnVtYmVyO1xuXHRcdGxldCB0YXJnZXRWYWx1ZTogc3RyaW5nO1xuXHRcdGxldCBjdXJyZW5jeU9yVW9NSW5kZXg6IG51bWJlcjtcblxuXHRcdGlmIChyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5nc1RlbXBsYXRlKSB7XG5cdFx0XHQvLyBGaWVsZEdyb3VwIHVzZS1jYXNlLiBOZWVkIHRvIGFkZCBlYWNoIEZpZWxkIGluIG5ldyBsaW5lLlxuXHRcdFx0X2FwcGVuZFRlbXBsYXRlKFwiXFxuXCIpO1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NXcmFwcGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRleHRBbm5vdGF0aW9uPy5wYXRoICYmIHRleHRBbm5vdGF0aW9uPy4kdGFyZ2V0KSB7XG5cdFx0XHQvLyBDaGVjayBmb3IgVGV4dCBBcnJhbmdlbWVudC5cblx0XHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0XHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGhQcmVmaXggKyB0ZXh0QW5ub3RhdGlvbi5wYXRoO1xuXHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eSBhcyBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdFx0bGV0IGRlc2NyaXB0aW9uSW5kZXg6IG51bWJlcjtcblx0XHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLnZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkID0gdGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0Ly8gS2VlcCB2YWx1ZSB3aGVuIGV4cG9ydGluZyAoc3BsaXQgbW9kZSkgb24gdGV4dCBBcnJhbmdlbWVudCBkZWZpbmVkIGFzICNUZXh0T25seSAoT25seSB2YWx1ZXMgYXJlIGV4cGVjdGVkIG9uIHBhc3RlIGZyb20gRXhjZWwgZnVuY3Rpb25hbGl0eSlcblx0XHRcdFx0XHRfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9wdXNoVW5pcXVlKHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoLCB0ZXh0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske2Rlc2NyaXB0aW9uSW5kZXh9fWApO1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLnZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkID0gcGF0aDtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVmFsdWVEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9wdXNoVW5pcXVlKHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoLCB0ZXh0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fSAoeyR7ZGVzY3JpcHRpb25JbmRleH19KWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0XHRkZXNjcmlwdGlvbkluZGV4ID0gX3B1c2hVbmlxdWUodGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGgsIHRleHRBbm5vdGF0aW9uLiR0YXJnZXQpO1xuXHRcdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7ZGVzY3JpcHRpb25JbmRleH19ICh7JHt2YWx1ZUluZGV4fX0pYCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENoZWNrIGZvciBmaWVsZCBjb250YWluaW5nIEN1cnJlbmN5IE9yIFVuaXQgUHJvcGVydGllcy5cblx0XHRcdGNvbnN0IGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSA9IGdldEFzc29jaWF0ZWRDdXJyZW5jeVByb3BlcnR5KHByb3BlcnR5KSB8fCBnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5KHByb3BlcnR5KTtcblx0XHRcdGNvbnN0IGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbiA9IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LklTT0N1cnJlbmN5IHx8IHByb3BlcnR5Py5hbm5vdGF0aW9ucz8uTWVhc3VyZXM/LlVuaXQ7XG5cdFx0XHRpZiAoY3VycmVuY3lPclVvTVByb3BlcnR5ICYmIGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbj8uJHRhcmdldCkge1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRjdXJyZW5jeU9yVW9NSW5kZXggPSBfcHVzaFVuaXF1ZShjdXJyZW5jeU9yVW9NUHJvcGVydHkubmFtZSwgY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uLiR0YXJnZXQpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fSAgeyR7Y3VycmVuY3lPclVvTUluZGV4fX1gKTtcblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHkuVGFyZ2V0Py4kdGFyZ2V0Py5WaXN1YWxpemF0aW9uKSB7XG5cdFx0XHRcdGNvbnN0IGRhdGFQb2ludFByb3BlcnR5OiBFZG0uUHJpbWl0aXZlVHlwZSA9IHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LlZhbHVlLiR0YXJnZXQ7XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBkYXRhUG9pbnRQcm9wZXJ0eSk7XG5cdFx0XHRcdC8vIE5ldyBmYWtlIHByb3BlcnR5IGNyZWF0ZWQgZm9yIHRoZSBSYXRpbmcvUHJvZ3Jlc3MgVGFyZ2V0IFZhbHVlLiBJdCdsbCBiZSB1c2VkIGZvciB0aGUgZXhwb3J0IG9uIHNwbGl0IG1vZGUuXG5cdFx0XHRcdF9wdXNoVW5pcXVlKHByb3BlcnR5LlRhcmdldC52YWx1ZSwgcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQpO1xuXHRcdFx0XHR0YXJnZXRWYWx1ZSA9IChwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5UYXJnZXRWYWx1ZSB8fCBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5NYXhpbXVtVmFsdWUpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19LyR7dGFyZ2V0VmFsdWV9YCk7XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5LmFubm90YXRpb25zPy5VST8uRGF0YUZpZWxkRGVmYXVsdD8uVGFyZ2V0Py4kdGFyZ2V0Py4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZSkge1xuXHRcdFx0XHQvLyBEYXRhUG9pbnQgdXNlLWNhc2UgdXNpbmcgRGF0YUZpZWxkRGVmYXVsdC5cblx0XHRcdFx0Y29uc3QgZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5OiBFZG0uUHJpbWl0aXZlVHlwZSA9IHByb3BlcnR5LmFubm90YXRpb25zLlVJLkRhdGFGaWVsZERlZmF1bHQ7XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdC8vIE5ldyBmYWtlIHByb3BlcnR5IGNyZWF0ZWQgZm9yIHRoZSBSYXRpbmcvUHJvZ3Jlc3MgVGFyZ2V0IFZhbHVlLiBJdCdsbCBiZSB1c2VkIGZvciB0aGUgZXhwb3J0IG9uIHNwbGl0IG1vZGUuXG5cdFx0XHRcdF9wdXNoVW5pcXVlKGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eS5UYXJnZXQudmFsdWUsIHByb3BlcnR5KTtcblx0XHRcdFx0dGFyZ2V0VmFsdWUgPSAoXG5cdFx0XHRcdFx0ZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LlRhcmdldFZhbHVlIHx8IGRhdGFQb2ludERlZmF1bHRQcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5UYXJnZXRWYWx1ZS5NYXhpbXVtVmFsdWVcblx0XHRcdFx0KS50b1N0cmluZygpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fS8ke3RhcmdldFZhbHVlfWApO1xuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBcImNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW11bmljYXRpb24udjEuQ29udGFjdFR5cGVcIikge1xuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5nc0NvbnRhY3RQcm9wZXJ0eSA9XG5cdFx0XHRcdFx0cHJvcGVydHkuVGFyZ2V0LnZhbHVlLnN1YnN0cmluZygwLCBwcm9wZXJ0eS5UYXJnZXQudmFsdWUuaW5kZXhPZihcIi9cIikgKyAxKSArIHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LmZuPy5wYXRoO1xuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuZm4uJHRhcmdldCk7XG5cdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19YCk7XG5cdFx0XHR9IGVsc2UgaWYgKCFpZ25vcmVTZWxmKSB7XG5cdFx0XHRcdC8vIENvbGxlY3QgdW5kZXJseWluZyBwcm9wZXJ0eVxuXHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZShwcm9wZXJ0eSwgbmF2aWdhdGlvblBhdGhQcmVmaXgsIHRhYmxlVHlwZSwgcmVsYXRlZFByb3BlcnRpZXMpO1xuXHRcdGlmIChPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllcy5hZGRpdGlvbmFsUHJvcGVydGllcykubGVuZ3RoID4gMCAmJiBPYmplY3Qua2V5cyhyZWxhdGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzKS5sZW5ndGggPT09IDApIHtcblx0XHRcdC8vIENvbGxlY3QgdW5kZXJseWluZyBwcm9wZXJ0eSBpZiBub3QgY29sbGVjdGVkIGFscmVhZHkuXG5cdFx0XHQvLyBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IGFkZGl0aW9uYWxQcm9wZXJ0aWVzIGFyZSBtYWRlIGF2YWlsYWJsZSBvbmx5IHRvIGNvbXBsZXggcHJvcGVydHkgaW5mb3MuXG5cdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogQ29sbGVjdCBwcm9wZXJ0aWVzIGNvbnN1bWVkIGJ5IGEgRGF0YSBGaWVsZC5cbiAqIFRoaXMgaXMgZm9yIHBvcHVsYXRpbmcgdGhlIENvbXBsZXhQcm9wZXJ0eUluZm9zIG9mIHRoZSB0YWJsZSBkZWxlZ2F0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBUaGUgRGF0YSBGaWVsZCBmb3Igd2hpY2ggdGhlIHByb3BlcnRpZXMgbmVlZCB0byBiZSBpZGVudGlmaWVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHtUYWJsZVR5cGV9IHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEBwYXJhbSB7Q29tcGxleFByb3BlcnR5SW5mb30gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgRGF0YSBGaWVsZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsXG5cdHRhYmxlVHlwZTogVGFibGVUeXBlLFxuXHRyZWxhdGVkUHJvcGVydGllczogQ29tcGxleFByb3BlcnR5SW5mbyA9IHsgcHJvcGVydGllczoge30sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7fSB9XG4pOiBDb21wbGV4UHJvcGVydHlJbmZvIHtcblx0aWYgKChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpICYmIGRhdGFGaWVsZC5WYWx1ZSkge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YUZpZWxkLlZhbHVlO1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0cHJvcGVydHkucGF0aCxcblx0XHRcdHByb3BlcnR5LiR0YXJnZXQsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRyZWxhdGVkUHJvcGVydGllc1xuXHRcdCk7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhQcmVmaXggPSBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocHJvcGVydHkucGF0aCk7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKGRhdGFGaWVsZCwgbmF2aWdhdGlvblBhdGhQcmVmaXgsIHRhYmxlVHlwZSwgcmVsYXRlZFByb3BlcnRpZXMpO1xuXHR9IGVsc2UgaWYgKGRhdGFGaWVsZC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdHN3aXRjaCAoZGF0YUZpZWxkLlRhcmdldD8uJHRhcmdldD8uJFR5cGUpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRmllbGRHcm91cFR5cGU6XG5cdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5EYXRhPy5mb3JFYWNoKChpbm5lckRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcykgPT4ge1xuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzUmVjdXJzaXZlbHkoaW5uZXJEYXRhRmllbGQsIGNvbnZlcnRlckNvbnRleHQsIHRhYmxlVHlwZSwgcmVsYXRlZFByb3BlcnRpZXMpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YVBvaW50VHlwZTpcblx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMoXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLlRhcmdldC4kdGFyZ2V0LlZhbHVlLnBhdGgsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQsXG5cdFx0XHRcdFx0ZmFsc2UsXG5cdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiOlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllc1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhRmllbGREYXRhVHlwZSA9IGZ1bmN0aW9uKG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzRGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpLiRUeXBlO1xuXHRzd2l0Y2ggKHNEYXRhVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRzRGF0YVR5cGUgPSAob0RhdGFGaWVsZCBhcyBEYXRhRmllbGQpPy5WYWx1ZT8uJHRhcmdldD8udHlwZTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uOlxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRjb25zdCBzRGF0YVR5cGVGb3JEYXRhRmllbGRGb3JBbm5vdGF0aW9uID0gKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0LiRUeXBlO1xuXHRcdFx0aWYgKHNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRcdFx0aWYgKChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldC4kVHlwZSA9PT0gQ29tbXVuaWNhdGlvbkFubm90YXRpb25UeXBlcy5Db250YWN0VHlwZSkge1xuXHRcdFx0XHRcdHNEYXRhVHlwZSA9ICgoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0IGFzIENvbnRhY3QpPy5mbiBhcyBhbnkpLiR0YXJnZXQ/LnR5cGU7XG5cdFx0XHRcdH0gZWxzZSBpZiAoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdFx0c0RhdGFUeXBlID1cblx0XHRcdFx0XHRcdCgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQgYXMgRGF0YVBvaW50KT8uVmFsdWU/LiRQYXRoPy4kVHlwZSB8fFxuXHRcdFx0XHRcdFx0KChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJHRhcmdldC50eXBlO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGUuZy4gRmllbGRHcm91cCBvciBDaGFydFxuXHRcdFx0XHRcdHNEYXRhVHlwZSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gc0RhdGFUeXBlO1xufTtcbiJdfQ==
398
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkRhdGFGaWVsZC50cyJdLCJuYW1lcyI6WyJpc0RhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0IiwiZGF0YUZpZWxkIiwiaGFzT3duUHJvcGVydHkiLCJpc0RhdGFGaWVsZFR5cGVzIiwiaXNEYXRhRmllbGRBbHdheXNIaWRkZW4iLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuIiwidmFsdWVPZiIsIlZhbHVlIiwiJHRhcmdldCIsImdldFNlbWFudGljT2JqZWN0UGF0aCIsImNvbnZlcnRlckNvbnRleHQiLCJvYmplY3QiLCJwcm9wZXJ0eSIsIkNvbW1vbiIsIlNlbWFudGljT2JqZWN0IiwidW5kZWZpbmVkIiwiZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aCIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImlzUHJvcGVydHkiLCJfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgiLCJwYXRoIiwiaW5kZXhPZiIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwiX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZSIsInRhcmdldCIsIm5hdmlnYXRpb25QYXRoUHJlZml4IiwidGFibGVUeXBlIiwicmVsYXRlZFByb3BlcnRpZXMiLCJoaWRkZW5Bbm5vdGF0aW9uIiwiX3R5cGUiLCJoaWRkZW5Bbm5vdGF0aW9uUHJvcGVydHlQYXRoIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXMiLCJpZ25vcmVTZWxmIiwicHJvcGVydGllcyIsImFkZFVuaXRJblRlbXBsYXRlIiwiX3B1c2hVbmlxdWUiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJfYXBwZW5kVGVtcGxhdGUiLCJleHBvcnRTZXR0aW5nc1RlbXBsYXRlIiwidGV4dEFubm90YXRpb24iLCJUZXh0IiwidmFsdWVJbmRleCIsInRhcmdldFZhbHVlIiwiY3VycmVuY3lPclVvTUluZGV4IiwiZXhwb3J0U2V0dGluZ3NXcmFwcGluZyIsImRhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwidGV4dEFubm90YXRpb25Qcm9wZXJ0eVBhdGgiLCJkaXNwbGF5TW9kZSIsImdldERpc3BsYXlNb2RlIiwiZGVzY3JpcHRpb25JbmRleCIsInZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkIiwiY3VycmVuY3lPclVvTVByb3BlcnR5IiwiZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHkiLCJnZXRBc3NvY2lhdGVkVW5pdFByb3BlcnR5IiwiY3VycmVuY3lPclVuaXRBbm5vdGF0aW9uIiwiTWVhc3VyZXMiLCJJU09DdXJyZW5jeSIsIlVuaXQiLCJuYW1lIiwiZXhwb3J0VW5pdE5hbWUiLCJUYXJnZXQiLCJWaXN1YWxpemF0aW9uIiwiZGF0YVBvaW50UHJvcGVydHkiLCJUYXJnZXRWYWx1ZSIsIk1heGltdW1WYWx1ZSIsInRvU3RyaW5nIiwiRGF0YUZpZWxkRGVmYXVsdCIsIiRUeXBlIiwiZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5IiwiZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHkiLCJmbiIsImV4cG9ydFVuaXRTdHJpbmciLCJsZW5ndGgiLCJjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseSIsImlzRW1iZWRkZWQiLCJEYXRhIiwiZm9yRWFjaCIsImlubmVyRGF0YUZpZWxkIiwiZ2V0RGF0YUZpZWxkRGF0YVR5cGUiLCJvRGF0YUZpZWxkIiwic0RhdGFUeXBlIiwidHlwZSIsInNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24iLCIkUGF0aCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQTJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFdBQVNBLDRCQUFULENBQXNDQyxTQUF0QyxFQUF1SDtBQUM3SCxXQUFRQSxTQUFELENBQStDQyxjQUEvQyxDQUE4RCxRQUE5RCxDQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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RSxLQUF2RCx5REFBSixFQUErRztBQUFBOztBQUM5R2EsWUFBQUEsU0FBUyxlQUFHLGFBQUdELFVBQUQsQ0FBdUNuQixNQUF6QyxpRUFBRSxTQUErQzFELE9BQWpELHFEQUFDLGlCQUFxRW9FLEVBQXRFLEVBQWlGcEUsT0FBcEYsNkNBQUcsU0FBMEYrRSxJQUF0RztBQUNBLFdBRkQsTUFFTyxJQUFJLGFBQUNGLFVBQUQsQ0FBdUNuQixNQUF2QyxzREFBK0MxRCxPQUEvQyxDQUF1RGlFLEtBQXZELGdEQUFKLEVBQXNHO0FBQUE7O0FBQzVHYSxZQUFBQSxTQUFTLEdBQ1IsYUFBRUQsVUFBRCxDQUF1Q25CLE1BQXhDLGlFQUFDLFNBQStDMUQsT0FBaEQsK0ZBQXVFRCxLQUF2RSwwR0FBOEVrRixLQUE5RSxrRkFBcUZoQixLQUFyRixrQkFDRVksVUFBRCxDQUF1Q25CLE1BRHhDLGlFQUNDLFNBQStDMUQsT0FEaEQsOEVBQ0EsaUJBQXVFRCxLQUR2RSwwREFDQSxzQkFBOEVDLE9BQTlFLENBQXNGK0UsSUFEdEYsQ0FERDtBQUdBLFdBSk0sTUFJQTtBQUNOO0FBQ0FELFlBQUFBLFNBQVMsR0FBR3ZFLFNBQVo7QUFDQTtBQUNELFNBWEQsTUFXTztBQUNOdUUsVUFBQUEsU0FBUyxHQUFHdkUsU0FBWjtBQUNBOztBQUNEO0FBL0JGOztBQWtDQSxXQUFPdUUsU0FBUDtBQUNBLEdBckNNIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLFxuXHRDb250YWN0LFxuXHREYXRhRmllbGQsXG5cdERhdGFGaWVsZEFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMsXG5cdERhdGFGaWVsZEZvckFubm90YXRpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhUG9pbnQsXG5cdFVJQW5ub3RhdGlvblR5cGVzXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0ICogYXMgRWRtIGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9kaXN0L0VkbVwiO1xuaW1wb3J0IHsgVGFibGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBnZXREaXNwbGF5TW9kZSwgUHJvcGVydHlPclBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EaXNwbGF5TW9kZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgZ2V0QXNzb2NpYXRlZEN1cnJlbmN5UHJvcGVydHksIGdldEFzc29jaWF0ZWRVbml0UHJvcGVydHksIGlzUHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcIi4uL0NvbnZlcnRlckNvbnRleHRcIjtcblxuZXhwb3J0IHR5cGUgQ29tcGxleFByb3BlcnR5SW5mbyA9IHtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXHRhZGRpdGlvbmFsUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgUHJvcGVydHk+O1xuXHRleHBvcnRTZXR0aW5nc1RlbXBsYXRlPzogc3RyaW5nO1xuXHRleHBvcnRTZXR0aW5nc1dyYXBwaW5nPzogYm9vbGVhbjtcblx0ZXhwb3J0U2V0dGluZ3NDb250YWN0UHJvcGVydHk/OiBzdHJpbmc7XG5cdHZpc3VhbFNldHRpbmdzVG9CZUV4Y2x1ZGVkPzogc3RyaW5nO1xuXHRleHBvcnRVbml0TmFtZT86IHN0cmluZztcblx0ZXhwb3J0VW5pdFN0cmluZz86IHN0cmluZztcbn07XG5cbi8qKlxuICogSWRlbnRpZmllcyBpZiB0aGUgZ2l2ZW4gZGF0YUZpZWxkQWJzdHJhY3QgdGhhdCBpcyBwYXNzZWQgaXMgYSBcIkRhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0XCIuXG4gKiBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdCBoYXMgYW4gaW5saW5lIGFjdGlvbiBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7RGF0YUZpZWxkQWJzdHJhY3RUeXBlc30gZGF0YUZpZWxkIERhdGFGaWVsZCB0byBiZSBldmFsdWF0ZWRcbiAqIEByZXR1cm5zIHtib29sZWFufSBWYWxpZGF0ZXMgdGhhdCBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkRm9yQWN0aW9uQWJzdHJhY3QoZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKTogZGF0YUZpZWxkIGlzIERhdGFGaWVsZEZvckFjdGlvbkFic3RyYWN0VHlwZXMge1xuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBY3Rpb25BYnN0cmFjdFR5cGVzKS5oYXNPd25Qcm9wZXJ0eShcIkFjdGlvblwiKTtcbn1cblxuLyoqXG4gKiBJZGVudGlmaWVzIGlmIHRoZSBnaXZlbiBkYXRhRmllbGRBYnN0cmFjdCB0aGF0IGlzIHBhc3NlZCBpcyBhIFwiRGF0YUZpZWxkXCIuXG4gKiBEYXRhRmllbGQgaGFzIGEgdmFsdWUgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBEYXRhRmllbGQgdG8gYmUgZXZhbHVhdGVkXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVmFsaWRhdGUgdGhhdCBkYXRhRmllbGQgaXMgYSBEYXRhRmllbGRUeXBlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRhRmllbGRUeXBlcyhkYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpOiBkYXRhRmllbGQgaXMgRGF0YUZpZWxkVHlwZXMge1xuXHRyZXR1cm4gKGRhdGFGaWVsZCBhcyBEYXRhRmllbGRUeXBlcykuaGFzT3duUHJvcGVydHkoXCJWYWx1ZVwiKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgZ2l2ZW4gRGF0YUZpZWxkIGhhcyBhIHN0YXRpYyBoaWRkZW4gYW5ub3RhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0RhdGFGaWVsZEFic3RyYWN0VHlwZXN9IGRhdGFGaWVsZCBUaGUgZGF0YWZpZWxkIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gYHRydWVgIGlmIGRhdGFmaWVsZCBvciByZWZlcmVuY2VkIHByb3BlcnR5IGhhcyBhIHN0YXRpYyBIaWRkZW4gYW5ub3RhdGlvbiwgZmFsc2UgZWxzZVxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0YUZpZWxkQWx3YXlzSGlkZGVuKGRhdGFGaWVsZDogRGF0YUZpZWxkQWJzdHJhY3RUeXBlcyk6IGJvb2xlYW4ge1xuXHRyZXR1cm4gKFxuXHRcdGRhdGFGaWVsZC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbj8udmFsdWVPZigpID09PSB0cnVlIHx8XG5cdFx0KGlzRGF0YUZpZWxkVHlwZXMoZGF0YUZpZWxkKSAmJiBkYXRhRmllbGQuVmFsdWU/LiR0YXJnZXQ/LmFubm90YXRpb25zPy5VST8uSGlkZGVuID09PSB0cnVlKVxuXHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VtYW50aWNPYmplY3RQYXRoKGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIG9iamVjdDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0aWYgKHR5cGVvZiBvYmplY3QgPT09IFwib2JqZWN0XCIpIHtcblx0XHRpZiAoaXNEYXRhRmllbGRUeXBlcyhvYmplY3QpICYmIG9iamVjdC5WYWx1ZT8uJHRhcmdldCkge1xuXHRcdFx0Y29uc3QgcHJvcGVydHkgPSBvYmplY3QuVmFsdWU/LiR0YXJnZXQ7XG5cdFx0XHRpZiAocHJvcGVydHk/LmFubm90YXRpb25zPy5Db21tb24/LlNlbWFudGljT2JqZWN0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5U2V0QmFzZWRBbm5vdGF0aW9uUGF0aChwcm9wZXJ0eT8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKGlzUHJvcGVydHkob2JqZWN0KSkge1xuXHRcdFx0aWYgKG9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uU2VtYW50aWNPYmplY3QgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoKG9iamVjdD8uZnVsbHlRdWFsaWZpZWROYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYXZpZ2F0aW9uIHBhdGggcHJlZml4IGZvciBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9Qcm9wZXJ0eVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIG5hdmlnYXRpb24gcGF0aCBwcmVmaXggRm9yIGUuZy4gL0VudGl0eVR5cGUvTmF2aWdhdGlvbi9cbiAqL1xuZnVuY3Rpb24gX2dldE5hdmlnYXRpb25QYXRoUHJlZml4KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBwYXRoLmluZGV4T2YoXCIvXCIpID4gLTEgPyBwYXRoLnN1YnN0cmluZygwLCBwYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpIDogXCJcIjtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGFkZGl0aW9uYWwgcHJvcGVydGllcyBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cbiAqXG4gKiBGb3IgZS5nLiBJZiBVSS5IaWRkZW4gcG9pbnRzIHRvIGEgcHJvcGVydHksIGluY2x1ZGUgdGhpcyBwcm9wZXJ0eSBpbiB0aGUgYWRkaXRpb25hbFByb3BlcnRpZXMgb2YgQ29tcGxleFByb3BlcnR5SW5mbyBvYmplY3QuXG4gKiBAcGFyYW0gdGFyZ2V0IFByb3BlcnR5IG9yIERhdGFGaWVsZCBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSBuYXZpZ2F0aW9uUGF0aFByZWZpeCBOYXZpZ2F0aW9uIHBhdGggcHJlZml4LCBhcHBsaWNhYmxlIGluIGNhc2Ugb2YgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIHRhYmxlVHlwZSBUYWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5mdW5jdGlvbiBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKFxuXHR0YXJnZXQ6IEVkbS5QcmltaXRpdmVUeXBlLFxuXHRuYXZpZ2F0aW9uUGF0aFByZWZpeDogc3RyaW5nLFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm9cbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHRpZiAodGFibGVUeXBlID09PSBcIkFuYWx5dGljYWxUYWJsZVwiKSB7XG5cdFx0Y29uc3QgaGlkZGVuQW5ub3RhdGlvbiA9IHRhcmdldC5hbm5vdGF0aW9ucz8uVUk/LkhpZGRlbjtcblx0XHRpZiAoaGlkZGVuQW5ub3RhdGlvbj8ucGF0aCAmJiBoaWRkZW5Bbm5vdGF0aW9uLiR0YXJnZXQ/Ll90eXBlID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdGNvbnN0IGhpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGggPSBuYXZpZ2F0aW9uUGF0aFByZWZpeCArIGhpZGRlbkFubm90YXRpb24ucGF0aDtcblx0XHRcdC8vIFRoaXMgcHJvcGVydHkgc2hvdWxkIGJlIGFkZGVkIHRvIGFkZGl0aW9uYWxQcm9wZXJ0aWVzIG1hcCBmb3IgdGhlIEFMUCB0YWJsZSB1c2UtY2FzZS5cblx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzW2hpZGRlbkFubm90YXRpb25Qcm9wZXJ0eVBhdGhdID0gaGlkZGVuQW5ub3RhdGlvbi4kdGFyZ2V0O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVsYXRlZFByb3BlcnRpZXM7XG59XG5cbi8qKlxuICogQ29sbGVjdCByZWxhdGVkIHByb3BlcnRpZXMgZnJvbSBhIHByb3BlcnR5J3MgYW5ub3RhdGlvbnMuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHByb3BlcnR5IHBhdGhcbiAqIEBwYXJhbSBwcm9wZXJ0eSBUaGUgcHJvcGVydHkgdG8gYmUgY29uc2lkZXJlZFxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gaWdub3JlU2VsZiBXaGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIHNhbWUgcHJvcGVydHkgZnJvbSByZWxhdGVkIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdGFibGVUeXBlIFRoZSB0YWJsZSB0eXBlLlxuICogQHBhcmFtIHJlbGF0ZWRQcm9wZXJ0aWVzIFRoZSByZWxhdGVkIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0gYWRkVW5pdEluVGVtcGxhdGUgVHJ1ZSBpZiB0aGUgdW5pdC9jdXJyZW5jeSBwcm9wZXJ0eSBuZWVkcyB0byBiZSBhZGRlZCBpbiB0aGUgZXhwb3J0IHRlbXBsYXRlXG4gKiBAcmV0dXJucyB7Q29tcGxleFByb3BlcnR5SW5mb30gVGhlIHJlbGF0ZWQgcHJvcGVydGllcyBpZGVudGlmaWVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRwYXRoOiBzdHJpbmcsXG5cdHByb3BlcnR5OiBFZG0uUHJpbWl0aXZlVHlwZSxcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCxcblx0aWdub3JlU2VsZjogYm9vbGVhbixcblx0dGFibGVUeXBlOiBUYWJsZVR5cGUsXG5cdHJlbGF0ZWRQcm9wZXJ0aWVzOiBDb21wbGV4UHJvcGVydHlJbmZvID0geyBwcm9wZXJ0aWVzOiB7fSwgYWRkaXRpb25hbFByb3BlcnRpZXM6IHt9IH0sXG5cdGFkZFVuaXRJblRlbXBsYXRlOiBib29sZWFuID0gZmFsc2Vcbik6IENvbXBsZXhQcm9wZXJ0eUluZm8ge1xuXHQvKipcblx0ICogSGVscGVyIHRvIHB1c2ggdW5pcXVlIHJlbGF0ZWQgcHJvcGVydGllcy5cblx0ICpcblx0ICogQHBhcmFtIGtleSBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0gdmFsdWUgVGhlIHByb3BlcnRpZXMgb2JqZWN0IGNvbnRhaW5pbmcgdmFsdWUgcHJvcGVydHksIGRlc2NyaXB0aW9uIHByb3BlcnR5Li4uXG5cdCAqIEByZXR1cm5zIEluZGV4IGF0IHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhdmFpbGFibGVcblx0ICovXG5cdGZ1bmN0aW9uIF9wdXNoVW5pcXVlKGtleTogc3RyaW5nLCB2YWx1ZTogUHJvcGVydHkpOiBudW1iZXIge1xuXHRcdGlmICghcmVsYXRlZFByb3BlcnRpZXMucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmluZGV4T2Yoa2V5KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgdG8gYXBwZW5kIHRoZSBleHBvcnQgc2V0dGluZ3MgdGVtcGxhdGUgd2l0aCBhIGZvcm1hdHRlZCB0ZXh0LlxuXHQgKlxuXHQgKiBAcGFyYW0gdmFsdWUgRm9ybWF0dGVkIHRleHRcblx0ICovXG5cdGZ1bmN0aW9uIF9hcHBlbmRUZW1wbGF0ZSh2YWx1ZTogc3RyaW5nKSB7XG5cdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZSA9IHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzVGVtcGxhdGVcblx0XHRcdD8gYCR7cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NUZW1wbGF0ZX0ke3ZhbHVlfWBcblx0XHRcdDogYCR7dmFsdWV9YDtcblx0fVxuXG5cdGlmIChwYXRoICYmIHByb3BlcnR5KSB7XG5cdFx0Y29uc3QgbmF2aWdhdGlvblBhdGhQcmVmaXggPSBfZ2V0TmF2aWdhdGlvblBhdGhQcmVmaXgocGF0aCk7XG5cblx0XHQvLyBDaGVjayBmb3IgVGV4dCBhbm5vdGF0aW9uLlxuXHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uID0gcHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW1vbj8uVGV4dDtcblx0XHRsZXQgdmFsdWVJbmRleDogbnVtYmVyO1xuXHRcdGxldCB0YXJnZXRWYWx1ZTogc3RyaW5nO1xuXHRcdGxldCBjdXJyZW5jeU9yVW9NSW5kZXg6IG51bWJlcjtcblxuXHRcdGlmIChyZWxhdGVkUHJvcGVydGllcy5leHBvcnRTZXR0aW5nc1RlbXBsYXRlKSB7XG5cdFx0XHQvLyBGaWVsZEdyb3VwIHVzZS1jYXNlLiBOZWVkIHRvIGFkZCBlYWNoIEZpZWxkIGluIG5ldyBsaW5lLlxuXHRcdFx0X2FwcGVuZFRlbXBsYXRlKFwiXFxuXCIpO1xuXHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0U2V0dGluZ3NXcmFwcGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKHRleHRBbm5vdGF0aW9uPy5wYXRoICYmIHRleHRBbm5vdGF0aW9uPy4kdGFyZ2V0KSB7XG5cdFx0XHQvLyBDaGVjayBmb3IgVGV4dCBBcnJhbmdlbWVudC5cblx0XHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBjb252ZXJ0ZXJDb250ZXh0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKTtcblx0XHRcdGNvbnN0IHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoID0gbmF2aWdhdGlvblBhdGhQcmVmaXggKyB0ZXh0QW5ub3RhdGlvbi5wYXRoO1xuXHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBnZXREaXNwbGF5TW9kZShwcm9wZXJ0eSBhcyBQcm9wZXJ0eU9yUGF0aDxQcm9wZXJ0eT4sIGRhdGFNb2RlbE9iamVjdFBhdGgpO1xuXHRcdFx0bGV0IGRlc2NyaXB0aW9uSW5kZXg6IG51bWJlcjtcblx0XHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlXCI6XG5cdFx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdC8vIEtlZXAgdmFsdWUgd2hlbiBleHBvcnRpbmcgKHNwbGl0IG1vZGUpIG9uIHRleHQgQXJyYW5nZW1lbnQgZGVmaW5lZCBhcyAjVGV4dE9ubHkgKE9ubHkgdmFsdWVzIGFyZSBleHBlY3RlZCBvbiBwYXN0ZSBmcm9tIEV4Y2VsIGZ1bmN0aW9uYWxpdHkpXG5cdFx0XHRcdFx0X3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uSW5kZXggPSBfcHVzaFVuaXF1ZSh0ZXh0QW5ub3RhdGlvblByb3BlcnR5UGF0aCwgdGV4dEFubm90YXRpb24uJHRhcmdldCk7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHtkZXNjcmlwdGlvbkluZGV4fX1gKTtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy52aXN1YWxTZXR0aW5nc1RvQmVFeGNsdWRlZCA9IHBhdGg7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHR2YWx1ZUluZGV4ID0gX3B1c2hVbmlxdWUocGF0aCwgcHJvcGVydHkpO1xuXHRcdFx0XHRcdGRlc2NyaXB0aW9uSW5kZXggPSBfcHVzaFVuaXF1ZSh0ZXh0QW5ub3RhdGlvblByb3BlcnR5UGF0aCwgdGV4dEFubm90YXRpb24uJHRhcmdldCk7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0gKHske2Rlc2NyaXB0aW9uSW5kZXh9fSlgKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdFx0ZGVzY3JpcHRpb25JbmRleCA9IF9wdXNoVW5pcXVlKHRleHRBbm5vdGF0aW9uUHJvcGVydHlQYXRoLCB0ZXh0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske2Rlc2NyaXB0aW9uSW5kZXh9fSAoeyR7dmFsdWVJbmRleH19KWApO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBDaGVjayBmb3IgZmllbGQgY29udGFpbmluZyBDdXJyZW5jeSBPciBVbml0IFByb3BlcnRpZXMuXG5cdFx0XHRjb25zdCBjdXJyZW5jeU9yVW9NUHJvcGVydHkgPSBnZXRBc3NvY2lhdGVkQ3VycmVuY3lQcm9wZXJ0eShwcm9wZXJ0eSkgfHwgZ2V0QXNzb2NpYXRlZFVuaXRQcm9wZXJ0eShwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCBjdXJyZW5jeU9yVW5pdEFubm90YXRpb24gPSBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5JU09DdXJyZW5jeSB8fCBwcm9wZXJ0eT8uYW5ub3RhdGlvbnM/Lk1lYXN1cmVzPy5Vbml0O1xuXHRcdFx0aWYgKGN1cnJlbmN5T3JVb01Qcm9wZXJ0eSAmJiBjdXJyZW5jeU9yVW5pdEFubm90YXRpb24/LiR0YXJnZXQpIHtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0Y3VycmVuY3lPclVvTUluZGV4ID0gX3B1c2hVbmlxdWUoY3VycmVuY3lPclVvTVByb3BlcnR5Lm5hbWUsIGN1cnJlbmN5T3JVbml0QW5ub3RhdGlvbi4kdGFyZ2V0KTtcblx0XHRcdFx0aWYgKGFkZFVuaXRJblRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0gIHske2N1cnJlbmN5T3JVb01JbmRleH19YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMuZXhwb3J0VW5pdE5hbWUgPSBjdXJyZW5jeU9yVW9NUHJvcGVydHkubmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIGlmIChwcm9wZXJ0eS5UYXJnZXQ/LiR0YXJnZXQ/LlZpc3VhbGl6YXRpb24pIHtcblx0XHRcdFx0Y29uc3QgZGF0YVBvaW50UHJvcGVydHk6IEVkbS5QcmltaXRpdmVUeXBlID0gcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuVmFsdWUuJHRhcmdldDtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIGRhdGFQb2ludFByb3BlcnR5KTtcblx0XHRcdFx0Ly8gTmV3IGZha2UgcHJvcGVydHkgY3JlYXRlZCBmb3IgdGhlIFJhdGluZy9Qcm9ncmVzcyBUYXJnZXQgVmFsdWUuIEl0J2xsIGJlIHVzZWQgZm9yIHRoZSBleHBvcnQgb24gc3BsaXQgbW9kZS5cblx0XHRcdFx0X3B1c2hVbmlxdWUocHJvcGVydHkuVGFyZ2V0LnZhbHVlLCBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldCk7XG5cdFx0XHRcdHRhcmdldFZhbHVlID0gKHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LlRhcmdldFZhbHVlIHx8IHByb3BlcnR5LlRhcmdldC4kdGFyZ2V0Lk1heGltdW1WYWx1ZSkudG9TdHJpbmcoKTtcblx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX0vJHt0YXJnZXRWYWx1ZX1gKTtcblx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHkuYW5ub3RhdGlvbnM/LlVJPy5EYXRhRmllbGREZWZhdWx0Py5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhUG9pbnRUeXBlKSB7XG5cdFx0XHRcdC8vIERhdGFQb2ludCB1c2UtY2FzZSB1c2luZyBEYXRhRmllbGREZWZhdWx0LlxuXHRcdFx0XHRjb25zdCBkYXRhUG9pbnREZWZhdWx0UHJvcGVydHk6IEVkbS5QcmltaXRpdmVUeXBlID0gcHJvcGVydHkuYW5ub3RhdGlvbnMuVUkuRGF0YUZpZWxkRGVmYXVsdDtcblx0XHRcdFx0dmFsdWVJbmRleCA9IF9wdXNoVW5pcXVlKHBhdGgsIHByb3BlcnR5KTtcblx0XHRcdFx0Ly8gTmV3IGZha2UgcHJvcGVydHkgY3JlYXRlZCBmb3IgdGhlIFJhdGluZy9Qcm9ncmVzcyBUYXJnZXQgVmFsdWUuIEl0J2xsIGJlIHVzZWQgZm9yIHRoZSBleHBvcnQgb24gc3BsaXQgbW9kZS5cblx0XHRcdFx0X3B1c2hVbmlxdWUoZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5LlRhcmdldC52YWx1ZSwgcHJvcGVydHkpO1xuXHRcdFx0XHR0YXJnZXRWYWx1ZSA9IChcblx0XHRcdFx0XHRkYXRhUG9pbnREZWZhdWx0UHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuVGFyZ2V0VmFsdWUgfHwgZGF0YVBvaW50RGVmYXVsdFByb3BlcnR5LlRhcmdldC4kdGFyZ2V0LlRhcmdldFZhbHVlLk1heGltdW1WYWx1ZVxuXHRcdFx0XHQpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19LyR7dGFyZ2V0VmFsdWV9YCk7XG5cdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5LlRhcmdldD8uJHRhcmdldD8uJFR5cGUgPT09IFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiKSB7XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzLmV4cG9ydFNldHRpbmdzQ29udGFjdFByb3BlcnR5ID1cblx0XHRcdFx0XHRwcm9wZXJ0eS5UYXJnZXQudmFsdWUuc3Vic3RyaW5nKDAsIHByb3BlcnR5LlRhcmdldC52YWx1ZS5pbmRleE9mKFwiL1wiKSArIDEpICsgcHJvcGVydHkuVGFyZ2V0LiR0YXJnZXQuZm4/LnBhdGg7XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eS5UYXJnZXQuJHRhcmdldC5mbi4kdGFyZ2V0KTtcblx0XHRcdFx0X2FwcGVuZFRlbXBsYXRlKGB7JHt2YWx1ZUluZGV4fX1gKTtcblx0XHRcdH0gZWxzZSBpZiAoIWlnbm9yZVNlbGYpIHtcblx0XHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5XG5cdFx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRcdF9hcHBlbmRUZW1wbGF0ZShgeyR7dmFsdWVJbmRleH19YCk7XG5cdFx0XHRcdGlmIChjdXJyZW5jeU9yVW5pdEFubm90YXRpb24pIHtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcy5leHBvcnRVbml0U3RyaW5nID0gYCR7Y3VycmVuY3lPclVuaXRBbm5vdGF0aW9ufWA7IC8vIEhhcmQtY29kZWQgY3VycmVuY3kvdW5pdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmVsYXRlZFByb3BlcnRpZXMgPSBfY29sbGVjdEFkZGl0aW9uYWxQcm9wZXJ0aWVzRm9yQW5hbHl0aWNhbFRhYmxlKHByb3BlcnR5LCBuYXZpZ2F0aW9uUGF0aFByZWZpeCwgdGFibGVUeXBlLCByZWxhdGVkUHJvcGVydGllcyk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKS5sZW5ndGggPiAwICYmIE9iamVjdC5rZXlzKHJlbGF0ZWRQcm9wZXJ0aWVzLnByb3BlcnRpZXMpLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0Ly8gQ29sbGVjdCB1bmRlcmx5aW5nIHByb3BlcnR5IGlmIG5vdCBjb2xsZWN0ZWQgYWxyZWFkeS5cblx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgYWRkaXRpb25hbFByb3BlcnRpZXMgYXJlIG1hZGUgYXZhaWxhYmxlIG9ubHkgdG8gY29tcGxleCBwcm9wZXJ0eSBpbmZvcy5cblx0XHRcdHZhbHVlSW5kZXggPSBfcHVzaFVuaXF1ZShwYXRoLCBwcm9wZXJ0eSk7XG5cdFx0XHRfYXBwZW5kVGVtcGxhdGUoYHske3ZhbHVlSW5kZXh9fWApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuLyoqXG4gKiBDb2xsZWN0IHByb3BlcnRpZXMgY29uc3VtZWQgYnkgYSBEYXRhRmllbGQuXG4gKiBUaGlzIGlzIGZvciBwb3B1bGF0aW5nIHRoZSBDb21wbGV4UHJvcGVydHlJbmZvcyBvZiB0aGUgdGFibGUgZGVsZWdhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRhRmllbGRBYnN0cmFjdFR5cGVzfSBkYXRhRmllbGQgVGhlIERhdGFGaWVsZCBmb3Igd2hpY2ggdGhlIHByb3BlcnRpZXMgbmVlZCB0byBiZSBpZGVudGlmaWVkLlxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGNvbnZlcnRlciBjb250ZXh0LlxuICogQHBhcmFtIHtUYWJsZVR5cGV9IHRhYmxlVHlwZSBUaGUgdGFibGUgdHlwZS5cbiAqIEBwYXJhbSB7Q29tcGxleFByb3BlcnR5SW5mb30gcmVsYXRlZFByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgaWRlbnRpZmllZCBzbyBmYXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGlzRW1iZWRkZWQgVHJ1ZSBpZiB0aGUgZGF0YWZpZWxkIGlzIGVtYmVkZGVkIGluIGFub3RoZXIgYW5ub3RhdGlvbiAoZS5nLiBGaWVsZEdyb3VwKS5cbiAqIEByZXR1cm5zIHtDb21wbGV4UHJvcGVydHlJbmZvfSBUaGUgcHJvcGVydGllcyByZWxhdGVkIHRvIHRoZSBEYXRhRmllbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0UmVsYXRlZFByb3BlcnRpZXNSZWN1cnNpdmVseShcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHRjb252ZXJ0ZXJDb250ZXh0OiBDb252ZXJ0ZXJDb250ZXh0LFxuXHR0YWJsZVR5cGU6IFRhYmxlVHlwZSxcblx0cmVsYXRlZFByb3BlcnRpZXM6IENvbXBsZXhQcm9wZXJ0eUluZm8gPSB7IHByb3BlcnRpZXM6IHt9LCBhZGRpdGlvbmFsUHJvcGVydGllczoge30gfSxcblx0aXNFbWJlZGRlZDogYm9vbGVhbiA9IGZhbHNlXG4pOiBDb21wbGV4UHJvcGVydHlJbmZvIHtcblx0aWYgKChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCB8fCBkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwpICYmIGRhdGFGaWVsZC5WYWx1ZSkge1xuXHRcdGNvbnN0IHByb3BlcnR5ID0gZGF0YUZpZWxkLlZhbHVlO1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0cHJvcGVydHkucGF0aCxcblx0XHRcdHByb3BlcnR5LiR0YXJnZXQsXG5cdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0ZmFsc2UsXG5cdFx0XHR0YWJsZVR5cGUsXG5cdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdGlzRW1iZWRkZWRcblx0XHQpO1xuXHRcdGNvbnN0IG5hdmlnYXRpb25QYXRoUHJlZml4ID0gX2dldE5hdmlnYXRpb25QYXRoUHJlZml4KHByb3BlcnR5LnBhdGgpO1xuXHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gX2NvbGxlY3RBZGRpdGlvbmFsUHJvcGVydGllc0ZvckFuYWx5dGljYWxUYWJsZShkYXRhRmllbGQsIG5hdmlnYXRpb25QYXRoUHJlZml4LCB0YWJsZVR5cGUsIHJlbGF0ZWRQcm9wZXJ0aWVzKTtcblx0fSBlbHNlIGlmIChkYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb24pIHtcblx0XHRzd2l0Y2ggKGRhdGFGaWVsZC5UYXJnZXQ/LiR0YXJnZXQ/LiRUeXBlKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkZpZWxkR3JvdXBUeXBlOlxuXHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LiR0YXJnZXQuRGF0YT8uZm9yRWFjaCgoaW5uZXJEYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMpID0+IHtcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllc1JlY3Vyc2l2ZWx5KFxuXHRcdFx0XHRcdFx0aW5uZXJEYXRhRmllbGQsXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVUeXBlLFxuXHRcdFx0XHRcdFx0cmVsYXRlZFByb3BlcnRpZXMsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGU6XG5cdFx0XHRcdHJlbGF0ZWRQcm9wZXJ0aWVzID0gY29sbGVjdFJlbGF0ZWRQcm9wZXJ0aWVzKFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5UYXJnZXQuJHRhcmdldC5WYWx1ZS5wYXRoLFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRpc0VtYmVkZGVkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbXVuaWNhdGlvbi52MS5Db250YWN0VHlwZVwiOlxuXHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyA9IGNvbGxlY3RSZWxhdGVkUHJvcGVydGllcyhcblx0XHRcdFx0XHRkYXRhRmllbGQuVGFyZ2V0LnZhbHVlLFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdGZhbHNlLFxuXHRcdFx0XHRcdHRhYmxlVHlwZSxcblx0XHRcdFx0XHRyZWxhdGVkUHJvcGVydGllcyxcblx0XHRcdFx0XHRpc0VtYmVkZGVkXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZWxhdGVkUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IGdldERhdGFGaWVsZERhdGFUeXBlID0gZnVuY3Rpb24gKG9EYXRhRmllbGQ6IERhdGFGaWVsZEFic3RyYWN0VHlwZXMgfCBQcm9wZXJ0eSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdGxldCBzRGF0YVR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpLiRUeXBlO1xuXHRzd2l0Y2ggKHNEYXRhVHlwZSkge1xuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoSW50ZW50QmFzZWROYXZpZ2F0aW9uOlxuXHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbjpcblx0XHRcdHNEYXRhVHlwZSA9IChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZCk/LlZhbHVlPy4kdGFyZ2V0Py50eXBlO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb246XG5cdFx0ZGVmYXVsdDpcblx0XHRcdGNvbnN0IHNEYXRhVHlwZUZvckRhdGFGaWVsZEZvckFubm90YXRpb24gPSAob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQuJFR5cGU7XG5cdFx0XHRpZiAoc0RhdGFUeXBlRm9yRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikge1xuXHRcdFx0XHRpZiAoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0LiRUeXBlID09PSBDb21tdW5pY2F0aW9uQW5ub3RhdGlvblR5cGVzLkNvbnRhY3RUeXBlKSB7XG5cdFx0XHRcdFx0c0RhdGFUeXBlID0gKCgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQgYXMgQ29udGFjdCk/LmZuIGFzIGFueSkuJHRhcmdldD8udHlwZTtcblx0XHRcdFx0fSBlbHNlIGlmICgob0RhdGFGaWVsZCBhcyBEYXRhRmllbGRGb3JBbm5vdGF0aW9uKS5UYXJnZXQ/LiR0YXJnZXQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFQb2ludFR5cGUpIHtcblx0XHRcdFx0XHRzRGF0YVR5cGUgPVxuXHRcdFx0XHRcdFx0KChvRGF0YUZpZWxkIGFzIERhdGFGaWVsZEZvckFubm90YXRpb24pLlRhcmdldD8uJHRhcmdldCBhcyBEYXRhUG9pbnQpPy5WYWx1ZT8uJFBhdGg/LiRUeXBlIHx8XG5cdFx0XHRcdFx0XHQoKG9EYXRhRmllbGQgYXMgRGF0YUZpZWxkRm9yQW5ub3RhdGlvbikuVGFyZ2V0Py4kdGFyZ2V0IGFzIERhdGFQb2ludCk/LlZhbHVlPy4kdGFyZ2V0LnR5cGU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gZS5nLiBGaWVsZEdyb3VwIG9yIENoYXJ0XG5cdFx0XHRcdFx0c0RhdGFUeXBlID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzRGF0YVR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0fVxuXG5cdHJldHVybiBzRGF0YVR5cGU7XG59O1xuIl19
@@ -1,3 +1,4 @@
1
+ import { Property } from "@sap-ux/annotation-converter";
1
2
  import {
2
3
  CommunicationAnnotationTypes,
3
4
  Contact,
@@ -10,11 +11,10 @@ import {
10
11
  UIAnnotationTypes
11
12
  } from "@sap-ux/vocabularies-types";
12
13
  import * as Edm from "@sap-ux/vocabularies-types/dist/Edm";
14
+ import { TableType } from "sap/fe/core/converters/controls/Common/Table";
13
15
  import { getDisplayMode, PropertyOrPath } from "sap/fe/core/templating/DisplayModeFormatter";
14
- import { Property } from "@sap-ux/annotation-converter";
15
16
  import { getAssociatedCurrencyProperty, getAssociatedUnitProperty, isProperty } from "sap/fe/core/templating/PropertyHelper";
16
17
  import ConverterContext from "../ConverterContext";
17
- import { TableType } from "sap/fe/core/converters/controls/Common/Table";
18
18
 
19
19
  export type ComplexPropertyInfo = {
20
20
  properties: Record<string, Property>;
@@ -23,13 +23,15 @@ export type ComplexPropertyInfo = {
23
23
  exportSettingsWrapping?: boolean;
24
24
  exportSettingsContactProperty?: string;
25
25
  visualSettingsToBeExcluded?: string;
26
+ exportUnitName?: string;
27
+ exportUnitString?: string;
26
28
  };
27
29
 
28
30
  /**
29
31
  * Identifies if the given dataFieldAbstract that is passed is a "DataFieldForActionAbstract".
30
32
  * DataFieldForActionAbstract has an inline action defined.
31
33
  *
32
- * @param {DataFieldAbstractTypes} dataField Data field to be evaluated
34
+ * @param {DataFieldAbstractTypes} dataField DataField to be evaluated
33
35
  * @returns {boolean} Validates that dataField is a DataFieldForActionAbstractType
34
36
  */
35
37
  export function isDataFieldForActionAbstract(dataField: DataFieldAbstractTypes): dataField is DataFieldForActionAbstractTypes {
@@ -40,7 +42,7 @@ export function isDataFieldForActionAbstract(dataField: DataFieldAbstractTypes):
40
42
  * Identifies if the given dataFieldAbstract that is passed is a "DataField".
41
43
  * DataField has a value defined.
42
44
  *
43
- * @param {DataFieldAbstractTypes} dataField Data field to be evaluated
45
+ * @param {DataFieldAbstractTypes} dataField DataField to be evaluated
44
46
  * @returns {boolean} Validate that dataField is a DataFieldTypes
45
47
  */
46
48
  export function isDataFieldTypes(dataField: DataFieldAbstractTypes): dataField is DataFieldTypes {
@@ -48,7 +50,7 @@ export function isDataFieldTypes(dataField: DataFieldAbstractTypes): dataField i
48
50
  }
49
51
 
50
52
  /**
51
- * Returns whether given data field has a static hidden annotation.
53
+ * Returns whether given DataField has a static hidden annotation.
52
54
  *
53
55
  * @param {DataFieldAbstractTypes} dataField The datafield to check
54
56
  * @returns {boolean} `true` if datafield or referenced property has a static Hidden annotation, false else
@@ -123,6 +125,7 @@ function _collectAdditionalPropertiesForAnalyticalTable(
123
125
  * @param ignoreSelf Whether to exclude the same property from related properties.
124
126
  * @param tableType The table type.
125
127
  * @param relatedProperties The related properties identified so far.
128
+ * @param addUnitInTemplate True if the unit/currency property needs to be added in the export template
126
129
  * @returns {ComplexPropertyInfo} The related properties identified.
127
130
  */
128
131
  export function collectRelatedProperties(
@@ -131,7 +134,8 @@ export function collectRelatedProperties(
131
134
  converterContext: ConverterContext,
132
135
  ignoreSelf: boolean,
133
136
  tableType: TableType,
134
- relatedProperties: ComplexPropertyInfo = { properties: {}, additionalProperties: {} }
137
+ relatedProperties: ComplexPropertyInfo = { properties: {}, additionalProperties: {} },
138
+ addUnitInTemplate: boolean = false
135
139
  ): ComplexPropertyInfo {
136
140
  /**
137
141
  * Helper to push unique related properties.
@@ -183,7 +187,6 @@ export function collectRelatedProperties(
183
187
  case "Value":
184
188
  valueIndex = _pushUnique(path, property);
185
189
  _appendTemplate(`{${valueIndex}}`);
186
- relatedProperties.visualSettingsToBeExcluded = textAnnotationPropertyPath;
187
190
  break;
188
191
 
189
192
  case "Description":
@@ -213,7 +216,11 @@ export function collectRelatedProperties(
213
216
  if (currencyOrUoMProperty && currencyOrUnitAnnotation?.$target) {
214
217
  valueIndex = _pushUnique(path, property);
215
218
  currencyOrUoMIndex = _pushUnique(currencyOrUoMProperty.name, currencyOrUnitAnnotation.$target);
216
- _appendTemplate(`{${valueIndex}} {${currencyOrUoMIndex}}`);
219
+ if (addUnitInTemplate) {
220
+ _appendTemplate(`{${valueIndex}} {${currencyOrUoMIndex}}`);
221
+ } else {
222
+ relatedProperties.exportUnitName = currencyOrUoMProperty.name;
223
+ }
217
224
  } else if (property.Target?.$target?.Visualization) {
218
225
  const dataPointProperty: Edm.PrimitiveType = property.Target.$target.Value.$target;
219
226
  valueIndex = _pushUnique(path, dataPointProperty);
@@ -240,6 +247,9 @@ export function collectRelatedProperties(
240
247
  // Collect underlying property
241
248
  valueIndex = _pushUnique(path, property);
242
249
  _appendTemplate(`{${valueIndex}}`);
250
+ if (currencyOrUnitAnnotation) {
251
+ relatedProperties.exportUnitString = `${currencyOrUnitAnnotation}`; // Hard-coded currency/unit
252
+ }
243
253
  }
244
254
  }
245
255
 
@@ -256,20 +266,22 @@ export function collectRelatedProperties(
256
266
  }
257
267
 
258
268
  /**
259
- * Collect properties consumed by a Data Field.
269
+ * Collect properties consumed by a DataField.
260
270
  * This is for populating the ComplexPropertyInfos of the table delegate.
261
271
  *
262
- * @param {DataFieldAbstractTypes} dataField The Data Field for which the properties need to be identified.
272
+ * @param {DataFieldAbstractTypes} dataField The DataField for which the properties need to be identified.
263
273
  * @param converterContext The converter context.
264
274
  * @param {TableType} tableType The table type.
265
275
  * @param {ComplexPropertyInfo} relatedProperties The properties identified so far.
266
- * @returns {ComplexPropertyInfo} The properties related to the Data Field.
276
+ * @param {boolean} isEmbedded True if the datafield is embedded in another annotation (e.g. FieldGroup).
277
+ * @returns {ComplexPropertyInfo} The properties related to the DataField.
267
278
  */
268
279
  export function collectRelatedPropertiesRecursively(
269
280
  dataField: DataFieldAbstractTypes,
270
281
  converterContext: ConverterContext,
271
282
  tableType: TableType,
272
- relatedProperties: ComplexPropertyInfo = { properties: {}, additionalProperties: {} }
283
+ relatedProperties: ComplexPropertyInfo = { properties: {}, additionalProperties: {} },
284
+ isEmbedded: boolean = false
273
285
  ): ComplexPropertyInfo {
274
286
  if ((dataField.$Type === UIAnnotationTypes.DataField || dataField.$Type === UIAnnotationTypes.DataFieldWithUrl) && dataField.Value) {
275
287
  const property = dataField.Value;
@@ -279,7 +291,8 @@ export function collectRelatedPropertiesRecursively(
279
291
  converterContext,
280
292
  false,
281
293
  tableType,
282
- relatedProperties
294
+ relatedProperties,
295
+ isEmbedded
283
296
  );
284
297
  const navigationPathPrefix = _getNavigationPathPrefix(property.path);
285
298
  relatedProperties = _collectAdditionalPropertiesForAnalyticalTable(dataField, navigationPathPrefix, tableType, relatedProperties);
@@ -287,7 +300,13 @@ export function collectRelatedPropertiesRecursively(
287
300
  switch (dataField.Target?.$target?.$Type) {
288
301
  case UIAnnotationTypes.FieldGroupType:
289
302
  dataField.Target.$target.Data?.forEach((innerDataField: DataFieldAbstractTypes) => {
290
- relatedProperties = collectRelatedPropertiesRecursively(innerDataField, converterContext, tableType, relatedProperties);
303
+ relatedProperties = collectRelatedPropertiesRecursively(
304
+ innerDataField,
305
+ converterContext,
306
+ tableType,
307
+ relatedProperties,
308
+ true
309
+ );
291
310
  });
292
311
  break;
293
312
 
@@ -298,7 +317,8 @@ export function collectRelatedPropertiesRecursively(
298
317
  converterContext,
299
318
  false,
300
319
  tableType,
301
- relatedProperties
320
+ relatedProperties,
321
+ isEmbedded
302
322
  );
303
323
  break;
304
324
 
@@ -309,7 +329,8 @@ export function collectRelatedPropertiesRecursively(
309
329
  converterContext,
310
330
  false,
311
331
  tableType,
312
- relatedProperties
332
+ relatedProperties,
333
+ isEmbedded
313
334
  );
314
335
  break;
315
336
  }
@@ -318,7 +339,7 @@ export function collectRelatedPropertiesRecursively(
318
339
  return relatedProperties;
319
340
  }
320
341
 
321
- export const getDataFieldDataType = function(oDataField: DataFieldAbstractTypes | Property): string | undefined {
342
+ export const getDataFieldDataType = function (oDataField: DataFieldAbstractTypes | Property): string | undefined {
322
343
  let sDataType: string | undefined = (oDataField as DataFieldAbstractTypes).$Type;
323
344
  switch (sDataType) {
324
345
  case UIAnnotationTypes.DataFieldForAction:
@@ -329,6 +350,8 @@ export const getDataFieldDataType = function(oDataField: DataFieldAbstractTypes
329
350
  case UIAnnotationTypes.DataField:
330
351
  case UIAnnotationTypes.DataFieldWithNavigationPath:
331
352
  case UIAnnotationTypes.DataFieldWithUrl:
353
+ case UIAnnotationTypes.DataFieldWithIntentBasedNavigation:
354
+ case UIAnnotationTypes.DataFieldWithAction:
332
355
  sDataType = (oDataField as DataField)?.Value?.$target?.type;
333
356
  break;
334
357