@sapui5/sap.fe.core 1.102.3 → 1.105.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/package.json +6 -6
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +120 -0
  4. package/src/sap/fe/core/ActionRuntime.ts +108 -0
  5. package/src/sap/fe/core/AppComponent.js +81 -35
  6. package/src/sap/fe/core/AppComponent.ts +68 -44
  7. package/src/sap/fe/core/AppStateHandler.js +82 -70
  8. package/src/sap/fe/core/AppStateHandler.ts +32 -37
  9. package/src/sap/fe/core/BaseController.js +12 -10
  10. package/src/sap/fe/core/BaseController.ts +15 -13
  11. package/src/sap/fe/core/CommonUtils.js +291 -218
  12. package/src/sap/fe/core/CommonUtils.ts +315 -251
  13. package/src/sap/fe/core/ExtensionAPI.js +25 -28
  14. package/src/sap/fe/core/ExtensionAPI.ts +36 -38
  15. package/src/sap/fe/core/PageController.js +5 -5
  16. package/src/sap/fe/core/PageController.ts +4 -5
  17. package/src/sap/fe/core/TemplateComponent.js +21 -10
  18. package/src/sap/fe/core/TemplateComponent.ts +9 -6
  19. package/src/sap/fe/core/TemplateModel.js +2 -2
  20. package/src/sap/fe/core/TemplateModel.ts +1 -1
  21. package/src/sap/fe/core/buildingBlocks/AttributeModel.js +11 -3
  22. package/src/sap/fe/core/buildingBlocks/AttributeModel.ts +8 -2
  23. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +197 -43
  24. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +164 -24
  25. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.js +14 -0
  26. package/src/sap/fe/core/buildingBlocks/BuildingBlockFormatter.ts +5 -0
  27. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +609 -230
  28. package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +275 -128
  29. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +30 -30
  30. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +32 -29
  31. package/src/sap/fe/core/controllerextensions/BusyLocker.js +1 -1
  32. package/src/sap/fe/core/controllerextensions/EditFlow.js +761 -700
  33. package/src/sap/fe/core/controllerextensions/EditFlow.ts +478 -514
  34. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +10 -10
  35. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +10 -10
  36. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +104 -75
  37. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +71 -79
  38. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +68 -68
  39. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +76 -76
  40. package/src/sap/fe/core/controllerextensions/InternalRouting.js +162 -102
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +177 -121
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +67 -69
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +106 -123
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +10 -10
  45. package/src/sap/fe/core/controllerextensions/MassEdit.ts +20 -27
  46. package/src/sap/fe/core/controllerextensions/MessageHandler.js +21 -13
  47. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +21 -14
  48. package/src/sap/fe/core/controllerextensions/PageReady.js +98 -26
  49. package/src/sap/fe/core/controllerextensions/PageReady.ts +98 -34
  50. package/src/sap/fe/core/controllerextensions/Paginator.js +31 -32
  51. package/src/sap/fe/core/controllerextensions/Paginator.ts +33 -34
  52. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -7
  53. package/src/sap/fe/core/controllerextensions/Placeholder.ts +12 -14
  54. package/src/sap/fe/core/controllerextensions/Routing.js +11 -12
  55. package/src/sap/fe/core/controllerextensions/Routing.ts +12 -13
  56. package/src/sap/fe/core/controllerextensions/RoutingListener.js +1 -1
  57. package/src/sap/fe/core/controllerextensions/Share.js +171 -140
  58. package/src/sap/fe/core/controllerextensions/Share.ts +117 -118
  59. package/src/sap/fe/core/controllerextensions/SideEffects.js +47 -51
  60. package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -60
  61. package/src/sap/fe/core/controllerextensions/ViewState.js +201 -132
  62. package/src/sap/fe/core/controllerextensions/ViewState.ts +141 -148
  63. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +5 -5
  64. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +8 -7
  65. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +13 -12
  66. package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.ts +17 -20
  67. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +13 -12
  68. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +15 -15
  69. package/src/sap/fe/core/controllerextensions/collaboration/Manage.js +57 -18
  70. package/src/sap/fe/core/controllerextensions/collaboration/Manage.ts +60 -28
  71. package/src/sap/fe/core/controllerextensions/collaboration/ManageDialog.fragment.xml +29 -21
  72. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1424 -940
  73. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +799 -836
  74. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +410 -377
  75. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +275 -358
  76. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +309 -0
  77. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +320 -0
  78. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +752 -579
  79. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +631 -599
  80. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +92 -74
  81. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +49 -52
  82. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +78 -41
  83. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +110 -84
  84. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +69 -81
  85. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +64 -73
  86. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +18 -2
  87. package/src/sap/fe/core/controls/ActionParameterDialogFieldValueHelp.fragment.xml +35 -0
  88. package/src/sap/fe/core/controls/ActionParameterDialogValueHelp.fragment.xml +25 -24
  89. package/src/sap/fe/core/controls/Any.js +9 -5
  90. package/src/sap/fe/core/controls/Any.ts +10 -4
  91. package/src/sap/fe/core/controls/CommandExecution.js +12 -26
  92. package/src/sap/fe/core/controls/CommandExecution.ts +11 -25
  93. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -3
  94. package/src/sap/fe/core/controls/ConditionalWrapper.ts +3 -3
  95. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +26 -26
  96. package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +25 -24
  97. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -3
  98. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +2 -2
  99. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -3
  100. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +5 -5
  101. package/src/sap/fe/core/controls/FieldWrapper.js +3 -3
  102. package/src/sap/fe/core/controls/FieldWrapper.ts +3 -3
  103. package/src/sap/fe/core/controls/FileWrapper.js +9 -4
  104. package/src/sap/fe/core/controls/FileWrapper.ts +16 -12
  105. package/src/sap/fe/core/controls/FilterBar.js +7 -3
  106. package/src/sap/fe/core/controls/FilterBar.ts +13 -9
  107. package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
  108. package/src/sap/fe/core/controls/FormElementWrapper.ts +2 -2
  109. package/src/sap/fe/core/controls/MassEditSelect.js +1 -1
  110. package/src/sap/fe/core/controls/MassEditSelect.ts +0 -4
  111. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -1
  112. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +44 -19
  113. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -2
  114. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +17 -13
  115. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +20 -22
  116. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +4 -4
  117. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +8 -8
  118. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +49 -49
  119. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +54 -54
  120. package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +8 -2
  121. package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +22 -35
  122. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +89 -88
  123. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +107 -106
  124. package/src/sap/fe/core/converters/ConverterContext.js +48 -34
  125. package/src/sap/fe/core/converters/ConverterContext.ts +81 -67
  126. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  127. package/src/sap/fe/core/converters/ManifestSettings.ts +18 -15
  128. package/src/sap/fe/core/converters/ManifestWrapper.js +59 -45
  129. package/src/sap/fe/core/converters/ManifestWrapper.ts +55 -45
  130. package/src/sap/fe/core/converters/MetaModelConverter.js +74 -40
  131. package/src/sap/fe/core/converters/MetaModelConverter.ts +176 -140
  132. package/src/sap/fe/core/converters/TemplateConverter.js +21 -20
  133. package/src/sap/fe/core/converters/TemplateConverter.ts +27 -24
  134. package/src/sap/fe/core/converters/annotations/DataField.js +58 -35
  135. package/src/sap/fe/core/converters/annotations/DataField.ts +102 -76
  136. package/src/sap/fe/core/converters/common/AnnotationConverter.js +1956 -1494
  137. package/src/sap/fe/core/converters/controls/Common/Action.js +78 -51
  138. package/src/sap/fe/core/converters/controls/Common/Action.ts +87 -52
  139. package/src/sap/fe/core/converters/controls/Common/Chart.js +22 -16
  140. package/src/sap/fe/core/converters/controls/Common/Chart.ts +42 -43
  141. package/src/sap/fe/core/converters/controls/Common/Criticality.js +3 -3
  142. package/src/sap/fe/core/converters/controls/Common/Criticality.ts +4 -4
  143. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +65 -29
  144. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +93 -62
  145. package/src/sap/fe/core/converters/controls/Common/Form.js +31 -31
  146. package/src/sap/fe/core/converters/controls/Common/Form.ts +46 -57
  147. package/src/sap/fe/core/converters/controls/Common/KPI.js +11 -11
  148. package/src/sap/fe/core/converters/controls/Common/KPI.ts +49 -52
  149. package/src/sap/fe/core/converters/controls/Common/Table.js +251 -264
  150. package/src/sap/fe/core/converters/controls/Common/Table.ts +344 -370
  151. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +119 -119
  152. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +147 -144
  153. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +89 -59
  154. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +118 -71
  155. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +28 -26
  156. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +46 -43
  157. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +9 -9
  158. package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +14 -13
  159. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +131 -95
  160. package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +123 -87
  161. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +98 -87
  162. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +121 -117
  163. package/src/sap/fe/core/converters/helpers/Aggregation.js +2 -4
  164. package/src/sap/fe/core/converters/helpers/Aggregation.ts +12 -15
  165. package/src/sap/fe/core/converters/helpers/BindingHelper.js +31 -31
  166. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +30 -29
  167. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +8 -6
  168. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +18 -10
  169. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +136 -0
  170. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +139 -0
  171. package/src/sap/fe/core/converters/helpers/ID.js +48 -46
  172. package/src/sap/fe/core/converters/helpers/ID.ts +26 -25
  173. package/src/sap/fe/core/converters/helpers/IssueManager.js +1 -1
  174. package/src/sap/fe/core/converters/helpers/Key.js +7 -7
  175. package/src/sap/fe/core/converters/helpers/Key.ts +7 -7
  176. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
  177. package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +4 -5
  178. package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +6 -6
  179. package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +10 -10
  180. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +53 -75
  181. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +59 -90
  182. package/src/sap/fe/core/converters/templates/ListReportConverter.js +58 -57
  183. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +93 -86
  184. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +58 -44
  185. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +87 -80
  186. package/src/sap/fe/core/designtime/AppComponent.designtime.js +4 -4
  187. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +4 -4
  188. package/src/sap/fe/core/formatters/CollaborationFormatter.js +2 -2
  189. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +3 -3
  190. package/src/sap/fe/core/formatters/FPMFormatter.js +5 -5
  191. package/src/sap/fe/core/formatters/FPMFormatter.ts +10 -10
  192. package/src/sap/fe/core/formatters/KPIFormatter.js +7 -7
  193. package/src/sap/fe/core/formatters/KPIFormatter.ts +10 -10
  194. package/src/sap/fe/core/formatters/StandardFormatter.js +96 -0
  195. package/src/sap/fe/core/formatters/StandardFormatter.ts +70 -0
  196. package/src/sap/fe/core/formatters/TableFormatter.js +11 -11
  197. package/src/sap/fe/core/formatters/TableFormatter.ts +12 -12
  198. package/src/sap/fe/core/formatters/TableFormatterTypes.js +1 -1
  199. package/src/sap/fe/core/formatters/ValueFormatter.js +8 -8
  200. package/src/sap/fe/core/formatters/ValueFormatter.ts +9 -9
  201. package/src/sap/fe/core/fpm/Component.js +33 -7
  202. package/src/sap/fe/core/fpm/Component.ts +14 -0
  203. package/src/sap/fe/core/helpers/AnnotationEnum.js +1 -1
  204. package/src/sap/fe/core/helpers/AppStartupHelper.js +19 -18
  205. package/src/sap/fe/core/helpers/AppStartupHelper.ts +41 -43
  206. package/src/sap/fe/core/helpers/BindingToolkit.js +1836 -0
  207. package/src/sap/fe/core/helpers/{BindingExpression.ts → BindingToolkit.ts} +397 -270
  208. package/src/sap/fe/core/helpers/ClassSupport.js +49 -12
  209. package/src/sap/fe/core/helpers/ClassSupport.ts +37 -10
  210. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +2 -2
  211. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -1
  212. package/src/sap/fe/core/helpers/EditState.js +1 -6
  213. package/src/sap/fe/core/helpers/EditState.ts +5 -10
  214. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +2 -2
  215. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +4 -4
  216. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  217. package/src/sap/fe/core/helpers/FPMHelper.ts +2 -2
  218. package/src/sap/fe/core/helpers/KeepAliveHelper.js +31 -31
  219. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +52 -56
  220. package/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +1 -1
  221. package/src/sap/fe/core/helpers/MassEditHelper.js +306 -280
  222. package/src/sap/fe/core/helpers/MassEditHelper.ts +380 -360
  223. package/src/sap/fe/core/helpers/MessageStrip.js +81 -0
  224. package/src/sap/fe/core/helpers/MessageStrip.ts +79 -0
  225. package/src/sap/fe/core/helpers/ModelHelper.js +25 -25
  226. package/src/sap/fe/core/helpers/ModelHelper.ts +34 -32
  227. package/src/sap/fe/core/helpers/PasteHelper.js +3 -10
  228. package/src/sap/fe/core/helpers/PasteHelper.ts +20 -25
  229. package/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  230. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +11 -11
  231. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -3
  232. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +8 -8
  233. package/src/sap/fe/core/helpers/StableIdHelper.js +12 -12
  234. package/src/sap/fe/core/helpers/StableIdHelper.ts +12 -12
  235. package/src/sap/fe/core/helpers/Synchronization.js +1 -1
  236. package/src/sap/fe/core/helpers/ToES6Promise.js +32 -0
  237. package/src/sap/fe/core/helpers/ToES6Promise.ts +19 -0
  238. package/src/sap/fe/core/jsx-runtime/Fragment.js +16 -0
  239. package/src/sap/fe/core/jsx-runtime/Fragment.ts +3 -0
  240. package/src/sap/fe/core/jsx-runtime/ViewLoader.js +109 -0
  241. package/src/sap/fe/core/jsx-runtime/ViewLoader.tsx +47 -0
  242. package/src/sap/fe/core/jsx-runtime/jsx-control.js +110 -0
  243. package/src/sap/fe/core/jsx-runtime/jsx-control.ts +92 -0
  244. package/src/sap/fe/core/jsx-runtime/jsx-xml.js +105 -0
  245. package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +89 -0
  246. package/src/sap/fe/core/jsx-runtime/jsx.js +12 -90
  247. package/src/sap/fe/core/jsx-runtime/jsx.ts +24 -85
  248. package/src/sap/fe/core/jsx-runtime/jsxs.js +1 -1
  249. package/src/sap/fe/core/jsx-runtime/useMDXComponents.js +179 -0
  250. package/src/sap/fe/core/jsx-runtime/useMDXComponents.tsx +150 -0
  251. package/src/sap/fe/core/library.js +42 -3
  252. package/src/sap/fe/core/library.support.js +1 -1
  253. package/src/sap/fe/core/library.ts +38 -0
  254. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +3 -3
  255. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +2 -2
  256. package/src/sap/fe/core/messagebundle.properties +39 -67
  257. package/src/sap/fe/core/messagebundle_ar.properties +27 -44
  258. package/src/sap/fe/core/messagebundle_bg.properties +27 -44
  259. package/src/sap/fe/core/messagebundle_ca.properties +27 -44
  260. package/src/sap/fe/core/messagebundle_cs.properties +27 -44
  261. package/src/sap/fe/core/messagebundle_cy.properties +26 -43
  262. package/src/sap/fe/core/messagebundle_da.properties +27 -44
  263. package/src/sap/fe/core/messagebundle_de.properties +25 -42
  264. package/src/sap/fe/core/messagebundle_el.properties +28 -45
  265. package/src/sap/fe/core/messagebundle_en.properties +27 -44
  266. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -44
  267. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +25 -42
  268. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +26 -40
  269. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +25 -42
  270. package/src/sap/fe/core/messagebundle_es.properties +27 -44
  271. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -44
  272. package/src/sap/fe/core/messagebundle_et.properties +27 -44
  273. package/src/sap/fe/core/messagebundle_fi.properties +27 -44
  274. package/src/sap/fe/core/messagebundle_fr.properties +26 -43
  275. package/src/sap/fe/core/messagebundle_fr_CA.properties +25 -42
  276. package/src/sap/fe/core/messagebundle_hi.properties +27 -44
  277. package/src/sap/fe/core/messagebundle_hr.properties +27 -44
  278. package/src/sap/fe/core/messagebundle_hu.properties +27 -44
  279. package/src/sap/fe/core/messagebundle_id.properties +27 -44
  280. package/src/sap/fe/core/messagebundle_it.properties +43 -60
  281. package/src/sap/fe/core/messagebundle_iw.properties +27 -44
  282. package/src/sap/fe/core/messagebundle_ja.properties +27 -44
  283. package/src/sap/fe/core/messagebundle_kk.properties +27 -44
  284. package/src/sap/fe/core/messagebundle_ko.properties +30 -47
  285. package/src/sap/fe/core/messagebundle_lt.properties +27 -44
  286. package/src/sap/fe/core/messagebundle_lv.properties +27 -44
  287. package/src/sap/fe/core/messagebundle_ms.properties +27 -44
  288. package/src/sap/fe/core/messagebundle_nl.properties +29 -46
  289. package/src/sap/fe/core/messagebundle_no.properties +27 -44
  290. package/src/sap/fe/core/messagebundle_pl.properties +28 -45
  291. package/src/sap/fe/core/messagebundle_pt.properties +28 -45
  292. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -44
  293. package/src/sap/fe/core/messagebundle_ro.properties +27 -44
  294. package/src/sap/fe/core/messagebundle_ru.properties +27 -44
  295. package/src/sap/fe/core/messagebundle_sh.properties +27 -44
  296. package/src/sap/fe/core/messagebundle_sk.properties +27 -44
  297. package/src/sap/fe/core/messagebundle_sl.properties +27 -44
  298. package/src/sap/fe/core/messagebundle_sv.properties +27 -44
  299. package/src/sap/fe/core/messagebundle_th.properties +25 -42
  300. package/src/sap/fe/core/messagebundle_tr.properties +27 -44
  301. package/src/sap/fe/core/messagebundle_uk.properties +27 -44
  302. package/src/sap/fe/core/messagebundle_vi.properties +27 -44
  303. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -44
  304. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -44
  305. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +3 -3
  306. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +5 -5
  307. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +103 -75
  308. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +72 -73
  309. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +2 -2
  310. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +3 -2
  311. package/src/sap/fe/core/services/NavigationServiceFactory.js +62 -50
  312. package/src/sap/fe/core/services/NavigationServiceFactory.ts +63 -52
  313. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +3 -3
  314. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +4 -4
  315. package/src/sap/fe/core/services/RoutingServiceFactory.js +56 -56
  316. package/src/sap/fe/core/services/RoutingServiceFactory.ts +67 -65
  317. package/src/sap/fe/core/services/ShellServicesFactory.js +93 -77
  318. package/src/sap/fe/core/services/ShellServicesFactory.ts +95 -82
  319. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +64 -64
  320. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +102 -92
  321. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +232 -200
  322. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +145 -142
  323. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +2 -2
  324. package/src/sap/fe/core/support/AnnotationIssue.support.js +1 -1
  325. package/src/sap/fe/core/support/CollectionFacetMissingID.support.js +1 -1
  326. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +1 -1
  327. package/src/sap/fe/core/support/CommonHelper.js +3 -2
  328. package/src/sap/fe/core/support/CommonHelper.ts +9 -13
  329. package/src/sap/fe/core/support/Diagnostics.js +1 -1
  330. package/src/sap/fe/core/support/Diagnostics.ts +5 -5
  331. package/src/sap/fe/core/support/InvalidAnnotationColumnKey.support.js +1 -1
  332. package/src/sap/fe/core/templating/CommonFormatters.js +85 -0
  333. package/src/sap/fe/core/templating/CommonFormatters.ts +90 -0
  334. package/src/sap/fe/core/templating/CriticalityFormatters.js +31 -31
  335. package/src/sap/fe/core/templating/CriticalityFormatters.ts +42 -40
  336. package/src/sap/fe/core/templating/DataFieldFormatters.js +8 -8
  337. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -10
  338. package/src/sap/fe/core/templating/DataModelPathHelper.js +23 -15
  339. package/src/sap/fe/core/templating/DataModelPathHelper.ts +47 -34
  340. package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
  341. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +2 -3
  342. package/src/sap/fe/core/templating/EntitySetHelper.js +7 -7
  343. package/src/sap/fe/core/templating/EntitySetHelper.ts +6 -8
  344. package/src/sap/fe/core/templating/FieldControlHelper.js +35 -34
  345. package/src/sap/fe/core/templating/FieldControlHelper.ts +29 -46
  346. package/src/sap/fe/core/templating/FilterHelper.js +18 -17
  347. package/src/sap/fe/core/templating/FilterHelper.ts +18 -18
  348. package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
  349. package/src/sap/fe/core/templating/FilterTemplating.ts +3 -3
  350. package/src/sap/fe/core/templating/PropertyFormatters.js +7 -7
  351. package/src/sap/fe/core/templating/PropertyFormatters.ts +21 -19
  352. package/src/sap/fe/core/templating/PropertyHelper.js +25 -25
  353. package/src/sap/fe/core/templating/PropertyHelper.ts +25 -26
  354. package/src/sap/fe/core/templating/UIFormatters.js +152 -95
  355. package/src/sap/fe/core/templating/UIFormatters.ts +202 -128
  356. package/src/sap/fe/core/type/DateTimeWithTimezone.js +2 -2
  357. package/src/sap/fe/core/type/Email.js +3 -3
  358. package/src/sap/fe/core/type/Email.ts +2 -2
  359. package/src/sap/fe/core/helpers/BindingExpression.js +0 -1732
@@ -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/base/util/ObjectPath", "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, ObjectPath, BuildingBlockRuntime, CommonUtils, StableIdHelper, ManagedObject, Component, Fragment, XMLPreprocessor, ConverterContext) {
6
6
  "use strict";
7
7
 
8
+ var _templateObject, _templateObject2, _templateObject3;
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,138 @@ 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
+ for (var eventsKey in classDefinition.metadata.events) {
208
+ var eventsValue = this[eventsKey];
209
+
210
+ if (eventsValue !== undefined) {
211
+ extraProps.push(xml(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["feBB:", "=\"", "\""])), eventsKey, eventsValue));
212
+ }
213
+ }
214
+
215
+ return xml(_templateObject3 || (_templateObject3 = _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);
216
+ };
217
+ }
218
+
156
219
  classDefinition.register = function () {
157
220
  registerBuildingBlock(classDefinition);
158
221
  };
222
+
223
+ classDefinition.unregister = function () {
224
+ XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
225
+ XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
226
+ };
159
227
  };
160
228
  }
161
229
 
162
230
  _exports.defineBuildingBlock = defineBuildingBlock;
231
+ Fragment.registerType("FE_COMPONENTS", {
232
+ load: function (mSettings) {
233
+ try {
234
+ var fnResolve;
235
+ var fnReject;
236
+ var loaderPromise = new Promise(function (resolve, reject) {
237
+ fnResolve = resolve;
238
+ fnReject = reject;
239
+ });
240
+
241
+ sap.ui.require([mSettings.fragmentName], function (fragmentClass) {
242
+ if (!fragmentClass) {
243
+ fnReject("Could not load " + mSettings.fragmentName);
244
+ } else {
245
+ fnResolve(fragmentClass);
246
+ }
247
+ });
248
+
249
+ return Promise.resolve(loaderPromise);
250
+ } catch (e) {
251
+ return Promise.reject(e);
252
+ }
253
+ },
254
+ init: function (mSettings) {
255
+ try {
256
+ var _mSettings$customData, _mSettings$customData2, _mSettings$customData3, _mSettings$customData4;
257
+
258
+ var myClass = mSettings.fragmentContent;
259
+ var classSettings = {};
260
+ 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"]) || {};
261
+ delete mSettings.customData;
262
+ var pageComponent = Component.getOwnerComponentFor(mSettings.containingView);
263
+ var appComponent = CommonUtils.getAppComponent(mSettings.containingView);
264
+ var metaModel = appComponent.getMetaModel();
265
+ var pageModel = pageComponent.getModel("_pageModel");
266
+
267
+ for (var propertyName in myClass.metadata.properties) {
268
+ var propertyMetadata = myClass.metadata.properties[propertyName];
269
+
270
+ if (propertyMetadata.type === "sap.ui.model.Context") {
271
+ classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
272
+
273
+ if (classSettings[propertyName].getObject()) {
274
+ classSettings[propertyName] = classSettings[propertyName].getObject();
275
+ } else {
276
+ // bind to metamodel
277
+ classSettings[propertyName] = metaModel.createBindingContext(feCustomData[propertyName]);
278
+ }
279
+ } else {
280
+ classSettings[propertyName] = feCustomData[propertyName];
281
+ }
282
+ }
283
+
284
+ for (var eventName in myClass.metadata.events) {
285
+ if (feCustomData[eventName] && feCustomData[eventName].startsWith(".")) {
286
+ classSettings[eventName] = ObjectPath.get(feCustomData[eventName].substring(1), mSettings.containingView.getController());
287
+ } else {
288
+ classSettings[eventName] = ""; // For now, might need to resolve more stuff
289
+ }
290
+ }
291
+
292
+ return Promise.resolve(ManagedObject.runWithPreprocessors(function () {
293
+ return new myClass(classSettings).render();
294
+ }, {
295
+ id: function (sId) {
296
+ return mSettings.containingView.createId(sId);
297
+ },
298
+ settings: function (controlSettings) {
299
+ var allAssociations = this.getMetadata().getAssociations();
300
+
301
+ for (var _i = 0, _Object$keys = Object.keys(allAssociations); _i < _Object$keys.length; _i++) {
302
+ var associationDetailName = _Object$keys[_i];
303
+
304
+ if (controlSettings.hasOwnProperty(associationDetailName)) {
305
+ controlSettings[associationDetailName] = mSettings.containingView.createId(controlSettings[associationDetailName]);
306
+ }
307
+ }
308
+
309
+ return controlSettings;
310
+ }
311
+ }));
312
+ } catch (e) {
313
+ return Promise.reject(e);
314
+ }
315
+ }
316
+ });
163
317
  return _exports;
164
318
  }, 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==
319
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWlsZGluZ0Jsb2NrQmFzZSIsIm9Qcm9wcyIsIl9vQ29udHJvbENvbmZpZyIsIl9vU2V0dGluZ3MiLCJpc1B1YmxpYyIsImdldENvbnZlcnRlckNvbnRleHQiLCJvVmlzdWFsaXphdGlvbk9iamVjdFBhdGgiLCJjb250ZXh0UGF0aCIsIm1TZXR0aW5ncyIsIm1FeHRyYVBhcmFtcyIsIm9BcHBDb21wb25lbnQiLCJhcHBDb21wb25lbnQiLCJvcmlnaW5hbFZpZXdEYXRhIiwibW9kZWxzIiwidmlld0RhdGEiLCJnZXREYXRhIiwiT2JqZWN0IiwiYXNzaWduIiwicmVzb3VyY2VCdW5kbGUiLCJkZWVwQ2xvbmUiLCJjb250cm9sQ29uZmlndXJhdGlvbiIsIm1lcmdlIiwiQ29udmVydGVyQ29udGV4dCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmFtZSIsIm1ldGFNb2RlbCIsImdldERpYWdub3N0aWNzIiwiY29udGV4dExvY2F0aW9uIiwia2V5cyIsImZvckVhY2giLCJwcm9wTmFtZSIsImNyZWF0ZUlkIiwiaWQiLCJzdHJpbmdQYXJ0cyIsImdlbmVyYXRlIiwidW5kZWZpbmVkIiwiZ2V0UHJvcGVydGllcyIsImFsbFByb3BlcnRpZXMiLCJvSW5zdGFuY2VLZXkiLCJoYXNPd25Qcm9wZXJ0eSIsInJlZ2lzdGVyIiwidW5yZWdpc3RlciIsImFkZENvbmRpdGlvbmFsbHkiLCJjb25kaXRpb24iLCJwYXJ0VG9BZGQiLCJhdHRyIiwiYXR0cmlidXRlTmFtZSIsInZhbHVlIiwiZW5zdXJlTWV0YWRhdGEiLCJ0YXJnZXQiLCJtZXRhZGF0YSIsInByb3BlcnRpZXMiLCJhZ2dyZWdhdGlvbnMiLCJldmVudHMiLCJ4bWxBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVEZWZpbml0aW9uIiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eURlc2NyaXB0b3IiLCJjb25zdHJ1Y3RvciIsImluaXRpYWxpemVyIiwieG1sRXZlbnQiLCJ0eXBlIiwieG1sQWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbkRlZmluaXRpb24iLCJkZWZpbmVCdWlsZGluZ0Jsb2NrIiwib0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uIiwiY2xhc3NEZWZpbml0aW9uIiwieG1sVGFnIiwibmFtZXNwYWNlIiwicHVibGljTmFtZXNwYWNlIiwiZnJhZ21lbnQiLCJpc09wZW4iLCJpc1J1bnRpbWUiLCJhcGlWZXJzaW9uIiwicHJvdG90eXBlIiwiZ2V0VGVtcGxhdGUiLCJjbGFzc05hbWUiLCJyZXBsYWNlIiwiZXh0cmFQcm9wcyIsInByb3BlcnRpZXNLZXkiLCJwcm9wZXJ0eVZhbHVlIiwiaXNBIiwiZ2V0UGF0aCIsInB1c2giLCJ4bWwiLCJldmVudHNLZXkiLCJldmVudHNWYWx1ZSIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsIlhNTFByZXByb2Nlc3NvciIsInBsdWdJbiIsIkZyYWdtZW50IiwicmVnaXN0ZXJUeXBlIiwibG9hZCIsImZuUmVzb2x2ZSIsImZuUmVqZWN0IiwibG9hZGVyUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwic2FwIiwidWkiLCJyZXF1aXJlIiwiZnJhZ21lbnROYW1lIiwiZnJhZ21lbnRDbGFzcyIsImluaXQiLCJteUNsYXNzIiwiZnJhZ21lbnRDb250ZW50IiwiY2xhc3NTZXR0aW5ncyIsImZlQ3VzdG9tRGF0YSIsImN1c3RvbURhdGEiLCJtUHJvcGVydGllcyIsInBhZ2VDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImNvbnRhaW5pbmdWaWV3IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNZXRhTW9kZWwiLCJwYWdlTW9kZWwiLCJnZXRNb2RlbCIsInByb3BlcnR5TmFtZSIsInByb3BlcnR5TWV0YWRhdGEiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE9iamVjdCIsImV2ZW50TmFtZSIsInN0YXJ0c1dpdGgiLCJPYmplY3RQYXRoIiwiZ2V0Iiwic3Vic3RyaW5nIiwiZ2V0Q29udHJvbGxlciIsIk1hbmFnZWRPYmplY3QiLCJydW5XaXRoUHJlcHJvY2Vzc29ycyIsInJlbmRlciIsInNJZCIsInNldHRpbmdzIiwiY29udHJvbFNldHRpbmdzIiwiYWxsQXNzb2NpYXRpb25zIiwiZ2V0TWV0YWRhdGEiLCJnZXRBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbkRldGFpbE5hbWUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkJ1aWxkaW5nQmxvY2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlZXBDbG9uZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9kZWVwQ2xvbmVcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IE9iamVjdFBhdGggZnJvbSBcInNhcC9iYXNlL3V0aWwvT2JqZWN0UGF0aFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrLCB4bWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1J1bnRpbWVcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBGcmFnbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRnJhZ21lbnRcIjtcbmltcG9ydCBYTUxQcmVwcm9jZXNzb3IgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvWE1MUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmFnZWRPYmplY3RFeCB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCIuLi9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgQnVpbGRpbmcgQmxvY2tcbiAqL1xuZXhwb3J0IGNsYXNzIEJ1aWxkaW5nQmxvY2tCYXNlIHtcblx0cHJvdGVjdGVkIGlzUHVibGljID0gZmFsc2U7XG5cdHByb3RlY3RlZCBpZCE6IHN0cmluZztcblx0Y29uc3RydWN0b3Iob1Byb3BzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBfb0NvbnRyb2xDb25maWc/OiBhbnksIF9vU2V0dGluZ3M/OiBhbnkpIHtcblx0XHRPYmplY3Qua2V5cyhvUHJvcHMpLmZvckVhY2goKHByb3BOYW1lKSA9PiB7XG5cdFx0XHR0aGlzW3Byb3BOYW1lIGFzIGtleW9mIHRoaXNdID0gb1Byb3BzW3Byb3BOYW1lXTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0IHRoZSBnaXZlbiBsb2NhbCBlbGVtZW50IElEIHRvIGEgZ2xvYmFsbHkgdW5pcXVlIElEIGJ5IHByZWZpeGluZyB3aXRoIHRoZSBCdWlsZGluZyBCbG9jayBJRC5cblx0ICpcblx0ICogQHBhcmFtIHN0cmluZ1BhcnRzXG5cdCAqIEByZXR1cm5zIEVpdGhlciB0aGUgZ2xvYmFsIElEIG9yIHVuZGVmaW5lZCBpZiB0aGUgQnVpbGRpbmcgQmxvY2sgZG9lc24ndCBoYXZlIGFuIElEXG5cdCAqL1xuXHRwdWJsaWMgY3JlYXRlSWQoLi4uc3RyaW5nUGFydHM6IHN0cmluZ1tdKSB7XG5cdFx0Ly8gSWYgdGhlIGNoaWxkIGluc3RhbmNlIGhhcyBhbiBJRCBwcm9wZXJ0eSB1c2UgaXQgb3RoZXJ3aXNlIHJldHVybiB1bmRlZmluZWRcblx0XHRpZiAoKHRoaXMgYXMgYW55KS5pZCkge1xuXHRcdFx0cmV0dXJuIGdlbmVyYXRlKFsodGhpcyBhcyBhbnkpLmlkLCAuLi5zdHJpbmdQYXJ0c10pO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdC8vIFRoaXMgYmxvY2sgaXMgY29tbWVudGVkIG91dCBiZWNhdXNlIEkgYW0gbm90IHVzaW5nIHRoZW0gZm9yIG5vdyAvIG5lZWQgdG8gY2hhbmdlIHRoaXMgYnV0IHN0aWxsIHdhbnQgdG8ga2VlcCB0aGVtIGFyb3VuZFxuXHRwcm90ZWN0ZWQgZ2V0Q29udmVydGVyQ29udGV4dCA9IGZ1bmN0aW9uIChvVmlzdWFsaXphdGlvbk9iamVjdFBhdGg6IGFueSwgY29udGV4dFBhdGg6IGFueSwgbVNldHRpbmdzOiBhbnksIG1FeHRyYVBhcmFtcz86IGFueSkge1xuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBtU2V0dGluZ3MuYXBwQ29tcG9uZW50O1xuXHRcdGNvbnN0IG9yaWdpbmFsVmlld0RhdGEgPSBtU2V0dGluZ3MubW9kZWxzLnZpZXdEYXRhICYmIG1TZXR0aW5ncy5tb2RlbHMudmlld0RhdGEuZ2V0RGF0YSgpO1xuXHRcdGxldCB2aWV3RGF0YSA9IE9iamVjdC5hc3NpZ24oe30sIG9yaWdpbmFsVmlld0RhdGEpO1xuXHRcdGRlbGV0ZSB2aWV3RGF0YS5yZXNvdXJjZUJ1bmRsZTtcblx0XHR2aWV3RGF0YSA9IGRlZXBDbG9uZSh2aWV3RGF0YSk7XG5cdFx0dmlld0RhdGEuY29udHJvbENvbmZpZ3VyYXRpb24gPSBtZXJnZSh2aWV3RGF0YS5jb250cm9sQ29uZmlndXJhdGlvbiwgbUV4dHJhUGFyYW1zKTtcblx0XHRyZXR1cm4gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRvVmlzdWFsaXphdGlvbk9iamVjdFBhdGguc3RhcnRpbmdFbnRpdHlTZXQubmFtZSxcblx0XHRcdG1TZXR0aW5ncy5tb2RlbHMubWV0YU1vZGVsLFxuXHRcdFx0b0FwcENvbXBvbmVudCAmJiBvQXBwQ29tcG9uZW50LmdldERpYWdub3N0aWNzKCksXG5cdFx0XHRtZXJnZSxcblx0XHRcdG9WaXN1YWxpemF0aW9uT2JqZWN0UGF0aC5jb250ZXh0TG9jYXRpb24sXG5cdFx0XHR2aWV3RGF0YVxuXHRcdCk7XG5cdH07XG5cdHB1YmxpYyBnZXRQcm9wZXJ0aWVzKCkge1xuXHRcdGNvbnN0IGFsbFByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0XHRmb3IgKGNvbnN0IG9JbnN0YW5jZUtleSBpbiB0aGlzKSB7XG5cdFx0XHRpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShvSW5zdGFuY2VLZXkpKSB7XG5cdFx0XHRcdGFsbFByb3BlcnRpZXNbb0luc3RhbmNlS2V5XSA9IHRoaXNbb0luc3RhbmNlS2V5XTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGFsbFByb3BlcnRpZXM7XG5cdH1cblx0c3RhdGljIHJlZ2lzdGVyKCkge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cdHN0YXRpYyB1bnJlZ2lzdGVyKCkge1xuXHRcdC8vIFRvIGJlIG92ZXJyaWRlblxuXHR9XG5cdHB1YmxpYyBhZGRDb25kaXRpb25hbGx5KGNvbmRpdGlvbj86IGJvb2xlYW4sIHBhcnRUb0FkZD86IGFueSkge1xuXHRcdGlmIChjb25kaXRpb24pIHtcblx0XHRcdHJldHVybiBwYXJ0VG9BZGQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxuXHRwcm90ZWN0ZWQgYXR0cihhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcblx0XHRpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuIGAke2F0dHJpYnV0ZU5hbWV9PVwiJHt2YWx1ZX1cImA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uID0ge1xuXHR0eXBlOiBzdHJpbmc7XG5cdGlzUHVibGljPzogYm9vbGVhbjtcblx0ZGVmYXVsdFZhbHVlPzogYW55O1xuXHRjb21wdXRlZD86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0JGtpbmQ/OiBzdHJpbmdbXTtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrTWV0YWRhdGFDb250ZXh0RGVmaW5pdGlvbiA9IHtcblx0dHlwZTogc3RyaW5nO1xuXHRpc1B1YmxpYz86IGJvb2xlYW47XG5cdHJlcXVpcmVkPzogYm9vbGVhbjtcblx0Y29tcHV0ZWQ/OiBib29sZWFuO1xuXHQkVHlwZT86IHN0cmluZ1tdO1xuXHQka2luZD86IHN0cmluZ1tdO1xufTtcbmV4cG9ydCB0eXBlIEJ1aWxkaW5nQmxvY2tFdmVudCA9IHt9O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0FnZ3JlZ2F0aW9uRGVmaW5pdGlvbiA9IHtcblx0aXNQdWJsaWM/OiBib29sZWFuO1xuXHR0eXBlOiBzdHJpbmc7XG5cdHNsb3Q/OiBzdHJpbmc7XG5cdGlzRGVmYXVsdD86IGJvb2xlYW47XG59O1xudHlwZSBDb21tb25CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiA9IHtcblx0bmFtZXNwYWNlOiBzdHJpbmc7XG5cdG5hbWU6IHN0cmluZztcblx0eG1sVGFnPzogc3RyaW5nO1xuXHRmcmFnbWVudD86IHN0cmluZztcblx0cHVibGljTmFtZXNwYWNlPzogc3RyaW5nO1xuXG5cdGlzUnVudGltZT86IGJvb2xlYW47XG5cdGlzT3Blbj86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMiA9IENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uICZcblx0dHlwZW9mIEJ1aWxkaW5nQmxvY2tCYXNlICYge1xuXHRcdGFwaVZlcnNpb246IDI7XG5cdFx0bWV0YWRhdGE6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YTtcblx0fTtcblxuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja0RlZmluaXRpb25WMSA9IENvbW1vbkJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uICYge1xuXHRuYW1lOiBzdHJpbmc7XG5cdGFwaVZlcnNpb24/OiAxO1xuXHRjcmVhdGU/OiBGdW5jdGlvbjtcblx0Z2V0VGVtcGxhdGU/OiBGdW5jdGlvbjtcblx0bWV0YWRhdGE6IEJ1aWxkaW5nQmxvY2tNZXRhZGF0YTtcbn07XG5leHBvcnQgdHlwZSBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbiA9IEJ1aWxkaW5nQmxvY2tEZWZpbml0aW9uVjIgfCBCdWlsZGluZ0Jsb2NrRGVmaW5pdGlvblYxO1xuZXhwb3J0IHR5cGUgQnVpbGRpbmdCbG9ja01ldGFkYXRhID0ge1xuXHRldmVudHM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tFdmVudD47XG5cdHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tQcm9wZXJ0eURlZmluaXRpb24+O1xuXHRhZ2dyZWdhdGlvbnM6IFJlY29yZDxzdHJpbmcsIEJ1aWxkaW5nQmxvY2tBZ2dyZWdhdGlvbkRlZmluaXRpb24+O1xufTtcblxuY29uc3QgZW5zdXJlTWV0YWRhdGEgPSBmdW5jdGlvbiAodGFyZ2V0OiBhbnkpOiBCdWlsZGluZ0Jsb2NrTWV0YWRhdGEge1xuXHRpZiAoIXRhcmdldC5oYXNPd25Qcm9wZXJ0eShcIm1ldGFkYXRhXCIpKSB7XG5cdFx0dGFyZ2V0Lm1ldGFkYXRhID0gZGVlcENsb25lKFxuXHRcdFx0dGFyZ2V0Lm1ldGFkYXRhIHx8IHtcblx0XHRcdFx0cHJvcGVydGllczoge30sXG5cdFx0XHRcdGFnZ3JlZ2F0aW9uczoge30sXG5cdFx0XHRcdGV2ZW50czoge31cblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cdHJldHVybiB0YXJnZXQubWV0YWRhdGE7XG59O1xuXG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSBwcm9wZXJ0eSBzaGFsbCBiZSBkZWNsYXJlZCBhcyBhbiB4bWwgYXR0cmlidXRlIHRoYXQgY2FuIGJlIHVzZWQgZnJvbSB0aGUgb3V0c2lkZSBvZiB0aGUgYnVpbGRpbmcgYmxvY2suXG4gKlxuICogQHBhcmFtIGF0dHJpYnV0ZURlZmluaXRpb25cbiAqIEByZXR1cm5zIFRoZSBkZWNvcmF0ZWQgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHhtbEF0dHJpYnV0ZShhdHRyaWJ1dGVEZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrUHJvcGVydHlEZWZpbml0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEucHJvcGVydGllc1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLnByb3BlcnRpZXNbcHJvcGVydHlLZXldID0gYXR0cmlidXRlRGVmaW5pdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHhtbEV2ZW50KCk6IFByb3BlcnR5RGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IEJ1aWxkaW5nQmxvY2tCYXNlLCBwcm9wZXJ0eUtleTogc3RyaW5nLCBwcm9wZXJ0eURlc2NyaXB0b3I6IFR5cGVkUHJvcGVydHlEZXNjcmlwdG9yPGFueT4pIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IGVuc3VyZU1ldGFkYXRhKHRhcmdldC5jb25zdHJ1Y3Rvcik7XG5cdFx0ZGVsZXRlIChwcm9wZXJ0eURlc2NyaXB0b3IgYXMgYW55KS5pbml0aWFsaXplcjtcblx0XHRpZiAoIW1ldGFkYXRhLmV2ZW50c1twcm9wZXJ0eUtleV0pIHtcblx0XHRcdG1ldGFkYXRhLmV2ZW50c1twcm9wZXJ0eUtleV0gPSB7IHR5cGU6IFwiRnVuY3Rpb25cIiB9O1xuXHRcdH1cblxuXHRcdHJldHVybiBwcm9wZXJ0eURlc2NyaXB0b3I7XG5cdH0gYXMgYW55O1xufVxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcHJvcGVydHkgc2hhbGwgYmUgZGVjbGFyZWQgYXMgYW4geG1sIGFnZ3JlZ2F0aW9uIHRoYXQgY2FuIGJlIHVzZWQgZnJvbSB0aGUgb3V0c2lkZSBvZiB0aGUgYnVpbGRpbmcgYmxvY2suXG4gKlxuICogQHBhcmFtIGFnZ3JlZ2F0aW9uRGVmaW5pdGlvblxuICogQHJldHVybnMgVGhlIGRlY29yYXRlZCBwcm9wZXJ0eVxuICovXG5leHBvcnQgZnVuY3Rpb24geG1sQWdncmVnYXRpb24oYWdncmVnYXRpb25EZWZpbml0aW9uOiBCdWlsZGluZ0Jsb2NrQWdncmVnYXRpb25EZWZpbml0aW9uKTogUHJvcGVydHlEZWNvcmF0b3Ige1xuXHRyZXR1cm4gZnVuY3Rpb24gKHRhcmdldDogQnVpbGRpbmdCbG9ja0Jhc2UsIHByb3BlcnR5S2V5OiBzdHJpbmcsIHByb3BlcnR5RGVzY3JpcHRvcjogVHlwZWRQcm9wZXJ0eURlc2NyaXB0b3I8YW55Pikge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gZW5zdXJlTWV0YWRhdGEodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRkZWxldGUgKHByb3BlcnR5RGVzY3JpcHRvciBhcyBhbnkpLmluaXRpYWxpemVyO1xuXHRcdGlmICghbWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSkge1xuXHRcdFx0bWV0YWRhdGEuYWdncmVnYXRpb25zW3Byb3BlcnR5S2V5XSA9IGFnZ3JlZ2F0aW9uRGVmaW5pdGlvbjtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJvcGVydHlEZXNjcmlwdG9yO1xuXHR9IGFzIGFueTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVCdWlsZGluZ0Jsb2NrKG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbjogQ29tbW9uQnVpbGRpbmdCbG9ja0RlZmluaXRpb24pIHtcblx0cmV0dXJuIGZ1bmN0aW9uIChjbGFzc0RlZmluaXRpb246IGFueSkge1xuXHRcdGVuc3VyZU1ldGFkYXRhKGNsYXNzRGVmaW5pdGlvbik7XG5cdFx0Y2xhc3NEZWZpbml0aW9uLnhtbFRhZyA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5uYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ubmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UgPSBvQnVpbGRpbmdCbG9ja0RlZmluaXRpb24ucHVibGljTmFtZXNwYWNlO1xuXHRcdGNsYXNzRGVmaW5pdGlvbi5mcmFnbWVudCA9IG9CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5mcmFnbWVudDtcblx0XHRjbGFzc0RlZmluaXRpb24uaXNPcGVuID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmlzT3Blbjtcblx0XHRjbGFzc0RlZmluaXRpb24uaXNSdW50aW1lID0gb0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLmlzUnVudGltZTtcblx0XHRjbGFzc0RlZmluaXRpb24uYXBpVmVyc2lvbiA9IDI7XG5cdFx0aWYgKGNsYXNzRGVmaW5pdGlvbi5pc1J1bnRpbWUpIHtcblx0XHRcdGNsYXNzRGVmaW5pdGlvbi5wcm90b3R5cGUuZ2V0VGVtcGxhdGUgPSBmdW5jdGlvbiAodGhpczogYW55KSB7XG5cdFx0XHRcdGNvbnN0IGNsYXNzTmFtZSA9IGAke29CdWlsZGluZ0Jsb2NrRGVmaW5pdGlvbi5uYW1lc3BhY2V9LiR7b0J1aWxkaW5nQmxvY2tEZWZpbml0aW9uLm5hbWV9YC5yZXBsYWNlKC9cXC4vZywgXCIvXCIpO1xuXHRcdFx0XHRjb25zdCBleHRyYVByb3BzID0gW107XG5cdFx0XHRcdGZvciAoY29uc3QgcHJvcGVydGllc0tleSBpbiBjbGFzc0RlZmluaXRpb24ubWV0YWRhdGEucHJvcGVydGllcykge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gdGhpc1twcm9wZXJ0aWVzS2V5XTtcblx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHlWYWx1ZS5pc0E/LihcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpKSB7XG5cdFx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBwcm9wZXJ0eVZhbHVlLmdldFBhdGgoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGV4dHJhUHJvcHMucHVzaCh4bWxgZmVCQjoke3Byb3BlcnRpZXNLZXl9PVwiJHtwcm9wZXJ0eVZhbHVlfVwiYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgZXZlbnRzS2V5IGluIGNsYXNzRGVmaW5pdGlvbi5tZXRhZGF0YS5ldmVudHMpIHtcblx0XHRcdFx0XHRjb25zdCBldmVudHNWYWx1ZSA9IHRoaXNbZXZlbnRzS2V5XTtcblx0XHRcdFx0XHRpZiAoZXZlbnRzVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0ZXh0cmFQcm9wcy5wdXNoKHhtbGBmZUJCOiR7ZXZlbnRzS2V5fT1cIiR7ZXZlbnRzVmFsdWV9XCJgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHhtbGA8Y29yZTpGcmFnbWVudFxuXHRcdFx0XHRcdHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiXG5cdFx0XHRcdFx0eG1sbnM6ZmVCQj1cInNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzXCJcblx0XHRcdFx0XHRmcmFnbWVudE5hbWU9XCIke2NsYXNzTmFtZX1cIlxuXHRcdFx0XHRcdGlkPVwie3RoaXM+aWR9XCJcblx0XHRcdFx0XHR0eXBlPVwiRkVfQ09NUE9ORU5UU1wiXG5cdFx0XHRcdFx0JHtleHRyYVByb3BzfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdDwvY29yZTpGcmFnbWVudD5gO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRjbGFzc0RlZmluaXRpb24ucmVnaXN0ZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZWdpc3RlckJ1aWxkaW5nQmxvY2soY2xhc3NEZWZpbml0aW9uKTtcblx0XHR9O1xuXHRcdGNsYXNzRGVmaW5pdGlvbi51bnJlZ2lzdGVyID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihudWxsLCBjbGFzc0RlZmluaXRpb24ubmFtZXNwYWNlLCBjbGFzc0RlZmluaXRpb24ubmFtZSk7XG5cdFx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIGNsYXNzRGVmaW5pdGlvbi5wdWJsaWNOYW1lc3BhY2UsIGNsYXNzRGVmaW5pdGlvbi5uYW1lKTtcblx0XHR9O1xuXHR9O1xufVxuXG5GcmFnbWVudC5yZWdpc3RlclR5cGUoXCJGRV9DT01QT05FTlRTXCIsIHtcblx0bG9hZDogYXN5bmMgZnVuY3Rpb24gKG1TZXR0aW5nczogYW55KSB7XG5cdFx0bGV0IGZuUmVzb2x2ZTogYW55O1xuXHRcdGxldCBmblJlamVjdDogYW55O1xuXHRcdGNvbnN0IGxvYWRlclByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRmblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zm5SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0c2FwLnVpLnJlcXVpcmUoW21TZXR0aW5ncy5mcmFnbWVudE5hbWVdLCAoZnJhZ21lbnRDbGFzczogYW55KSA9PiB7XG5cdFx0XHRpZiAoIWZyYWdtZW50Q2xhc3MpIHtcblx0XHRcdFx0Zm5SZWplY3QoXCJDb3VsZCBub3QgbG9hZCBcIiArIG1TZXR0aW5ncy5mcmFnbWVudE5hbWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm5SZXNvbHZlKGZyYWdtZW50Q2xhc3MpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBsb2FkZXJQcm9taXNlO1xuXHR9LFxuXHRpbml0OiBhc3luYyBmdW5jdGlvbiAobVNldHRpbmdzOiBhbnkpIHtcblx0XHRjb25zdCBteUNsYXNzID0gbVNldHRpbmdzLmZyYWdtZW50Q29udGVudDtcblx0XHRjb25zdCBjbGFzc1NldHRpbmdzOiBhbnkgPSB7fTtcblx0XHRjb25zdCBmZUN1c3RvbURhdGEgPSBtU2V0dGluZ3M/LmN1c3RvbURhdGE/LlswXT8ubVByb3BlcnRpZXM/LnZhbHVlPy5bXCJzYXAuZmUuY29yZS5idWlsZGluZ0Jsb2Nrc1wiXSB8fCB7fTtcblx0XHRkZWxldGUgbVNldHRpbmdzLmN1c3RvbURhdGE7XG5cdFx0Y29uc3QgcGFnZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcihtU2V0dGluZ3MuY29udGFpbmluZ1ZpZXcpIGFzIGFueTtcblx0XHRjb25zdCBhcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQobVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3KTtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBhcHBDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgcGFnZU1vZGVsID0gcGFnZUNvbXBvbmVudC5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIik7XG5cdFx0Zm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgaW4gbXlDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzKSB7XG5cdFx0XHRjb25zdCBwcm9wZXJ0eU1ldGFkYXRhID0gbXlDbGFzcy5tZXRhZGF0YS5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdFx0XHRpZiAocHJvcGVydHlNZXRhZGF0YS50eXBlID09PSBcInNhcC51aS5tb2RlbC5Db250ZXh0XCIpIHtcblx0XHRcdFx0Y2xhc3NTZXR0aW5nc1twcm9wZXJ0eU5hbWVdID0gcGFnZU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdKTtcblx0XHRcdFx0aWYgKGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXS5nZXRPYmplY3QoKSkge1xuXHRcdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXS5nZXRPYmplY3QoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBiaW5kIHRvIG1ldGFtb2RlbFxuXHRcdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChmZUN1c3RvbURhdGFbcHJvcGVydHlOYW1lXSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbcHJvcGVydHlOYW1lXSA9IGZlQ3VzdG9tRGF0YVtwcm9wZXJ0eU5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGNvbnN0IGV2ZW50TmFtZSBpbiBteUNsYXNzLm1ldGFkYXRhLmV2ZW50cykge1xuXHRcdFx0aWYgKGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdICYmIGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdLnN0YXJ0c1dpdGgoXCIuXCIpKSB7XG5cdFx0XHRcdGNsYXNzU2V0dGluZ3NbZXZlbnROYW1lXSA9IE9iamVjdFBhdGguZ2V0KGZlQ3VzdG9tRGF0YVtldmVudE5hbWVdLnN1YnN0cmluZygxKSwgbVNldHRpbmdzLmNvbnRhaW5pbmdWaWV3LmdldENvbnRyb2xsZXIoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbGFzc1NldHRpbmdzW2V2ZW50TmFtZV0gPSBcIlwiOyAvLyBGb3Igbm93LCBtaWdodCBuZWVkIHRvIHJlc29sdmUgbW9yZSBzdHVmZlxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gKE1hbmFnZWRPYmplY3QgYXMgdW5rbm93biBhcyBNYW5hZ2VkT2JqZWN0RXgpLnJ1bldpdGhQcmVwcm9jZXNzb3JzKFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IG15Q2xhc3MoY2xhc3NTZXR0aW5ncykucmVuZGVyKCk7XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRpZDogZnVuY3Rpb24gKHNJZDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5jcmVhdGVJZChzSWQpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRzZXR0aW5nczogZnVuY3Rpb24gKGNvbnRyb2xTZXR0aW5nczogYW55KSB7XG5cdFx0XHRcdFx0Y29uc3QgYWxsQXNzb2NpYXRpb25zID0gdGhpcy5nZXRNZXRhZGF0YSgpLmdldEFzc29jaWF0aW9ucygpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgYXNzb2NpYXRpb25EZXRhaWxOYW1lIG9mIE9iamVjdC5rZXlzKGFsbEFzc29jaWF0aW9ucykpIHtcblx0XHRcdFx0XHRcdGlmIChjb250cm9sU2V0dGluZ3MuaGFzT3duUHJvcGVydHkoYXNzb2NpYXRpb25EZXRhaWxOYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXSA9IG1TZXR0aW5ncy5jb250YWluaW5nVmlldy5jcmVhdGVJZChcblx0XHRcdFx0XHRcdFx0XHRjb250cm9sU2V0dGluZ3NbYXNzb2NpYXRpb25EZXRhaWxOYW1lXVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gY29udHJvbFNldHRpbmdzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxufSk7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7Ozs7Ozs7RUFZQTtBQUNBO0FBQ0E7TUFDYUEsaUI7SUFHWiwyQkFBWUMsTUFBWixFQUF5Q0MsZUFBekMsRUFBZ0VDLFVBQWhFLEVBQWtGO01BQUE7O01BQUEsS0FGeEVDLFFBRXdFLEdBRjdELEtBRTZEOztNQUFBLEtBb0J4RUMsbUJBcEJ3RSxHQW9CbEQsVUFBVUMsd0JBQVYsRUFBeUNDLFdBQXpDLEVBQTJEQyxTQUEzRCxFQUEyRUMsWUFBM0UsRUFBK0Y7UUFDOUgsSUFBTUMsYUFBYSxHQUFHRixTQUFTLENBQUNHLFlBQWhDO1FBQ0EsSUFBTUMsZ0JBQWdCLEdB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
@@ -1,11 +1,22 @@
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 ObjectPath from "sap/base/util/ObjectPath";
4
+ import { registerBuildingBlock, xml } from "sap/fe/core/buildingBlocks/BuildingBlockRuntime";
5
+ import CommonUtils from "sap/fe/core/CommonUtils";
3
6
  import { generate } from "sap/fe/core/helpers/StableIdHelper";
7
+ import ManagedObject from "sap/ui/base/ManagedObject";
8
+ import Component from "sap/ui/core/Component";
9
+ import Fragment from "sap/ui/core/Fragment";
10
+ import XMLPreprocessor from "sap/ui/core/util/XMLPreprocessor";
11
+ import type { ManagedObjectEx } from "types/extension_types";
12
+ import ConverterContext from "../converters/ConverterContext";
4
13
  /**
5
14
  * Base class for Building Block
6
15
  */
7
16
  export class BuildingBlockBase {
8
- constructor(oProps: Record<string, any>) {
17
+ protected isPublic = false;
18
+ protected id!: string;
19
+ constructor(oProps: Record<string, any>, _oControlConfig?: any, _oSettings?: any) {
9
20
  Object.keys(oProps).forEach((propName) => {
10
21
  this[propName as keyof this] = oProps[propName];
11
22
  });
@@ -24,9 +35,8 @@ export class BuildingBlockBase {
24
35
  }
25
36
  return undefined;
26
37
  }
27
- /*
28
38
  // 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) {
39
+ protected getConverterContext = function (oVisualizationObjectPath: any, contextPath: any, mSettings: any, mExtraParams?: any) {
30
40
  const oAppComponent = mSettings.appComponent;
31
41
  const originalViewData = mSettings.models.viewData && mSettings.models.viewData.getData();
32
42
  let viewData = Object.assign({}, originalViewData);
@@ -42,30 +52,35 @@ export class BuildingBlockBase {
42
52
  viewData
43
53
  );
44
54
  };
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 "";
55
+ public getProperties() {
56
+ const allProperties: Record<string, any> = {};
57
+ for (const oInstanceKey in this) {
58
+ if (this.hasOwnProperty(oInstanceKey)) {
59
+ allProperties[oInstanceKey] = this[oInstanceKey];
63
60
  }
64
- };
65
- }*/
61
+ }
62
+ return allProperties;
63
+ }
66
64
  static register() {
67
65
  // To be overriden
68
66
  }
67
+ static unregister() {
68
+ // To be overriden
69
+ }
70
+ public addConditionally(condition?: boolean, partToAdd?: any) {
71
+ if (condition) {
72
+ return partToAdd;
73
+ } else {
74
+ return "";
75
+ }
76
+ }
77
+ protected attr(attributeName: string, value: any) {
78
+ if (value !== undefined) {
79
+ return `${attributeName}="${value}"`;
80
+ } else {
81
+ return "";
82
+ }
83
+ }
69
84
  }
70
85
 
71
86
  export type BuildingBlockPropertyDefinition = {
@@ -89,6 +104,7 @@ export type BuildingBlockAggregationDefinition = {
89
104
  isPublic?: boolean;
90
105
  type: string;
91
106
  slot?: string;
107
+ isDefault?: boolean;
92
108
  };
93
109
  type CommonBuildingBlockDefinition = {
94
110
  namespace: string;
@@ -97,6 +113,7 @@ type CommonBuildingBlockDefinition = {
97
113
  fragment?: string;
98
114
  publicNamespace?: string;
99
115
 
116
+ isRuntime?: boolean;
100
117
  isOpen?: boolean;
101
118
  };
102
119
  export type BuildingBlockDefinitionV2 = CommonBuildingBlockDefinition &
@@ -161,7 +178,23 @@ export function xmlEvent(): PropertyDecorator {
161
178
  return propertyDescriptor;
162
179
  } as any;
163
180
  }
181
+ /**
182
+ * Indicates that the property shall be declared as an xml aggregation that can be used from the outside of the building block.
183
+ *
184
+ * @param aggregationDefinition
185
+ * @returns The decorated property
186
+ */
187
+ export function xmlAggregation(aggregationDefinition: BuildingBlockAggregationDefinition): PropertyDecorator {
188
+ return function (target: BuildingBlockBase, propertyKey: string, propertyDescriptor: TypedPropertyDescriptor<any>) {
189
+ const metadata = ensureMetadata(target.constructor);
190
+ delete (propertyDescriptor as any).initializer;
191
+ if (!metadata.aggregations[propertyKey]) {
192
+ metadata.aggregations[propertyKey] = aggregationDefinition;
193
+ }
164
194
 
195
+ return propertyDescriptor;
196
+ } as any;
197
+ }
165
198
  export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBlockDefinition) {
166
199
  return function (classDefinition: any) {
167
200
  ensureMetadata(classDefinition);
@@ -170,9 +203,116 @@ export function defineBuildingBlock(oBuildingBlockDefinition: CommonBuildingBloc
170
203
  classDefinition.publicNamespace = oBuildingBlockDefinition.publicNamespace;
171
204
  classDefinition.fragment = oBuildingBlockDefinition.fragment;
172
205
  classDefinition.isOpen = oBuildingBlockDefinition.isOpen;
206
+ classDefinition.isRuntime = oBuildingBlockDefinition.isRuntime;
173
207
  classDefinition.apiVersion = 2;
208
+ if (classDefinition.isRuntime) {
209
+ classDefinition.prototype.getTemplate = function (this: any) {
210
+ const className = `${oBuildingBlockDefinition.namespace}.${oBuildingBlockDefinition.name}`.replace(/\./g, "/");
211
+ const extraProps = [];
212
+ for (const propertiesKey in classDefinition.metadata.properties) {
213
+ let propertyValue = this[propertiesKey];
214
+ if (propertyValue !== undefined) {
215
+ if (propertyValue.isA?.("sap.ui.model.Context")) {
216
+ propertyValue = propertyValue.getPath();
217
+ }
218
+ extraProps.push(xml`feBB:${propertiesKey}="${propertyValue}"`);
219
+ }
220
+ }
221
+ for (const eventsKey in classDefinition.metadata.events) {
222
+ const eventsValue = this[eventsKey];
223
+ if (eventsValue !== undefined) {
224
+ extraProps.push(xml`feBB:${eventsKey}="${eventsValue}"`);
225
+ }
226
+ }
227
+ return xml`<core:Fragment
228
+ xmlns:core="sap.ui.core"
229
+ xmlns:feBB="sap.fe.core.buildingBlocks"
230
+ fragmentName="${className}"
231
+ id="{this>id}"
232
+ type="FE_COMPONENTS"
233
+ ${extraProps}
234
+ >
235
+ </core:Fragment>`;
236
+ };
237
+ }
238
+
174
239
  classDefinition.register = function () {
175
240
  registerBuildingBlock(classDefinition);
176
241
  };
242
+ classDefinition.unregister = function () {
243
+ XMLPreprocessor.plugIn(null, classDefinition.namespace, classDefinition.name);
244
+ XMLPreprocessor.plugIn(null, classDefinition.publicNamespace, classDefinition.name);
245
+ };
177
246
  };
178
247
  }
248
+
249
+ Fragment.registerType("FE_COMPONENTS", {
250
+ load: async function (mSettings: any) {
251
+ let fnResolve: any;
252
+ let fnReject: any;
253
+ const loaderPromise = new Promise((resolve, reject) => {
254
+ fnResolve = resolve;
255
+ fnReject = reject;
256
+ });
257
+ sap.ui.require([mSettings.fragmentName], (fragmentClass: any) => {
258
+ if (!fragmentClass) {
259
+ fnReject("Could not load " + mSettings.fragmentName);
260
+ } else {
261
+ fnResolve(fragmentClass);
262
+ }
263
+ });
264
+ return loaderPromise;
265
+ },
266
+ init: async function (mSettings: any) {
267
+ const myClass = mSettings.fragmentContent;
268
+ const classSettings: any = {};
269
+ const feCustomData = mSettings?.customData?.[0]?.mProperties?.value?.["sap.fe.core.buildingBlocks"] || {};
270
+ delete mSettings.customData;
271
+ const pageComponent = Component.getOwnerComponentFor(mSettings.containingView) as any;
272
+ const appComponent = CommonUtils.getAppComponent(mSettings.containingView);
273
+ const metaModel = appComponent.getMetaModel();
274
+ const pageModel = pageComponent.getModel("_pageModel");
275
+ for (const propertyName in myClass.metadata.properties) {
276
+ const propertyMetadata = myClass.metadata.properties[propertyName];
277
+ if (propertyMetadata.type === "sap.ui.model.Context") {
278
+ classSettings[propertyName] = pageModel.createBindingContext(feCustomData[propertyName]);
279
+ if (classSettings[propertyName].getObject()) {
280
+ classSettings[propertyName] = classSettings[propertyName].getObject();
281
+ } else {
282
+ // bind to metamodel
283
+ classSettings[propertyName] = metaModel.createBindingContext(feCustomData[propertyName]);
284
+ }
285
+ } else {
286
+ classSettings[propertyName] = feCustomData[propertyName];
287
+ }
288
+ }
289
+ for (const eventName in myClass.metadata.events) {
290
+ if (feCustomData[eventName] && feCustomData[eventName].startsWith(".")) {
291
+ classSettings[eventName] = ObjectPath.get(feCustomData[eventName].substring(1), mSettings.containingView.getController());
292
+ } else {
293
+ classSettings[eventName] = ""; // For now, might need to resolve more stuff
294
+ }
295
+ }
296
+ return (ManagedObject as unknown as ManagedObjectEx).runWithPreprocessors(
297
+ () => {
298
+ return new myClass(classSettings).render();
299
+ },
300
+ {
301
+ id: function (sId: string) {
302
+ return mSettings.containingView.createId(sId);
303
+ },
304
+ settings: function (controlSettings: any) {
305
+ const allAssociations = this.getMetadata().getAssociations();
306
+ for (const associationDetailName of Object.keys(allAssociations)) {
307
+ if (controlSettings.hasOwnProperty(associationDetailName)) {
308
+ controlSettings[associationDetailName] = mSettings.containingView.createId(
309
+ controlSettings[associationDetailName]
310
+ );
311
+ }
312
+ }
313
+ return controlSettings;
314
+ }
315
+ }
316
+ );
317
+ }
318
+ });
@@ -0,0 +1,14 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define([], function () {
6
+ "use strict";
7
+
8
+ return {
9
+ base64Decode: function (base64) {
10
+ return atob(base64);
11
+ }
12
+ };
13
+ }, false);
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJiYXNlNjREZWNvZGUiLCJiYXNlNjQiLCJhdG9iIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCdWlsZGluZ0Jsb2NrRm9ybWF0dGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcblx0YmFzZTY0RGVjb2RlOiAoYmFzZTY0OiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gYXRvYihiYXNlNjQpO1xuXHR9XG59O1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7O1NBQWU7SUFDZEEsWUFBWSxFQUFFLFVBQUNDLE1BQUQsRUFBb0I7TUFDakMsT0FBT0MsSUFBSSxDQUFDRCxNQUFELENBQVg7SUFDQTtFQUhhLEMifQ==
@@ -0,0 +1,5 @@
1
+ export default {
2
+ base64Decode: (base64: string) => {
3
+ return atob(base64);
4
+ }
5
+ };