@sapui5/sap.fe.core 1.102.2 → 1.104.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 (324) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +73 -30
  4. package/src/sap/fe/core/AppComponent.ts +65 -43
  5. package/src/sap/fe/core/AppStateHandler.js +82 -70
  6. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  7. package/src/sap/fe/core/BaseController.js +11 -9
  8. package/src/sap/fe/core/BaseController.ts +15 -13
  9. package/src/sap/fe/core/CommonUtils.js +227 -126
  10. package/src/sap/fe/core/CommonUtils.ts +240 -163
  11. package/src/sap/fe/core/ExtensionAPI.js +24 -27
  12. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  13. package/src/sap/fe/core/PageController.js +4 -4
  14. package/src/sap/fe/core/PageController.ts +4 -5
  15. package/src/sap/fe/core/TemplateComponent.js +1 -1
  16. package/src/sap/fe/core/TemplateComponent.ts +6 -6
  17. package/src/sap/fe/core/TemplateModel.js +1 -1
  18. package/src/sap/fe/core/TemplateModel.ts +1 -1
  19. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +1 -1
  20. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +181 -43
  22. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +150 -24
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +585 -210
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +246 -96
  25. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  26. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  27. package/src/sap/fe/core/controllerextensions/EditFlow.js +379 -330
  28. package/src/sap/fe/core/controllerextensions/EditFlow.ts +253 -245
  29. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +9 -9
  30. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  31. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +101 -74
  32. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +69 -79
  33. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +67 -67
  34. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +85 -77
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +103 -99
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +66 -68
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  39. package/src/sap/fe/core/controllerextensions/MassEdit.js +9 -9
  40. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  41. package/src/sap/fe/core/controllerextensions/MessageHandler.js +20 -12
  42. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  43. package/src/sap/fe/core/controllerextensions/PageReady.js +97 -25
  44. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  45. package/src/sap/fe/core/controllerextensions/Paginator.js +21 -22
  46. package/src/sap/fe/core/controllerextensions/Paginator.ts +24 -25
  47. package/src/sap/fe/core/controllerextensions/Placeholder.js +4 -6
  48. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  49. package/src/sap/fe/core/controllerextensions/Routing.js +10 -11
  50. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  51. package/src/sap/fe/core/controllerextensions/Share.js +170 -139
  52. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +46 -50
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +200 -131
  56. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  57. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  58. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  59. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +11 -10
  60. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  61. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -2
  62. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +4 -4
  63. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +7 -9
  64. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +18 -19
  65. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +190 -141
  66. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +258 -210
  67. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +183 -125
  68. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +213 -156
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +164 -140
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +180 -150
  71. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +24 -26
  72. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +35 -33
  73. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +71 -41
  74. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +102 -82
  75. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +61 -71
  76. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +56 -64
  77. package/src/sap/fe/core/controls/Any.js +9 -5
  78. package/src/sap/fe/core/controls/Any.ts +10 -4
  79. package/src/sap/fe/core/controls/CommandExecution.js +11 -25
  80. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  81. package/src/sap/fe/core/controls/ConditionalWrapper.js +2 -2
  82. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  83. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +22 -22
  84. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  85. package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -2
  86. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  87. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  88. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  89. package/src/sap/fe/core/controls/FieldWrapper.js +2 -2
  90. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  91. package/src/sap/fe/core/controls/FileWrapper.js +7 -2
  92. package/src/sap/fe/core/controls/FileWrapper.ts +15 -11
  93. package/src/sap/fe/core/controls/FilterBar.js +6 -2
  94. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  95. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  96. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  97. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  98. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  99. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +3 -3
  100. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +16 -12
  101. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  102. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -3
  103. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  104. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  105. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  106. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  107. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  108. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  109. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  110. package/src/sap/fe/core/converters/ConverterContext.js +26 -33
  111. package/src/sap/fe/core/converters/ConverterContext.ts +52 -61
  112. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  113. package/src/sap/fe/core/converters/ManifestSettings.ts +17 -15
  114. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  115. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  116. package/src/sap/fe/core/converters/MetaModelConverter.js +64 -35
  117. package/src/sap/fe/core/converters/MetaModelConverter.ts +154 -129
  118. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  119. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  120. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  121. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  122. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1911 -1495
  123. package/src/sap/fe/core/converters/controls/Common/Action.js +50 -41
  124. package/src/sap/fe/core/converters/controls/Common/Action.ts +56 -46
  125. package/src/sap/fe/core/converters/controls/Common/Chart.js +14 -14
  126. package/src/sap/fe/core/converters/controls/Common/Chart.ts +26 -33
  127. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  128. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  129. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +30 -28
  130. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +60 -61
  131. package/src/sap/fe/core/converters/controls/Common/Form.js +27 -28
  132. package/src/sap/fe/core/converters/controls/Common/Form.ts +44 -57
  133. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  134. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  135. package/src/sap/fe/core/converters/controls/Common/Table.js +181 -197
  136. package/src/sap/fe/core/converters/controls/Common/Table.ts +251 -280
  137. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  138. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +144 -141
  139. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +45 -41
  140. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +65 -59
  141. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  142. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  143. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  144. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  145. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +67 -64
  146. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +69 -66
  147. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +77 -73
  148. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +101 -97
  149. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  150. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  151. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  152. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  153. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -4
  154. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +9 -9
  155. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  156. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  157. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  158. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  159. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  160. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  161. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  162. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  163. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +46 -62
  164. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +54 -82
  165. package/src/sap/fe/core/converters/templates/ListReportConverter.js +55 -42
  166. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +81 -66
  167. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +39 -38
  168. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +52 -61
  169. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  170. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  171. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  172. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  173. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  174. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  175. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  176. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  177. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  178. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  179. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  180. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  181. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  182. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  183. package/src/sap/fe/core/helpers/AppStartupHelper.js +15 -15
  184. package/src/sap/fe/core/helpers/AppStartupHelper.ts +37 -40
  185. package/src/sap/fe/core/helpers/BindingToolkit.js +1832 -0
  186. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +396 -269
  187. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  188. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  189. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  190. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  191. package/src/sap/fe/core/helpers/EditState.js +1 -6
  192. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  193. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  194. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  195. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  196. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  197. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  198. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  199. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  200. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  201. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  202. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  203. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  204. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  205. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  206. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  207. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  208. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  209. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  210. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  211. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  212. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  213. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  214. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  215. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  216. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  217. package/src/sap/fe/core/jsx-runtime/jsx-control.js +99 -0
  218. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +82 -0
  219. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  220. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  221. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  222. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  223. package/src/sap/fe/core/library.js +42 -3
  224. package/src/sap/fe/core/library.ts +38 -0
  225. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  226. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  227. package/src/sap/fe/core/messagebundle.properties +39 -63
  228. package/src/sap/fe/core/messagebundle_ar.properties +25 -39
  229. package/src/sap/fe/core/messagebundle_bg.properties +25 -39
  230. package/src/sap/fe/core/messagebundle_ca.properties +25 -39
  231. package/src/sap/fe/core/messagebundle_cs.properties +25 -39
  232. package/src/sap/fe/core/messagebundle_cy.properties +25 -39
  233. package/src/sap/fe/core/messagebundle_da.properties +25 -39
  234. package/src/sap/fe/core/messagebundle_de.properties +25 -39
  235. package/src/sap/fe/core/messagebundle_el.properties +26 -40
  236. package/src/sap/fe/core/messagebundle_en.properties +25 -39
  237. package/src/sap/fe/core/messagebundle_en_GB.properties +25 -39
  238. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -39
  239. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +25 -39
  240. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +26 -18
  241. package/src/sap/fe/core/messagebundle_es.properties +27 -41
  242. package/src/sap/fe/core/messagebundle_es_MX.properties +25 -39
  243. package/src/sap/fe/core/messagebundle_et.properties +25 -39
  244. package/src/sap/fe/core/messagebundle_fi.properties +25 -39
  245. package/src/sap/fe/core/messagebundle_fr.properties +26 -40
  246. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -39
  247. package/src/sap/fe/core/messagebundle_hi.properties +25 -39
  248. package/src/sap/fe/core/messagebundle_hr.properties +25 -39
  249. package/src/sap/fe/core/messagebundle_hu.properties +25 -39
  250. package/src/sap/fe/core/messagebundle_id.properties +25 -39
  251. package/src/sap/fe/core/messagebundle_it.properties +41 -55
  252. package/src/sap/fe/core/messagebundle_iw.properties +25 -39
  253. package/src/sap/fe/core/messagebundle_ja.properties +25 -39
  254. package/src/sap/fe/core/messagebundle_kk.properties +25 -39
  255. package/src/sap/fe/core/messagebundle_ko.properties +30 -44
  256. package/src/sap/fe/core/messagebundle_lt.properties +25 -39
  257. package/src/sap/fe/core/messagebundle_lv.properties +25 -39
  258. package/src/sap/fe/core/messagebundle_ms.properties +25 -39
  259. package/src/sap/fe/core/messagebundle_nl.properties +27 -41
  260. package/src/sap/fe/core/messagebundle_no.properties +25 -39
  261. package/src/sap/fe/core/messagebundle_pl.properties +26 -40
  262. package/src/sap/fe/core/messagebundle_pt.properties +26 -40
  263. package/src/sap/fe/core/messagebundle_pt_PT.properties +25 -39
  264. package/src/sap/fe/core/messagebundle_ro.properties +25 -39
  265. package/src/sap/fe/core/messagebundle_ru.properties +25 -39
  266. package/src/sap/fe/core/messagebundle_sh.properties +25 -39
  267. package/src/sap/fe/core/messagebundle_sk.properties +25 -39
  268. package/src/sap/fe/core/messagebundle_sl.properties +25 -39
  269. package/src/sap/fe/core/messagebundle_sv.properties +25 -39
  270. package/src/sap/fe/core/messagebundle_th.properties +25 -39
  271. package/src/sap/fe/core/messagebundle_tr.properties +25 -39
  272. package/src/sap/fe/core/messagebundle_uk.properties +25 -39
  273. package/src/sap/fe/core/messagebundle_vi.properties +25 -39
  274. package/src/sap/fe/core/messagebundle_zh_CN.properties +25 -39
  275. package/src/sap/fe/core/messagebundle_zh_TW.properties +25 -39
  276. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +2 -2
  277. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  278. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +97 -69
  279. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +68 -69
  280. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  281. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  282. package/src/sap/fe/core/services/NavigationServiceFactory.js +61 -49
  283. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  284. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +2 -2
  285. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  286. package/src/sap/fe/core/services/RoutingServiceFactory.js +55 -55
  287. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  288. package/src/sap/fe/core/services/ShellServicesFactory.js +92 -76
  289. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  290. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +61 -61
  291. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  292. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +224 -198
  293. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +138 -139
  294. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  295. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  296. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  297. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  298. package/src/sap/fe/core/templating/CommonFormatters.js +84 -0
  299. package/src/sap/fe/core/templating/CommonFormatters.ts +86 -0
  300. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  301. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  302. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  303. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  304. package/src/sap/fe/core/templating/DataModelPathHelper.js +16 -15
  305. package/src/sap/fe/core/templating/DataModelPathHelper.ts +42 -32
  306. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  307. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  308. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  309. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  310. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  311. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  312. package/src/sap/fe/core/templating/FilterHelper.js +16 -15
  313. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  314. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  315. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  316. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  317. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  318. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  319. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  320. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  321. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  322. package/src/sap/fe/core/type/Email.js +2 -2
  323. package/src/sap/fe/core/type/Email.ts +2 -2
  324. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -1,7 +1,7 @@
1
1
  import { defineUI5Class } from "sap/fe/core/helpers/ClassSupport";
2
2
  import BaseObject from "sap/ui/base/Object";
3
3
  import JSONModel from "sap/ui/model/json/JSONModel";
4
- import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
4
+ import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
5
5
 
6
6
  @defineUI5Class("sap.fe.core.TemplateModel")
7
7
  class TemplateModel extends BaseObject {
@@ -57,4 +57,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/ObjectPath", "sap/ui/model/json/JS
57
57
 
58
58
  return AttributeModel;
59
59
  }, false);
60
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkF0dHJpYnV0ZU1vZGVsLnRzIl0sIm5hbWVzIjpbIkF0dHJpYnV0ZU1vZGVsIiwib05vZGUiLCJvUHJvcHMiLCJidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiIsIiQkdmFsdWVBc1Byb21pc2UiLCJfZ2V0T2JqZWN0Iiwic1BhdGgiLCJ1bmRlZmluZWQiLCJvVmFsdWUiLCJPYmplY3RQYXRoIiwiZ2V0IiwicmVwbGFjZSIsImhhc093blByb3BlcnR5IiwiaW5kZXhPZiIsIkxvZyIsImVycm9yIiwibmFtZSIsImdldEF0dHJpYnV0ZSIsIkpTT05Nb2RlbCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztNQUdNQSxjOzs7QUFDTCw0QkFDa0JDLEtBRGxCLEVBRWtCQyxNQUZsQixFQUdrQkMsdUJBSGxCLEVBSUU7QUFBQTs7QUFDRDtBQURDLFlBSGdCRixLQUdoQixHQUhnQkEsS0FHaEI7QUFBQSxZQUZnQkMsTUFFaEIsR0FGZ0JBLE1BRWhCO0FBQUEsWUFEZ0JDLHVCQUNoQixHQURnQkEsdUJBQ2hCO0FBRUQsb0NBQWNDLGdCQUFkLEdBQWlDLElBQWpDO0FBRkM7QUFHRDs7OztXQUNEQyxVLEdBQUEsb0JBQVdDLEtBQVgsRUFBeUM7QUFDeEMsVUFBSSxDQUFDQSxLQUFLLEtBQUtDLFNBQVYsSUFBdUJELEtBQUssS0FBSyxFQUFsQyxLQUF5QyxLQUFLSixNQUFsRCxFQUEwRDtBQUN6RCxlQUFPLEtBQUtBLE1BQVo7QUFDQSxPQUh1QyxDQUl4Qzs7O0FBQ0EsVUFBTU0sTUFBTSxHQUFHQyxVQUFVLENBQUNDLEdBQVgsQ0FBZUosS0FBSyxDQUFDSyxPQUFOLENBQWMsS0FBZCxFQUFxQixHQUFyQixDQUFmLEVBQTBDLEtBQUtULE1BQS9DLENBQWY7O0FBQ0EsVUFBSU0sTUFBTSxLQUFLRCxTQUFmLEVBQTBCO0FBQ3pCLGVBQU9DLE1BQVA7QUFDQSxPQVJ1QyxDQVN4Qzs7O0FBQ0EsVUFBSSxLQUFLTixNQUFMLElBQWUsS0FBS0EsTUFBTCxDQUFZVSxjQUFaLENBQTJCTixLQUEzQixDQUFuQixFQUFzRDtBQUNyRCxlQUFPLEtBQUtKLE1BQUwsQ0FBWUksS0FBWixDQUFQO0FBQ0E7O0FBQ0QsVUFBSUEsS0FBSyxDQUFDTyxPQUFOLENBQWMsR0FBZCxNQUF1QixDQUFDLENBQXhCLElBQTZCUCxLQUFLLENBQUNPLE9BQU4sQ0FBYyxHQUFkLE1BQXVCLENBQUMsQ0FBekQsRUFBNEQ7QUFDM0Q7QUFDQUMsUUFBQUEsR0FBRyxDQUFDQyxLQUFKLDRCQUE4QlQsS0FBOUIsZ0NBQXlELEtBQUtILHVCQUFMLENBQTZCYSxJQUF0RixHQUYyRCxDQUczRDtBQUNBOztBQUNELGFBQU8sS0FBS2YsS0FBTCxDQUFXZ0IsWUFBWCxDQUF3QlgsS0FBeEIsQ0FBUDtBQUNBLEs7OztJQTVCMkJZLFM7O1NBK0JkbEIsYyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgeyBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcblxuY2xhc3MgQXR0cmlidXRlTW9kZWwgZXh0ZW5kcyBKU09OTW9kZWwge1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9Ob2RlOiBFbGVtZW50LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb1Byb3BzOiBhbnksXG5cdFx0cHJpdmF0ZSByZWFkb25seSBidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbjogQnVpbGRpbmdCbG9ja0RlZmluaXRpb25cblx0KSB7XG5cdFx0c3VwZXIoKTtcblx0XHQodGhpcyBhcyBhbnkpLiQkdmFsdWVBc1Byb21pc2UgPSB0cnVlO1xuXHR9XG5cdF9nZXRPYmplY3Qoc1BhdGg6IGFueSAvKm9Db250ZXh0OiBhbnkqLykge1xuXHRcdGlmICgoc1BhdGggPT09IHVuZGVmaW5lZCB8fCBzUGF0aCA9PT0gXCJcIikgJiYgdGhpcy5vUHJvcHMpIHtcblx0XHRcdHJldHVybiB0aGlzLm9Qcm9wcztcblx0XHR9XG5cdFx0Ly8ganVzdCByZXR1cm4gdGhlIGF0dHJpYnV0ZSAtIHdlIGNhbid0IHZhbGlkYXRlIHRoZW0gYW5kIHdlIGRvbid0IHN1cHBvcnQgYWdncmVnYXRpb25zIGZvciBub3dcblx0XHRjb25zdCBvVmFsdWUgPSBPYmplY3RQYXRoLmdldChzUGF0aC5yZXBsYWNlKC9cXC8vZywgXCIuXCIpLCB0aGlzLm9Qcm9wcyk7XG5cdFx0aWYgKG9WYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gb1ZhbHVlO1xuXHRcdH1cblx0XHQvLyBEZWFsIHdpdGggdW5kZWZpbmVkIHByb3BlcnRpZXNcblx0XHRpZiAodGhpcy5vUHJvcHMgJiYgdGhpcy5vUHJvcHMuaGFzT3duUHJvcGVydHkoc1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vUHJvcHNbc1BhdGhdO1xuXHRcdH1cblx0XHRpZiAoc1BhdGguaW5kZXhPZihcIjpcIikgPT09IC0xICYmIHNQYXRoLmluZGV4T2YoXCIvXCIpID09PSAtMSkge1xuXHRcdFx0Ly8gR2xvdmVzIGFyZSBvZmYsIGlmIHlvdSBoYXZlIHRoaXMgZXJyb3IgeW91IGZvcmdvdCB0byBkZWZpbmUgeW91ciBwcm9wZXJ0eSBvbiB5b3VyIG1ldGFkYXRhIGJ1dCBhcmUgc3RpbGwgdXNpbmcgaXQgaW4gdGhlIHVuZGVybHlpbmcgY29kZVxuXHRcdFx0TG9nLmVycm9yKGBNaXNzaW5nIHByb3BlcnR5ICR7c1BhdGh9IG9uIG1hY3JvIG1ldGFkYXRhICR7dGhpcy5idWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lfWApO1xuXHRcdFx0Ly90aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgcHJvcGVydHkgJHtzUGF0aH0gb24gbWFjcm8gbWV0YWRhdGEgJHt0aGlzLmJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWV9YCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm9Ob2RlLmdldEF0dHJpYnV0ZShzUGF0aCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXR0cmlidXRlTW9kZWw7XG4iXX0=
60
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkF0dHJpYnV0ZU1vZGVsLnRzIl0sIm5hbWVzIjpbIkF0dHJpYnV0ZU1vZGVsIiwib05vZGUiLCJvUHJvcHMiLCJidWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiIsIiQkdmFsdWVBc1Byb21pc2UiLCJfZ2V0T2JqZWN0Iiwic1BhdGgiLCJ1bmRlZmluZWQiLCJvVmFsdWUiLCJPYmplY3RQYXRoIiwiZ2V0IiwicmVwbGFjZSIsImhhc093blByb3BlcnR5IiwiaW5kZXhPZiIsIkxvZyIsImVycm9yIiwibmFtZSIsImdldEF0dHJpYnV0ZSIsIkpTT05Nb2RlbCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztNQUdNQSxjOzs7QUFDTCw0QkFDa0JDLEtBRGxCLEVBRWtCQyxNQUZsQixFQUdrQkMsdUJBSGxCLEVBSUU7QUFBQTs7QUFDRDtBQURDLFlBSGdCRixLQUdoQixHQUhnQkEsS0FHaEI7QUFBQSxZQUZnQkMsTUFFaEIsR0FGZ0JBLE1BRWhCO0FBQUEsWUFEZ0JDLHVCQUNoQixHQURnQkEsdUJBQ2hCO0FBRUQsb0NBQWNDLGdCQUFkLEdBQWlDLElBQWpDO0FBRkM7QUFHRDs7OztXQUNEQyxVLEdBQUEsb0JBQVdDLEtBQVgsRUFBeUM7QUFDeEMsVUFBSSxDQUFDQSxLQUFLLEtBQUtDLFNBQVYsSUFBdUJELEtBQUssS0FBSyxFQUFsQyxLQUF5QyxLQUFLSixNQUFsRCxFQUEwRDtBQUN6RCxlQUFPLEtBQUtBLE1BQVo7QUFDQSxPQUh1QyxDQUl4Qzs7O0FBQ0EsVUFBTU0sTUFBTSxHQUFHQyxVQUFVLENBQUNDLEdBQVgsQ0FBZUosS0FBSyxDQUFDSyxPQUFOLENBQWMsS0FBZCxFQUFxQixHQUFyQixDQUFmLEVBQTBDLEtBQUtULE1BQS9DLENBQWY7O0FBQ0EsVUFBSU0sTUFBTSxLQUFLRCxTQUFmLEVBQTBCO0FBQ3pCLGVBQU9DLE1BQVA7QUFDQSxPQVJ1QyxDQVN4Qzs7O0FBQ0EsVUFBSSxLQUFLTixNQUFMLElBQWUsS0FBS0EsTUFBTCxDQUFZVSxjQUFaLENBQTJCTixLQUEzQixDQUFuQixFQUFzRDtBQUNyRCxlQUFPLEtBQUtKLE1BQUwsQ0FBWUksS0FBWixDQUFQO0FBQ0E7O0FBQ0QsVUFBSUEsS0FBSyxDQUFDTyxPQUFOLENBQWMsR0FBZCxNQUF1QixDQUFDLENBQXhCLElBQTZCUCxLQUFLLENBQUNPLE9BQU4sQ0FBYyxHQUFkLE1BQXVCLENBQUMsQ0FBekQsRUFBNEQ7QUFDM0Q7QUFDQUMsUUFBQUEsR0FBRyxDQUFDQyxLQUFKLDRCQUE4QlQsS0FBOUIsZ0NBQXlELEtBQUtILHVCQUFMLENBQTZCYSxJQUF0RixHQUYyRCxDQUczRDtBQUNBOztBQUNELGFBQU8sS0FBS2YsS0FBTCxDQUFXZ0IsWUFBWCxDQUF3QlgsS0FBeEIsQ0FBUDtBQUNBLEs7OztJQTVCMkJZLFM7O1NBK0JkbEIsYyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgT2JqZWN0UGF0aCBmcm9tIFwic2FwL2Jhc2UvdXRpbC9PYmplY3RQYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5jbGFzcyBBdHRyaWJ1dGVNb2RlbCBleHRlbmRzIEpTT05Nb2RlbCB7XG5cdGNvbnN0cnVjdG9yKFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb05vZGU6IEVsZW1lbnQsXG5cdFx0cHJpdmF0ZSByZWFkb25seSBvUHJvcHM6IGFueSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IGJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblxuXHQpIHtcblx0XHRzdXBlcigpO1xuXHRcdCh0aGlzIGFzIGFueSkuJCR2YWx1ZUFzUHJvbWlzZSA9IHRydWU7XG5cdH1cblx0X2dldE9iamVjdChzUGF0aDogYW55IC8qb0NvbnRleHQ6IGFueSovKSB7XG5cdFx0aWYgKChzUGF0aCA9PT0gdW5kZWZpbmVkIHx8IHNQYXRoID09PSBcIlwiKSAmJiB0aGlzLm9Qcm9wcykge1xuXHRcdFx0cmV0dXJuIHRoaXMub1Byb3BzO1xuXHRcdH1cblx0XHQvLyBqdXN0IHJldHVybiB0aGUgYXR0cmlidXRlIC0gd2UgY2FuJ3QgdmFsaWRhdGUgdGhlbSBhbmQgd2UgZG9uJ3Qgc3VwcG9ydCBhZ2dyZWdhdGlvbnMgZm9yIG5vd1xuXHRcdGNvbnN0IG9WYWx1ZSA9IE9iamVjdFBhdGguZ2V0KHNQYXRoLnJlcGxhY2UoL1xcLy9nLCBcIi5cIiksIHRoaXMub1Byb3BzKTtcblx0XHRpZiAob1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiBvVmFsdWU7XG5cdFx0fVxuXHRcdC8vIERlYWwgd2l0aCB1bmRlZmluZWQgcHJvcGVydGllc1xuXHRcdGlmICh0aGlzLm9Qcm9wcyAmJiB0aGlzLm9Qcm9wcy5oYXNPd25Qcm9wZXJ0eShzUGF0aCkpIHtcblx0XHRcdHJldHVybiB0aGlzLm9Qcm9wc1tzUGF0aF07XG5cdFx0fVxuXHRcdGlmIChzUGF0aC5pbmRleE9mKFwiOlwiKSA9PT0gLTEgJiYgc1BhdGguaW5kZXhPZihcIi9cIikgPT09IC0xKSB7XG5cdFx0XHQvLyBHbG92ZXMgYXJlIG9mZiwgaWYgeW91IGhhdmUgdGhpcyBlcnJvciB5b3UgZm9yZ290IHRvIGRlZmluZSB5b3VyIHByb3BlcnR5IG9uIHlvdXIgbWV0YWRhdGEgYnV0IGFyZSBzdGlsbCB1c2luZyBpdCBpbiB0aGUgdW5kZXJseWluZyBjb2RlXG5cdFx0XHRMb2cuZXJyb3IoYE1pc3NpbmcgcHJvcGVydHkgJHtzUGF0aH0gb24gbWFjcm8gbWV0YWRhdGEgJHt0aGlzLmJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWV9YCk7XG5cdFx0XHQvL3Rocm93IG5ldyBFcnJvcihgTWlzc2luZyBwcm9wZXJ0eSAke3NQYXRofSBvbiBtYWNybyBtZXRhZGF0YSAke3RoaXMuYnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZX1gKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMub05vZGUuZ2V0QXR0cmlidXRlKHNQYXRoKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdHRyaWJ1dGVNb2RlbDtcbiJdfQ==
@@ -1,6 +1,6 @@
1
1
  import Log from "sap/base/Log";
2
2
  import ObjectPath from "sap/base/util/ObjectPath";
3
- import { BuildingBlockDefinition } from "sap/fe/core/buildingBlocks/BuildingBlock";
3
+ import type { BuildingBlockDefinition } from "sap/fe/core/buildingBlocks/BuildingBlock";
4
4
  import JSONModel from "sap/ui/model/json/JSONModel";
5
5
 
6
6
  class AttributeModel extends JSONModel {
@@ -2,20 +2,37 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/helpers/StableIdHelper"], function (deepClone, BuildingBlockRuntime, StableIdHelper) {
5
+ sap.ui.define(["sap/base/util/deepClone", "sap/base/util/merge", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/StableIdHelper", "sap/ui/base/ManagedObject", "sap/ui/core/Component", "sap/ui/core/Fragment", "sap/ui/core/util/XMLPreprocessor", "../converters/ConverterContext"], function (deepClone, merge, BuildingBlockRuntime, CommonUtils, StableIdHelper, ManagedObject, Component, Fragment, XMLPreprocessor, ConverterContext) {
6
6
  "use strict";
7
7
 
8
+ var _templateObject, _templateObject2;
9
+
8
10
  var _exports = {};
9
11
  var generate = StableIdHelper.generate;
12
+ var xml = BuildingBlockRuntime.xml;
10
13
  var registerBuildingBlock = BuildingBlockRuntime.registerBuildingBlock;
11
14
 
15
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
16
+
12
17
  /**
13
18
  * Base class for Building Block
14
19
  */
15
20
  var BuildingBlockBase = /*#__PURE__*/function () {
16
- function BuildingBlockBase(oProps) {
21
+ function BuildingBlockBase(oProps, _oControlConfig, _oSettings) {
17
22
  var _this = this;
18
23
 
24
+ this.isPublic = false;
25
+
26
+ this.getConverterContext = function (oVisualizationObjectPath, contextPath, mSettings, mExtraParams) {
27
+ var oAppComponent = mSettings.appComponent;
28
+ var originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
29
+ var viewData = Object.assign({}, originalViewData);
30
+ delete viewData.resourceBundle;
31
+ viewData = deepClone(viewData);
32
+ viewData.controlConfiguration = merge(viewData.controlConfiguration, mExtraParams);
33
+ return ConverterContext.createConverterContextForMacro(oVisualizationObjectPath.startingEntitySet.name, mSettings.models.metaModel, oAppComponent && oAppComponent.getDiagnostics(), merge, oVisualizationObjectPath.contextLocation, viewData);
34
+ };
35
+
19
36
  Object.keys(oProps).forEach(function (propName) {
20
37
  _this[propName] = oProps[propName];
21
38
  });
@@ -42,51 +59,43 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
42
59
  }
43
60
 
44
61
  return undefined;
45
- }
46
- /*
47
- // This block is commented out because I am not using them for now / need to change this but still want to keep them around
48
- static getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
49
- const oAppComponent = mSettings.appComponent;
50
- const originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
51
- let viewData = Object.assign({}, originalViewData);
52
- delete viewData.resourceBundle;
53
- viewData = deepClone(viewData);
54
- viewData.controlConfiguration = merge(viewData.controlConfiguration, mExtraParams);
55
- return ConverterContext.createConverterContextForMacro(
56
- oVisualizationObjectPath.startingEntitySet.name,
57
- mSettings.models.metaModel,
58
- oAppComponent && oAppComponent.getDiagnostics(),
59
- merge,
60
- oVisualizationObjectPath.contextLocation,
61
- viewData
62
- );
63
- };
64
- static getMetadata() {
65
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
66
- // @ts-ignore
67
- // eslint-disable-next-line @typescript-eslint/no-this-alias
68
- return {
69
- getAllProperties(this: BuildingBlockDefinition) {
70
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
71
- // @ts-ignore
72
- return this.metadata.properties;
73
- },
74
- getName(this: BuildingBlockDefinition) {
75
- return `${this.namespace}.${this.name}`;
76
- },
77
- getAllAggregations() {
78
- return {};
79
- },
80
- getDefaultAggregationName() {
81
- return "";
82
- }
83
- };
84
- }*/
62
+ } // This block is commented out because I am not using them for now / need to change this but still want to keep them around
85
63
  ;
86
64
 
65
+ _proto.getProperties = function getProperties() {
66
+ var allProperties = {};
67
+
68
+ for (var oInstanceKey in this) {
69
+ if (this.hasOwnProperty(oInstanceKey)) {
70
+ allProperties[oInstanceKey] = this[oInstanceKey];
71
+ }
72
+ }
73
+
74
+ return allProperties;
75
+ };
76
+
87
77
  BuildingBlockBase.register = function register() {// To be overriden
88
78
  };
89
79
 
80
+ BuildingBlockBase.unregister = function unregister() {// To be overriden
81
+ };
82
+
83
+ _proto.addConditionally = function addConditionally(condition, partToAdd) {
84
+ if (condition) {
85
+ return partToAdd;
86
+ } else {
87
+ return "";
88
+ }
89
+ };
90
+
91
+ _proto.attr = function attr(attributeName, value) {
92
+ if (value != undefined) {
93
+ return "".concat(attributeName, "=\"").concat(value, "\"");
94
+ } else {
95
+ return "";
96
+ }
97
+ };
98
+
90
99
  return BuildingBlockBase;
91
100
  }();
92
101
 
@@ -140,9 +149,31 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
140
149
  return propertyDescriptor;
141
150
  };
142
151
  }
152
+ /**
153
+ * Indicates that the property shall be declared as an xml aggregation that can be used from the outside of the building block.
154
+ *
155
+ * @param aggregationDefinition
156
+ * @returns The decorated property
157
+ */
158
+
143
159
 
144
160
  _exports.xmlEvent = xmlEvent;
145
161
 
162
+ function xmlAggregation(aggregationDefinition) {
163
+ return function (target, propertyKey, propertyDescriptor) {
164
+ var metadata = ensureMetadata(target.constructor);
165
+ delete propertyDescriptor.initializer;
166
+
167
+ if (!metadata.aggregations[propertyKey]) {
168
+ metadata.aggregations[propertyKey] = aggregationDefinition;
169
+ }
170
+
171
+ return propertyDescriptor;
172
+ };
173
+ }
174
+
175
+ _exports.xmlAggregation = xmlAggregation;
176
+
146
177
  function defineBuildingBlock(oBuildingBlockDefinition) {
147
178
  return function (classDefinition) {
148
179
  ensureMetadata(classDefinition);
@@ -151,15 +182,122 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/core/buildingBlocks/BuildingBl
151
182
  classDefinition.publicNamespace = oBuildingBlockDefinition.publicNamespace;
152
183
  classDefinition.fragment = oBuildingBlockDefinition.fragment;
153
184
  classDefinition.isOpen = oBuildingBlockDefinition.isOpen;
185
+ classDefinition.isRuntime = oBuildingBlockDefinition.isRuntime;
154
186
  classDefinition.apiVersion = 2;
155
187
 
188
+ if (classDefinition.isRuntime) {
189
+ classDefinition.prototype.getTemplate = function () {
190
+ var className = "".concat(oBuildingBlockDefinition.namespace, ".").concat(oBuildingBlockDefinition.name).replace(/\./g, "/");
191
+ var extraProps = [];
192
+
193
+ for (var propertiesKey in classDefinition.metadata.properties) {
194
+ var propertyValue = this[propertiesKey];
195
+
196
+ if (propertyValue !== undefined) {
197
+ var _propertyValue$isA, _propertyValue;
198
+
199
+ if ((_propertyValue$isA = (_propertyValue = propertyValue).isA) !== null && _propertyValue$isA !== void 0 && _propertyValue$isA.call(_propertyValue, "sap.ui.model.Context")) {
200
+ propertyValue = propertyValue.getPath();
201
+ }
202
+
203
+ extraProps.push(xml(_templateObject || (_templateObject = _taggedTemplateLiteral(["feBB:", "=\"", "\""])), propertiesKey, propertyValue));
204
+ }
205
+ }
206
+
207
+ return xml(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["<core:Fragment\n\t\t\t\t\txmlns:core=\"sap.ui.core\"\n\t\t\t\t\txmlns:feBB=\"sap.fe.core.buildingBlocks\"\n\t\t\t\t\tfragmentName=\"", "\"\n\t\t\t\t\tid=\"{this>id}\"\n\t\t\t\t\ttype=\"FE_COMPONENTS\"\n\t\t\t\t\t", "\n\t\t\t\t>\n\t\t\t\t</core:Fragment>"])), className, extraProps);
208
+ };
209
+ }
210
+
156
211
  classDefinition.register = function () {
157
212
  registerBuildingBlock(classDefinition);
158
213
  };
214
+
215
+ classDefinition.unregister = function () {
216
+ XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
217
+ XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
218
+ };
159
219
  };
160
220
  }
161
221
 
162
222
  _exports.defineBuildingBlock = defineBuildingBlock;
223
+ Fragment.registerType("FE_COMPONENTS", {
224
+ load: function (mSettings) {
225
+ try {
226
+ var fnResolve;
227
+ var fnReject;
228
+ var loaderPromise = new Promise(function (resolve, reject) {
229
+ fnResolve = resolve;
230
+ fnReject = reject;
231
+ });
232
+
233
+ sap.ui.require([mSettings.fragmentName], function (fragmentClass) {
234
+ if (!fragmentClass) {
235
+ fnReject("Could not load " + mSettings.fragmentName);
236
+ } else {
237
+ fnResolve(fragmentClass);
238
+ }
239
+ });
240
+
241
+ return Promise.resolve(loaderPromise);
242
+ } catch (e) {
243
+ return Promise.reject(e);
244
+ }
245
+ },
246
+ init: function (mSettings) {
247
+ try {
248
+ var _mSettings$customData, _mSettings$customData2, _mSettings$customData3, _mSettings$customData4;
249
+
250
+ var myClass = mSettings.fragmentContent;
251
+ var classSettings = {};
252
+ var feCustomData = (mSettings === null || mSettings === void 0 ? void 0 : (_mSettings$customData = mSettings.customData) === null || _mSettings$customData === void 0 ? void 0 : (_mSettings$customData2 = _mSettings$customData[0]) === null || _mSettings$customData2 === void 0 ? void 0 : (_mSettings$customData3 = _mSettings$customData2.mProperties) === null || _mSettings$customData3 === void 0 ? void 0 : (_mSettings$customData4 = _mSettings$customData3.value) === null || _mSettings$customData4 === void 0 ? void 0 : _mSettings$customData4["sap.fe.core.buildingBlocks"]) || {};
253
+ delete mSettings.customData;
254
+ var pageComponent = Component.getOwnerComponentFor(mSettings.containingView);
255
+ var appComponent = CommonUtils.getAppComponent(mSettings.containingView);
256
+ var metaModel = appComponent.getMetaModel();
257
+ var pageModel = pageComponent.getModel("_pageModel");
258
+
259
+ for (var propertyName in myClass.metadata.properties) {
260
+ var propertyMetadata = myClass.metadata.properties[propertyName];
261
+
262
+ if (propertyMetadata.type === "sap.ui.model.Context") {
263
+ classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
264
+
265
+ if (classSettings[propertyName].getObject()) {
266
+ classSettings[propertyName] = classSettings[propertyName].getObject();
267
+ } else {
268
+ // bind to metamodel
269
+ classSettings[propertyName] = metaModel.createBindingContext(feCustomData[propertyName]);
270
+ }
271
+ } else {
272
+ classSettings[propertyName] = feCustomData[propertyName];
273
+ }
274
+ }
275
+
276
+ return Promise.resolve(ManagedObject.runWithPreprocessors(function () {
277
+ return new myClass(classSettings).render();
278
+ }, {
279
+ id: function (sId) {
280
+ return mSettings.containingView.createId(sId);
281
+ },
282
+ settings: function (controlSettings) {
283
+ var allAssociations = this.getMetadata().getAssociations();
284
+
285
+ for (var _i = 0, _Object$keys = Object.keys(allAssociations); _i < _Object$keys.length; _i++) {
286
+ var associationDetailName = _Object$keys[_i];
287
+
288
+ if (controlSettings.hasOwnProperty(associationDetailName)) {
289
+ controlSettings[associationDetailName] = mSettings.containingView.createId(controlSettings[associationDetailName]);
290
+ }
291
+ }
292
+
293
+ return controlSettings;
294
+ }
295
+ }));
296
+ } catch (e) {
297
+ return Promise.reject(e);
298
+ }
299
+ }
300
+ });
163
301
  return _exports;
164
302
  }, false);
165
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwibmFtZXMiOlsiQnVpbGRpbmdCbG9ja0Jhc2UiLCJvUHJvcHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsInByb3BOYW1lIiwiY3JlYXRlSWQiLCJpZCIsInN0cmluZ1BhcnRzIiwiZ2VuZXJhdGUiLCJ1bmRlZmluZWQiLCJyZWdpc3RlciIsImVuc3VyZU1ldGFkYXRhIiwidGFyZ2V0IiwiaGFzT3duUHJvcGVydHkiLCJtZXRhZGF0YSIsImRlZXBDbG9uZSIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJldmVudHMiLCJ4bWxBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVEZWZpbml0aW9uIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxpemVyIiwieG1sRXZlbnQiLCJ0eXBlIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiIsImNsYXNzRGVmaW5pdGlvbiIsInhtbFRhZyIsIm5hbWUiLCJuYW1lc3BhY2UiLCJwdWJsaWNOYW1lc3BhY2UiLCJmcmFnbWVudCIsImlzT3BlbiIsImFwaVZlcnNpb24iLCJyZWdpc3RlckJ1aWxkaW5nQmxvY2siXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO01BQ2FBLGlCO0FBQ1osK0JBQVlDLE1BQVosRUFBeUM7QUFBQTs7QUFDeENDLE1BQUFBLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZRixNQUFaLEVBQW9CRyxPQUFwQixDQUE0QixVQUFDQyxRQUFELEVBQWM7QUFDekMsUUFBQSxLQUFJLENBQUNBLFFBQUQsQ0FBSixHQUErQkosTUFBTSxDQUFDSSxRQUFELENBQXJDO0FBQ0EsT0FGRDtBQUdBO0FBRUQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7V0FDUUMsUSxHQUFQLG9CQUEwQztBQUN6QztBQUNBLFVBQUssSUFBRCxDQUFjQyxFQUFs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LE1BQUFBLGVBQWUsQ0FBQ25CLFFBQWhCLEdBQTJCLFlBQVk7QUFDdEMyQixRQUFBQSxxQkFBcUIsQ0FBQ1IsZUFBRCxDQUFyQjtBQUNBLE9BRkQ7QUFHQSxLQVhEO0FBWUEiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgeyByZWdpc3RlckJ1aWxkaW5nQmxvY2sgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1J1bnRpbWVcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQnVpbGRpbmcgQmxvY2tcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1aWxkaW5nQmxvY2tCYXNlIHtcblx0Y29uc3RydWN0b3Iob1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG5cdFx0T2JqZWN0LmtleXMob1Byb3BzKS5mb3JFYWNoKChwcm9wTmFtZSkgPT4ge1xuXHRcdFx0dGhpc1twcm9wTmFtZSBhcyBrZXlvZiB0aGlzXSA9IG9Qcm9wc1twcm9wTmFtZV07XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydCB0aGUgZ2l2ZW4gbG9jYWwgZWxlbWVudCBJRCB0byBhIGdsb2JhbGx5IHVuaXF1ZSBJRCBieSBwcmVmaXhpbmcgd2l0aCB0aGUgQnVpbGRpbmcgQmxvY2sgSUQuXG5cdCAqXG5cdCAqIEBwYXJhbSBzdHJpbmdQYXJ0c1xuXHQgKiBAcmV0dXJucyBFaXRoZXIgdGhlIGdsb2JhbCBJRCBvciB1bmRlZmluZWQgaWYgdGhlIEJ1aWxkaW5nIEJsb2NrIGRvZXNuJ3QgaGF2ZSBhbiBJRFxuXHQgKi9cblx0cHVibGljIGNyZWF0ZUlkKC4uLnN0cmluZ1BhcnRzOiBzdHJpbmdbXSkge1xuXHRcdC8vIElmIHRoZSBjaGlsZCBpbnN0YW5jZSBoYXMgYW4gSUQgcHJvcGVydHkgdXNlIGl0IG90aGVyd2lzZSByZXR1cm4gdW5kZWZpbmVkXG5cdFx0aWYgKCh0aGlzIGFzIGFueSkuaWQpIHtcblx0XHRcdHJldHVybiBnZW5lcmF0ZShbKHRoaXMgYXMgYW55KS5pZCwgLi4uc3RyaW5nUGFydHNdKTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHQvKlxuXHQvLyBUaGlzIGJsb2NrIGlzIGNvbW1lbnRlZCBvdXQgYmVjYXVzZSBJIGFtIG5vdCB1c2luZyB0aGVtIGZvciBub3cgLyBuZWVkIHRvIGNoYW5nZSB0aGlzIGJ1dCBzdGlsbCB3YW50IHRvIGtlZXAgdGhlbSBhcm91bmRcblx0c3RhdGljIGdldENvbnZlcnRlckNvbnRleHQgPSBmdW5jdGlvbiAob1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoOiBhbnksIGNvbnRleHRQYXRoOiBhbnksIG1TZXR0aW5nczogYW55LCBtRXh0cmFQYXJhbXM/OiBhbnkpIHtcblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gbVNldHRpbmdzLmFwcENvbXBvbmVudDtcblx0XHRjb25zdCBvcmlnaW5hbFZpZXdEYXRhID0gbVNldHRpbmdzLm1vZGVscy52aWV3RGF0YSAmJiBtU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhLmdldERhdGEoKTtcblx0XHRsZXQgdmlld0RhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbFZpZXdEYXRhKTtcblx0XHRkZWxldGUgdmlld0RhdGEucmVzb3VyY2VCdW5kbGU7XG5cdFx0dmlld0RhdGEgPSBkZWVwQ2xvbmUodmlld0RhdGEpO1xuXHRcdHZpZXdEYXRhLmNvbnRyb2xDb25maWd1cmF0aW9uID0gbWVyZ2Uodmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24sIG1FeHRyYVBhcmFtcyk7XG5cdFx0cmV0dXJuIENvbnZlcnRlckNvbnRleHQuY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdFx0b1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoLnN0YXJ0aW5nRW50aXR5U2V0Lm5hbWUsXG5cdFx0XHRtU2V0dGluZ3MubW9kZWxzLm1ldGFNb2RlbCxcblx0XHRcdG9BcHBDb21wb25lbnQgJiYgb0FwcENvbXBvbmVudC5nZXREaWFnbm9zdGljcygpLFxuXHRcdFx0bWVyZ2UsXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdFx0dmlld0RhdGFcblx0XHQpO1xuXHR9O1xuXHRzdGF0aWMgZ2V0TWV0YWRhdGEoKSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcblx0XHRyZXR1cm4ge1xuXHRcdFx0Z2V0QWxsUHJvcGVydGllcyh0aGlzOiBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbikge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdFx0cmV0dXJuIHRoaXMubWV0YWRhdGEucHJvcGVydGllcztcblx0XHRcdH0sXG5cdFx0XHRnZXROYW1lKHRoaXM6IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBgJHt0aGlzLm5hbWVzcGFjZX0uJHt0aGlzLm5hbWV9YDtcblx0XHRcdH0sXG5cdFx0XHRnZXRBbGxBZ2dyZWdhdGlvbnMoKSB7XG5cdFx0XHRcdHJldHVybiB7fTtcblx0XHRcdH0sXG5cdFx0XHRnZXREZWZhdWx0QWdncmVnYXRpb25OYW1lKCkge1xuXHRcdFx0XHRyZXR1cm4gXCJcIjtcblx0XHRcdH1cblx0XHR9O1xuXHR9Ki9cblx0c3RhdGljIHJlZ2lzdGVyKCkge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24gPSB7XG5cdHR5cGU6IHN0cmluZztcblx0aXNQdWJsaWM/OiBib29sZWFuO1xuXHRkZWZhdWx0VmFsdWU/OiBhbnk7XG5cdGNvbXB1dGVkPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHQka2luZD86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tNZXRhZGF0YUNvbnRleHREZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlzUHVibGljPzogYm9vbGVhbjtcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXHRjb21wdXRlZD86IGJvb2xlYW47XG5cdCRUeXBlPzogc3RyaW5nW107XG5cdCRraW5kPzogc3RyaW5nW107XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0V2ZW50ID0ge307XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uID0ge1xuXHRpc1B1YmxpYz86IGJvb2xlYW47XG5cdHR5cGU6IHN0cmluZztcblx0c2xvdD86IHN0cmluZztcbn07XG50eXBlIENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0ge1xuXHRuYW1lc3BhY2U6IHN0cmluZztcblx0bmFtZTogc3RyaW5nO1xuXHR4bWxUYWc/OiBzdHJpbmc7XG5cdGZyYWdtZW50Pzogc3RyaW5nO1xuXHRwdWJsaWNOYW1lc3BhY2U/OiBzdHJpbmc7XG5cblx0aXNPcGVuPzogYm9vbGVhbjtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYyID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJlxuXHR0eXBlb2YgQnVpbGRpbmdCbG9ja0Jhc2UgJiB7XG5cdFx0YXBpVmVyc2lvbjogMjtcblx0XHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xuXHR9O1xuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYxID0gQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24gJiB7XG5cdG5hbWU6IHN0cmluZztcblx0YXBpVmVyc2lvbj86IDE7XG5cdGNyZWF0ZT86IEZ1bmN0aW9uO1xuXHRnZXRUZW1wbGF0ZT86IEZ1bmN0aW9uO1xuXHRtZXRhZGF0YTogQnVpbGRpbmdCbG9ja01ldGFkYXRhO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uID0gQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMiB8IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjE7XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEgPSB7XG5cdGV2ZW50czogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0V2ZW50Pjtcblx0cHJvcGVydGllczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja1Byb3BlcnR5RGVmaW5pdGlvbj47XG5cdGFnZ3JlZ2F0aW9uczogUmVjb3JkPHN0cmluZywgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbj47XG59O1xuXG5jb25zdCBlbnN1cmVNZXRhZGF0YSA9IGZ1bmN0aW9uICh0YXJnZXQ6IGFueSk6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YSB7XG5cdGlmICghdGFyZ2V0Lmhhc093blByb3BlcnR5KFwibWV0YWRhdGFcIikpIHtcblx0XHR0YXJnZXQubWV0YWRhdGEgPSBkZWVwQ2xvbmUoXG5cdFx0XHR0YXJnZXQubWV0YWRhdGEgfHwge1xuXHRcdFx0XHRwcm9wZXJ0aWVzOiB7fSxcblx0XHRcdFx0YWdncmVnYXRpb25zOiB7fSxcblx0XHRcdFx0ZXZlbnRzOiB7fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHRhcmdldC5tZXRhZGF0YTtcbn07XG5cbi8qKlxuICogSW5kaWNhdGVzIHRoYXQgdGhlIHByb3BlcnR5IHNoYWxsIGJlIGRlY2xhcmVkIGFzIGFuIHhtbCBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBmcm9tIHRoZSBvdXRzaWRlIG9mIHRoZSBidWlsZGluZyBibG9jay5cbiAqXG4gKiBAcGFyYW0gYXR0cmlidXRlRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sQXR0cmlidXRlKGF0dHJpYnV0ZURlZmluaXRpb246IEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24pOiBQcm9wZXJ0eURlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiBCdWlsZGluZ0Jsb2NrQmFzZSwgcHJvcGVydHlLZXk6IHN0cmluZywgcHJvcGVydHlEZXNjcmlwdG9yOiBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjxhbnk+KSB7XG5cdFx0Y29uc3QgbWV0YWRhdGEgPSBlbnN1cmVNZXRhZGF0YSh0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRcdGRlbGV0ZSAocHJvcGVydHlEZXNjcmlwdG9yIGFzIGFueSkuaW5pdGlhbGl6ZXI7XG5cdFx0aWYgKCFtZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0gPSBhdHRyaWJ1dGVEZWZpbml0aW9uO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24geG1sRXZlbnQoKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuZXZlbnRzW3Byb3BlcnR5S2V5XSA9IHsgdHlwZTogXCJGdW5jdGlvblwiIH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByb3BlcnR5RGVzY3JpcHRvcjtcblx0fSBhcyBhbnk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCdWlsZGluZ0Jsb2NrKG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbjogQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjbGFzc0RlZmluaXRpb246IGFueSkge1xuXHRcdGVuc3VyZU1ldGFkYXRhKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnhtbFRhZyA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5uYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ucHVibGljTmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5mcmFnbWVudCA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5mcmFnbWVudDtcblx0XHRjbGFzc0RlZmluaXRpb24uaXNPcGVuID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmlzT3Blbjtcblx0XHRjbGFzc0RlZmluaXRpb24uYXBpVmVyc2lvbiA9IDI7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVnaXN0ZXJCdWlsZGluZ0Jsb2NrKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0fTtcblx0fTtcbn1cbiJdfQ==
303
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwibmFtZXMiOlsiQnVpbGRpbmdCbG9ja0Jhc2UiLCJvUHJvcHMiLCJfb0NvbnRyb2xDb25maWciLCJfb1NldHRpbmdzIiwiaXNQdWJsaWMiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Iiwib1Zpc3VhbGl6YXRpb25PYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJtU2V0dGluZ3MiLCJtRXh0cmFQYXJhbXMiLCJvQXBwQ29tcG9uZW50IiwiYXBwQ29tcG9uZW50Iiwib3JpZ2luYWxWaWV3RGF0YSIsIm1vZGVscyIsInZpZXdEYXRhIiwiZ2V0RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsInJlc291cmNlQnVuZGxlIiwiZGVlcENsb25lIiwiY29udHJvbENvbmZpZ3VyYXRpb24iLCJtZXJnZSIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJzdGFydGluZ0VudGl0eVNldCIsIm5hbWUiLCJtZXRhTW9kZWwiLCJnZXREaWFnbm9zdGljcyIsImNvbnRleHRMb2NhdGlvbiIsImtleXMiLCJmb3JFYWNoIiwicHJvcE5hbWUiLCJjcmVhdGVJZCIsImlkIiwic3RyaW5nUGFydHMiLCJnZW5lcmF0ZSIsInVuZGVmaW5lZCIsImdldFByb3BlcnRpZXMiLCJhbGxQcm9wZXJ0aWVzIiwib0luc3RhbmNlS2V5IiwiaGFzT3duUHJvcGVydHkiLCJyZWdpc3RlciIsInVucmVnaXN0ZXIiLCJhZGRDb25kaXRpb25hbGx5IiwiY29uZGl0aW9uIiwicGFydFRvQWRkIiwiYXR0ciIsImF0dHJpYnV0ZU5hbWUiLCJ2YWx1ZSIsImVuc3VyZU1ldGFkYXRhIiwidGFyZ2V0IiwibWV0YWRhdGEiLCJwcm9wZXJ0aWVzIiwiYWdncmVnYXRpb25zIiwiZXZlbnRzIiwieG1sQXR0cmlidXRlIiwiYXR0cmlidXRlRGVmaW5pdGlvbiIsInByb3BlcnR5S2V5IiwicHJvcGVydHlEZXNjcmlwdG9yIiwiY29uc3RydWN0b3IiLCJpbml0aWFsaXplciIsInhtbEV2ZW50IiwidHlwZSIsInhtbEFnZ3JlZ2F0aW9uIiwiYWdncmVnYXRpb25EZWZpbml0aW9uIiwiZGVmaW5lQnVpbGRpbmdCbG9jayIsIm9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiIsImNsYXNzRGVmaW5pdGlvbiIsInhtbFRhZyIsIm5hbWVzcGFjZSIsInB1YmxpY05hbWVzcGFjZSIsImZyYWdtZW50IiwiaXNPcGVuIiwiaXNSdW50aW1lIiwiYXBpVmVyc2lvbiIsInByb3RvdHlwZSIsImdldFRlbXBsYXRlIiwiY2xhc3NOYW1lIiwicmVwbGFjZSIsImV4dHJhUHJvcHMiLCJwcm9wZXJ0aWVzS2V5IiwicHJvcGVydHlWYWx1ZSIsImlzQSIsImdldFBhdGgiLCJwdXNoIiwieG1sIiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwiWE1MUHJlcHJvY2Vzc29yIiwicGx1Z0luIiwiRnJhZ21lbnQiLCJyZWdpc3RlclR5cGUiLCJsb2FkIiwiZm5SZXNvbHZlIiwiZm5SZWplY3QiLCJsb2FkZXJQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJzYXAiLCJ1aSIsInJlcXVpcmUiLCJmcmFnbWVudE5hbWUiLCJmcmFnbWVudENsYXNzIiwiaW5pdCIsIm15Q2xhc3MiLCJmcmFnbWVudENvbnRlbnQiLCJjbGFzc1NldHRpbmdzIiwiZmVDdXN0b21EYXRhIiwiY3VzdG9tRGF0YSIsIm1Qcm9wZXJ0aWVzIiwicGFnZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiY29udGFpbmluZ1ZpZXciLCJDb21tb25VdGlscyIsImdldEFwcENvbXBvbmVudCIsImdldE1ldGFNb2RlbCIsInBhZ2VNb2RlbCIsImdldE1vZGVsIiwicHJvcGVydHlOYW1lIiwicHJvcGVydHlNZXRhZGF0YSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiZ2V0T2JqZWN0IiwiTWFuYWdlZE9iamVjdCIsInJ1bldpdGhQcmVwcm9jZXNzb3JzIiwicmVuZGVyIiwic0lkIiwic2V0dGluZ3MiLCJjb250cm9sU2V0dGluZ3MiLCJhbGxBc3NvY2lhdGlvbnMiLCJnZXRNZXRhZGF0YSIsImdldEFzc29jaWF0aW9ucyIsImFzc29jaWF0aW9uRGV0YWlsTmFtZSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQVNBO0FBQ0E7QUFDQTtNQUNhQSxpQjtBQUdaLCtCQUFZQyxNQUFaLEVBQXlDQyxlQUF6QyxFQUFnRUMsVUFBaEUsRUFBa0Y7QUFBQTs7QUFBQSxXQUZ4RUMsUUFFd0UsR0FGN0QsS0FFNkQ7O0FBQUEsV0FvQnhFQyxtQkFwQndFLEdBb0JsRCxVQUFVQyx3QkFBVixFQUF5Q0MsV0FBekMsRUFBMkRDLFNBQTNELEVBQTJFQyxZQUEzRSxFQUErRjtBQUM5SCxZQUFNQyxhQUFhLEdBQUdGLFNBQVMsQ0FBQ0csWUFBaEM7QUFDQSxZQUFNQyxnQkFBZ0IsR0FBR0osU0FBUyxDQUFDSyxNQUFWLENBQWlCQyxRQUFqQixJQUE2Qk4sU0FBUyxDQUFDSyxNQUFWLENBQWlCQyxRQUFqQixDQUEwQkMsT0FBMUIsRUFBdEQ7QUFDQSxZQUFJRCxRQUFRLEdBQUdFLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjLEVBQWQsRUFBa0JMLGdCQUFsQixDQUFmO0FBQ0EsZUFBT0UsUUFBUSxDQUFDSSxjQUFoQjtBQUNBSixRQUFBQSxRQUFRLEdBQUdLLFNBQVMsQ0FBQ0wsUUFBRCxDQUFwQjtBQUNBQSxRQUFBQSxRQUFRLENBQUNNLG9CQUFULEdBQWdDQyxLQUFLLENBQUNQLFFBQVEsQ0FBQ00sb0JBQVYsRUFBZ0NYLFlBQWhDLENBQXJDO0FBQ0EsZUFBT2EsZ0JBQWdCLENBQUNDLDhCQUFqQixDQUNOakIsd0JBQXdCLENBQUNrQixpQkFBekIsQ0FBMkNDLElBRHJDLEVBRU5qQixTQUFTLENBQUNLLE1BQVYsQ0FBaUJhLFNBRlgsRUFHTmhCLGFBQWEsSUFBSUEsYUFBYSxDQUFDaUIsY0FBZCxFQUhYLEVBSU5OLEtBSk0sRUFLTmYsd0JBQXdCLENBQUNzQixlQUxuQixF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QUQsQ0FBYixHQUE4QjdGLFNBQVMsQ0FBQytGLG9CQUFWLENBQStCZCxZQUFZLENBQUNZLFlBQUQsQ0FBM0MsQ0FBOUI7QUFDQTtBQUNELFdBUkQsTUFRTztBQUNOYixZQUFBQSxhQUFhLENBQUNhLFlBQUQsQ0FBYixHQUE4QlosWUFBWSxDQUFDWSxZQUFELENBQTFDO0FBQ0E7QUFDRDs7QUFDRCwrQkFBUUksYUFBRCxDQUE4Q0Msb0JBQTlDLENBQ04sWUFBTTtBQUNMLGlCQUFPLElBQUlwQixPQUFKLENBQVlFLGFBQVosRUFBMkJtQixNQUEzQixFQUFQO0FBQ0EsU0FISyxFQUlOO0FBQ0M1RixVQUFBQSxFQUFFLEVBQUUsVUFBVTZGLEdBQVYsRUFBdUI7QUFDMUIsbUJBQU90SCxTQUFTLENBQUN5RyxjQUFWLENBQXlCakYsUUFBekIsQ0FBa0M4RixHQUFsQyxDQUFQO0FBQ0EsV0FIRjtBQUlDQyxVQUFBQSxRQUFRLEVBQUUsVUFBVUMsZUFBVixFQUFnQztBQUN6QyxnQkFBTUMsZUFBZSxHQUFHLEtBQUtDLFdBQUwsR0FBbUJDLGVBQW5CLEVBQXhCOztBQUNBLDRDQUFvQ25ILE1BQU0sQ0FBQ2EsSUFBUCxDQUFZb0csZUFBWixDQUFwQyxrQ0FBa0U7QUFBN0Qsa0JBQU1HLHFCQUFxQixtQkFBM0I7O0FBQ0osa0JBQUlKLGVBQWUsQ0FBQ3hGLGNBQWhCLENBQStCNEYscUJBQS9CLENBQUosRUFBMkQ7QUFDMURKLGdCQUFBQSxlQUFlLENBQUNJLHFCQUFELENBQWYsR0FBeUM1SCxTQUFTLENBQUN5RyxjQUFWLENBQXlCakYsUUFBekIsQ0FDeENnRyxlQUFlLENBQUNJLHFCQUFELENBRHlCLENBQXpDO0FBR0E7QUFDRDs7QUFDRCxtQkFBT0osZUFBUDtBQUNBO0FBZEYsU0FKTSxDQUFQO0FBcUJBLE9BNUNHO0FBQUE7QUFBQTtBQUFBO0FBakJrQyxHQUF2QyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrLCB4bWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1J1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmFnZWRPYmplY3RFeCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQnVpbGRpbmcgQmxvY2tcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1aWxkaW5nQmxvY2tCYXNlIHtcblx0cHJvdGVjdGVkIGlzUHVibGljID0gZmFsc2U7XG5cdHByb3RlY3RlZCBpZCE6IHN0cmluZztcblx0Y29uc3RydWN0b3Iob1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBfb0NvbnRyb2xDb25maWc/OiBhbnksIF9vU2V0dGluZ3M/OiBhbnkpIHtcblx0XHRPYmplY3Qua2V5cyhvUHJvcHMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG5cdFx0XHR0aGlzW3Byb3BOYW1lIGFzIGtleW9mIHRoaXNdID0gb1Byb3BzW3Byb3BOYW1lXTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBlbGVtZW50IElEIHRvIGEgZ2xvYmFsbHkgdW5pcXVlIElEIGJ5IHByZWZpeGluZyB3aXRoIHRoZSBCdWlsZGluZyBCbG9jayBJRC5cblx0ICpcblx0ICogQHBhcmFtIHN0cmluZ1BhcnRzXG5cdCAqIEByZXR1cm5zIEVpdGhlciB0aGUgZ2xvYmFsIElEIG9yIHVuZGVmaW5lZCBpZiB0aGUgQnVpbGRpbmcgQmxvY2sgZG9lc24ndCBoYXZlIGFuIElEXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlSWQoLi4uc3RyaW5nUGFydHM6IHN0cmluZ1tdKSB7XG5cdFx0Ly8gSWYgdGhlIGNoaWxkIGluc3RhbmNlIGhhcyBhbiBJRCBwcm9wZXJ0eSB1c2UgaXQgb3RoZXJ3aXNlIHJldHVybiB1bmRlZmluZWRcblx0XHRpZiAoKHRoaXMgYXMgYW55KS5pZCkge1xuXHRcdFx0cmV0dXJuIGdlbmVyYXRlKFsodGhpcyBhcyBhbnkpLmlkLCAuLi5zdHJpbmdQYXJ0c10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdC8vIFRoaXMgYmxvY2sgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlIEkgYW0gbm90IHVzaW5nIHRoZW0gZm9yIG5vdyAvIG5lZWQgdG8gY2hhbmdlIHRoaXMgYnV0IHN0aWxsIHdhbnQgdG8ga2VlcCB0aGVtIGFyb3VuZFxuXHRwcm90ZWN0ZWQgZ2V0Q29udmVydGVyQ29udGV4dCA9IGZ1bmN0aW9uIChvVmlzdWFsaXphdGlvbk9iamVjdFBhdGg6IGFueSwgY29udGV4dFBhdGg6IGFueSwgbVNldHRpbmdzOiBhbnksIG1FeHRyYVBhcmFtcz86IGFueSkge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBtU2V0dGluZ3MuYXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9yaWdpbmFsVmlld0RhdGEgPSBtU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhICYmIG1TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEuZ2V0RGF0YSgpO1xuXHRcdGxldCB2aWV3RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbmFsVmlld0RhdGEpO1xuXHRcdGRlbGV0ZSB2aWV3RGF0YS5yZXNvdXJjZUJ1bmRsZTtcblx0XHR2aWV3RGF0YSA9IGRlZXBDbG9uZSh2aWV3RGF0YSk7XG5cdFx0dmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24gPSBtZXJnZSh2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiwgbUV4dHJhUGFyYW1zKTtcblx0XHRyZXR1cm4gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZSxcblx0XHRcdG1TZXR0aW5ncy5tb2RlbHMubWV0YU1vZGVsLFxuXHRcdFx0b0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCksXG5cdFx0XHRtZXJnZSxcblx0XHRcdG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24sXG5cdFx0XHR2aWV3RGF0YVxuXHRcdCk7XG5cdH07XG5cdHB1YmxpYyBnZXRQcm9wZXJ0aWVzKCkge1xuXHRcdGNvbnN0IGFsbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IG9JbnN0YW5jZUtleSBpbiB0aGlzKSB7XG5cdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShvSW5zdGFuY2VLZXkpKSB7XG5cdFx0XHRcdGFsbFByb3BlcnRpZXNbb0luc3RhbmNlS2V5XSA9IHRoaXNbb0luc3RhbmNlS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFsbFByb3BlcnRpZXM7XG5cdH1cblx0c3RhdGljIHJlZ2lzdGVyKCkge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cdHN0YXRpYyB1bnJlZ2lzdGVyKCkge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cdHB1YmxpYyBhZGRDb25kaXRpb25hbGx5KGNvbmRpdGlvbjogYm9vbGVhbiwgcGFydFRvQWRkOiBhbnkpIHtcblx0XHRpZiAoY29uZGl0aW9uKSB7XG5cdFx0XHRyZXR1cm4gcGFydFRvQWRkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblx0cHJvdGVjdGVkIGF0dHIoYXR0cmlidXRlTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG5cdFx0aWYgKHZhbHVlICE9IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGAke2F0dHJpYnV0ZU5hbWV9PVwiJHt2YWx1ZX1cImA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlzUHVibGljPzogYm9vbGVhbjtcblx0ZGVmYXVsdFZhbHVlPzogYW55O1xuXHRjb21wdXRlZD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0JGtpbmQ/OiBzdHJpbmdbXTtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbiA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRpc1B1YmxpYz86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0Y29tcHV0ZWQ/OiBib29sZWFuO1xuXHQkVHlwZT86IHN0cmluZ1tdO1xuXHQka2luZD86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tFdmVudCA9IHt9O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbiA9IHtcblx0aXNQdWJsaWM/OiBib29sZWFuO1xuXHR0eXBlOiBzdHJpbmc7XG5cdHNsb3Q/OiBzdHJpbmc7XG5cdGlzRGVmYXVsdD86IGJvb2xlYW47XG59O1xudHlwZSBDb21tb25CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiA9IHtcblx0bmFtZXNwYWNlOiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0eG1sVGFnPzogc3RyaW5nO1xuXHRmcmFnbWVudD86IHN0cmluZztcblx0cHVibGljTmFtZXNwYWNlPzogc3RyaW5nO1xuXG5cdGlzUnVudGltZT86IGJvb2xlYW47XG5cdGlzT3Blbj86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMiA9IENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uICZcblx0dHlwZW9mIEJ1aWxkaW5nQmxvY2tCYXNlICYge1xuXHRcdGFwaVZlcnNpb246IDI7XG5cdFx0bWV0YWRhdGE6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YTtcblx0fTtcblxuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMSA9IENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uICYge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFwaVZlcnNpb24/OiAxO1xuXHRjcmVhdGU/OiBGdW5jdGlvbjtcblx0Z2V0VGVtcGxhdGU/OiBGdW5jdGlvbjtcblx0bWV0YWRhdGE6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YTtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiA9IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjIgfCBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYxO1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja01ldGFkYXRhID0ge1xuXHRldmVudHM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tFdmVudD47XG5cdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24+O1xuXHRhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24+O1xufTtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBhbnkpOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEge1xuXHRpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShcIm1ldGFkYXRhXCIpKSB7XG5cdFx0dGFyZ2V0Lm1ldGFkYXRhID0gZGVlcENsb25lKFxuXHRcdFx0dGFyZ2V0Lm1ldGFkYXRhIHx8IHtcblx0XHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uczoge30sXG5cdFx0XHRcdGV2ZW50czoge31cblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cdHJldHVybiB0YXJnZXQubWV0YWRhdGE7XG59O1xuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBwcm9wZXJ0eSBzaGFsbCBiZSBkZWNsYXJlZCBhcyBhbiB4bWwgYXR0cmlidXRlIHRoYXQgY2FuIGJlIHVzZWQgZnJvbSB0aGUgb3V0c2lkZSBvZiB0aGUgYnVpbGRpbmcgYmxvY2suXG4gKlxuICogQHBhcmFtIGF0dHJpYnV0ZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhtbEF0dHJpYnV0ZShhdHRyaWJ1dGVEZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHhtbEV2ZW50KCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IEJ1aWxkaW5nQmxvY2tCYXNlLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldC5jb25zdHJ1Y3Rvcik7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmV2ZW50c1twcm9wZXJ0eUtleV0gPSB7IHR5cGU6IFwiRnVuY3Rpb25cIiB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4geG1sIGFnZ3JlZ2F0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZnJvbSB0aGUgb3V0c2lkZSBvZiB0aGUgYnVpbGRpbmcgYmxvY2suXG4gKlxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sQWdncmVnYXRpb24oYWdncmVnYXRpb25EZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCdWlsZGluZ0Jsb2NrKG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbjogQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjbGFzc0RlZmluaXRpb246IGFueSkge1xuXHRcdGVuc3VyZU1ldGFkYXRhKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnhtbFRhZyA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5uYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ucHVibGljTmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5mcmFnbWVudCA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5mcmFnbWVudDtcblx0XHRjbGFzc0RlZmluaXRpb24uaXNPcGVuID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmlzT3Blbjtcblx0XHRjbGFzc0RlZmluaXRpb24uaXNSdW50aW1lID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmlzUnVudGltZTtcblx0XHRjbGFzc0RlZmluaXRpb24uYXBpVmVyc2lvbiA9IDI7XG5cdFx0aWYgKGNsYXNzRGVmaW5pdGlvbi5pc1J1bnRpbWUpIHtcblx0XHRcdGNsYXNzRGVmaW5pdGlvbi5wcm90b3R5cGUuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbiAodGhpczogYW55KSB7XG5cdFx0XHRcdGNvbnN0IGNsYXNzTmFtZSA9IGAke29CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lc3BhY2V9LiR7b0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWV9YC5yZXBsYWNlKC9cXC4vZywgXCIvXCIpO1xuXHRcdFx0XHRjb25zdCBleHRyYVByb3BzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgcHJvcGVydGllc0tleSBpbiBjbGFzc0RlZmluaXRpb24ubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gdGhpc1twcm9wZXJ0aWVzS2V5XTtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5pc0E/LihcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGV4dHJhUHJvcHMucHVzaCh4bWxgZmVCQjoke3Byb3BlcnRpZXNLZXl9PVwiJHtwcm9wZXJ0eVZhbHVlfVwiYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB4bWxgPGNvcmU6RnJhZ21lbnRcblx0XHRcdFx0XHR4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIlxuXHRcdFx0XHRcdHhtbG5zOmZlQkI9XCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrc1wiXG5cdFx0XHRcdFx0ZnJhZ21lbnROYW1lPVwiJHtjbGFzc05hbWV9XCJcblx0XHRcdFx0XHRpZD1cInt0aGlzPmlkfVwiXG5cdFx0XHRcdFx0dHlwZT1cIkZFX0NPTVBPTkVOVFNcIlxuXHRcdFx0XHRcdCR7ZXh0cmFQcm9wc31cblx0XHRcdFx0PlxuXHRcdFx0XHQ8L2NvcmU6RnJhZ21lbnQ+YDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Y2xhc3NEZWZpbml0aW9uLnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVnaXN0ZXJCdWlsZGluZ0Jsb2NrKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0fTtcblx0XHRjbGFzc0RlZmluaXRpb24udW5yZWdpc3RlciA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdFhNTFByZXByb2Nlc3Nvci5wbHVnSW4obnVsbCwgY2xhc3NEZWZpbml0aW9uLm5hbWVzcGFjZSwgY2xhc3NEZWZpbml0aW9uLm5hbWUpO1xuXHRcdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihudWxsLCBjbGFzc0RlZmluaXRpb24ucHVibGljTmFtZXNwYWNlLCBjbGFzc0RlZmluaXRpb24ubmFtZSk7XG5cdFx0fTtcblx0fTtcbn1cblxuRnJhZ21lbnQucmVnaXN0ZXJUeXBlKFwiRkVfQ09NUE9ORU5UU1wiLCB7XG5cdGxvYWQ6IGFzeW5jIGZ1bmN0aW9uIChtU2V0dGluZ3M6IGFueSkge1xuXHRcdGxldCBmblJlc29sdmU6IGFueTtcblx0XHRsZXQgZm5SZWplY3Q6IGFueTtcblx0XHRjb25zdCBsb2FkZXJQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0Zm5SZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdGZuUmVqZWN0ID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdHNhcC51aS5yZXF1aXJlKFttU2V0dGluZ3MuZnJhZ21lbnROYW1lXSwgKGZyYWdtZW50Q2xhc3M6IGFueSkgPT4ge1xuXHRcdFx0aWYgKCFmcmFnbWVudENsYXNzKSB7XG5cdFx0XHRcdGZuUmVqZWN0KFwiQ291bGQgbm90IGxvYWQgXCIgKyBtU2V0dGluZ3MuZnJhZ21lbnROYW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZuUmVzb2x2ZShmcmFnbWVudENsYXNzKTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbG9hZGVyUHJvbWlzZTtcblx0fSxcblx0aW5pdDogYXN5bmMgZnVuY3Rpb24gKG1TZXR0aW5nczogYW55KSB7XG5cdFx0Y29uc3QgbXlDbGFzcyA9IG1TZXR0aW5ncy5mcmFnbWVudENvbnRlbnQ7XG5cdFx0Y29uc3QgY2xhc3NTZXR0aW5nczogYW55ID0ge307XG5cdFx0Y29uc3QgZmVDdXN0b21EYXRhID0gbVNldHRpbmdzPy5jdXN0b21EYXRhPy5bMF0/Lm1Qcm9wZXJ0aWVzPy52YWx1ZT8uW1wic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3NcIl0gfHwge307XG5cdFx0ZGVsZXRlIG1TZXR0aW5ncy5jdXN0b21EYXRhO1xuXHRcdGNvbnN0IHBhZ2VDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IobVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3KSBhcyBhbnk7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KG1TZXR0aW5ncy5jb250YWluaW5nVmlldyk7XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gYXBwQ29tcG9uZW50LmdldE1ldGFNb2RlbCgpO1xuXHRcdGNvbnN0IHBhZ2VNb2RlbCA9IHBhZ2VDb21wb25lbnQuZ2V0TW9kZWwoXCJfcGFnZU1vZGVsXCIpO1xuXHRcdGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIG15Q2xhc3MubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0Y29uc3QgcHJvcGVydHlNZXRhZGF0YSA9IG15Q2xhc3MubWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHRcdFx0aWYgKHByb3BlcnR5TWV0YWRhdGEudHlwZSA9PT0gXCJzYXAudWkubW9kZWwuQ29udGV4dFwiKSB7XG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IHBhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXSk7XG5cdFx0XHRcdGlmIChjbGFzc1NldHRpbmdzW3Byb3BlcnR5TmFtZV0uZ2V0T2JqZWN0KCkpIHtcblx0XHRcdFx0XHRjbGFzc1NldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSBjbGFzc1NldHRpbmdzW3Byb3BlcnR5TmFtZV0uZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gYmluZCB0byBtZXRhbW9kZWxcblx0XHRcdFx0XHRjbGFzc1NldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSBtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoZmVDdXN0b21EYXRhW3Byb3BlcnR5TmFtZV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbGFzc1NldHRpbmdzW3Byb3BlcnR5TmFtZV0gPSBmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIChNYW5hZ2VkT2JqZWN0IGFzIHVua25vd24gYXMgTWFuYWdlZE9iamVjdEV4KS5ydW5XaXRoUHJlcHJvY2Vzc29ycyhcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG5ldyBteUNsYXNzKGNsYXNzU2V0dGluZ3MpLnJlbmRlcigpO1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0aWQ6IGZ1bmN0aW9uIChzSWQ6IHN0cmluZykge1xuXHRcdFx0XHRcdHJldHVybiBtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuY3JlYXRlSWQoc0lkKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0c2V0dGluZ3M6IGZ1bmN0aW9uIChjb250cm9sU2V0dGluZ3M6IGFueSkge1xuXHRcdFx0XHRcdGNvbnN0IGFsbEFzc29jaWF0aW9ucyA9IHRoaXMuZ2V0TWV0YWRhdGEoKS5nZXRBc3NvY2lhdGlvbnMoKTtcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGFzc29jaWF0aW9uRGV0YWlsTmFtZSBvZiBPYmplY3Qua2V5cyhhbGxBc3NvY2lhdGlvbnMpKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbFNldHRpbmdzLmhhc093blByb3BlcnR5KGFzc29jaWF0aW9uRGV0YWlsTmFtZSkpIHtcblx0XHRcdFx0XHRcdFx0Y29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV0gPSBtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcuY3JlYXRlSWQoXG5cdFx0XHRcdFx0XHRcdFx0Y29udHJvbFNldHRpbmdzW2Fzc29jaWF0aW9uRGV0YWlsTmFtZV1cblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnRyb2xTZXR0aW5ncztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdH1cbn0pO1xuIl19
@@ -1,11 +1,21 @@
1
1
  import deepClone from "sap/base/util/deepClone";
2
- import { registerBuildingBlock } from "sap/fe/core/buildingBlocks/BuildingBlockRuntime";
2
+ import merge from "sap/base/util/merge";
3
+ import { registerBuildingBlock, xml } from "sap/fe/core/buildingBlocks/BuildingBlockRuntime";
4
+ import CommonUtils from "sap/fe/core/CommonUtils";
3
5
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
6
+ import ManagedObject from "sap/ui/base/ManagedObject";
7
+ import Component from "sap/ui/core/Component";
8
+ import Fragment from "sap/ui/core/Fragment";
9
+ import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
10
+ import type { ManagedObjectEx } from "types/extension_types";
11
+ import ConverterContext from "../converters/ConverterContext";
4
12
  /**
5
13
  * Base class for Building Block
6
14
  */
7
15
  export class BuildingBlockBase {
8
- constructor(oProps: Record<string, any>) {
16
+ protected isPublic = false;
17
+ protected id!: string;
18
+ constructor(oProps: Record<string, any>, _oControlConfig?: any, _oSettings?: any) {
9
19
  Object.keys(oProps).forEach((propName) => {
10
20
  this[propName as keyof this] = oProps[propName];
11
21
  });
@@ -24,9 +34,8 @@ export class BuildingBlockBase {
24
34
  }
25
35
  return undefined;
26
36
  }
27
- /*
28
37
  // This block is commented out because I am not using them for now / need to change this but still want to keep them around
29
- static getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
38
+ protected getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
30
39
  const oAppComponent = mSettings.appComponent;
31
40
  const originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
32
41
  let viewData = Object.assign({}, originalViewData);
@@ -42,30 +51,35 @@ export class BuildingBlockBase {
42
51
  viewData
43
52
  );
44
53
  };
45
- static getMetadata() {
46
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
47
- // @ts-ignore
48
- // eslint-disable-next-line @typescript-eslint/no-this-alias
49
- return {
50
- getAllProperties(this: BuildingBlockDefinition) {
51
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
52
- // @ts-ignore
53
- return this.metadata.properties;
54
- },
55
- getName(this: BuildingBlockDefinition) {
56
- return `${this.namespace}.${this.name}`;
57
- },
58
- getAllAggregations() {
59
- return {};
60
- },
61
- getDefaultAggregationName() {
62
- return "";
54
+ public getProperties() {
55
+ const allProperties: Record<string, any> = {};
56
+ for (const oInstanceKey in this) {
57
+ if (this.hasOwnProperty(oInstanceKey)) {
58
+ allProperties[oInstanceKey] = this[oInstanceKey];
63
59
  }
64
- };
65
- }*/
60
+ }
61
+ return allProperties;
62
+ }
66
63
  static register() {
67
64
  // To be overriden
68
65
  }
66
+ static unregister() {
67
+ // To be overriden
68
+ }
69
+ public addConditionally(condition: boolean, partToAdd: any) {
70
+ if (condition) {
71
+ return partToAdd;
72
+ } else {
73
+ return "";
74
+ }
75
+ }
76
+ protected attr(attributeName: string, value: any) {
77
+ if (value != undefined) {
78
+ return `${attributeName}="${value}"`;
79
+ } else {
80
+ return "";
81
+ }
82
+ }
69
83
  }
70
84
 
71
85
  export type BuildingBlockPropertyDefinition = {
@@ -89,6 +103,7 @@ export type BuildingBlockAggregationDefinition = {
89
103
  isPublic?: boolean;
90
104
  type: string;
91
105
  slot?: string;
106
+ isDefault?: boolean;
92
107
  };
93
108
  type CommonBuildingBlockDefinition = {
94
109
  namespace: string;
@@ -97,6 +112,7 @@ type CommonBuildingBlockDefinition = {
97
112
  fragment?: string;
98
113
  publicNamespace?: string;
99
114
 
115
+ isRuntime?: boolean;
100
116
  isOpen?: boolean;
101
117
  };
102
118
  export type BuildingBlockDefinitionV2 = CommonBuildingBlockDefinition &
@@ -161,7 +177,23 @@ export function xmlEvent(): PropertyDecorator {
161
177
  return propertyDescriptor;
162
178
  } as any;
163
179
  }
180
+ /**
181
+ * Indicates that the property shall be declared as an xml aggregation that can be used from the outside of the building block.
182
+ *
183
+ * @param aggregationDefinition
184
+ * @returns The decorated property
185
+ */
186
+ export function xmlAggregation(aggregationDefinition: BuildingBlockAggregationDefinition): PropertyDecorator {
187
+ return function (target: BuildingBlockBase, propertyKey: string, propertyDescriptor: TypedPropertyDescriptor<any>) {
188
+ const metadata = ensureMetadata(target.constructor);
189
+ delete (propertyDescriptor as any).initializer;
190
+ if (!metadata.aggregations[propertyKey]) {
191
+ metadata.aggregations[propertyKey] = aggregationDefinition;
192
+ }
164
193
 
194
+ return propertyDescriptor;
195
+ } as any;
196
+ }
165
197
  export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBlockDefinition) {
166
198
  return function (classDefinition: any) {
167
199
  ensureMetadata(classDefinition);
@@ -170,9 +202,103 @@ export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBloc
170
202
  classDefinition.publicNamespace = oBuildingBlockDefinition.publicNamespace;
171
203
  classDefinition.fragment = oBuildingBlockDefinition.fragment;
172
204
  classDefinition.isOpen = oBuildingBlockDefinition.isOpen;
205
+ classDefinition.isRuntime = oBuildingBlockDefinition.isRuntime;
173
206
  classDefinition.apiVersion = 2;
207
+ if (classDefinition.isRuntime) {
208
+ classDefinition.prototype.getTemplate = function (this: any) {
209
+ const className = `${oBuildingBlockDefinition.namespace}.${oBuildingBlockDefinition.name}`.replace(/\./g, "/");
210
+ const extraProps = [];
211
+ for (const propertiesKey in classDefinition.metadata.properties) {
212
+ let propertyValue = this[propertiesKey];
213
+ if (propertyValue !== undefined) {
214
+ if (propertyValue.isA?.("sap.ui.model.Context")) {
215
+ propertyValue = propertyValue.getPath();
216
+ }
217
+ extraProps.push(xml`feBB:${propertiesKey}="${propertyValue}"`);
218
+ }
219
+ }
220
+ return xml`<core:Fragment
221
+ xmlns:core="sap.ui.core"
222
+ xmlns:feBB="sap.fe.core.buildingBlocks"
223
+ fragmentName="${className}"
224
+ id="{this>id}"
225
+ type="FE_COMPONENTS"
226
+ ${extraProps}
227
+ >
228
+ </core:Fragment>`;
229
+ };
230
+ }
231
+
174
232
  classDefinition.register = function () {
175
233
  registerBuildingBlock(classDefinition);
176
234
  };
235
+ classDefinition.unregister = function () {
236
+ XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
237
+ XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
238
+ };
177
239
  };
178
240
  }
241
+
242
+ Fragment.registerType("FE_COMPONENTS", {
243
+ load: async function (mSettings: any) {
244
+ let fnResolve: any;
245
+ let fnReject: any;
246
+ const loaderPromise = new Promise((resolve, reject) => {
247
+ fnResolve = resolve;
248
+ fnReject = reject;
249
+ });
250
+ sap.ui.require([mSettings.fragmentName], (fragmentClass: any) => {
251
+ if (!fragmentClass) {
252
+ fnReject("Could not load " + mSettings.fragmentName);
253
+ } else {
254
+ fnResolve(fragmentClass);
255
+ }
256
+ });
257
+ return loaderPromise;
258
+ },
259
+ init: async function (mSettings: any) {
260
+ const myClass = mSettings.fragmentContent;
261
+ const classSettings: any = {};
262
+ const feCustomData = mSettings?.customData?.[0]?.mProperties?.value?.["sap.fe.core.buildingBlocks"] || {};
263
+ delete mSettings.customData;
264
+ const pageComponent = Component.getOwnerComponentFor(mSettings.containingView) as any;
265
+ const appComponent = CommonUtils.getAppComponent(mSettings.containingView);
266
+ const metaModel = appComponent.getMetaModel();
267
+ const pageModel = pageComponent.getModel("_pageModel");
268
+ for (const propertyName in myClass.metadata.properties) {
269
+ const propertyMetadata = myClass.metadata.properties[propertyName];
270
+ if (propertyMetadata.type === "sap.ui.model.Context") {
271
+ classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
272
+ if (classSettings[propertyName].getObject()) {
273
+ classSettings[propertyName] = classSettings[propertyName].getObject();
274
+ } else {
275
+ // bind to metamodel
276
+ classSettings[propertyName] = metaModel.createBindingContext(feCustomData[propertyName]);
277
+ }
278
+ } else {
279
+ classSettings[propertyName] = feCustomData[propertyName];
280
+ }
281
+ }
282
+ return (ManagedObject as unknown as ManagedObjectEx).runWithPreprocessors(
283
+ () => {
284
+ return new myClass(classSettings).render();
285
+ },
286
+ {
287
+ id: function (sId: string) {
288
+ return mSettings.containingView.createId(sId);
289
+ },
290
+ settings: function (controlSettings: any) {
291
+ const allAssociations = this.getMetadata().getAssociations();
292
+ for (const associationDetailName of Object.keys(allAssociations)) {
293
+ if (controlSettings.hasOwnProperty(associationDetailName)) {
294
+ controlSettings[associationDetailName] = mSettings.containingView.createId(
295
+ controlSettings[associationDetailName]
296
+ );
297
+ }
298
+ }
299
+ return controlSettings;
300
+ }
301
+ }
302
+ );
303
+ }
304
+ });