@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
@@ -1,14 +1,13 @@
1
- import { EntitySet, EntityType, NavigationProperty, Property } from "@sap-ux/annotation-converter";
2
- import { AnnotationTerm } from "@sap-ux/vocabularies-types";
3
- import { PropertyPath } from "@sap-ux/vocabularies-types/dist/Edm";
4
- import { AggregationAnnotationTerms, CustomAggregate } from "@sap-ux/vocabularies-types/dist/generated/Aggregation";
5
- import {
1
+ import type { EntitySet, EntityType, NavigationProperty, Property, PropertyPath } from "@sap-ux/vocabularies-types";
2
+ import type { CustomAggregate } from "@sap-ux/vocabularies-types/vocabularies/Aggregation";
3
+ import { AggregationAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/Aggregation";
4
+ import type {
6
5
  CollectionAnnotations_Aggregation,
7
6
  EntityContainerAnnotations_Aggregation,
8
7
  EntitySetAnnotations_Aggregation,
9
8
  EntityTypeAnnotations_Aggregation
10
- } from "@sap-ux/vocabularies-types/dist/generated/Aggregation_Edm";
11
- import ConverterContext from "../ConverterContext";
9
+ } from "@sap-ux/vocabularies-types/vocabularies/Aggregation_Edm";
10
+ import type ConverterContext from "../ConverterContext";
12
11
 
13
12
  /**
14
13
  * helper class for Aggregation annotations.
@@ -132,7 +131,7 @@ export class AggregationHelper {
132
131
  return undefined;
133
132
  } else {
134
133
  // Get the custom aggregates
135
- const aCustomAggregateAnnotations: AnnotationTerm<CustomAggregate>[] = this._converterContext.getAnnotationsByTerm(
134
+ const aCustomAggregateAnnotations: CustomAggregate[] = this._converterContext.getAnnotationsByTerm(
136
135
  "Aggregation",
137
136
  AggregationAnnotationTerms.CustomAggregate,
138
137
  [this._oAggregationAnnotationTarget]
@@ -154,12 +153,10 @@ export class AggregationHelper {
154
153
  }
155
154
 
156
155
  public getTransAggregations() {
157
- const aTransAggregationAnnotations = this._converterContext.getAnnotationsByTerm(
158
- "Analytics",
159
- "com.sap.vocabularies.Analytics.v1.AggregatedProperties",
160
- [this._converterContext.getEntityContainer(), this._converterContext.getEntityType()]
161
- );
162
- return aTransAggregationAnnotations;
156
+ return this._converterContext.getAnnotationsByTerm("Analytics", "com.sap.vocabularies.Analytics.v1.AggregatedProperties", [
157
+ this._converterContext.getEntityContainer(),
158
+ this._converterContext.getEntityType()
159
+ ]);
163
160
  }
164
161
  /**
165
162
  * Returns the list of custom aggregate definitions for the entity type.
@@ -169,7 +166,7 @@ export class AggregationHelper {
169
166
  */
170
167
  public getCustomAggregateDefinitions() {
171
168
  // Get the custom aggregates
172
- const aCustomAggregateAnnotations: AnnotationTerm<CustomAggregate>[] = this._converterContext.getAnnotationsByTerm(
169
+ const aCustomAggregateAnnotations: CustomAggregate[] = this._converterContext.getAnnotationsByTerm(
173
170
  "Aggregation",
174
171
  AggregationAnnotationTerms.CustomAggregate,
175
172
  [this._oAggregationAnnotationTarget]
@@ -2,43 +2,43 @@
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/fe/core/helpers/BindingExpression"], function (BindingExpression) {
5
+ sap.ui.define(["sap/fe/core/helpers/BindingToolkit"], function (BindingToolkit) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
- var or = BindingExpression.or;
10
- var not = BindingExpression.not;
11
- var equal = BindingExpression.equal;
12
- var bindingExpression = BindingExpression.bindingExpression;
13
- var and = BindingExpression.and;
9
+ var pathInModel = BindingToolkit.pathInModel;
10
+ var or = BindingToolkit.or;
11
+ var not = BindingToolkit.not;
12
+ var equal = BindingToolkit.equal;
13
+ var and = BindingToolkit.and;
14
14
 
15
15
  var UI = {
16
- IsCreateMode: bindingExpression("createMode", "ui"),
17
- IsCreateModeSticky: bindingExpression("createModeSticky", "ui"),
18
- IsEditable: bindingExpression("/isEditable", "ui"),
19
- IsTransientBinding: equal(bindingExpression("@$ui5.context.isTransient"), true),
20
- IsTotal: equal(bindingExpression("@$ui5.node.isTotal"), true),
21
- IsExpanded: equal(bindingExpression("@$ui5.node.isExpanded"), true),
22
- NodeLevel: bindingExpression("@$ui5.node.level"),
23
- IsInactive: bindingExpression("@$ui5.context.isInactive")
16
+ IsCreateMode: pathInModel("createMode", "ui"),
17
+ IsCreateModeSticky: pathInModel("createModeSticky", "ui"),
18
+ IsEditable: pathInModel("/isEditable", "ui"),
19
+ IsTransientBinding: equal(pathInModel("@$ui5.context.isTransient"), true),
20
+ IsTotal: equal(pathInModel("@$ui5.node.isTotal"), true),
21
+ IsExpanded: equal(pathInModel("@$ui5.node.isExpanded"), true),
22
+ NodeLevel: pathInModel("@$ui5.node.level"),
23
+ IsInactive: pathInModel("@$ui5.context.isInactive")
24
24
  };
25
25
  _exports.UI = UI;
26
26
  var Entity = {
27
- HasDraft: bindingExpression("HasDraftEntity"),
28
- HasActive: bindingExpression("HasActiveEntity"),
29
- IsActive: bindingExpression("IsActiveEntity")
27
+ HasDraft: pathInModel("HasDraftEntity"),
28
+ HasActive: pathInModel("HasActiveEntity"),
29
+ IsActive: pathInModel("IsActiveEntity")
30
30
  };
31
31
  _exports.Entity = Entity;
32
32
  var Draft = {
33
33
  IsNewObject: and(not(Entity.HasActive), not(Entity.IsActive)),
34
- HasNoDraftForCurrentUser: or(not(Entity.HasDraft), and(Entity.HasDraft, not(bindingExpression("DraftAdministrativeData/DraftIsCreatedByMe"))))
34
+ HasNoDraftForCurrentUser: or(not(Entity.HasDraft), and(Entity.HasDraft, not(pathInModel("DraftAdministrativeData/DraftIsCreatedByMe"))))
35
35
  };
36
36
  /**
37
37
  * Gets a singleton based on the fully qualified name.
38
38
  *
39
39
  * @param convertedTypes The converted types
40
- * @param {string} fullyQualifiedName The fully qualified name of the singleton
41
- * @returns {Singleton | undefined} The singleton instance.
40
+ * @param fullyQualifiedName The fully qualified name of the singleton
41
+ * @returns The singleton instance.
42
42
  */
43
43
 
44
44
  _exports.Draft = Draft;
@@ -52,10 +52,10 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
52
52
  * Function to adjust singleton paths in the annotation.
53
53
  * The absolute path via EntityContainer needs to be shortened to /SingletonName/PropertyName.
54
54
  *
55
- * @param {string} path The path configured in the annotation
56
- * @param {ConverterOutput} convertedTypes The instance of the converter context
57
- * @param {string[]} visitedNavigationPaths The array of visited navigation paths
58
- * @returns {string} The adjusted path for the reference of the singleton property, otherwise the input path itself.
55
+ * @param path The path configured in the annotation
56
+ * @param convertedTypes The instance of the converter context
57
+ * @param visitedNavigationPaths The array of visited navigation paths
58
+ * @returns The adjusted path for the reference of the singleton property, otherwise the input path itself.
59
59
  */
60
60
 
61
61
 
@@ -69,7 +69,7 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
69
69
 
70
70
  if (singleton) {
71
71
  // Set the absolute binding path to access the singleton property
72
- path = "/" + singleton.name + "/" + propertyName;
72
+ path = "/".concat(singleton.name, "/").concat(propertyName);
73
73
  }
74
74
  } else {
75
75
  // Not a singleton reference.
@@ -86,17 +86,17 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
86
86
  *
87
87
  * The binding parameter name needs to be removed. Singleton paths need to be resolved.
88
88
  *
89
- * @param {string} path The path configured in the annotation
90
- * @param {ConverterContext} converterContext The instance of the converter context
91
- * @param {string} bindingParameterFullName The fully qualified name of the binding parameter
92
- * @returns {string} The adjusted property path
89
+ * @param path The path configured in the annotation
90
+ * @param converterContext The instance of the converter context
91
+ * @param bindingParameterFullName The fully qualified name of the binding parameter
92
+ * @returns The adjusted property path
93
93
  */
94
94
 
95
95
 
96
96
  _exports.singletonPathVisitor = singletonPathVisitor;
97
97
 
98
98
  function bindingContextPathVisitor(path, converterContext, bindingParameterFullName) {
99
- var bindingParameterPrefix = (bindingParameterFullName === null || bindingParameterFullName === void 0 ? void 0 : bindingParameterFullName.substring(bindingParameterFullName.lastIndexOf("/") + 1)) + "/"; // Strip the binding parameter name from OperationAvailable path
99
+ var bindingParameterPrefix = "".concat(bindingParameterFullName === null || bindingParameterFullName === void 0 ? void 0 : bindingParameterFullName.substring(bindingParameterFullName.lastIndexOf("/") + 1), "/"); // Strip the binding parameter name from OperationAvailable path
100
100
  // For e.g. _it/property1 --> property1
101
101
 
102
102
  if (path.startsWith(bindingParameterPrefix)) {
@@ -109,4 +109,4 @@ sap.ui.define(["sap/fe/core/helpers/BindingExpression"], function (BindingExpres
109
109
  _exports.bindingContextPathVisitor = bindingContextPathVisitor;
110
110
  return _exports;
111
111
  }, false);
112
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJpbmRpbmdIZWxwZXIudHMiXSwibmFtZXMiOlsiVUkiLCJJc0NyZWF0ZU1vZGUiLCJiaW5kaW5nRXhwcmVzc2lvbiIsIklzQ3JlYXRlTW9kZVN0aWNreSIsIklzRWRpdGFibGUiLCJJc1RyYW5zaWVudEJpbmRpbmciLCJlcXVhbCIsIklzVG90YWwiLCJJc0V4cGFuZGVkIiwiTm9kZUxldmVsIiwiSXNJbmFjdGl2ZSIsIkVudGl0eSIsIkhhc0RyYWZ0IiwiSGFzQWN0aXZlIiwiSXNBY3RpdmUiLCJEcmFmdCIsIklzTmV3T2JqZWN0IiwiYW5kIiwibm90IiwiSGFzTm9EcmFmdEZvckN1cnJlbnRVc2VyIiwib3IiLCJnZXRTaW5nbGV0b24iLCJjb252ZXJ0ZWRUeXBlcyIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsInNpbmdsZXRvbnMiLCJmaW5kIiwic2luZ2xldG9uIiwic2luZ2xldG9uUGF0aFZpc2l0b3IiLCJwYXRoIiwidmlzaXRlZE5hdmlnYXRpb25QYXRocyIsImluZGV4T2YiLCJwYXJ0cyIsInNwbGl0IiwiZmlsdGVyIiwiQm9vbGVhbiIsInByb3BlcnR5TmFtZSIsInBvcCIsImVudGl0eVNldE5hbWUiLCJqb2luIiwibmFtZSIsImxvY2FsUGF0aCIsImNvbmNhdCIsInB1c2giLCJiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yIiwiY29udmVydGVyQ29udGV4dCIsImJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSIsImJpbmRpbmdQYXJhbWV0ZXJQcmVmaXgiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiLCJnZXRDb252ZXJ0ZWRUeXBlcyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUFFTyxNQUFNQSxFQUFFLEdBQUc7QUFDakJDLElBQUFBLFlBQVksRUFBRUMsaUJBQWlCLENBQUMsWUFBRCxFQUFlLElBQWYsQ0FEZDtBQUVqQkMsSUFBQUEsa0JBQWtCLEVBQUVELGlCQUFpQixDQUFDLGtCQUFELEVBQXFCLElBQXJCLENBRnBCO0FBR2pCRSxJQUFBQSxVQUFVLEVBQUVGLGlCQUFpQixDQUFDLGFBQUQsRUFBZ0IsSUFBaEIsQ0FIWjtBQUlqQkcsSUFBQUEsa0JBQWtCLEVBQUVDLEtBQUssQ0FBQ0osaUJBQWlCLENBQUMsMkJBQUQsQ0FBbEIsRUFBaUQsSUFBakQsQ0FKUjtBQUtqQkssSUFBQUEsT0FBTyxFQUFFRCxLQUFLLENBQUNKLGlCQUFpQixDQUFDLG9CQUFELENBQWxCLEVBQTBDLElBQTFDLENBTEc7QUFNakJNLElBQUFBLFVBQVUsRUFBRUYsS0FBSyxDQUFDSixpQkFBaUIsQ0FBQyx1QkFBRCxDQUFsQixFQUE2QyxJQUE3QyxDQU5BO0FBT2pCTyxJQUFBQSxTQUFTLEVBQUVQLGlCQUFpQixDQUFDLGtCQUFELENBUFg7QUFRakJRLElBQUFBLFVBQVUsRUFBRVIsaUJBQWlCLENBQUMsMEJBQUQ7QUFSWixHQUFYOztBQVdBLE1BQU1TLE1BQU0sR0FBRztBQUNyQkMsSUFBQUEsUUFBUSxFQUFFVixpQkFBaUIsQ0FBQyxnQkFBRCxDQUROO0FBRXJCVyxJQUFBQSxTQUFTLEVBQUVYLGlCQUFpQixDQUFDLGlCQUFELENBRlA7QUFHckJZLElBQUFBLFFBQVEsRUFBRVosaUJBQWlCLENBQUMsZ0JBQUQ7QUFITixHQUFmOztBQU1BLE1BQU1hLEtBQUssR0FBRztBQUNwQkMsSUFBQUEsV0FBVyxFQUFFQyxHQUFHLENBQUNDLEdBQUcsQ0FBQ1AsTUFBTSxDQUFDRSxTQUFSLENBQUosRUFBd0JLLEdBQUcsQ0FBQ1AsTUFBTSxDQUFDRyxRQUFSLENBQTNCLENBREk7QUFFcEJLLElBQUFBLHdCQUF3QixFQUFFQyxFQUFFLENBQzNCRixHQUFHLENBQUNQLE1BQU0sQ0FBQ0MsUUFBUixDQUR3QixFQUUzQkssR0FBRyxDQUFDTixNQUFNLENBQUNDLFFBQVIsRUFBa0JNLEdBQUcsQ0FBQ2hCLGlCQUFpQixDQUFDLDRDQUFELENBQWxCLENBQXJCLENBRndCO0FBRlIsR0FBZDtBQVFQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBQ0EsV0FBU21CLFlBQVQsQ0FBc0JDLGNBQXRCLEVBQXVEQyxrQkFBdkQsRUFBMEc7QUFDekcsV0FBT0QsY0FBYyxDQUFDRSxVQUFmLENBQTBCQyxJQUExQixDQUErQixVQUFDQyxTQUFEO0FBQUEsYUFBZUEsU0FBUyxDQUFDSCxrQkFBVixLQUFpQ0Esa0JBQWhEO0FBQUEsS0FBL0IsQ0FBUDtBQUNBO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxNQUFNSSxvQkFBb0IsR0FBRyxVQUFVQyxJQUFWLEVBQXdCTixjQUF4QixFQUF5RE8sc0JBQXpELEVBQW1HO0FBQ3RJO0FBQ0EsUUFBSUQsSUFBSSxDQUFDRSxPQUFMLENBQWEsR0FBYixNQUFzQixDQUExQixFQUE2QjtBQUM1QixVQUFNQyxLQUFLLEdBQUdILElBQUksQ0FBQ0ksS0FBTCxDQUFXLEdBQVgsRUFBZ0JDLE1BQWhCLENBQXVCQyxPQUF2QixDQUFkO0FBQUEsVUFDQ0MsWUFBWSxHQUFHSixLQUFLLENBQUNLLEdBQU4sRUFEaEI7QUFBQSxVQUVDQyxhQUFhLEdBQUdOLEtBQUssQ0FBQ08sSUFBTixDQUFXLEdBQVgsQ0FGakI7QUFBQSxVQUdDWixTQUFTLEdBQUdMLFlBQVksQ0FBQ0MsY0FBRCxFQUFpQmUsYUFBakIsQ0FIekI7O0FBSUEsVUFBSVgsU0FBSixFQUFlO0FBQ2Q7QUFDQUUsUUFBQUEsSUFBSSxHQUFHLE1BQU1GLFNBQVMsQ0FBQ2EsSUFBaEIsR0FBdUIsR0FBdkIsR0FBNkJKLFlBQXBDO0FBQ0E7QUFDRCxLQVRELE1BU087QUFDTjtBQUNBO0FBQ0EsVUFBTUssU0FBUyxHQUFHWCxzQkFBc0IsQ0FBQ1ksTUFBdkIsRUFBbEI7QUFDQUQsTUFBQUEsU0FBUyxDQUFDRSxJQUFWLENBQWVkLElBQWY7QUFDQUEsTUFBQUEsSUFBSSxHQUFHWSxTQUFTLENBQUNGLElBQVYsQ0FBZSxHQUFmLENBQVA7QUFDQTs7QUFDRCxXQUFPVixJQUFQO0FBQ0EsR0FuQk07QUFxQlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O0FBQ08sV0FBU2UseUJBQVQsQ0FBbUNmLElBQW5DLEVBQWlEZ0IsZ0JBQWpELEVBQXFGQyx3QkFBckYsRUFBdUg7QUFDN0gsUUFBTUMsc0JBQXNCLEdBQUcsQ0FBQUQsd0JBQXdCLFNBQXhCLElBQUFBLHdCQUF3QixXQUF4QixZQUFBQSx3QkFBd0IsQ0FBRUUsU0FBMUIsQ0FBb0NGLHdCQUF3QixDQUFDRyxXQUF6QixDQUFxQyxHQUFyQyxJQUE0QyxDQUFoRixLQUFxRixHQUFwSCxDQUQ2SCxDQUU3SDtBQUNBOztBQUNBLFFBQUlwQixJQUFJLENBQUNxQixVQUFMLENBQWdCSCxzQkFBaEIsQ0FBSixFQUE2QztBQUM1QyxhQUFPbEIsSUFBSSxDQUFDbUIsU0FBTCxDQUFlRCxzQkFBc0IsQ0FBQ0ksTUFBdEMsQ0FBUDtBQUNBOztBQUNELFdBQU92QixvQkFBb0IsQ0FBQ0MsSUFBRCxFQUFPZ0IsZ0JBQWdCLENBQUNPLGlCQUFqQixFQUFQLEVBQTZDLEVBQTdDLENBQTNCO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnZlcnRlck91dHB1dCwgU2luZ2xldG9uIH0gZnJvbSBcIkBzYXAtdXgvYW5ub3RhdGlvbi1jb252ZXJ0ZXJcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IGFuZCwgYmluZGluZ0V4cHJlc3Npb24sIGVxdWFsLCBFeHByZXNzaW9uLCBub3QsIG9yIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0V4cHJlc3Npb25cIjtcblxuZXhwb3J0IGNvbnN0IFVJID0ge1xuXHRJc0NyZWF0ZU1vZGU6IGJpbmRpbmdFeHByZXNzaW9uKFwiY3JlYXRlTW9kZVwiLCBcInVpXCIpIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdElzQ3JlYXRlTW9kZVN0aWNreTogYmluZGluZ0V4cHJlc3Npb24oXCJjcmVhdGVNb2RlU3RpY2t5XCIsIFwidWlcIikgYXMgRXhwcmVzc2lvbjxib29sZWFuPixcblx0SXNFZGl0YWJsZTogYmluZGluZ0V4cHJlc3Npb24oXCIvaXNFZGl0YWJsZVwiLCBcInVpXCIpIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdElzVHJhbnNpZW50QmluZGluZzogZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCJAJHVpNS5jb250ZXh0LmlzVHJhbnNpZW50XCIpLCB0cnVlKSxcblx0SXNUb3RhbDogZXF1YWwoYmluZGluZ0V4cHJlc3Npb24oXCJAJHVpNS5ub2RlLmlzVG90YWxcIiksIHRydWUpLFxuXHRJc0V4cGFuZGVkOiBlcXVhbChiaW5kaW5nRXhwcmVzc2lvbihcIkAkdWk1Lm5vZGUuaXNFeHBhbmRlZFwiKSwgdHJ1ZSksXG5cdE5vZGVMZXZlbDogYmluZGluZ0V4cHJlc3Npb24oXCJAJHVpNS5ub2RlLmxldmVsXCIpLFxuXHRJc0luYWN0aXZlOiBiaW5kaW5nRXhwcmVzc2lvbihcIkAkdWk1LmNvbnRleHQuaXNJbmFjdGl2ZVwiKVxufTtcblxuZXhwb3J0IGNvbnN0IEVudGl0eSA9IHtcblx0SGFzRHJhZnQ6IGJpbmRpbmdFeHByZXNzaW9uKFwiSGFzRHJhZnRFbnRpdHlcIiksXG5cdEhhc0FjdGl2ZTogYmluZGluZ0V4cHJlc3Npb24oXCJIYXNBY3RpdmVFbnRpdHlcIiksXG5cdElzQWN0aXZlOiBiaW5kaW5nRXhwcmVzc2lvbihcIklzQWN0aXZlRW50aXR5XCIpXG59O1xuXG5leHBvcnQgY29uc3QgRHJhZnQgPSB7XG5cdElzTmV3T2JqZWN0OiBhbmQobm90KEVudGl0eS5IYXNBY3RpdmUpLCBub3QoRW50aXR5LklzQWN0aXZlKSksXG5cdEhhc05vRHJhZnRGb3JDdXJyZW50VXNlcjogb3IoXG5cdFx0bm90KEVudGl0eS5IYXNEcmFmdCksXG5cdFx0YW5kKEVudGl0eS5IYXNEcmFmdCwgbm90KGJpbmRpbmdFeHByZXNzaW9uKFwiRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRJc0NyZWF0ZWRCeU1lXCIpIGFzIEV4cHJlc3Npb248Ym9vbGVhbj4pKVxuXHQpXG59O1xuXG4vKipcbiAqIEdldHMgYSBzaW5nbGV0b24gYmFzZWQgb24gdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBUaGUgY29udmVydGVkIHR5cGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gZnVsbHlRdWFsaWZpZWROYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2luZ2xldG9uXG4gKiBAcmV0dXJucyB7U2luZ2xldG9uIHwgdW5kZWZpbmVkfSBUaGUgc2luZ2xldG9uIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBnZXRTaW5nbGV0b24oY29udmVydGVkVHlwZXM6IENvbnZlcnRlck91dHB1dCwgZnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcpOiBTaW5nbGV0b24gfCB1bmRlZmluZWQge1xuXHRyZXR1cm4gY29udmVydGVkVHlwZXMuc2luZ2xldG9ucy5maW5kKChzaW5nbGV0b24pID0+IHNpbmdsZXRvbi5mdWxseVF1YWxpZmllZE5hbWUgPT09IGZ1bGx5UXVhbGlmaWVkTmFtZSk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gYWRqdXN0IHNpbmdsZXRvbiBwYXRocyBpbiB0aGUgYW5ub3RhdGlvbi5cbiAqIFRoZSBhYnNvbHV0ZSBwYXRoIHZpYSBFbnRpdHlDb250YWluZXIgbmVlZHMgdG8gYmUgc2hvcnRlbmVkIHRvIC9TaW5nbGV0b25OYW1lL1Byb3BlcnR5TmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBjb25maWd1cmVkIGluIHRoZSBhbm5vdGF0aW9uXG4gKiBAcGFyYW0ge0NvbnZlcnRlck91dHB1dH0gY29udmVydGVkVHlwZXMgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIHtzdHJpbmdbXX0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgYXJyYXkgb2YgdmlzaXRlZCBuYXZpZ2F0aW9uIHBhdGhzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYWRqdXN0ZWQgcGF0aCBmb3IgdGhlIHJlZmVyZW5jZSBvZiB0aGUgc2luZ2xldG9uIHByb3BlcnR5LCBvdGhlcndpc2UgdGhlIGlucHV0IHBhdGggaXRzZWxmLlxuICovXG5leHBvcnQgY29uc3Qgc2luZ2xldG9uUGF0aFZpc2l0b3IgPSBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBjb252ZXJ0ZWRUeXBlczogQ29udmVydGVyT3V0cHV0LCB2aXNpdGVkTmF2aWdhdGlvblBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdC8vIERldGVybWluZSB3aGV0aGVyIHRoZSBwYXRoIGlzIGFic29sdXRlIGFuZCB3aGV0aGVyIGl0IHBvaW50cyB0byBhIHNpbmdsZXRvbi5cblx0aWYgKHBhdGguaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKSxcblx0XHRcdHByb3BlcnR5TmFtZSA9IHBhcnRzLnBvcCgpLFxuXHRcdFx0ZW50aXR5U2V0TmFtZSA9IHBhcnRzLmpvaW4oXCIvXCIpLFxuXHRcdFx0c2luZ2xldG9uID0gZ2V0U2luZ2xldG9uKGNvbnZlcnRlZFR5cGVzLCBlbnRpdHlTZXROYW1lKTtcblx0XHRpZiAoc2luZ2xldG9uKSB7XG5cdFx0XHQvLyBTZXQgdGhlIGFic29sdXRlIGJpbmRpbmcgcGF0aCB0byBhY2Nlc3MgdGhlIHNpbmdsZXRvbiBwcm9wZXJ0eVxuXHRcdFx0cGF0aCA9IFwiL1wiICsgc2luZ2xldG9uLm5hbWUgKyBcIi9cIiArIHByb3BlcnR5TmFtZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gTm90IGEgc2luZ2xldG9uIHJlZmVyZW5jZS5cblx0XHQvLyBQcmVmaXggdGhlIG5hdmlnYXRpb24gcGF0aCB0byB0aGUgcHJvcGVydHkgcGF0aFxuXHRcdGNvbnN0IGxvY2FsUGF0aCA9IHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHMuY29uY2F0KCk7XG5cdFx0bG9jYWxQYXRoLnB1c2gocGF0aCk7XG5cdFx0cGF0aCA9IGxvY2FsUGF0aC5qb2luKFwiL1wiKTtcblx0fVxuXHRyZXR1cm4gcGF0aDtcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gYWRqdXN0IHByb3BlcnR5IHBhdGhzIGRlZmluZWQgaW4gdGhlIGJpbmRpbmcgb2YgYW4gYWN0aW9uLlxuICpcbiAqIFRoZSBiaW5kaW5nIHBhcmFtZXRlciBuYW1lIG5lZWRzIHRvIGJlIHJlbW92ZWQuIFNpbmdsZXRvbiBwYXRocyBuZWVkIHRvIGJlIHJlc29sdmVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIGNvbmZpZ3VyZWQgaW4gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSB7Q29udmVydGVyQ29udGV4dH0gY29udmVydGVyQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgYmluZGluZyBwYXJhbWV0ZXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBhZGp1c3RlZCBwcm9wZXJ0eSBwYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kaW5nQ29udGV4dFBhdGhWaXNpdG9yKHBhdGg6IHN0cmluZywgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dCwgYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lOiBzdHJpbmcpIHtcblx0Y29uc3QgYmluZGluZ1BhcmFtZXRlclByZWZpeCA9IGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZT8uc3Vic3RyaW5nKGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZS5sYXN0SW5kZXhPZihcIi9cIikgKyAxKSArIFwiL1wiO1xuXHQvLyBTdHJpcCB0aGUgYmluZGluZyBwYXJhbWV0ZXIgbmFtZSBmcm9tIE9wZXJhdGlvbkF2YWlsYWJsZSBwYXRoXG5cdC8vIEZvciBlLmcuIF9pdC9wcm9wZXJ0eTEgLS0+IHByb3BlcnR5MVxuXHRpZiAocGF0aC5zdGFydHNXaXRoKGJpbmRpbmdQYXJhbWV0ZXJQcmVmaXgpKSB7XG5cdFx0cmV0dXJuIHBhdGguc3Vic3RyaW5nKGJpbmRpbmdQYXJhbWV0ZXJQcmVmaXgubGVuZ3RoKTtcblx0fVxuXHRyZXR1cm4gc2luZ2xldG9uUGF0aFZpc2l0b3IocGF0aCwgY29udmVydGVyQ29udGV4dC5nZXRDb252ZXJ0ZWRUeXBlcygpLCBbXSk7XG59XG4iXX0=
112
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVSSIsIklzQ3JlYXRlTW9kZSIsInBhdGhJbk1vZGVsIiwiSXNDcmVhdGVNb2RlU3RpY2t5IiwiSXNFZGl0YWJsZSIsIklzVHJhbnNpZW50QmluZGluZyIsImVxdWFsIiwiSXNUb3RhbCIsIklzRXhwYW5kZWQiLCJOb2RlTGV2ZWwiLCJJc0luYWN0aXZlIiwiRW50aXR5IiwiSGFzRHJhZnQiLCJIYXNBY3RpdmUiLCJJc0FjdGl2ZSIsIkRyYWZ0IiwiSXNOZXdPYmplY3QiLCJhbmQiLCJub3QiLCJIYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXIiLCJvciIsImdldFNpbmdsZXRvbiIsImNvbnZlcnRlZFR5cGVzIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwic2luZ2xldG9ucyIsImZpbmQiLCJzaW5nbGV0b24iLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsInBhdGgiLCJ2aXNpdGVkTmF2aWdhdGlvblBhdGhzIiwiaW5kZXhPZiIsInBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwicHJvcGVydHlOYW1lIiwicG9wIiwiZW50aXR5U2V0TmFtZSIsImpvaW4iLCJuYW1lIiwibG9jYWxQYXRoIiwiY29uY2F0IiwicHVzaCIsImJpbmRpbmdDb250ZXh0UGF0aFZpc2l0b3IiLCJjb252ZXJ0ZXJDb250ZXh0IiwiYmluZGluZ1BhcmFtZXRlckZ1bGxOYW1lIiwiYmluZGluZ1BhcmFtZXRlclByZWZpeCIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwic3RhcnRzV2l0aCIsImxlbmd0aCIsImdldENvbnZlcnRlZFR5cGVzIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJCaW5kaW5nSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29udmVydGVkTWV0YWRhdGEsIFNpbmdsZXRvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGVxdWFsLCBub3QsIG9yLCBwYXRoSW5Nb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdUb29sa2l0XCI7XG5cbmV4cG9ydCBjb25zdCBVSSA9IHtcblx0SXNDcmVhdGVNb2RlOiBwYXRoSW5Nb2RlbChcImNyZWF0ZU1vZGVcIiwgXCJ1aVwiKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4sXG5cdElzQ3JlYXRlTW9kZVN0aWNreTogcGF0aEluTW9kZWwoXCJjcmVhdGVNb2RlU3RpY2t5XCIsIFwidWlcIikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRJc0VkaXRhYmxlOiBwYXRoSW5Nb2RlbChcIi9pc0VkaXRhYmxlXCIsIFwidWlcIikgYXMgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+LFxuXHRJc1RyYW5zaWVudEJpbmRpbmc6IGVxdWFsKHBhdGhJbk1vZGVsKFwiQCR1aTUuY29udGV4dC5pc1RyYW5zaWVudFwiKSwgdHJ1ZSksXG5cdElzVG90YWw6IGVxdWFsKHBhdGhJbk1vZGVsKFwiQCR1aTUubm9kZS5pc1RvdGFsXCIpLCB0cnVlKSxcblx0SXNFeHBhbmRlZDogZXF1YWwocGF0aEluTW9kZWwoXCJAJHVpNS5ub2RlLmlzRXhwYW5kZWRcIiksIHRydWUpLFxuXHROb2RlTGV2ZWw6IHBhdGhJbk1vZGVsKFwiQCR1aTUubm9kZS5sZXZlbFwiKSxcblx0SXNJbmFjdGl2ZTogcGF0aEluTW9kZWwoXCJAJHVpNS5jb250ZXh0LmlzSW5hY3RpdmVcIilcbn07XG5cbmV4cG9ydCBjb25zdCBFbnRpdHkgPSB7XG5cdEhhc0RyYWZ0OiBwYXRoSW5Nb2RlbChcIkhhc0RyYWZ0RW50aXR5XCIpLFxuXHRIYXNBY3RpdmU6IHBhdGhJbk1vZGVsKFwiSGFzQWN0aXZlRW50aXR5XCIpLFxuXHRJc0FjdGl2ZTogcGF0aEluTW9kZWwoXCJJc0FjdGl2ZUVudGl0eVwiKVxufTtcblxuZXhwb3J0IGNvbnN0IERyYWZ0ID0ge1xuXHRJc05ld09iamVjdDogYW5kKG5vdChFbnRpdHkuSGFzQWN0aXZlKSwgbm90KEVudGl0eS5Jc0FjdGl2ZSkpLFxuXHRIYXNOb0RyYWZ0Rm9yQ3VycmVudFVzZXI6IG9yKFxuXHRcdG5vdChFbnRpdHkuSGFzRHJhZnQpLFxuXHRcdGFuZChFbnRpdHkuSGFzRHJhZnQsIG5vdChwYXRoSW5Nb2RlbChcIkRyYWZ0QWRtaW5pc3RyYXRpdmVEYXRhL0RyYWZ0SXNDcmVhdGVkQnlNZVwiKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248Ym9vbGVhbj4pKVxuXHQpXG59O1xuXG4vKipcbiAqIEdldHMgYSBzaW5nbGV0b24gYmFzZWQgb24gdGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lLlxuICpcbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBUaGUgY29udmVydGVkIHR5cGVzXG4gKiBAcGFyYW0gZnVsbHlRdWFsaWZpZWROYW1lIFRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2luZ2xldG9uXG4gKiBAcmV0dXJucyBUaGUgc2luZ2xldG9uIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBnZXRTaW5nbGV0b24oY29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLCBmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IFNpbmdsZXRvbiB8IHVuZGVmaW5lZCB7XG5cdHJldHVybiBjb252ZXJ0ZWRUeXBlcy5zaW5nbGV0b25zLmZpbmQoKHNpbmdsZXRvbikgPT4gc2luZ2xldG9uLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gZnVsbHlRdWFsaWZpZWROYW1lKTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBhZGp1c3Qgc2luZ2xldG9uIHBhdGhzIGluIHRoZSBhbm5vdGF0aW9uLlxuICogVGhlIGFic29sdXRlIHBhdGggdmlhIEVudGl0eUNvbnRhaW5lciBuZWVkcyB0byBiZSBzaG9ydGVuZWQgdG8gL1NpbmdsZXRvbk5hbWUvUHJvcGVydHlOYW1lLlxuICpcbiAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGNvbmZpZ3VyZWQgaW4gdGhlIGFubm90YXRpb25cbiAqIEBwYXJhbSBjb252ZXJ0ZWRUeXBlcyBUaGUgaW5zdGFuY2Ugb2YgdGhlIGNvbnZlcnRlciBjb250ZXh0XG4gKiBAcGFyYW0gdmlzaXRlZE5hdmlnYXRpb25QYXRocyBUaGUgYXJyYXkgb2YgdmlzaXRlZCBuYXZpZ2F0aW9uIHBhdGhzXG4gKiBAcmV0dXJucyBUaGUgYWRqdXN0ZWQgcGF0aCBmb3IgdGhlIHJlZmVyZW5jZSBvZiB0aGUgc2luZ2xldG9uIHByb3BlcnR5LCBvdGhlcndpc2UgdGhlIGlucHV0IHBhdGggaXRzZWxmLlxuICovXG5leHBvcnQgY29uc3Qgc2luZ2xldG9uUGF0aFZpc2l0b3IgPSBmdW5jdGlvbiAocGF0aDogc3RyaW5nLCBjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsIHZpc2l0ZWROYXZpZ2F0aW9uUGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcblx0Ly8gRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHBhdGggaXMgYWJzb2x1dGUgYW5kIHdoZXRoZXIgaXQgcG9pbnRzIHRvIGEgc2luZ2xldG9uLlxuXHRpZiAocGF0aC5pbmRleE9mKFwiL1wiKSA9PT0gMCkge1xuXHRcdGNvbnN0IHBhcnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pLFxuXHRcdFx0cHJvcGVydHlOYW1lID0gcGFydHMucG9wKCksXG5cdFx0XHRlbnRpdHlTZXROYW1lID0gcGFydHMuam9pbihcIi9cIiksXG5cdFx0XHRzaW5nbGV0b24gPSBnZXRTaW5nbGV0b24oY29udmVydGVkVHlwZXMsIGVudGl0eVNldE5hbWUpO1xuXHRcdGlmIChzaW5nbGV0b24pIHtcblx0XHRcdC8vIFNldCB0aGUgYWJzb2x1dGUgYmluZGluZyBwYXRoIHRvIGFjY2VzcyB0aGUgc2luZ2xldG9uIHByb3BlcnR5XG5cdFx0XHRwYXRoID0gYC8ke3NpbmdsZXRvbi5uYW1lfS8ke3Byb3BlcnR5TmFtZX1gO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBOb3QgYSBzaW5nbGV0b24gcmVmZXJlbmNlLlxuXHRcdC8vIFByZWZpeCB0aGUgbmF2aWdhdGlvbiBwYXRoIHRvIHRoZSBwcm9wZXJ0eSBwYXRoXG5cdFx0Y29uc3QgbG9jYWxQYXRoID0gdmlzaXRlZE5hdmlnYXRpb25QYXRocy5jb25jYXQoKTtcblx0XHRsb2NhbFBhdGgucHVzaChwYXRoKTtcblx0XHRwYXRoID0gbG9jYWxQYXRoLmpvaW4oXCIvXCIpO1xuXHR9XG5cdHJldHVybiBwYXRoO1xufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBhZGp1c3QgcHJvcGVydHkgcGF0aHMgZGVmaW5lZCBpbiB0aGUgYmluZGluZyBvZiBhbiBhY3Rpb24uXG4gKlxuICogVGhlIGJpbmRpbmcgcGFyYW1ldGVyIG5hbWUgbmVlZHMgdG8gYmUgcmVtb3ZlZC4gU2luZ2xldG9uIHBhdGhzIG5lZWQgdG8gYmUgcmVzb2x2ZWQuXG4gKlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggY29uZmlndXJlZCBpbiB0aGUgYW5ub3RhdGlvblxuICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgVGhlIGluc3RhbmNlIG9mIHRoZSBjb252ZXJ0ZXIgY29udGV4dFxuICogQHBhcmFtIGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZSBUaGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGJpbmRpbmcgcGFyYW1ldGVyXG4gKiBAcmV0dXJucyBUaGUgYWRqdXN0ZWQgcHJvcGVydHkgcGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZGluZ0NvbnRleHRQYXRoVmlzaXRvcihwYXRoOiBzdHJpbmcsIGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHQsIGJpbmRpbmdQYXJhbWV0ZXJGdWxsTmFtZTogc3RyaW5nKSB7XG5cdGNvbnN0IGJpbmRpbmdQYXJhbWV0ZXJQcmVmaXggPSBgJHtiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWU/LnN1YnN0cmluZyhiaW5kaW5nUGFyYW1ldGVyRnVsbE5hbWUubGFzdEluZGV4T2YoXCIvXCIpICsgMSl9L2A7XG5cdC8vIFN0cmlwIHRoZSBiaW5kaW5nIHBhcmFtZXRlciBuYW1lIGZyb20gT3BlcmF0aW9uQXZhaWxhYmxlIHBhdGhcblx0Ly8gRm9yIGUuZy4gX2l0L3Byb3BlcnR5MSAtLT4gcHJvcGVydHkxXG5cdGlmIChwYXRoLnN0YXJ0c1dpdGgoYmluZGluZ1BhcmFtZXRlclByZWZpeCkpIHtcblx0XHRyZXR1cm4gcGF0aC5zdWJzdHJpbmcoYmluZGluZ1BhcmFtZXRlclByZWZpeC5sZW5ndGgpO1xuXHR9XG5cdHJldHVybiBzaW5nbGV0b25QYXRoVmlzaXRvcihwYXRoLCBjb252ZXJ0ZXJDb250ZXh0LmdldENvbnZlcnRlZFR5cGVzKCksIFtdKTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7RUFLTyxJQUFNQSxFQUFFLEdBQUc7SUFDakJDLFlBQVksRUFBRUMsV0FBVyxDQUFDLFlBQUQsRUFBZSxJQUFmLENBRFI7SUFFakJDLGtCQUFrQixFQUFFRCxXQUFXLENBQUMsa0JBQUQsRUFBcUIsSUFBckIsQ0FGZDtJQUdqQkUsVUFBVSxFQUFFRixXQUFXLENBQUMsYUFBRCxFQUFnQixJQUFoQixDQUhOO0lBSWpCRyxrQkFBa0IsRUFBRUMsS0FBSyxDQUFDSixXQUFXLENBQUMsMkJBQUQsQ0FBWixFQUEyQyxJQUEzQyxDQUpSO0lBS2pCSyxPQUFPLEVBQUVELEtBQUssQ0FBQ0osV0FBVyxDQUFDLG9CQUFELENBQVosRUFBb0MsSUFBcEMsQ0FMRztJQU1qQk0sVUFBVSxFQUFFRixLQUFLLENBQUNKLFdBQVcsQ0FBQyx1QkFBRCxDQUFaLEVBQXVDLElBQXZDLENBTkE7SUFPakJPLFNBQVMsRUFB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
@@ -1,29 +1,30 @@
1
- import { ConverterOutput, Singleton } from "@sap-ux/annotation-converter";
2
- import ConverterContext from "sap/fe/core/converters/ConverterContext";
3
- import { and, bindingExpression, equal, Expression, not, or } from "sap/fe/core/helpers/BindingExpression";
1
+ import type { ConvertedMetadata, Singleton } from "@sap-ux/vocabularies-types";
2
+ import type ConverterContext from "sap/fe/core/converters/ConverterContext";
3
+ import type { BindingToolkitExpression } from "sap/fe/core/helpers/BindingToolkit";
4
+ import { and, equal, not, or, pathInModel } from "sap/fe/core/helpers/BindingToolkit";
4
5
 
5
6
  export const UI = {
6
- IsCreateMode: bindingExpression("createMode", "ui") as Expression<boolean>,
7
- IsCreateModeSticky: bindingExpression("createModeSticky", "ui") as Expression<boolean>,
8
- IsEditable: bindingExpression("/isEditable", "ui") as Expression<boolean>,
9
- IsTransientBinding: equal(bindingExpression("@$ui5.context.isTransient"), true),
10
- IsTotal: equal(bindingExpression("@$ui5.node.isTotal"), true),
11
- IsExpanded: equal(bindingExpression("@$ui5.node.isExpanded"), true),
12
- NodeLevel: bindingExpression("@$ui5.node.level"),
13
- IsInactive: bindingExpression("@$ui5.context.isInactive")
7
+ IsCreateMode: pathInModel("createMode", "ui") as BindingToolkitExpression<boolean>,
8
+ IsCreateModeSticky: pathInModel("createModeSticky", "ui") as BindingToolkitExpression<boolean>,
9
+ IsEditable: pathInModel("/isEditable", "ui") as BindingToolkitExpression<boolean>,
10
+ IsTransientBinding: equal(pathInModel("@$ui5.context.isTransient"), true),
11
+ IsTotal: equal(pathInModel("@$ui5.node.isTotal"), true),
12
+ IsExpanded: equal(pathInModel("@$ui5.node.isExpanded"), true),
13
+ NodeLevel: pathInModel("@$ui5.node.level"),
14
+ IsInactive: pathInModel("@$ui5.context.isInactive")
14
15
  };
15
16
 
16
17
  export const Entity = {
17
- HasDraft: bindingExpression("HasDraftEntity"),
18
- HasActive: bindingExpression("HasActiveEntity"),
19
- IsActive: bindingExpression("IsActiveEntity")
18
+ HasDraft: pathInModel("HasDraftEntity"),
19
+ HasActive: pathInModel("HasActiveEntity"),
20
+ IsActive: pathInModel("IsActiveEntity")
20
21
  };
21
22
 
22
23
  export const Draft = {
23
24
  IsNewObject: and(not(Entity.HasActive), not(Entity.IsActive)),
24
25
  HasNoDraftForCurrentUser: or(
25
26
  not(Entity.HasDraft),
26
- and(Entity.HasDraft, not(bindingExpression("DraftAdministrativeData/DraftIsCreatedByMe") as Expression<boolean>))
27
+ and(Entity.HasDraft, not(pathInModel("DraftAdministrativeData/DraftIsCreatedByMe") as BindingToolkitExpression<boolean>))
27
28
  )
28
29
  };
29
30
 
@@ -31,10 +32,10 @@ export const Draft = {
31
32
  * Gets a singleton based on the fully qualified name.
32
33
  *
33
34
  * @param convertedTypes The converted types
34
- * @param {string} fullyQualifiedName The fully qualified name of the singleton
35
- * @returns {Singleton | undefined} The singleton instance.
35
+ * @param fullyQualifiedName The fully qualified name of the singleton
36
+ * @returns The singleton instance.
36
37
  */
37
- function getSingleton(convertedTypes: ConverterOutput, fullyQualifiedName: string): Singleton | undefined {
38
+ function getSingleton(convertedTypes: ConvertedMetadata, fullyQualifiedName: string): Singleton | undefined {
38
39
  return convertedTypes.singletons.find((singleton) => singleton.fullyQualifiedName === fullyQualifiedName);
39
40
  }
40
41
 
@@ -42,12 +43,12 @@ function getSingleton(convertedTypes: ConverterOutput, fullyQualifiedName: strin
42
43
  * Function to adjust singleton paths in the annotation.
43
44
  * The absolute path via EntityContainer needs to be shortened to /SingletonName/PropertyName.
44
45
  *
45
- * @param {string} path The path configured in the annotation
46
- * @param {ConverterOutput} convertedTypes The instance of the converter context
47
- * @param {string[]} visitedNavigationPaths The array of visited navigation paths
48
- * @returns {string} The adjusted path for the reference of the singleton property, otherwise the input path itself.
46
+ * @param path The path configured in the annotation
47
+ * @param convertedTypes The instance of the converter context
48
+ * @param visitedNavigationPaths The array of visited navigation paths
49
+ * @returns The adjusted path for the reference of the singleton property, otherwise the input path itself.
49
50
  */
50
- export const singletonPathVisitor = function (path: string, convertedTypes: ConverterOutput, visitedNavigationPaths: string[]): string {
51
+ export const singletonPathVisitor = function (path: string, convertedTypes: ConvertedMetadata, visitedNavigationPaths: string[]): string {
51
52
  // Determine whether the path is absolute and whether it points to a singleton.
52
53
  if (path.indexOf("/") === 0) {
53
54
  const parts = path.split("/").filter(Boolean),
@@ -56,7 +57,7 @@ export const singletonPathVisitor = function (path: string, convertedTypes: Conv
56
57
  singleton = getSingleton(convertedTypes, entitySetName);
57
58
  if (singleton) {
58
59
  // Set the absolute binding path to access the singleton property
59
- path = "/" + singleton.name + "/" + propertyName;
60
+ path = `/${singleton.name}/${propertyName}`;
60
61
  }
61
62
  } else {
62
63
  // Not a singleton reference.
@@ -73,13 +74,13 @@ export const singletonPathVisitor = function (path: string, convertedTypes: Conv
73
74
  *
74
75
  * The binding parameter name needs to be removed. Singleton paths need to be resolved.
75
76
  *
76
- * @param {string} path The path configured in the annotation
77
- * @param {ConverterContext} converterContext The instance of the converter context
78
- * @param {string} bindingParameterFullName The fully qualified name of the binding parameter
79
- * @returns {string} The adjusted property path
77
+ * @param path The path configured in the annotation
78
+ * @param converterContext The instance of the converter context
79
+ * @param bindingParameterFullName The fully qualified name of the binding parameter
80
+ * @returns The adjusted property path
80
81
  */
81
82
  export function bindingContextPathVisitor(path: string, converterContext: ConverterContext, bindingParameterFullName: string) {
82
- const bindingParameterPrefix = bindingParameterFullName?.substring(bindingParameterFullName.lastIndexOf("/") + 1) + "/";
83
+ const bindingParameterPrefix = `${bindingParameterFullName?.substring(bindingParameterFullName.lastIndexOf("/") + 1)}/`;
83
84
  // Strip the binding parameter name from OperationAvailable path
84
85
  // For e.g. _it/property1 --> property1
85
86
  if (path.startsWith(bindingParameterPrefix)) {
@@ -2,7 +2,7 @@
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([], function () {
5
+ sap.ui.define(["sap/base/Log"], function (Log) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
@@ -24,7 +24,7 @@ sap.ui.define([], function () {
24
24
  * @param anchor
25
25
  * @param sorted
26
26
  * @param visited
27
- * @returns {number} The order of the current item
27
+ * @returns The order of the current item
28
28
  */
29
29
  var orderPositioningItemRecursively = function (positioningItems, anchor, sorted, visited) {
30
30
  var insertIndex = sorted.indexOf(anchor);
@@ -36,8 +36,10 @@ sap.ui.define([], function () {
36
36
  var anchorItem = positioningItems[anchor];
37
37
 
38
38
  if (anchorItem === undefined) {
39
- //return sorted.length;
40
- throw new Error("position anchor not found: " + anchor);
39
+ var anchorText = anchor.split("::"),
40
+ manifestItem = Object.keys(visited)[0];
41
+ Log.warning("Position anchor '".concat(anchorText[anchorText.length - 1], "' not found for item '").concat(manifestItem, "'. Please check manifest settings."));
42
+ return sorted.length; // throw new Error(`position anchor not found: ${anchor}`);
41
43
  }
42
44
 
43
45
  visited[anchor] = anchorItem;
@@ -135,7 +137,7 @@ sap.ui.define([], function () {
135
137
  * @param rootElements A list of "ConfigurableObject" which means object that have a unique "key"
136
138
  * @param customElements An object containing extra object to add, they are indexed by a key and have a "position" object
137
139
  * @param overwritableKeys The list of keys from the original object that can be overwritten in case a custom element has the same "key"
138
- * @returns {T[]} An ordered array of elements including the custom ones
140
+ * @returns An ordered array of elements including the custom ones
139
141
  */
140
142
 
141
143
 
@@ -225,4 +227,4 @@ sap.ui.define([], function () {
225
227
  _exports.insertCustomElements = insertCustomElements;
226
228
  return _exports;
227
229
  }, false);
228
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNvbmZpZ3VyYWJsZU9iamVjdC50cyJdLCJuYW1lcyI6WyJQbGFjZW1lbnQiLCJvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5IiwicG9zaXRpb25pbmdJdGVtcyIsImFuY2hvciIsInNvcnRlZCIsInZpc2l0ZWQiLCJpbnNlcnRJbmRleCIsImluZGV4T2YiLCJhbmNob3JJdGVtIiwidW5kZWZpbmVkIiwiRXJyb3IiLCJwbGFjZW1lbnQiLCJCZWZvcmUiLCJsZW5ndGgiLCJzcGxpY2UiLCJpc0FycmF5Q29uZmlnIiwiY29uZmlnIiwiYXBwbHlPdmVycmlkZSIsIm92ZXJ3cml0YWJsZUtleXMiLCJzb3VyY2VJdGVtIiwiY3VzdG9tRWxlbWVudCIsIm91dEl0ZW0iLCJvdmVyd3JpdGFibGVLZXkiLCJPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJvdmVycmlkZUNvbmZpZyIsInN1Ykl0ZW0iLCJzdWJDb25maWciLCJBcnJheSIsImlzQXJyYXkiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsInJvb3RFbGVtZW50cyIsImN1c3RvbUVsZW1lbnRzIiwiZmlyc3RBbmNob3IiLCJrZXkiLCJyb290RWxlbWVudHNXaXRob3V0TGFzdCIsImZpbHRlciIsInJvb3RFbGVtZW50IiwicG9zaXRpb24iLCJFbmQiLCJsYXN0QW5jaG9yIiwiZW5kRWxlbWVudCIsIml0ZW1zUGVyS2V5IiwiZm9yRWFjaCIsIkFmdGVyIiwia2V5cyIsImN1c3RvbUVsZW1lbnRLZXkiLCJwb3RlbnRpYWxBbmNob3IiLCJtZW51IiwibWFwIiwic29ydGVkS2V5cyIsInBvc2l0aW9uSXRlbUtleSIsIm91dEVsZW1lbnRzIiwicHVzaCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7O01BR1lBLFM7O2FBQUFBLFM7QUFBQUEsSUFBQUEsUztBQUFBQSxJQUFBQSxTO0FBQUFBLElBQUFBLFM7S0FBQUEsUyxLQUFBQSxTOzs7O0FBcUJaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUE4QixXQUFuRyxFQUFnSDtBQUMvR3JDLFVBQUFBLGdCQUFnQixDQUFDa0IsYUFBYSxDQUFDZSxHQUFmLENBQWhCLEdBQXNDUSxXQUFXLENBQUN2QixhQUFhLENBQUNlLEdBQWYsQ0FBWCxDQUErQkksUUFBckU7QUFDQTtBQUNEO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBQ0csT0FaRCxNQVlPO0FBQ05JLFFBQUFBLFdBQVcsQ0FBQ3ZCLGFBQWEsQ0FBQ2UsR0FBZixDQUFYLEdBQWlDbEIsYUFBYSxDQUFDQyxnQkFBRCxFQUFtQixJQUFuQixFQUF5QkUsYUFBekIsQ0FBOUM7QUFDQWxCLFFBQUFBLGdCQUFnQixDQUFDa0IsYUFBYSxDQUFDZSxHQUFmLENBQWhCLEdBQXNDZixhQUFhLENBQUNtQixRQUFwRDtBQUNBO0FBQ0QsS0FsQ0Q7QUFtQ0EsUUFBTVksVUFBb0IsR0FBRyxFQUE3QjtBQUVBNUIsSUFBQUEsTUFBTSxDQUFDdUIsSUFBUCxDQUFZNUMsZ0JBQVosRUFBOEIwQyxPQUE5QixDQUFzQyxVQUFBUSxlQUFlLEVBQUk7QUFDeERuRCxNQUFBQSwrQkFBK0IsQ0FBQ0MsZ0JBQUQsRUFBbUJrRCxlQUFuQixFQUFvQ0QsVUFBcEMsRUFBZ0QsRUFBaEQsQ0FBL0I7QUFDQSxLQUZEO0FBSUEsUUFBTUUsV0FBVyxHQUFHRixVQUFVLENBQUNELEdBQVgsQ0FBZSxVQUFBZixHQUFHO0FBQUEsYUFBSVEsV0FBVyxDQUFDUixHQUFELENBQWY7QUFBQSxLQUFsQixDQUFwQjs7QUFDQSxRQUFJTyxVQUFKLEVBQWdCO0FBQ2ZXLE1BQUFBLFdBQVcsQ0FBQ0MsSUFBWixDQUFpQlosVUFBakI7QUFDQTs7QUFDRCxXQUFPVyxXQUFQO0FBQ0EiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIFBvc2l0aW9uID0ge1xuXHRhbmNob3I/OiBzdHJpbmc7XG5cdHBsYWNlbWVudDogUGxhY2VtZW50O1xufTtcblxuZXhwb3J0IGVudW0gUGxhY2VtZW50IHtcblx0QWZ0ZXIgPSBcIkFmdGVyXCIsXG5cdEJlZm9yZSA9IFwiQmVmb3JlXCIsXG5cdEVuZCA9IFwiRW5kXCJcbn1cbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWJsZU9iamVjdEtleSA9IHN0cmluZztcbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWJsZU9iamVjdCA9IFBvc2l0aW9uYWJsZSAmIHtcblx0a2V5OiBDb25maWd1cmFibGVPYmplY3RLZXk7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50PFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+ID0gVCAmIHtcblx0cG9zaXRpb246IFBvc2l0aW9uO1xuXHRtZW51PzogYW55W10gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbmFibGUgPSB7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWd1cmFibGVSZWNvcmQ8VD4gPSBSZWNvcmQ8Q29uZmlndXJhYmxlT2JqZWN0S2V5LCBUPjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgbWV0aG9kIHRoYXQgb3JkZXIgdGhlIGtleXMgYmFzZWQgb24gYSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0gcG9zaXRpb25pbmdJdGVtc1xuICogQHBhcmFtIGFuY2hvclxuICogQHBhcmFtIHNvcnRlZFxuICogQHBhcmFtIHZpc2l0ZWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBvcmRlciBvZiB0aGUgY3VycmVudCBpdGVtXG4gKi9cbmNvbnN0IG9yZGVyUG9zaXRpb25pbmdJdGVtUmVjdXJzaXZlbHkgPSAoXG5cdHBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFJlcXVpcmVkPFBvc2l0aW9uPj4sXG5cdGFuY2hvcjogc3RyaW5nLFxuXHRzb3J0ZWQ6IHN0cmluZ1tdLFxuXHR2aXNpdGVkOiBSZWNvcmQ8c3RyaW5nLCBSZXF1aXJlZDxQb3NpdGlvbj4+XG4pOiBudW1iZXIgPT4ge1xuXHRsZXQgaW5zZXJ0SW5kZXggPSBzb3J0ZWQuaW5kZXhPZihhbmNob3IpO1xuXHRpZiAoaW5zZXJ0SW5kZXggIT09IC0xKSB7XG5cdFx0cmV0dXJuIGluc2VydEluZGV4O1xuXHR9XG5cdGNvbnN0IGFuY2hvckl0ZW06IFJlcXVpcmVkPFBvc2l0aW9uPiA9IHBvc2l0aW9uaW5nSXRlbXNbYW5jaG9yXTtcblx0aWYgKGFuY2hvckl0ZW0gPT09IHVuZGVmaW5lZCkge1xuXHRcdC8vcmV0dXJuIHNvcnRlZC5sZW5ndGg7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwicG9zaXRpb24gYW5jaG9yIG5vdCBmb3VuZDogXCIgKyBhbmNob3IpO1xuXHR9XG5cblx0dmlzaXRlZFthbmNob3JdID0gYW5jaG9ySXRlbTtcblx0aWYgKGFuY2hvckl0ZW0gJiYgIShhbmNob3JJdGVtLmFuY2hvciBpbiB2aXNpdGVkKSkge1xuXHRcdGluc2VydEluZGV4ID0gb3JkZXJQb3NpdGlvbmluZ0l0ZW1SZWN1cnNpdmVseShwb3NpdGlvbmluZ0l0ZW1zLCBhbmNob3JJdGVtLmFuY2hvciwgc29ydGVkLCB2aXNpdGVkKTtcblx0XHRpZiAoYW5jaG9ySXRlbS5wbGFjZW1lbnQgIT09IFBsYWNlbWVudC5CZWZvcmUpIHtcblx0XHRcdCsraW5zZXJ0SW5kZXg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGluc2VydEluZGV4ID0gc29ydGVkLmxlbmd0aDtcblx0fVxuXG5cdHNvcnRlZC5zcGxpY2UoaW5zZXJ0SW5kZXgsIDAsIGFuY2hvcik7XG5cdHJldHVybiBpbnNlcnRJbmRleDtcbn07XG5cbnR5cGUgT3ZlcnJpZGVUeXBlID0gXCJtZXJnZVwiIHwgXCJvdmVyd3JpdGVcIiB8IFwiaWdub3JlXCI7XG50eXBlIEFycmF5T3ZlcnJpZGVUeXBlPEFycmF5VHlwZT4gPSBPdmVycmlkZUtleXM8QXJyYXlUeXBlPjtcblxudHlwZSBFbGVtZW50VHlwZTxUPiA9IFQgZXh0ZW5kcyBhbnlbXSA/IFRbbnVtYmVyXSA6IFQ7XG50eXBlIE92ZXJyaWRlS2V5czxUPiA9IHtcblx0W1AgaW4ga2V5b2YgVF0/OiBPdmVycmlkZVR5cGUgfCBBcnJheU92ZXJyaWRlVHlwZTxFbGVtZW50VHlwZTxUW1BdPj47XG59O1xuXG5mdW5jdGlvbiBpc0FycmF5Q29uZmlnPFQ+KGNvbmZpZzogT3ZlcnJpZGVUeXBlIHwgQXJyYXlPdmVycmlkZVR5cGU8VD4gfCB1bmRlZmluZWQpOiBjb25maWcgaXMgQXJyYXlPdmVycmlkZVR5cGU8VD4ge1xuXHRyZXR1cm4gdHlwZW9mIGNvbmZpZyA9PT0gXCJvYmplY3RcIjtcbn1cblxuZnVuY3Rpb24gYXBwbHlPdmVycmlkZTxUIGV4dGVuZHMgT2JqZWN0PihvdmVyd3JpdGFibGVLZXlzOiBPdmVycmlkZUtleXM8VD4sIHNvdXJjZUl0ZW06IFQgfCBudWxsLCBjdXN0b21FbGVtZW50OiBUKTogVCB7XG5cdGNvbnN0IG91dEl0ZW06IFQgPSBzb3VyY2VJdGVtIHx8IGN1c3RvbUVsZW1lbnQ7XG5cdGZvciAoY29uc3Qgb3ZlcndyaXRhYmxlS2V5IGluIG92ZXJ3cml0YWJsZUtleXMpIHtcblx0XHRpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob3ZlcndyaXRhYmxlS2V5cywgb3ZlcndyaXRhYmxlS2V5KSkge1xuXHRcdFx0Y29uc3Qgb3ZlcnJpZGVDb25maWcgPSBvdmVyd3JpdGFibGVLZXlzW292ZXJ3cml0YWJsZUtleV07XG5cdFx0XHRpZiAoc291cmNlSXRlbSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzd2l0Y2ggKG92ZXJyaWRlQ29uZmlnKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIm92ZXJ3cml0ZVwiOlxuXHRcdFx0XHRcdFx0aWYgKGN1c3RvbUVsZW1lbnQuaGFzT3duUHJvcGVydHkob3ZlcndyaXRhYmxlS2V5KSAmJiBjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRzb3VyY2VJdGVtW292ZXJ3cml0YWJsZUtleV0gPSBjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwibWVyZ2VcIjpcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViSXRlbSA9IHNvdXJjZUl0ZW1bb3ZlcndyaXRhYmxlS2V5XSB8fCAoW10gYXMgYW55W10pO1xuXHRcdFx0XHRcdFx0bGV0IHN1YkNvbmZpZyA9IHt9O1xuXHRcdFx0XHRcdFx0aWYgKGlzQXJyYXlDb25maWcob3ZlcnJpZGVDb25maWcpKSB7XG5cdFx0XHRcdFx0XHRcdHN1YkNvbmZpZyA9IG92ZXJyaWRlQ29uZmlnO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoc3ViSXRlbSkpIHtcblx0XHRcdFx0XHRcdFx0c291cmNlSXRlbVtvdmVyd3JpdGFibGVLZXldID0gaW5zZXJ0Q3VzdG9tRWxlbWVudHMoXG5cdFx0XHRcdFx0XHRcdFx0c3ViSXRlbSxcblx0XHRcdFx0XHRcdFx0XHQoY3VzdG9tRWxlbWVudCAmJiAoY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldIGFzIFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8YW55Pj4pKSB8fCB7fSxcblx0XHRcdFx0XHRcdFx0XHRzdWJDb25maWdcblx0XHRcdFx0XHRcdFx0KSBhcyBhbnk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c3dpdGNoIChvdmVycmlkZUNvbmZpZykge1xuXHRcdFx0XHRcdGNhc2UgXCJvdmVyd3JpdGVcIjpcblx0XHRcdFx0XHRcdGlmIChjdXN0b21FbGVtZW50Lmhhc093blByb3BlcnR5KG92ZXJ3cml0YWJsZUtleSkgJiYgY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0b3V0SXRlbVtvdmVyd3JpdGFibGVLZXldID0gY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIm1lcmdlXCI6XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGxldCBzdWJDb25maWcgPSB7fTtcblx0XHRcdFx0XHRcdGlmIChpc0FycmF5Q29uZmlnKG92ZXJyaWRlQ29uZmlnKSkge1xuXHRcdFx0XHRcdFx0XHRzdWJDb25maWcgPSBvdmVycmlkZUNvbmZpZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG91dEl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0XHRcdFx0XHRbXSBhcyBhbnlbXSxcblx0XHRcdFx0XHRcdFx0KGN1c3RvbUVsZW1lbnQgJiYgKGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PGFueT4+KSkgfHwge30sXG5cdFx0XHRcdFx0XHRcdHN1YkNvbmZpZ1xuXHRcdFx0XHRcdFx0KSBhcyBhbnk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0SXRlbTtcbn1cblxuLyoqXG4gKiBJbnNlcnQgYSBzZXQgb2YgY3VzdG9tIGVsZW1lbnRzIGluIHRoZSByaWdodCBwb3NpdGlvbiBpbiBhbiBvcmlnaW5hbCBjb2xsZWN0aW9uLlxuICpcbiAqIFBhcmFtZXRlcnMgZm9yIG92ZXJ3cml0YWJsZUtleXMgYW5kIHRoZWlyIGltcGxpY2F0aW9uczpcbiAqIFwib3ZlcndyaXRlXCI6IFRoZSB3aG9sZSBvYmplY3QgZ2V0cyBvdmVyd3JpdHRlbiAtIGlmIHRoZSBjdXN0b21FbGVtZW50cyBpbmNsdWRlIGEgZGVmYXVsdCwgdGhpcyB3aWxsIG92ZXJydWxlIHRoZSB3aG9sZSByb290RWxlbWVudHMgY29uZmlndXJhdGlvbi5cbiAqIFwibWVyZ2VcIjogVGhpcyBpcyBzaW1pbGFyIHRvIGNhbGxpbmcgaW5zZXJ0Q3VzdG9tRWxlbWVudHMgaXRzZWxmLiBZb3UgbXVzdCBpbmNsdWRlIHRoZVxuICogZnVsbCBDdXN0b21FbGVtZW50IHN5bnRheCB3aXRoaW4gdGhlIGN1c3RvbUVsZW1lbnRzLCBpbmNsdWRpbmcgYW5jaG9ycywgZm9yIGV4YW1wbGUuXG4gKiBcImlnbm9yZVwiOiBUaGVyZSBhcmUgbm8gYWRkaXRpb25zIGFuZCBubyBjb21iaW5hdGlvbnMuIE9ubHkgdGhlIHJvb3RFbGVtZW50cyBvYmplY3QgaXMgdXNlZC5cbiAqXG4gKiBOb3RlIC0gUHJvY2VlZCBhcyBmb2xsb3dzIGluIGNhc2UgeW91IGhhdmUgZGVmaW5lZCBjdXN0b21FbGVtZW50cyBhbmQgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIHZhbHVlcyB3aXRoIGRlZmF1bHRzOlxuICogSGFuZCB0aGUgcm9vdEVsZW1lbnRzIGludG8gdGhlIGNyZWF0aW9uIGZ1bmN0aW9uIG9mIHRoZSBjdXN0b21FbGVtZW50LlxuICogRGVwZW5kaW5nIG9uIHRoZSBleGlzdGVuY2Ugb2YgYm90aCByb290RWxlbWVudC1jb25maWd1cmF0aW9uIGFuZCBjdXN0b21FbGVtZW50LWNvbmZpZ3VyYXRpb24sXG4gKiB5b3UgbXVzdCBzZXQgdGhlIGN1c3RvbUVsZW1lbnRzIHByb3BlcnR5LCBmb3Igd2hpY2ggdGhlIFwib3ZlcndyaXRlXCItcHJvcGVydHkgaXMgc2V0LCBleHBsaWNpdGx5IHRvIHVuZGVmaW5lZC5cbiAqXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHJvb3RFbGVtZW50cyBBIGxpc3Qgb2YgXCJDb25maWd1cmFibGVPYmplY3RcIiB3aGljaCBtZWFucyBvYmplY3QgdGhhdCBoYXZlIGEgdW5pcXVlIFwia2V5XCJcbiAqIEBwYXJhbSBjdXN0b21FbGVtZW50cyBBbiBvYmplY3QgY29udGFpbmluZyBleHRyYSBvYmplY3QgdG8gYWRkLCB0aGV5IGFyZSBpbmRleGVkIGJ5IGEga2V5IGFuZCBoYXZlIGEgXCJwb3NpdGlvblwiIG9iamVjdFxuICogQHBhcmFtIG92ZXJ3cml0YWJsZUtleXMgVGhlIGxpc3Qgb2Yga2V5cyBmcm9tIHRoZSBvcmlnaW5hbCBvYmplY3QgdGhhdCBjYW4gYmUgb3ZlcndyaXR0ZW4gaW4gY2FzZSBhIGN1c3RvbSBlbGVtZW50IGhhcyB0aGUgc2FtZSBcImtleVwiXG4gKiBAcmV0dXJucyB7VFtdfSBBbiBvcmRlcmVkIGFycmF5IG9mIGVsZW1lbnRzIGluY2x1ZGluZyB0aGUgY3VzdG9tIG9uZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc2VydEN1c3RvbUVsZW1lbnRzPFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+KFxuXHRyb290RWxlbWVudHM6IFRbXSxcblx0Y3VzdG9tRWxlbWVudHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUVsZW1lbnQ8VD4+LFxuXHRvdmVyd3JpdGFibGVLZXlzOiBPdmVycmlkZUtleXM8VD4gPSB7fVxuKTogVFtdIHtcblx0Y29uc3QgZmlyc3RBbmNob3IgPSByb290RWxlbWVudHMubGVuZ3RoID8gcm9vdEVsZW1lbnRzWzBdLmtleSA6IG51bGw7XG5cdGNvbnN0IHJvb3RFbGVtZW50c1dpdGhvdXRMYXN0ID0gcm9vdEVsZW1lbnRzLmZpbHRlcihyb290RWxlbWVudCA9PiB7XG5cdFx0cmV0dXJuIHJvb3RFbGVtZW50LnBvc2l0aW9uPy5wbGFjZW1lbnQgIT09IFBsYWNlbWVudC5FbmQ7XG5cdH0pO1xuXHRjb25zdCBsYXN0QW5jaG9yID0gcm9vdEVsZW1lbnRzLmxlbmd0aCA/IHJvb3RFbGVtZW50c1tyb290RWxlbWVudHNXaXRob3V0TGFzdC5sZW5ndGggLSAxXS5rZXkgOiBudWxsO1xuXHRsZXQgZW5kRWxlbWVudDogVCB8IHVuZGVmaW5lZDtcblx0Y29uc3QgcG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUmVxdWlyZWQ8UG9zaXRpb24+PiA9IHt9O1xuXHRjb25zdCBpdGVtc1BlcktleTogUmVjb3JkPHN0cmluZywgVD4gPSB7fTtcblx0cm9vdEVsZW1lbnRzLmZvckVhY2gocm9vdEVsZW1lbnQgPT4ge1xuXHRcdGlmIChyb290RWxlbWVudC5wb3NpdGlvbj8ucGxhY2VtZW50ID09PSBQbGFjZW1lbnQuRW5kICYmICFlbmRFbGVtZW50KSB7XG5cdFx0XHRlbmRFbGVtZW50ID0gcm9vdEVsZW1lbnQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbcm9vdEVsZW1lbnQua2V5XSA9IHtcblx0XHRcdFx0YW5jaG9yOiByb290RWxlbWVudC5wb3NpdGlvbj8uYW5jaG9yIHx8IHJvb3RFbGVtZW50LmtleSxcblx0XHRcdFx0cGxhY2VtZW50OiByb290RWxlbWVudC5wb3NpdGlvbj8ucGxhY2VtZW50IHx8IFBsYWNlbWVudC5BZnRlclxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aXRlbXNQZXJLZXlbcm9vdEVsZW1lbnQua2V5XSA9IHJvb3RFbGVtZW50O1xuXHR9KTtcblx0T2JqZWN0LmtleXMoY3VzdG9tRWxlbWVudHMpLmZvckVhY2goY3VzdG9tRWxlbWVudEtleSA9PiB7XG5cdFx0Y29uc3QgY3VzdG9tRWxlbWVudCA9IGN1c3RvbUVsZW1lbnRzW2N1c3RvbUVsZW1lbnRLZXldO1xuXHRcdGNvbnN0IGFuY2hvciA9IGN1c3RvbUVsZW1lbnQucG9zaXRpb24uYW5jaG9yO1xuXHRcdC8vIElmIG5vIHBsYWNlbWVudCBkZWZpbmVkIHdlIGFyZSBBZnRlclxuXHRcdGlmICghY3VzdG9tRWxlbWVudC5wb3NpdGlvbi5wbGFjZW1lbnQpIHtcblx0XHRcdGN1c3RvbUVsZW1lbnQucG9zaXRpb24ucGxhY2VtZW50ID0gUGxhY2VtZW50LkFmdGVyO1xuXHRcdH1cblx0XHQvLyBJZiBubyBhbmNob3Igd2UncmUgZWl0aGVyIEFmdGVyIHRoZSBsYXN0IGFuY2hvciBvciBCZWZvcmUgdGhlIGZpcnN0XG5cdFx0aWYgKCFhbmNob3IpIHtcblx0XHRcdGNvbnN0IHBvdGVudGlhbEFuY2hvciA9IGN1c3RvbUVsZW1lbnQucG9zaXRpb24ucGxhY2VtZW50ID09PSBQbGFjZW1lbnQuQWZ0ZXIgPyBsYXN0QW5jaG9yIDogZmlyc3RBbmNob3I7XG5cdFx0XHRjdXN0b21FbGVtZW50LnBvc2l0aW9uLmFuY2hvciA9IHBvdGVudGlhbEFuY2hvciA/IHBvdGVudGlhbEFuY2hvciA6IGN1c3RvbUVsZW1lbnRLZXk7XG5cdFx0fVxuXG5cdFx0Ly8gQWRkaW5nIGJvdW5kL3VuYm91bmQgYWN0aW9ucyB0byBtZW51XG5cdFx0Y3VzdG9tRWxlbWVudC5tZW51ID0gY3VzdG9tRWxlbWVudD8ubWVudT8ubWFwKG1lbnUgPT4ge1xuXHRcdFx0cmV0dXJuIGl0ZW1zUGVyS2V5W21lbnUua2V5XSA/PyBtZW51O1xuXHRcdH0pO1xuXG5cdFx0aWYgKGl0ZW1zUGVyS2V5W2N1c3RvbUVsZW1lbnQua2V5XSkge1xuXHRcdFx0aXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldID0gYXBwbHlPdmVycmlkZShvdmVyd3JpdGFibGVLZXlzLCBpdGVtc1BlcktleVtjdXN0b21FbGVtZW50LmtleV0sIGN1c3RvbUVsZW1lbnQpO1xuXG5cdFx0XHQvL1Bvc2l0aW9uIGlzIG92ZXJ3cml0dGVuIGZvciBmaWx0ZXIgZmllbGRzIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIG1hbmlmZXN0XG5cdFx0XHRpZiAoYW5jaG9yICYmIGN1c3RvbUVsZW1lbnQucG9zaXRpb24gJiYgb3ZlcndyaXRhYmxlS2V5cy5wb3NpdGlvbiAmJiBvdmVyd3JpdGFibGVLZXlzLnBvc2l0aW9uID09PSBcIm92ZXJ3cml0ZVwiKSB7XG5cdFx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbY3VzdG9tRWxlbWVudC5rZXldID0gaXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldLnBvc2l0aW9uIGFzIFJlcXVpcmVkPFBvc2l0aW9uPjtcblx0XHRcdH1cblx0XHRcdC8qKlxuXHRcdFx0ICogYW5jaG9yIGNoZWNrIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSBjaGFuZ2UgaW4gcHJvcGVydGllcyBpbiB0aGUgbWFuaWZlc3QgZG9lcyBub3QgYWZmZWN0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZmllbGQuXG5cdFx0XHQgKiBPdGhlcndpc2UsIHdoZW4gbm8gcG9zaXRpb24gaXMgbWVudGlvbmVkIGluIG1hbmlmZXN0IGZvciBhbiBhbHRlcmVkIGZpZWxkLCB0aGUgcG9zaXRpb24gaXMgY2hhbmdlZCBhc1xuXHRcdFx0ICogcGVyIHRoZSBwb3RlbnRpYWwgYW5jaG9yXG5cdFx0XHQgKi9cblx0XHR9IGVsc2Uge1xuXHRcdFx0aXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldID0gYXBwbHlPdmVycmlkZShvdmVyd3JpdGFibGVLZXlzLCBudWxsLCBjdXN0b21FbGVtZW50KTtcblx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbY3VzdG9tRWxlbWVudC5rZXldID0gY3VzdG9tRWxlbWVudC5wb3NpdGlvbiBhcyBSZXF1aXJlZDxQb3NpdGlvbj47XG5cdFx0fVxuXHR9KTtcblx0Y29uc3Qgc29ydGVkS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRPYmplY3Qua2V5cyhwb3NpdGlvbmluZ0l0ZW1zKS5mb3JFYWNoKHBvc2l0aW9uSXRlbUtleSA9PiB7XG5cdFx0b3JkZXJQb3NpdGlvbmluZ0l0ZW1SZWN1cnNpdmVseShwb3NpdGlvbmluZ0l0ZW1zLCBwb3NpdGlvbkl0ZW1LZXksIHNvcnRlZEtleXMsIHt9KTtcblx0fSk7XG5cblx0Y29uc3Qgb3V0RWxlbWVudHMgPSBzb3J0ZWRLZXlzLm1hcChrZXkgPT4gaXRlbXNQZXJLZXlba2V5XSk7XG5cdGlmIChlbmRFbGVtZW50KSB7XG5cdFx0b3V0RWxlbWVudHMucHVzaChlbmRFbGVtZW50KTtcblx0fVxuXHRyZXR1cm4gb3V0RWxlbWVudHM7XG59XG4iXX0=
230
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQbGFjZW1lbnQiLCJvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5IiwicG9zaXRpb25pbmdJdGVtcyIsImFuY2hvciIsInNvcnRlZCIsInZpc2l0ZWQiLCJpbnNlcnRJbmRleCIsImluZGV4T2YiLCJhbmNob3JJdGVtIiwidW5kZWZpbmVkIiwiYW5jaG9yVGV4dCIsInNwbGl0IiwibWFuaWZlc3RJdGVtIiwiT2JqZWN0Iiwia2V5cyIsIkxvZyIsIndhcm5pbmciLCJsZW5ndGgiLCJwbGFjZW1lbnQiLCJCZWZvcmUiLCJzcGxpY2UiLCJpc0FycmF5Q29uZmlnIiwiY29uZmlnIiwiYXBwbHlPdmVycmlkZSIsIm92ZXJ3cml0YWJsZUtleXMiLCJzb3VyY2VJdGVtIiwiY3VzdG9tRWxlbWVudCIsIm91dEl0ZW0iLCJvdmVyd3JpdGFibGVLZXkiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJvdmVycmlkZUNvbmZpZyIsInN1Ykl0ZW0iLCJzdWJDb25maWciLCJBcnJheSIsImlzQXJyYXkiLCJpbnNlcnRDdXN0b21FbGVtZW50cyIsInJvb3RFbGVtZW50cyIsImN1c3RvbUVsZW1lbnRzIiwiZmlyc3RBbmNob3IiLCJrZXkiLCJyb290RWxlbWVudHNXaXRob3V0TGFzdCIsImZpbHRlciIsInJvb3RFbGVtZW50IiwicG9zaXRpb24iLCJFbmQiLCJsYXN0QW5jaG9yIiwiZW5kRWxlbWVudCIsIml0ZW1zUGVyS2V5IiwiZm9yRWFjaCIsIkFmdGVyIiwiY3VzdG9tRWxlbWVudEtleSIsInBvdGVudGlhbEFuY2hvciIsIm1lbnUiLCJtYXAiLCJzb3J0ZWRLZXlzIiwicG9zaXRpb25JdGVtS2V5Iiwib3V0RWxlbWVudHMiLCJwdXNoIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJDb25maWd1cmFibGVPYmplY3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5cbmV4cG9ydCB0eXBlIFBvc2l0aW9uID0ge1xuXHRhbmNob3I/OiBzdHJpbmc7XG5cdHBsYWNlbWVudDogUGxhY2VtZW50O1xufTtcblxuZXhwb3J0IGVudW0gUGxhY2VtZW50IHtcblx0QWZ0ZXIgPSBcIkFmdGVyXCIsXG5cdEJlZm9yZSA9IFwiQmVmb3JlXCIsXG5cdEVuZCA9IFwiRW5kXCJcbn1cbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWJsZU9iamVjdEtleSA9IHN0cmluZztcbmV4cG9ydCB0eXBlIENvbmZpZ3VyYWJsZU9iamVjdCA9IFBvc2l0aW9uYWJsZSAmIHtcblx0a2V5OiBDb25maWd1cmFibGVPYmplY3RLZXk7XG59O1xuXG5leHBvcnQgdHlwZSBDdXN0b21FbGVtZW50PFQgZXh0ZW5kcyBDb25maWd1cmFibGVPYmplY3Q+ID0gVCAmIHtcblx0cG9zaXRpb246IFBvc2l0aW9uO1xuXHRtZW51PzogYW55W10gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvbmFibGUgPSB7XG5cdHBvc2l0aW9uPzogUG9zaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBDb25maWd1cmFibGVSZWNvcmQ8VD4gPSBSZWNvcmQ8Q29uZmlndXJhYmxlT2JqZWN0S2V5LCBUPjtcblxuLyoqXG4gKiBSZWN1cnNpdmUgbWV0aG9kIHRoYXQgb3JkZXIgdGhlIGtleXMgYmFzZWQgb24gYSBwb3NpdGlvbiBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAcGFyYW0gcG9zaXRpb25pbmdJdGVtc1xuICogQHBhcmFtIGFuY2hvclxuICogQHBhcmFtIHNvcnRlZFxuICogQHBhcmFtIHZpc2l0ZWRcbiAqIEByZXR1cm5zIFRoZSBvcmRlciBvZiB0aGUgY3VycmVudCBpdGVtXG4gKi9cbmNvbnN0IG9yZGVyUG9zaXRpb25pbmdJdGVtUmVjdXJzaXZlbHkgPSAoXG5cdHBvc2l0aW9uaW5nSXRlbXM6IFJlY29yZDxzdHJpbmcsIFJlcXVpcmVkPFBvc2l0aW9uPj4sXG5cdGFuY2hvcjogc3RyaW5nLFxuXHRzb3J0ZWQ6IHN0cmluZ1tdLFxuXHR2aXNpdGVkOiBSZWNvcmQ8c3RyaW5nLCBSZXF1aXJlZDxQb3NpdGlvbj4+XG4pOiBudW1iZXIgPT4ge1xuXHRsZXQgaW5zZXJ0SW5kZXggPSBzb3J0ZWQuaW5kZXhPZihhbmNob3IpO1xuXHRpZiAoaW5zZXJ0SW5kZXggIT09IC0xKSB7XG5cdFx0cmV0dXJuIGluc2VydEluZGV4O1xuXHR9XG5cdGNvbnN0IGFuY2hvckl0ZW06IFJlcXVpcmVkPFBvc2l0aW9uPiA9IHBvc2l0aW9uaW5nSXRlbXNbYW5jaG9yXTtcblx0aWYgKGFuY2hvckl0ZW0gPT09IHVuZGVmaW5lZCkge1xuXHRcdGNvbnN0IGFuY2hvclRleHQ6IEFycmF5PHN0cmluZz4gPSBhbmNob3Iuc3BsaXQoXCI6OlwiKSxcblx0XHRcdG1hbmlmZXN0SXRlbTogc3RyaW5nID0gT2JqZWN0LmtleXModmlzaXRlZClbMF07XG5cblx0XHRMb2cud2FybmluZyhcblx0XHRcdGBQb3NpdGlvbiBhbmNob3IgJyR7YW5jaG9yVGV4dFthbmNob3JUZXh0Lmxlbmd0aCAtIDFdfScgbm90IGZvdW5kIGZvciBpdGVtICcke21hbmlmZXN0SXRlbX0nLiBQbGVhc2UgY2hlY2sgbWFuaWZlc3Qgc2V0dGluZ3MuYFxuXHRcdCk7XG5cdFx0cmV0dXJuIHNvcnRlZC5sZW5ndGg7XG5cdFx0Ly8gdGhyb3cgbmV3IEVycm9yKGBwb3NpdGlvbiBhbmNob3Igbm90IGZvdW5kOiAke2FuY2hvcn1gKTtcblx0fVxuXG5cdHZpc2l0ZWRbYW5jaG9yXSA9IGFuY2hvckl0ZW07XG5cdGlmIChhbmNob3JJdGVtICYmICEoYW5jaG9ySXRlbS5hbmNob3IgaW4gdmlzaXRlZCkpIHtcblx0XHRpbnNlcnRJbmRleCA9IG9yZGVyUG9zaXRpb25pbmdJdGVtUmVjdXJzaXZlbHkocG9zaXRpb25pbmdJdGVtcywgYW5jaG9ySXRlbS5hbmNob3IsIHNvcnRlZCwgdmlzaXRlZCk7XG5cdFx0aWYgKGFuY2hvckl0ZW0ucGxhY2VtZW50ICE9PSBQbGFjZW1lbnQuQmVmb3JlKSB7XG5cdFx0XHQrK2luc2VydEluZGV4O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpbnNlcnRJbmRleCA9IHNvcnRlZC5sZW5ndGg7XG5cdH1cblxuXHRzb3J0ZWQuc3BsaWNlKGluc2VydEluZGV4LCAwLCBhbmNob3IpO1xuXHRyZXR1cm4gaW5zZXJ0SW5kZXg7XG59O1xuXG50eXBlIE92ZXJyaWRlVHlwZSA9IFwibWVyZ2VcIiB8IFwib3ZlcndyaXRlXCIgfCBcImlnbm9yZVwiO1xudHlwZSBBcnJheU92ZXJyaWRlVHlwZTxBcnJheVR5cGU+ID0gT3ZlcnJpZGVLZXlzPEFycmF5VHlwZT47XG5cbnR5cGUgRWxlbWVudFR5cGU8VD4gPSBUIGV4dGVuZHMgYW55W10gPyBUW251bWJlcl0gOiBUO1xudHlwZSBPdmVycmlkZUtleXM8VD4gPSB7XG5cdFtQIGluIGtleW9mIFRdPzogT3ZlcnJpZGVUeXBlIHwgQXJyYXlPdmVycmlkZVR5cGU8RWxlbWVudFR5cGU8VFtQXT4+O1xufTtcblxuZnVuY3Rpb24gaXNBcnJheUNvbmZpZzxUPihjb25maWc6IE92ZXJyaWRlVHlwZSB8IEFycmF5T3ZlcnJpZGVUeXBlPFQ+IHwgdW5kZWZpbmVkKTogY29uZmlnIGlzIEFycmF5T3ZlcnJpZGVUeXBlPFQ+IHtcblx0cmV0dXJuIHR5cGVvZiBjb25maWcgPT09IFwib2JqZWN0XCI7XG59XG5cbmZ1bmN0aW9uIGFwcGx5T3ZlcnJpZGU8VCBleHRlbmRzIE9iamVjdD4ob3ZlcndyaXRhYmxlS2V5czogT3ZlcnJpZGVLZXlzPFQ+LCBzb3VyY2VJdGVtOiBUIHwgbnVsbCwgY3VzdG9tRWxlbWVudDogVCk6IFQge1xuXHRjb25zdCBvdXRJdGVtOiBUID0gc291cmNlSXRlbSB8fCBjdXN0b21FbGVtZW50O1xuXHRmb3IgKGNvbnN0IG92ZXJ3cml0YWJsZUtleSBpbiBvdmVyd3JpdGFibGVLZXlzKSB7XG5cdFx0aWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG92ZXJ3cml0YWJsZUtleXMsIG92ZXJ3cml0YWJsZUtleSkpIHtcblx0XHRcdGNvbnN0IG92ZXJyaWRlQ29uZmlnID0gb3ZlcndyaXRhYmxlS2V5c1tvdmVyd3JpdGFibGVLZXldO1xuXHRcdFx0aWYgKHNvdXJjZUl0ZW0gIT09IG51bGwpIHtcblx0XHRcdFx0c3dpdGNoIChvdmVycmlkZUNvbmZpZykge1xuXHRcdFx0XHRcdGNhc2UgXCJvdmVyd3JpdGVcIjpcblx0XHRcdFx0XHRcdGlmIChjdXN0b21FbGVtZW50Lmhhc093blByb3BlcnR5KG92ZXJ3cml0YWJsZUtleSkgJiYgY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0c291cmNlSXRlbVtvdmVyd3JpdGFibGVLZXldID0gY3VzdG9tRWxlbWVudFtvdmVyd3JpdGFibGVLZXldO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIm1lcmdlXCI6XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNvbnN0IHN1Ykl0ZW0gPSBzb3VyY2VJdGVtW292ZXJ3cml0YWJsZUtleV0gfHwgKFtdIGFzIGFueVtdKTtcblx0XHRcdFx0XHRcdGxldCBzdWJDb25maWcgPSB7fTtcblx0XHRcdFx0XHRcdGlmIChpc0FycmF5Q29uZmlnKG92ZXJyaWRlQ29uZmlnKSkge1xuXHRcdFx0XHRcdFx0XHRzdWJDb25maWcgPSBvdmVycmlkZUNvbmZpZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHN1Ykl0ZW0pKSB7XG5cdFx0XHRcdFx0XHRcdHNvdXJjZUl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGluc2VydEN1c3RvbUVsZW1lbnRzKFxuXHRcdFx0XHRcdFx0XHRcdHN1Ykl0ZW0sXG5cdFx0XHRcdFx0XHRcdFx0KGN1c3RvbUVsZW1lbnQgJiYgKGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PGFueT4+KSkgfHwge30sXG5cdFx0XHRcdFx0XHRcdFx0c3ViQ29uZmlnXG5cdFx0XHRcdFx0XHRcdCkgYXMgYW55O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHN3aXRjaCAob3ZlcnJpZGVDb25maWcpIHtcblx0XHRcdFx0XHRjYXNlIFwib3ZlcndyaXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAoY3VzdG9tRWxlbWVudC5oYXNPd25Qcm9wZXJ0eShvdmVyd3JpdGFibGVLZXkpICYmIGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdG91dEl0ZW1bb3ZlcndyaXRhYmxlS2V5XSA9IGN1c3RvbUVsZW1lbnRbb3ZlcndyaXRhYmxlS2V5XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJtZXJnZVwiOlxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRsZXQgc3ViQ29uZmlnID0ge307XG5cdFx0XHRcdFx0XHRpZiAoaXNBcnJheUNvbmZpZyhvdmVycmlkZUNvbmZpZykpIHtcblx0XHRcdFx0XHRcdFx0c3ViQ29uZmlnID0gb3ZlcnJpZGVDb25maWc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRvdXRJdGVtW292ZXJ3cml0YWJsZUtleV0gPSBpbnNlcnRDdXN0b21FbGVtZW50cyhcblx0XHRcdFx0XHRcdFx0W10gYXMgYW55W10sXG5cdFx0XHRcdFx0XHRcdChjdXN0b21FbGVtZW50ICYmIChjdXN0b21FbGVtZW50W292ZXJ3cml0YWJsZUtleV0gYXMgUmVjb3JkPHN0cmluZywgQ3VzdG9tRWxlbWVudDxhbnk+PikpIHx8IHt9LFxuXHRcdFx0XHRcdFx0XHRzdWJDb25maWdcblx0XHRcdFx0XHRcdCkgYXMgYW55O1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG91dEl0ZW07XG59XG5cbi8qKlxuICogSW5zZXJ0IGEgc2V0IG9mIGN1c3RvbSBlbGVtZW50cyBpbiB0aGUgcmlnaHQgcG9zaXRpb24gaW4gYW4gb3JpZ2luYWwgY29sbGVjdGlvbi5cbiAqXG4gKiBQYXJhbWV0ZXJzIGZvciBvdmVyd3JpdGFibGVLZXlzIGFuZCB0aGVpciBpbXBsaWNhdGlvbnM6XG4gKiBcIm92ZXJ3cml0ZVwiOiBUaGUgd2hvbGUgb2JqZWN0IGdldHMgb3ZlcndyaXR0ZW4gLSBpZiB0aGUgY3VzdG9tRWxlbWVudHMgaW5jbHVkZSBhIGRlZmF1bHQsIHRoaXMgd2lsbCBvdmVycnVsZSB0aGUgd2hvbGUgcm9vdEVsZW1lbnRzIGNvbmZpZ3VyYXRpb24uXG4gKiBcIm1lcmdlXCI6IFRoaXMgaXMgc2ltaWxhciB0byBjYWxsaW5nIGluc2VydEN1c3RvbUVsZW1lbnRzIGl0c2VsZi4gWW91IG11c3QgaW5jbHVkZSB0aGVcbiAqIGZ1bGwgQ3VzdG9tRWxlbWVudCBzeW50YXggd2l0aGluIHRoZSBjdXN0b21FbGVtZW50cywgaW5jbHVkaW5nIGFuY2hvcnMsIGZvciBleGFtcGxlLlxuICogXCJpZ25vcmVcIjogVGhlcmUgYXJlIG5vIGFkZGl0aW9ucyBhbmQgbm8gY29tYmluYXRpb25zLiBPbmx5IHRoZSByb290RWxlbWVudHMgb2JqZWN0IGlzIHVzZWQuXG4gKlxuICogTm90ZSAtIFByb2NlZWQgYXMgZm9sbG93cyBpbiBjYXNlIHlvdSBoYXZlIGRlZmluZWQgY3VzdG9tRWxlbWVudHMgYW5kIGRvIG5vdCB3YW50IHRvIG92ZXJ3cml0ZSB0aGVpciB2YWx1ZXMgd2l0aCBkZWZhdWx0czpcbiAqIEhhbmQgdGhlIHJvb3RFbGVtZW50cyBpbnRvIHRoZSBjcmVhdGlvbiBmdW5jdGlvbiBvZiB0aGUgY3VzdG9tRWxlbWVudC5cbiAqIERlcGVuZGluZyBvbiB0aGUgZXhpc3RlbmNlIG9mIGJvdGggcm9vdEVsZW1lbnQtY29uZmlndXJhdGlvbiBhbmQgY3VzdG9tRWxlbWVudC1jb25maWd1cmF0aW9uLFxuICogeW91IG11c3Qgc2V0IHRoZSBjdXN0b21FbGVtZW50cyBwcm9wZXJ0eSwgZm9yIHdoaWNoIHRoZSBcIm92ZXJ3cml0ZVwiLXByb3BlcnR5IGlzIHNldCwgZXhwbGljaXRseSB0byB1bmRlZmluZWQuXG4gKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSByb290RWxlbWVudHMgQSBsaXN0IG9mIFwiQ29uZmlndXJhYmxlT2JqZWN0XCIgd2hpY2ggbWVhbnMgb2JqZWN0IHRoYXQgaGF2ZSBhIHVuaXF1ZSBcImtleVwiXG4gKiBAcGFyYW0gY3VzdG9tRWxlbWVudHMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgZXh0cmEgb2JqZWN0IHRvIGFkZCwgdGhleSBhcmUgaW5kZXhlZCBieSBhIGtleSBhbmQgaGF2ZSBhIFwicG9zaXRpb25cIiBvYmplY3RcbiAqIEBwYXJhbSBvdmVyd3JpdGFibGVLZXlzIFRoZSBsaXN0IG9mIGtleXMgZnJvbSB0aGUgb3JpZ2luYWwgb2JqZWN0IHRoYXQgY2FuIGJlIG92ZXJ3cml0dGVuIGluIGNhc2UgYSBjdXN0b20gZWxlbWVudCBoYXMgdGhlIHNhbWUgXCJrZXlcIlxuICogQHJldHVybnMgQW4gb3JkZXJlZCBhcnJheSBvZiBlbGVtZW50cyBpbmNsdWRpbmcgdGhlIGN1c3RvbSBvbmVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRDdXN0b21FbGVtZW50czxUIGV4dGVuZHMgQ29uZmlndXJhYmxlT2JqZWN0Pihcblx0cm9vdEVsZW1lbnRzOiBUW10sXG5cdGN1c3RvbUVsZW1lbnRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21FbGVtZW50PFQ+Pixcblx0b3ZlcndyaXRhYmxlS2V5czogT3ZlcnJpZGVLZXlzPFQ+ID0ge31cbik6IFRbXSB7XG5cdGNvbnN0IGZpcnN0QW5jaG9yID0gcm9vdEVsZW1lbnRzLmxlbmd0aCA/IHJvb3RFbGVtZW50c1swXS5rZXkgOiBudWxsO1xuXHRjb25zdCByb290RWxlbWVudHNXaXRob3V0TGFzdCA9IHJvb3RFbGVtZW50cy5maWx0ZXIoKHJvb3RFbGVtZW50KSA9PiB7XG5cdFx0cmV0dXJuIHJvb3RFbGVtZW50LnBvc2l0aW9uPy5wbGFjZW1lbnQgIT09IFBsYWNlbWVudC5FbmQ7XG5cdH0pO1xuXHRjb25zdCBsYXN0QW5jaG9yID0gcm9vdEVsZW1lbnRzLmxlbmd0aCA/IHJvb3RFbGVtZW50c1tyb290RWxlbWVudHNXaXRob3V0TGFzdC5sZW5ndGggLSAxXS5rZXkgOiBudWxsO1xuXHRsZXQgZW5kRWxlbWVudDogVCB8IHVuZGVmaW5lZDtcblx0Y29uc3QgcG9zaXRpb25pbmdJdGVtczogUmVjb3JkPHN0cmluZywgUmVxdWlyZWQ8UG9zaXRpb24+PiA9IHt9O1xuXHRjb25zdCBpdGVtc1BlcktleTogUmVjb3JkPHN0cmluZywgVD4gPSB7fTtcblx0cm9vdEVsZW1lbnRzLmZvckVhY2goKHJvb3RFbGVtZW50KSA9PiB7XG5cdFx0aWYgKHJvb3RFbGVtZW50LnBvc2l0aW9uPy5wbGFjZW1lbnQgPT09IFBsYWNlbWVudC5FbmQgJiYgIWVuZEVsZW1lbnQpIHtcblx0XHRcdGVuZEVsZW1lbnQgPSByb290RWxlbWVudDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cG9zaXRpb25pbmdJdGVtc1tyb290RWxlbWVudC5rZXldID0ge1xuXHRcdFx0XHRhbmNob3I6IHJvb3RFbGVtZW50LnBvc2l0aW9uPy5hbmNob3IgfHwgcm9vdEVsZW1lbnQua2V5LFxuXHRcdFx0XHRwbGFjZW1lbnQ6IHJvb3RFbGVtZW50LnBvc2l0aW9uPy5wbGFjZW1lbnQgfHwgUGxhY2VtZW50LkFmdGVyXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRpdGVtc1BlcktleVtyb290RWxlbWVudC5rZXldID0gcm9vdEVsZW1lbnQ7XG5cdH0pO1xuXHRPYmplY3Qua2V5cyhjdXN0b21FbGVtZW50cykuZm9yRWFjaCgoY3VzdG9tRWxlbWVudEtleSkgPT4ge1xuXHRcdGNvbnN0IGN1c3RvbUVsZW1lbnQgPSBjdXN0b21FbGVtZW50c1tjdXN0b21FbGVtZW50S2V5XTtcblx0XHRjb25zdCBhbmNob3IgPSBjdXN0b21FbGVtZW50LnBvc2l0aW9uLmFuY2hvcjtcblx0XHQvLyBJZiBubyBwbGFjZW1lbnQgZGVmaW5lZCB3ZSBhcmUgQWZ0ZXJcblx0XHRpZiAoIWN1c3RvbUVsZW1lbnQucG9zaXRpb24ucGxhY2VtZW50KSB7XG5cdFx0XHRjdXN0b21FbGVtZW50LnBvc2l0aW9uLnBsYWNlbWVudCA9IFBsYWNlbWVudC5BZnRlcjtcblx0XHR9XG5cdFx0Ly8gSWYgbm8gYW5jaG9yIHdlJ3JlIGVpdGhlciBBZnRlciB0aGUgbGFzdCBhbmNob3Igb3IgQmVmb3JlIHRoZSBmaXJzdFxuXHRcdGlmICghYW5jaG9yKSB7XG5cdFx0XHRjb25zdCBwb3RlbnRpYWxBbmNob3IgPSBjdXN0b21FbGVtZW50LnBvc2l0aW9uLnBsYWNlbWVudCA9PT0gUGxhY2VtZW50LkFmdGVyID8gbGFzdEFuY2hvciA6IGZpcnN0QW5jaG9yO1xuXHRcdFx0Y3VzdG9tRWxlbWVudC5wb3NpdGlvbi5hbmNob3IgPSBwb3RlbnRpYWxBbmNob3IgPyBwb3RlbnRpYWxBbmNob3IgOiBjdXN0b21FbGVtZW50S2V5O1xuXHRcdH1cblxuXHRcdC8vIEFkZGluZyBib3VuZC91bmJvdW5kIGFjdGlvbnMgdG8gbWVudVxuXHRcdGN1c3RvbUVsZW1lbnQubWVudSA9IGN1c3RvbUVsZW1lbnQ/Lm1lbnU/Lm1hcCgobWVudSkgPT4ge1xuXHRcdFx0cmV0dXJuIGl0ZW1zUGVyS2V5W21lbnUua2V5XSA/PyBtZW51O1xuXHRcdH0pO1xuXG5cdFx0aWYgKGl0ZW1zUGVyS2V5W2N1c3RvbUVsZW1lbnQua2V5XSkge1xuXHRcdFx0aXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldID0gYXBwbHlPdmVycmlkZShvdmVyd3JpdGFibGVLZXlzLCBpdGVtc1BlcktleVtjdXN0b21FbGVtZW50LmtleV0sIGN1c3RvbUVsZW1lbnQpO1xuXG5cdFx0XHQvL1Bvc2l0aW9uIGlzIG92ZXJ3cml0dGVuIGZvciBmaWx0ZXIgZmllbGRzIGlmIHRoZXJlIGlzIGEgY2hhbmdlIGluIG1hbmlmZXN0XG5cdFx0XHRpZiAoYW5jaG9yICYmIGN1c3RvbUVsZW1lbnQucG9zaXRpb24gJiYgb3ZlcndyaXRhYmxlS2V5cy5wb3NpdGlvbiAmJiBvdmVyd3JpdGFibGVLZXlzLnBvc2l0aW9uID09PSBcIm92ZXJ3cml0ZVwiKSB7XG5cdFx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbY3VzdG9tRWxlbWVudC5rZXldID0gaXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldLnBvc2l0aW9uIGFzIFJlcXVpcmVkPFBvc2l0aW9uPjtcblx0XHRcdH1cblx0XHRcdC8qKlxuXHRcdFx0ICogYW5jaG9yIGNoZWNrIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSBjaGFuZ2UgaW4gcHJvcGVydGllcyBpbiB0aGUgbWFuaWZlc3QgZG9lcyBub3QgYWZmZWN0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZmllbGQuXG5cdFx0XHQgKiBPdGhlcndpc2UsIHdoZW4gbm8gcG9zaXRpb24gaXMgbWVudGlvbmVkIGluIG1hbmlmZXN0IGZvciBhbiBhbHRlcmVkIGZpZWxkLCB0aGUgcG9zaXRpb24gaXMgY2hhbmdlZCBhc1xuXHRcdFx0ICogcGVyIHRoZSBwb3RlbnRpYWwgYW5jaG9yXG5cdFx0XHQgKi9cblx0XHR9IGVsc2Uge1xuXHRcdFx0aXRlbXNQZXJLZXlbY3VzdG9tRWxlbWVudC5rZXldID0gYXBwbHlPdmVycmlkZShvdmVyd3JpdGFibGVLZXlzLCBudWxsLCBjdXN0b21FbGVtZW50KTtcblx0XHRcdHBvc2l0aW9uaW5nSXRlbXNbY3VzdG9tRWxlbWVudC5rZXldID0gY3VzdG9tRWxlbWVudC5wb3NpdGlvbiBhcyBSZXF1aXJlZDxQb3NpdGlvbj47XG5cdFx0fVxuXHR9KTtcblx0Y29uc3Qgc29ydGVkS2V5czogc3RyaW5nW10gPSBbXTtcblxuXHRPYmplY3Qua2V5cyhwb3NpdGlvbmluZ0l0ZW1zKS5mb3JFYWNoKChwb3NpdGlvbkl0ZW1LZXkpID0+IHtcblx0XHRvcmRlclBvc2l0aW9uaW5nSXRlbVJlY3Vyc2l2ZWx5KHBvc2l0aW9uaW5nSXRlbXMsIHBvc2l0aW9uSXRlbUtleSwgc29ydGVkS2V5cywge30pO1xuXHR9KTtcblxuXHRjb25zdCBvdXRFbGVtZW50cyA9IHNvcnRlZEtleXMubWFwKChrZXkpID0+IGl0ZW1zUGVyS2V5W2tleV0pO1xuXHRpZiAoZW5kRWxlbWVudCkge1xuXHRcdG91dEVsZW1lbnRzLnB1c2goZW5kRWxlbWVudCk7XG5cdH1cblx0cmV0dXJuIG91dEVsZW1lbnRzO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7TUFPWUEsUzs7YUFBQUEsUztJQUFBQSxTO0lBQUFBLFM7SUFBQUEsUztLQUFBQSxTLEtBQUFBLFM7Ozs7RUFxQlo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsSUFBTUMsK0JBQStCLEdBQUcsVUFDdkNDLGdCQUR1QyxFQUV2Q0MsTUFGdUMsRUFHdkNDLE1BSHVDLEVBSXZDQyxPQUp1QyxFQUszQjtJQUNaLElBQUlDLFdBQVcsR0FBR0YsTUFBTSxDQUFDRyxPQUFQLENBQWVKLE1BQWYsQ0FBbEI7O0lBQ0EsSUFBSUcsV0FBVyxLQUFLLENBQUMsQ0FBckIsRUFBd0I7TUFDdkIsT0FBT0EsV0FBUDtJQUNBOztJQUNELElBQU1FLFVBQThCLEdBQUdOLGdCQUFnQixDQUFDQyxNQUFELENBQXZEOztJQUNBLElBQUlLLFVBQVUsS0FBS0MsU0FBbkIsRUFBOEI7TUFDN0IsSUFBTUMsVUFBeUIsR0FBR1AsTUFBTSxDQUFDUSxLQUFQLENBQWEsSUFBYixDQUFsQztNQUFBLElBQ0NDLFlBQW9CLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZVCxPQUFaLEVBQXFCLENBQXJCLENBRHhCO01BR0FVLEdBQUcsQ0FBQ0MsT0FBSiw0QkFDcUJOLFVBQVUsQ0FBQ0EsVUFBVSxDQUFDTyxNQUFYLEdBQW9CLENBQXJCLENBRC9CLG1DQUMrRUwsWUFEL0U7TUFHQSxPQUFPUixNQUFNLENBQUNhLE1BQWQsQ0FQNkIsQ0FRN0I7SUFD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
@@ -1,3 +1,5 @@
1
+ import Log from "sap/base/Log";
2
+
1
3
  export type Position = {
2
4
  anchor?: string;
3
5
  placement: Placement;
@@ -31,7 +33,7 @@ export type ConfigurableRecord<T> = Record<ConfigurableObjectKey, T>;
31
33
  * @param anchor
32
34
  * @param sorted
33
35
  * @param visited
34
- * @returns {number} The order of the current item
36
+ * @returns The order of the current item
35
37
  */
36
38
  const orderPositioningItemRecursively = (
37
39
  positioningItems: Record<string, Required<Position>>,
@@ -45,8 +47,14 @@ const orderPositioningItemRecursively = (
45
47
  }
46
48
  const anchorItem: Required<Position> = positioningItems[anchor];
47
49
  if (anchorItem === undefined) {
48
- //return sorted.length;
49
- throw new Error("position anchor not found: " + anchor);
50
+ const anchorText: Array<string> = anchor.split("::"),
51
+ manifestItem: string = Object.keys(visited)[0];
52
+
53
+ Log.warning(
54
+ `Position anchor '${anchorText[anchorText.length - 1]}' not found for item '${manifestItem}'. Please check manifest settings.`
55
+ );
56
+ return sorted.length;
57
+ // throw new Error(`position anchor not found: ${anchor}`);
50
58
  }
51
59
 
52
60
  visited[anchor] = anchorItem;
@@ -147,7 +155,7 @@ function applyOverride<T extends Object>(overwritableKeys: OverrideKeys<T>, sour
147
155
  * @param rootElements A list of "ConfigurableObject" which means object that have a unique "key"
148
156
  * @param customElements An object containing extra object to add, they are indexed by a key and have a "position" object
149
157
  * @param overwritableKeys The list of keys from the original object that can be overwritten in case a custom element has the same "key"
150
- * @returns {T[]} An ordered array of elements including the custom ones
158
+ * @returns An ordered array of elements including the custom ones
151
159
  */
152
160
  export function insertCustomElements<T extends ConfigurableObject>(
153
161
  rootElements: T[],
@@ -155,14 +163,14 @@ export function insertCustomElements<T extends ConfigurableObject>(
155
163
  overwritableKeys: OverrideKeys<T> = {}
156
164
  ): T[] {
157
165
  const firstAnchor = rootElements.length ? rootElements[0].key : null;
158
- const rootElementsWithoutLast = rootElements.filter(rootElement => {
166
+ const rootElementsWithoutLast = rootElements.filter((rootElement) => {
159
167
  return rootElement.position?.placement !== Placement.End;
160
168
  });
161
169
  const lastAnchor = rootElements.length ? rootElements[rootElementsWithoutLast.length - 1].key : null;
162
170
  let endElement: T | undefined;
163
171
  const positioningItems: Record<string, Required<Position>> = {};
164
172
  const itemsPerKey: Record<string, T> = {};
165
- rootElements.forEach(rootElement => {
173
+ rootElements.forEach((rootElement) => {
166
174
  if (rootElement.position?.placement === Placement.End && !endElement) {
167
175
  endElement = rootElement;
168
176
  } else {
@@ -173,7 +181,7 @@ export function insertCustomElements<T extends ConfigurableObject>(
173
181
  }
174
182
  itemsPerKey[rootElement.key] = rootElement;
175
183
  });
176
- Object.keys(customElements).forEach(customElementKey => {
184
+ Object.keys(customElements).forEach((customElementKey) => {
177
185
  const customElement = customElements[customElementKey];
178
186
  const anchor = customElement.position.anchor;
179
187
  // If no placement defined we are After
@@ -187,7 +195,7 @@ export function insertCustomElements<T extends ConfigurableObject>(
187
195
  }
188
196
 
189
197
  // Adding bound/unbound actions to menu
190
- customElement.menu = customElement?.menu?.map(menu => {
198
+ customElement.menu = customElement?.menu?.map((menu) => {
191
199
  return itemsPerKey[menu.key] ?? menu;
192
200
  });
193
201
 
@@ -210,11 +218,11 @@ export function insertCustomElements<T extends ConfigurableObject>(
210
218
  });
211
219
  const sortedKeys: string[] = [];
212
220
 
213
- Object.keys(positioningItems).forEach(positionItemKey => {
221
+ Object.keys(positioningItems).forEach((positionItemKey) => {
214
222
  orderPositioningItemRecursively(positioningItems, positionItemKey, sortedKeys, {});
215
223
  });
216
224
 
217
- const outElements = sortedKeys.map(key => itemsPerKey[key]);
225
+ const outElements = sortedKeys.map((key) => itemsPerKey[key]);
218
226
  if (endElement) {
219
227
  outElements.push(endElement);
220
228
  }