@sap/open.fe 1.99.0 → 1.100.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 (969) hide show
  1. package/package.json +1 -1
  2. package/packages/sap.fe.common/src/sap/fe/common/.library +1 -1
  3. package/packages/sap.fe.common/src/sap/fe/common/.theming +1 -1
  4. package/packages/sap.fe.common/src/sap/fe/common/MessageButton-dbg.js +1748 -1813
  5. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.js +2 -3
  6. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.ts +1801 -0
  7. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter-dbg.js +77 -32
  8. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.js +2 -3
  9. package/packages/sap.fe.common/src/sap/fe/common/MessageFilter.ts +26 -0
  10. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover-dbg.js +43 -53
  11. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.js +2 -3
  12. package/packages/sap.fe.common/src/sap/fe/common/MessagePopover.ts +39 -0
  13. package/packages/sap.fe.common/src/sap/fe/common/library-dbg.js +31 -38
  14. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js +8 -9
  15. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js.map +3 -3
  16. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js +23 -71
  17. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js.map +4 -4
  18. package/packages/sap.fe.common/src/sap/fe/common/library.js +4 -5
  19. package/packages/sap.fe.common/src/sap/fe/common/library.ts +35 -0
  20. package/packages/sap.fe.common/src/sap/fe/common/manifest.json +3 -3
  21. package/packages/sap.fe.common/src/sap/fe/common/resources.json +54 -32
  22. package/packages/sap.fe.common/test/sap/fe/common/designtime/api.json +1 -1
  23. package/packages/sap.fe.common/test/sap/fe/common/designtime/apiref/api.json +1 -1
  24. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.jsmeta.json +1 -1
  25. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.xmlmeta.json +1 -1
  26. package/packages/sap.fe.core/src/sap/fe/core/.library +1 -1
  27. package/packages/sap.fe.core/src/sap/fe/core/.theming +1 -1
  28. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper-dbg.js +1 -69
  29. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.js +1 -1
  30. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.ts +0 -70
  31. package/packages/sap.fe.core/src/sap/fe/core/AppComponent-dbg.js +388 -399
  32. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.js +2 -3
  33. package/packages/sap.fe.core/src/sap/fe/core/AppComponent.ts +403 -0
  34. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler-dbg.js +127 -158
  35. package/packages/sap.fe.core/src/sap/fe/core/AppStateHandler.js +1 -1
  36. package/packages/sap.fe.core/src/sap/fe/core/BaseController-dbg.js +82 -58
  37. package/packages/sap.fe.core/src/sap/fe/core/BaseController.js +2 -3
  38. package/packages/sap.fe.core/src/sap/fe/core/BaseController.ts +68 -0
  39. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils-dbg.js +111 -20
  40. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.js +1 -1
  41. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.ts +131 -32
  42. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI-dbg.js +278 -274
  43. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.js +2 -3
  44. package/packages/sap.fe.core/src/sap/fe/core/ExtensionAPI.ts +250 -0
  45. package/packages/sap.fe.core/src/sap/fe/core/PageController-dbg.js +157 -29
  46. package/packages/sap.fe.core/src/sap/fe/core/PageController.js +1 -1
  47. package/packages/sap.fe.core/src/sap/fe/core/PageController.ts +60 -32
  48. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy-dbg.js +694 -756
  49. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.js +1 -1
  50. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.ts +11 -9
  51. package/packages/sap.fe.core/src/sap/fe/core/Synchronization-dbg.js +21 -31
  52. package/packages/sap.fe.core/src/sap/fe/core/Synchronization.js +1 -1
  53. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent-dbg.js +1 -1
  54. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent.ts +10 -3
  55. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel-dbg.js +20 -38
  56. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.js +1 -1
  57. package/packages/sap.fe.core/src/sap/fe/core/TemplateModel.ts +1 -1
  58. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper-dbg.js +1354 -1370
  59. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.js +1 -1
  60. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.ts +33 -22
  61. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync-dbg.js +392 -0
  62. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.js +5 -0
  63. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  64. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon-dbg.js +136 -0
  65. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +5 -0
  66. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  67. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage-dbg.js +262 -0
  68. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.js +5 -0
  69. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  70. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  71. package/packages/sap.fe.core/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  72. package/packages/sap.fe.core/src/sap/fe/core/actions/draft-dbg.js +30 -68
  73. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.js +1 -1
  74. package/packages/sap.fe.core/src/sap/fe/core/actions/draft.ts +44 -71
  75. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling-dbg.js +55 -36
  76. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.js +1 -1
  77. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.ts +66 -46
  78. package/packages/sap.fe.core/src/sap/fe/core/actions/operations-dbg.js +34 -15
  79. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.js +1 -1
  80. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.ts +48 -18
  81. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky-dbg.js +17 -4
  82. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.js +1 -1
  83. package/packages/sap.fe.core/src/sap/fe/core/actions/sticky.ts +21 -4
  84. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata-dbg.js +69 -66
  85. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +2 -3
  86. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  87. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +1593 -1669
  88. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.js +2 -3
  89. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  90. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation-dbg.js +79 -54
  91. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +2 -3
  92. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  93. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow-dbg.js +718 -779
  94. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.js +2 -3
  95. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  96. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +796 -816
  97. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -3
  98. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  99. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +1004 -1005
  100. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -3
  101. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  102. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement-dbg.js +487 -521
  103. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.js +1 -1
  104. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  105. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit-dbg.js +141 -169
  106. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.js +2 -3
  107. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  108. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +233 -244
  109. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -3
  110. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  111. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady-dbg.js +301 -336
  112. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.js +1 -1
  113. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  114. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator-dbg.js +188 -175
  115. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.js +2 -3
  116. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  117. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder-dbg.js +157 -149
  118. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.js +2 -3
  119. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  120. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing-dbg.js +144 -125
  121. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.js +2 -3
  122. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  123. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener-dbg.js +7 -6
  124. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.js +2 -3
  125. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  126. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share-dbg.js +230 -268
  127. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.js +2 -3
  128. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  129. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects-dbg.js +592 -633
  130. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  131. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  132. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState-dbg.js +788 -806
  133. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.js +2 -3
  134. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  135. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  136. package/packages/sap.fe.core/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  137. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution-dbg.js +67 -66
  138. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.js +2 -3
  139. package/packages/sap.fe.core/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  140. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper-dbg.js +90 -75
  141. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.js +2 -3
  142. package/packages/sap.fe.core/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  143. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +130 -125
  144. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -3
  145. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  146. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler-dbg.js +103 -112
  147. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +2 -3
  148. package/packages/sap.fe.core/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  149. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper-dbg.js +122 -135
  150. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.js +2 -3
  151. package/packages/sap.fe.core/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  152. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar-dbg.js +162 -159
  153. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.js +2 -3
  154. package/packages/sap.fe.core/src/sap/fe/core/controls/FilterBar.ts +143 -0
  155. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper-dbg.js +45 -39
  156. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.js +2 -3
  157. package/packages/sap.fe.core/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  158. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate-dbg.js +37 -42
  159. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.js +1 -2
  160. package/packages/sap.fe.core/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  161. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer-dbg.js +126 -116
  162. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.js +2 -3
  163. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  164. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter-dbg.js +241 -255
  165. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.js +2 -3
  166. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  167. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer-dbg.js +150 -141
  168. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +2 -3
  169. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  170. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils-dbg.js +335 -322
  171. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -3
  172. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  173. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers-dbg.js +74 -74
  174. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +2 -3
  175. package/packages/sap.fe.core/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  176. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext-dbg.js +348 -379
  177. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.js +1 -1
  178. package/packages/sap.fe.core/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  179. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings-dbg.js +12 -1
  180. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  181. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  182. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper-dbg.js +354 -378
  183. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.js +1 -1
  184. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  185. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter-dbg.js +6 -4
  186. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  187. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  188. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter-dbg.js +1 -1
  189. package/packages/sap.fe.core/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  190. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField-dbg.js +26 -12
  191. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  192. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  193. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form-dbg.js +2 -2
  194. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  195. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  196. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI-dbg.js +1 -1
  197. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  198. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table-dbg.js +130 -23
  199. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  200. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  201. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions-dbg.js +118 -53
  202. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -1
  203. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  204. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar-dbg.js +161 -207
  205. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +1 -1
  206. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  207. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation-dbg.js +115 -133
  208. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Aggregation.js +1 -1
  209. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper-dbg.js +20 -6
  210. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.js +1 -1
  211. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  212. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject-dbg.js +12 -1
  213. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  214. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key-dbg.js +42 -57
  215. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.js +1 -1
  216. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  217. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction-dbg.js +25 -4
  218. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
  219. package/packages/sap.fe.core/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  220. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +10 -4
  221. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  222. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  223. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter-dbg.js +7 -5
  224. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.js +1 -1
  225. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  226. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +92 -98
  227. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.js +2 -3
  228. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  229. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js +2 -3
  230. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js.map +3 -3
  231. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter-dbg.js +104 -0
  232. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.js +5 -0
  233. package/packages/sap.fe.core/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  234. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter-dbg.js +53 -2
  235. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  236. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  237. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component-dbg.js +50 -54
  238. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.js +2 -3
  239. package/packages/sap.fe.core/src/sap/fe/core/fpm/Component.ts +48 -0
  240. package/packages/sap.fe.core/src/sap/fe/core/fpm/manifest.json +2 -2
  241. package/packages/sap.fe.core/src/sap/fe/core/fpm/resources.json +7 -3
  242. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper-dbg.js +323 -309
  243. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.js +1 -1
  244. package/packages/sap.fe.core/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  245. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression-dbg.js +7 -7
  246. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.js +1 -1
  247. package/packages/sap.fe.core/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  248. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport-dbg.js +186 -62
  249. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.js +1 -1
  250. package/packages/sap.fe.core/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  251. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper-dbg.js +5 -4
  252. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +1 -1
  253. package/packages/sap.fe.core/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  254. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper-dbg.js +1 -1
  255. package/packages/sap.fe.core/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  256. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper-dbg.js +601 -684
  257. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.js +2 -3
  258. package/packages/sap.fe.core/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  259. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper-dbg.js +25 -1
  260. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  261. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  262. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators-dbg.js +5 -1
  263. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.js +1 -1
  264. package/packages/sap.fe.core/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  265. package/packages/sap.fe.core/src/sap/fe/core/library-dbg.js +426 -451
  266. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js +36 -32
  267. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js.map +3 -3
  268. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js +644 -738
  269. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js.map +4 -4
  270. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js +24 -35
  271. package/packages/sap.fe.core/src/sap/fe/core/library-preload.support.js.map +2 -2
  272. package/packages/sap.fe.core/src/sap/fe/core/library.js +2 -3
  273. package/packages/sap.fe.core/src/sap/fe/core/library.support.js +22 -33
  274. package/packages/sap.fe.core/src/sap/fe/core/library.support.ts +23 -0
  275. package/packages/sap.fe.core/src/sap/fe/core/library.ts +420 -0
  276. package/packages/sap.fe.core/src/sap/fe/core/manifest.json +10 -10
  277. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration-dbg.js +5 -3
  278. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  279. package/packages/sap.fe.core/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  280. package/packages/sap.fe.core/src/sap/fe/core/messagebundle.properties +22 -5
  281. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ar.properties +27 -7
  282. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_bg.properties +27 -7
  283. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ca.properties +27 -7
  284. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cs.properties +27 -7
  285. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cy.properties +27 -7
  286. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_da.properties +27 -7
  287. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_de.properties +27 -7
  288. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_el.properties +27 -7
  289. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en.properties +27 -7
  290. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  291. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  292. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  293. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  294. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es.properties +27 -7
  295. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  296. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_et.properties +27 -7
  297. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fi.properties +28 -8
  298. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr.properties +28 -8
  299. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  300. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hi.properties +27 -7
  301. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hr.properties +27 -7
  302. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hu.properties +27 -7
  303. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_id.properties +27 -7
  304. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_it.properties +27 -7
  305. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_iw.properties +27 -7
  306. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ja.properties +26 -6
  307. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_kk.properties +27 -7
  308. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ko.properties +27 -7
  309. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lt.properties +27 -7
  310. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lv.properties +28 -8
  311. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ms.properties +27 -7
  312. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_nl.properties +27 -7
  313. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_no.properties +27 -7
  314. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pl.properties +27 -7
  315. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt.properties +28 -8
  316. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  317. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ro.properties +27 -7
  318. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ru.properties +27 -7
  319. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sh.properties +27 -7
  320. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sk.properties +27 -7
  321. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sl.properties +27 -7
  322. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sv.properties +27 -7
  323. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_th.properties +26 -6
  324. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_tr.properties +30 -10
  325. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_uk.properties +27 -7
  326. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_vi.properties +27 -7
  327. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  328. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  329. package/packages/sap.fe.core/src/sap/fe/core/resources.json +745 -384
  330. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory-dbg.js +45 -71
  331. package/packages/sap.fe.core/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  332. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory-dbg.js +154 -192
  333. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.js +1 -1
  334. package/packages/sap.fe.core/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  335. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory-dbg.js +66 -92
  336. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  337. package/packages/sap.fe.core/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  338. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory-dbg.js +284 -339
  339. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.js +1 -1
  340. package/packages/sap.fe.core/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  341. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory-dbg.js +67 -102
  342. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.js +1 -1
  343. package/packages/sap.fe.core/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  344. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +754 -814
  345. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  346. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  347. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory-dbg.js +649 -736
  348. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  349. package/packages/sap.fe.core/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  350. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory-dbg.js +567 -592
  351. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.js +1 -1
  352. package/packages/sap.fe.core/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  353. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +354 -386
  354. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  355. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  356. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage-dbg.controller.js +1 -1
  357. package/packages/sap.fe.core/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  358. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper-dbg.js +1 -1
  359. package/packages/sap.fe.core/src/sap/fe/core/support/CommonHelper.ts +1 -1
  360. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics-dbg.js +36 -48
  361. package/packages/sap.fe.core/src/sap/fe/core/support/Diagnostics.js +1 -1
  362. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper-dbg.js +93 -85
  363. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.js +1 -1
  364. package/packages/sap.fe.core/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  365. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper-dbg.js +25 -32
  366. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.js +1 -1
  367. package/packages/sap.fe.core/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  368. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper-dbg.js +2 -2
  369. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.js +1 -1
  370. package/packages/sap.fe.core/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  371. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters-dbg.js +32 -26
  372. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.js +1 -1
  373. package/packages/sap.fe.core/src/sap/fe/core/templating/UIFormatters.ts +37 -24
  374. package/packages/sap.fe.core/test/sap/fe/core/designtime/api.json +1664 -1
  375. package/packages/sap.fe.core/test/sap/fe/core/designtime/apiref/api.json +1 -1
  376. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jsmeta.json +1 -1
  377. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.jstemplates.json +1 -1
  378. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.xmlmeta.json +1 -1
  379. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/model/MacroNavigationModel.js +59 -0
  380. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldDisplay/localService/RootEntity.json +1 -1
  381. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/Component.js +33 -0
  382. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.controller.js +34 -0
  383. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/FieldMessages.view.xml +18 -0
  384. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/Entities.json +6 -0
  385. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/localService/service.cds +6 -0
  386. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/field/fieldMessages/manifest.json +68 -0
  387. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/fieldMessages.html +37 -0
  388. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/filterBar/filterBarSVandAnnotationDefaults/FilterBarSVandAnnotationDefaults.controller.js +1 -0
  389. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.controller.js +7 -2
  390. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/Page.view.xml +9 -3
  391. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.js +23 -0
  392. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/RootEntity.ts +11 -0
  393. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableCustoms/localService/service.cds +11 -23
  394. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/Component.js +40 -0
  395. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.controller.js +35 -0
  396. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/TableMessages.view.xml +21 -0
  397. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/RootEntity.json +82 -0
  398. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/localService/service.cds +82 -0
  399. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/table/tableMessages/manifest.json +78 -0
  400. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/tableMessages.html +37 -0
  401. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/basicExtensibility/localService/ChildEntity.json +5 -4
  402. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/manifest.json +3 -0
  403. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/view/App.view.xml +1 -1
  404. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.js +1 -169
  405. package/packages/sap.fe.core/test/sap/fe/core/jest/AnnotationHelper.spec.ts +0 -212
  406. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.js +2305 -119
  407. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.ts +2206 -67
  408. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.js +40 -0
  409. package/packages/sap.fe.core/test/sap/fe/core/jest/FilterUtils.spec.ts +34 -0
  410. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.js +114 -0
  411. package/packages/sap.fe.core/test/sap/fe/core/jest/FlexibleColumnLayout.spec.ts +114 -0
  412. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.js +113 -0
  413. package/packages/sap.fe.core/test/sap/fe/core/jest/Paginators.spec.ts +78 -0
  414. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.js +599 -1
  415. package/packages/sap.fe.core/test/sap/fe/core/jest/RouterProxy.spec.ts +614 -0
  416. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.js +23 -5
  417. package/packages/sap.fe.core/test/sap/fe/core/jest/TemplateConverter.spec.ts +26 -14
  418. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.js +87 -1
  419. package/packages/sap.fe.core/test/sap/fe/core/jest/TransactionHelper.spec.ts +82 -1
  420. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.js +124 -0
  421. package/packages/sap.fe.core/test/sap/fe/core/jest/VisualFilterUtils.spec.ts +141 -0
  422. package/packages/sap.fe.core/test/sap/fe/core/jest/__snapshots__/TemplateConverter.spec.ts.snap +34768 -67
  423. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.js +170 -0
  424. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/ActivitySync.spec.ts +155 -0
  425. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.js +101 -0
  426. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/CollaborationCommon.spec.ts +94 -0
  427. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.js +82 -0
  428. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/collaboration/Manage.spec.ts +77 -0
  429. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.js +2 -2
  430. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/draft.spec.ts +1 -1
  431. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.js +7 -2
  432. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/messageHandling.spec.ts +7 -0
  433. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.js +104 -2
  434. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/operations.spec.ts +96 -1
  435. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.js +83 -0
  436. package/packages/sap.fe.core/test/sap/fe/core/jest/actions/sticky.spec.ts +79 -0
  437. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.js +72 -0
  438. package/packages/sap.fe.core/test/sap/fe/core/jest/appcomponent.spec.ts +64 -0
  439. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.js +619 -3
  440. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/EditFlow.spec.ts +668 -5
  441. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.js +297 -1
  442. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalEditFlow.spec.ts +276 -6
  443. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.js +149 -0
  444. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalIntentBasedNavigation.spec.ts +142 -0
  445. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.js +776 -182
  446. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/InternalRouting.spec.ts +181 -3
  447. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/KPIManagement.spec.js +19 -43
  448. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.js +2 -18
  449. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MassEdit.spec.ts +8 -6
  450. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.js +5 -27
  451. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.ts +1 -1
  452. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.js +1 -1
  453. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Routing.spec.ts +1 -1
  454. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.js +86 -0
  455. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/Share.spec.ts +80 -0
  456. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.js +1 -1
  457. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/SideEffects.spec.ts +1 -1
  458. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.js +2 -18
  459. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.ts +1 -1
  460. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.js +45 -0
  461. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/DataLossOrDraftDiscardHandler.spec.ts +29 -0
  462. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.js +51 -1
  463. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/FilterBar.spec.ts +47 -1
  464. package/packages/sap.fe.core/test/sap/fe/core/jest/controls/__snapshots__/FilterBar.spec.ts.snap +3 -0
  465. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.js +2 -2
  466. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ConverterContext.spec.ts +1 -1
  467. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.js +25 -36
  468. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Filter.spec.ts +26 -36
  469. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.js +3 -3
  470. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/ListReportConverter.spec.ts +2 -2
  471. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.js +1 -1
  472. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/MetaModelConverter.spec.ts +6 -5
  473. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.js +133 -9
  474. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.ts +171 -8
  475. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.js +174 -210
  476. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/TableStandardActions.spec.ts +294 -230
  477. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/__snapshots__/Filter.spec.ts.snap +3 -1
  478. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.js +237 -0
  479. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Chart.spec.ts +246 -0
  480. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.js +9993 -0
  481. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/DataVisualization.spec.ts +11352 -0
  482. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.js +460 -0
  483. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/Table.spec.ts +543 -0
  484. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.js +616 -0
  485. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/TableAnalytics.spec.ts +711 -0
  486. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/controls/manifest.json +887 -0
  487. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.js +393 -0
  488. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/objectPage/HeaderAndFooterAction.spec.ts +434 -0
  489. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.js +31 -0
  490. package/packages/sap.fe.core/test/sap/fe/core/jest/data/DataConverter.ts +12 -0
  491. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Filter.cds +27 -0
  492. package/packages/sap.fe.core/test/sap/fe/core/jest/data/MassEditHelper.cds +12 -0
  493. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/manifest.json +150 -0
  494. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata.xml +365 -0
  495. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_groupable_options.xml +96 -0
  496. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_textArrangement.xml +102 -0
  497. package/packages/sap.fe.core/test/sap/fe/core/jest/data/OKRA/metadata_withPV.xml +359 -0
  498. package/packages/sap.fe.core/test/sap/fe/core/jest/data/Table.cds +89 -27
  499. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.js +421 -0
  500. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TemplatingTestData.ts +413 -0
  501. package/packages/sap.fe.core/test/sap/fe/core/jest/data/aggregatedSD/metadata.xml +3767 -0
  502. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/manifest.json +185 -0
  503. package/packages/sap.fe.core/test/sap/fe/core/jest/data/dsr/metadata.xml +1534 -0
  504. package/packages/sap.fe.core/test/sap/fe/core/jest/data/manifest.json +887 -0
  505. package/packages/sap.fe.core/test/sap/fe/core/jest/data/salesOrderMetadata_qunit.xml +4995 -0
  506. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.js +48 -0
  507. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/CollaborationFormatters.spec.ts +48 -0
  508. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.js +131 -51
  509. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.ts +81 -31
  510. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.js +13 -7
  511. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/AppStartupHelper.spec.ts +12 -6
  512. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.js +17 -3
  513. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/MassEditHelper.spec.ts +24 -7
  514. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.js +61 -1
  515. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.ts +59 -0
  516. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.js +3 -3
  517. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/PasteHelper.spec.ts +1 -2
  518. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.js +4 -4
  519. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/SemanticDateOperators.spec.ts +6 -3
  520. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.js +1 -1
  521. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/StableIdHelper.spec.ts +1 -1
  522. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/AppStartupHelper.spec.ts.snap +19 -0
  523. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/__snapshots__/MassEditHelper.spec.ts.snap +0 -73
  524. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.js +11 -1
  525. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/ChangePageConfiguration.spec.ts +15 -0
  526. package/packages/sap.fe.core/test/sap/fe/core/jest/manifestmerger/__snapshots__/ChangePageConfiguration.spec.ts.snap +30 -0
  527. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.js +49 -5
  528. package/packages/sap.fe.core/test/sap/fe/core/jest/services/SideEffectsService.spec.ts +60 -5
  529. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.js +384 -0
  530. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/DataModelPathHelper.spec.ts +427 -0
  531. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.js +132 -2
  532. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/PropertyHelper.spec.ts +156 -2
  533. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.js +273 -0
  534. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/UIFormatters.spec.ts +402 -0
  535. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.js +45 -0
  536. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/ValueHelpTemplating.spec.ts +40 -0
  537. package/packages/sap.fe.core/test/sap/fe/core/qunit/TemplatingExpressions.qunit.js +2 -1
  538. package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/generalTests.json +0 -102
  539. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.100.json +326 -0
  540. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.99.json +0 -22
  541. package/packages/sap.fe.macros/src/sap/fe/macros/.library +1 -1
  542. package/packages/sap.fe.macros/src/sap/fe/macros/.theming +1 -1
  543. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata-dbg.js +2 -2
  544. package/packages/sap.fe.macros/src/sap/fe/macros/Chart.metadata.js +1 -1
  545. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI-dbg.js +22 -43
  546. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.js +1 -1
  547. package/packages/sap.fe.macros/src/sap/fe/macros/ChartAPI.ts +3 -3
  548. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate-dbg.js +14 -24
  549. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate.js +1 -1
  550. package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper-dbg.js +1 -1
  551. package/packages/sap.fe.macros/src/sap/fe/macros/DraftIndicator.fragment.xml +3 -2
  552. package/packages/sap.fe.macros/src/sap/fe/macros/Field.fragment.xml +16 -18
  553. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI-dbg.js +162 -100
  554. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.js +1 -1
  555. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.ts +93 -16
  556. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.fragment.xml +2 -1
  557. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata-dbg.js +16 -8
  558. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBar.metadata.js +1 -1
  559. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI-dbg.js +58 -83
  560. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.js +1 -1
  561. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.ts +16 -2
  562. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate-dbg.js +112 -192
  563. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate.js +1 -1
  564. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata-dbg.js +1 -1
  565. package/packages/sap.fe.macros/src/sap/fe/macros/Form.metadata.js +1 -1
  566. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI-dbg.js +4 -20
  567. package/packages/sap.fe.macros/src/sap/fe/macros/FormAPI.js +1 -1
  568. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.fragment.xml +1 -1
  569. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI-dbg.js +10 -31
  570. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainerAPI.js +1 -1
  571. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI-dbg.js +147 -162
  572. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.js +1 -1
  573. package/packages/sap.fe.macros/src/sap/fe/macros/MacroAPI.ts +32 -8
  574. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata-dbg.js +5 -0
  575. package/packages/sap.fe.macros/src/sap/fe/macros/MacroMetadata.js +1 -1
  576. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil-dbg.js +56 -74
  577. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil.js +1 -1
  578. package/packages/sap.fe.macros/src/sap/fe/macros/Table.fragment.xml +1 -1
  579. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata-dbg.js +90 -39
  580. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata.js +1 -1
  581. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI-dbg.js +284 -251
  582. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.js +1 -1
  583. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.ts +126 -14
  584. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper-dbg.js +38 -101
  585. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper.js +1 -1
  586. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime-dbg.js +68 -6
  587. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime.js +1 -1
  588. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating-dbg.js +72 -12
  589. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.js +1 -1
  590. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.ts +67 -10
  591. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate-dbg.js +5 -12
  592. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate.js +1 -1
  593. package/packages/sap.fe.macros/src/sap/fe/macros/filter/DraftEditState.fragment.xml +1 -1
  594. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper-dbg.js +1 -3
  595. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterFieldHelper.js +1 -1
  596. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils-dbg.js +62 -39
  597. package/packages/sap.fe.macros/src/sap/fe/macros/filter/FilterUtils.js +1 -1
  598. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue-dbg.js +104 -50
  599. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.js +2 -3
  600. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/MultiValue.ts +68 -0
  601. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range-dbg.js +83 -35
  602. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.js +2 -3
  603. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Range.ts +66 -0
  604. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value-dbg.js +327 -216
  605. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.js +2 -3
  606. package/packages/sap.fe.macros/src/sap/fe/macros/filter/type/Value.ts +303 -0
  607. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollaborationAvatar.fragment.xml +15 -0
  608. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata-dbg.js +14 -2
  609. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.js +1 -1
  610. package/packages/sap.fe.macros/src/sap/fe/macros/internal/CollectionField.metadata.ts +18 -2
  611. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.fragment.xml +12 -29
  612. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata-dbg.js +9 -0
  613. package/packages/sap.fe.macros/src/sap/fe/macros/internal/DataPoint.metadata.js +1 -1
  614. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.fragment.xml +1 -0
  615. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata-dbg.js +529 -533
  616. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.js +2 -3
  617. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.metadata.ts +568 -0
  618. package/packages/sap.fe.macros/src/sap/fe/macros/internal/FilterField.fragment.xml +0 -1
  619. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator-dbg.js +3 -3
  620. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.js +1 -1
  621. package/packages/sap.fe.macros/src/sap/fe/macros/internal/SituationsIndicator.ts +3 -2
  622. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldContent.fragment.xml +3 -1
  623. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldStructure.fragment.xml +13 -3
  624. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/DataPoint.fragment.xml +4 -1
  625. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ExpandableText.fragment.xml +1 -0
  626. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LabelSemanticKey.fragment.xml +1 -0
  627. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Link.fragment.xml +38 -4
  628. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWithQuickViewForm.fragment.xml +2 -2
  629. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/LinkWrapper.fragment.xml +3 -3
  630. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/MdcFieldWithValueHelp.fragment.xml +1 -2
  631. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/ObjectIdentifier.fragment.xml +55 -11
  632. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/SemanticKeyWithDraftIndicator.fragment.xml +1 -1
  633. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/displayStyle/Text.fragment.xml +3 -3
  634. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DatePicker.fragment.xml +9 -2
  635. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/DateTimePicker.fragment.xml +9 -2
  636. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/Input.fragment.xml +12 -3
  637. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithUnit.fragment.xml +26 -5
  638. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/InputWithValueHelp.fragment.xml +10 -2
  639. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/RatingIndicator.fragment.xml +9 -2
  640. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/TimePicker.fragment.xml +9 -2
  641. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/fragments/ObjectIdentifierContent.fragment.xml +4 -0
  642. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating-dbg.js +31 -2
  643. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +1 -1
  644. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +20 -0
  645. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime-dbg.js +2 -2
  646. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.js +1 -1
  647. package/packages/sap.fe.macros/src/sap/fe/macros/internal/situations/Runtime.ts +7 -9
  648. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper-dbg.js +90 -118
  649. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +1 -1
  650. package/packages/sap.fe.macros/src/sap/fe/macros/library-dbg.js +1 -1
  651. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js +13 -12
  652. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js.map +2 -2
  653. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js +185 -214
  654. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js.map +4 -4
  655. package/packages/sap.fe.macros/src/sap/fe/macros/library.js +1 -1
  656. package/packages/sap.fe.macros/src/sap/fe/macros/manifest.json +9 -9
  657. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle.properties +4 -1
  658. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ar.properties +3 -1
  659. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_bg.properties +3 -1
  660. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ca.properties +3 -1
  661. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cs.properties +3 -1
  662. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cy.properties +3 -1
  663. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_da.properties +3 -1
  664. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_de.properties +4 -2
  665. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_el.properties +3 -1
  666. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en.properties +3 -1
  667. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_GB.properties +3 -1
  668. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_sappsd.properties +3 -1
  669. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +3 -1
  670. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_saptrc.properties +3 -1
  671. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es.properties +3 -1
  672. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es_MX.properties +3 -1
  673. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_et.properties +3 -1
  674. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fi.properties +3 -1
  675. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr.properties +3 -1
  676. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr_CA.properties +3 -1
  677. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hi.properties +3 -1
  678. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hr.properties +3 -1
  679. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  680. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_id.properties +4 -2
  681. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_it.properties +3 -1
  682. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_iw.properties +3 -1
  683. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ja.properties +3 -1
  684. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_kk.properties +3 -1
  685. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ko.properties +3 -1
  686. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lt.properties +3 -1
  687. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lv.properties +3 -1
  688. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ms.properties +3 -1
  689. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_nl.properties +3 -1
  690. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_no.properties +3 -1
  691. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pl.properties +3 -1
  692. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt.properties +3 -1
  693. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt_PT.properties +3 -1
  694. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ro.properties +3 -1
  695. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ru.properties +3 -1
  696. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sh.properties +3 -1
  697. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sk.properties +3 -1
  698. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sl.properties +3 -1
  699. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sv.properties +3 -1
  700. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_th.properties +3 -1
  701. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_tr.properties +3 -1
  702. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_uk.properties +3 -1
  703. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_vi.properties +3 -1
  704. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_CN.properties +3 -1
  705. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_TW.properties +3 -1
  706. package/packages/sap.fe.macros/src/sap/fe/macros/resources.json +273 -199
  707. package/packages/sap.fe.macros/src/sap/fe/macros/table/Actions.fragment.xml +1 -1
  708. package/packages/sap.fe.macros/src/sap/fe/macros/table/Column.fragment.xml +1 -1
  709. package/packages/sap.fe.macros/src/sap/fe/macros/table/ColumnContent.fragment.xml +2 -0
  710. package/packages/sap.fe.macros/src/sap/fe/macros/table/CreationRow.fragment.xml +13 -20
  711. package/packages/sap.fe.macros/src/sap/fe/macros/table/CustomColumn.fragment.xml +1 -0
  712. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper-dbg.js +5 -110
  713. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper.js +1 -1
  714. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate-dbg.js +98 -78
  715. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -1
  716. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata-dbg.js +1 -1
  717. package/packages/sap.fe.macros/src/sap/fe/macros/valuehelp/ValueHelpFilterBar.metadata.js +1 -1
  718. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/api.json +211 -10
  719. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/apiref/api.json +1 -1
  720. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.jsmeta.json +1 -1
  721. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.xmlmeta.json +1 -1
  722. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.js +1 -45
  723. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.ts +0 -60
  724. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.js +78 -0
  725. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldAPI.spec.ts +71 -0
  726. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.js +35 -1
  727. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.ts +44 -0
  728. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarDelegate.spec.js +0 -76
  729. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.js +27 -1
  730. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterBarMacro.spec.ts +28 -0
  731. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.js +10 -12
  732. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterFieldHelper.spec.ts +10 -10
  733. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FilterUtils.spec.js +129 -15
  734. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.js +13 -39
  735. package/packages/sap.fe.macros/test/sap/fe/macros/jest/MacroAPI.spec.ts +2 -2
  736. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.js +119 -0
  737. package/packages/sap.fe.macros/test/sap/fe/macros/jest/RetrieveTextFromValueList.spec.ts +113 -0
  738. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.js +166 -2
  739. package/packages/sap.fe.macros/test/sap/fe/macros/jest/Table.spec.ts +190 -3
  740. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.js +457 -389
  741. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableAPI.spec.ts +504 -425
  742. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.js +104 -2
  743. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableMacro.spec.ts +158 -1
  744. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/ChartDelegate.spec.ts.snap +0 -6
  745. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/DatapointMacro.spec.ts.snap +5 -5
  746. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroDataFieldTypes.spec.ts.snap +114 -25
  747. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithSemanticKey.spec.ts.snap +40 -40
  748. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroWithValueHelp.spec.ts.snap +4 -8
  749. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterBarMacro.spec.ts.snap +19 -19
  750. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FilterField.spec.ts.snap +3 -5
  751. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/QuickViewForm.spec.ts.snap +12 -0
  752. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/SimpleFieldMacro.spec.ts.snap +89 -90
  753. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/Table.spec.ts.snap +1314 -58
  754. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/TableMacro.spec.ts.snap +459 -0
  755. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldMacroDataFieldTypes.cds +18 -2
  756. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/QuickViewForm.cds +6 -1
  757. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/Table.cds +107 -106
  758. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/TableAPI.cds +197 -0
  759. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.js +33 -4
  760. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.ts +30 -4
  761. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.js +72 -29
  762. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldTemplating.spec.ts +86 -18
  763. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/__snapshots__/columnWidth.spec.ts.snap +51 -27
  764. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.js +55 -9
  765. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/columnWidth.spec.ts +46 -6
  766. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/data/columnWidth.cds +28 -1
  767. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.js +170 -43
  768. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.ts +131 -15
  769. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/__snapshots__/TableDelegate.spec.ts.snap +90 -53
  770. package/packages/sap.fe.macros/test/sap/fe/macros/jest/tsx/TestTSX.spec.tsx +2 -1
  771. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/index.json +0 -5
  772. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldHelper.qunit.js +1 -99
  773. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormElementTemplating.qunit.js +1 -1
  774. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/MacroMetadata.qunit.js +4 -4
  775. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableHelper.qunit.js +4 -4
  776. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueHelpTemplating.qunit.js +15 -0
  777. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/ValueListHelper.qunit.js +265 -106
  778. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/metadata/simpleMetadata.js +38 -0
  779. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.100.json +372 -0
  780. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.99.json +0 -11
  781. package/packages/sap.fe.navigation/src/sap/fe/navigation/.library +1 -1
  782. package/packages/sap.fe.navigation/src/sap/fe/navigation/.theming +1 -1
  783. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-dbg.js +1 -1
  784. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js +2 -2
  785. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js.map +2 -2
  786. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js +2 -2
  787. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js.map +2 -2
  788. package/packages/sap.fe.navigation/src/sap/fe/navigation/library.js +1 -1
  789. package/packages/sap.fe.navigation/src/sap/fe/navigation/manifest.json +3 -3
  790. package/packages/sap.fe.navigation/src/sap/fe/navigation/resources.json +8 -8
  791. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/api.json +1 -1
  792. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/apiref/api.json +1 -1
  793. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.xmlmeta.json +1 -1
  794. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.library +1 -1
  795. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.theming +1 -1
  796. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-dbg.js +1 -1
  797. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js +2 -2
  798. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js.map +2 -2
  799. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js +2 -2
  800. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js.map +2 -2
  801. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library.js +1 -1
  802. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/manifest.json +3 -3
  803. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/resources.json +27 -27
  804. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/css_variables.source.less +316 -15
  805. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/base/resources.json +1 -1
  806. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.less +315 -14
  807. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/css_variables.source.less +315 -14
  808. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize/resources.json +2 -2
  809. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.less +316 -15
  810. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/css_variables.source.less +316 -15
  811. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcb/resources.json +2 -2
  812. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.less +316 -15
  813. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/css_variables.source.less +316 -15
  814. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_hcw/resources.json +2 -2
  815. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.less +315 -14
  816. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/css_variables.source.less +315 -14
  817. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_belize_plus/resources.json +2 -2
  818. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.less +317 -16
  819. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/css_variables.source.less +317 -16
  820. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3/resources.json +2 -2
  821. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.less +317 -16
  822. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/css_variables.source.less +317 -16
  823. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_dark/resources.json +2 -2
  824. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.less +316 -15
  825. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/css_variables.source.less +316 -15
  826. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcb/resources.json +2 -2
  827. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.less +316 -15
  828. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/css_variables.source.less +316 -15
  829. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_fiori_3_hcw/resources.json +2 -2
  830. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.less +400 -99
  831. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/css_variables.source.less +400 -99
  832. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/themes/sap_horizon/resources.json +2 -2
  833. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/api.json +1 -1
  834. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/apiref/api.json +1 -1
  835. package/packages/sap.fe.templates/src/sap/fe/templates/.library +1 -1
  836. package/packages/sap.fe.templates/src/sap/fe/templates/.theming +1 -1
  837. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/manifest.json +2 -2
  838. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/resources.json +1 -1
  839. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent-dbg.js +1 -1
  840. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent.js +1 -1
  841. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component-dbg.js +7 -1
  842. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/Component.js +1 -1
  843. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReport.view.xml +22 -21
  844. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +13 -18
  845. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
  846. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/manifest.json +2 -2
  847. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/resources.json +7 -7
  848. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.xml +3 -3
  849. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper-dbg.js +50 -9
  850. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +1 -1
  851. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component-dbg.js +1 -12
  852. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component.js +1 -1
  853. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +5 -1
  854. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +50 -17
  855. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
  856. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +7 -1
  857. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +1 -1
  858. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox-dbg.designtime.js +3 -0
  859. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
  860. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/manifest.json +2 -2
  861. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/resources.json +19 -15
  862. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/CollaborationDraft.fragment.xml +36 -0
  863. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +1 -1
  864. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacet.fragment.xml +1 -0
  865. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderFacetCustomContainer.fragment.xml +1 -0
  866. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl-dbg.controller.js +3 -1
  867. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +1 -1
  868. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer-dbg.controller.js +3 -1
  869. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +1 -1
  870. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js +1 -1
  871. package/packages/sap.fe.templates/src/sap/fe/templates/designtime/library-preload.designtime.js.map +2 -2
  872. package/packages/sap.fe.templates/src/sap/fe/templates/library-dbg.js +1 -1
  873. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js +4 -3
  874. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js.map +2 -2
  875. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js +22 -21
  876. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js.map +4 -4
  877. package/packages/sap.fe.templates/src/sap/fe/templates/library.js +1 -1
  878. package/packages/sap.fe.templates/src/sap/fe/templates/manifest.json +14 -14
  879. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ar.properties +0 -15
  880. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_bg.properties +0 -15
  881. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ca.properties +0 -15
  882. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cs.properties +0 -15
  883. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_cy.properties +0 -15
  884. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_da.properties +0 -15
  885. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_de.properties +0 -15
  886. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_el.properties +0 -15
  887. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en.properties +0 -15
  888. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_GB.properties +0 -15
  889. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_sappsd.properties +0 -15
  890. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +0 -15
  891. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +0 -15
  892. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es.properties +0 -15
  893. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_es_MX.properties +0 -15
  894. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_et.properties +0 -15
  895. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fi.properties +0 -15
  896. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr.properties +0 -15
  897. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_fr_CA.properties +0 -15
  898. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hi.properties +0 -15
  899. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hr.properties +0 -15
  900. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_hu.properties +0 -15
  901. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_id.properties +0 -15
  902. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_it.properties +0 -15
  903. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_iw.properties +0 -15
  904. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ja.properties +0 -15
  905. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_kk.properties +0 -15
  906. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ko.properties +0 -15
  907. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lt.properties +0 -15
  908. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_lv.properties +0 -15
  909. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ms.properties +0 -15
  910. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_nl.properties +0 -15
  911. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_no.properties +0 -15
  912. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pl.properties +0 -15
  913. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt.properties +0 -15
  914. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_pt_PT.properties +0 -15
  915. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ro.properties +0 -15
  916. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_ru.properties +0 -15
  917. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sh.properties +0 -15
  918. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sk.properties +0 -15
  919. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sl.properties +0 -15
  920. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_sv.properties +0 -15
  921. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_th.properties +0 -15
  922. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_tr.properties +0 -15
  923. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_uk.properties +0 -15
  924. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_vi.properties +0 -15
  925. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_CN.properties +0 -15
  926. package/packages/sap.fe.templates/src/sap/fe/templates/messagebundle_zh_TW.properties +0 -15
  927. package/packages/sap.fe.templates/src/sap/fe/templates/resources.json +115 -89
  928. package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/manifest.json +1 -1
  929. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/api.json +353 -1
  930. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/apiref/api.json +1 -1
  931. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.jsmeta.json +1 -1
  932. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.xmlmeta.json +1 -1
  933. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.js +1 -1
  934. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/IntentBasedNavigation.spec.ts +3 -3
  935. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.js +1 -1
  936. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/Share.spec.ts +4 -4
  937. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.js +1 -1
  938. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ListReport/overrides/ViewState.spec.ts +2 -2
  939. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.js +2 -1
  940. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.ts +2 -1
  941. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/__snapshots__/HeaderFacet.spec.ts.snap +7 -7
  942. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.js +30 -61
  943. package/packages/sap.fe.templates/test/sap/fe/templates/jest/RootContainer/RootContainerBaseController.spec.ts +1 -1
  944. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.100.json +192 -0
  945. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.99.json +0 -11
  946. package/packages/sap.fe.test/src/sap/fe/test/.library +1 -1
  947. package/packages/sap.fe.test/src/sap/fe/test/.theming +1 -1
  948. package/packages/sap.fe.test/src/sap/fe/test/FeMocks-dbg.js +1 -1
  949. package/packages/sap.fe.test/src/sap/fe/test/FeMocks.ts +8 -8
  950. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper-dbg.js +6 -4
  951. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.js +1 -1
  952. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.ts +10 -6
  953. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper-dbg.js +126 -203
  954. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.js +1 -1
  955. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.ts +17 -2
  956. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI-dbg.js +9 -1
  957. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarAPI.js +1 -1
  958. package/packages/sap.fe.test/src/sap/fe/test/library-dbg.js +1 -1
  959. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js +2 -2
  960. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js.map +2 -2
  961. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js +9 -18
  962. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js.map +3 -3
  963. package/packages/sap.fe.test/src/sap/fe/test/library.js +1 -1
  964. package/packages/sap.fe.test/src/sap/fe/test/manifest.json +3 -3
  965. package/packages/sap.fe.test/src/sap/fe/test/resources.json +18 -18
  966. package/packages/sap.fe.test/test/sap/fe/test/designtime/api.json +1 -1
  967. package/packages/sap.fe.test/test/sap/fe/test/designtime/apiref/api.json +1 -1
  968. package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.xmlmeta.json +1 -1
  969. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormTemplatingTs.qunit.js +0 -271
@@ -0,0 +1,616 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/core/converters/MetaModelConverter", "../../data/DataConverter", "sap/base/util/merge", "sap/fe/core/converters/controls/Common/Table", "sap/fe/core/converters/helpers/Aggregation", "sap/fe/core/converters/ConverterContext", "sap/fe/test/JestTemplatingHelper", "path"], function (MetaModelConverter, DataConverter, merge, Table, Aggregation, ConverterContext, JestTemplatingHelper, path) {
6
+ "use strict";
7
+
8
+ var getMetaModel = JestTemplatingHelper.getMetaModel;
9
+ var AggregationHelper = Aggregation.AggregationHelper;
10
+ var createTableVisualization = Table.createTableVisualization;
11
+ var getPageManifest = DataConverter.getPageManifest;
12
+ var getInvolvedDataModelObjects = MetaModelConverter.getInvolvedDataModelObjects;
13
+ var convertTypes = MetaModelConverter.convertTypes;
14
+
15
+ var converterOutput;
16
+ var metaModel;
17
+ var manifestSettings;
18
+ var converterContext;
19
+ var mockShellService = {
20
+ getContentDensity: function () {
21
+ return "not-a-correct-value";
22
+ }
23
+ };
24
+ var mockDiagnostics = {
25
+ addIssue: function (issueCategory, issueSeverity, details) {
26
+ console.log(details);
27
+ },
28
+ getIssues: function () {
29
+ return [];
30
+ },
31
+ checkIfIssueExists: function (issueCategory, issueSeverity, details, issueCategoryType, issueSubCategory) {
32
+ return false;
33
+ }
34
+ };
35
+ describe("Table Converter Unit Tests with Analytics", function () {
36
+ beforeEach(function () {
37
+ return getMetaModel(path.join(__dirname, "../../data/OKRA/metadata.xml")).then(function (oMetaModel) {
38
+ metaModel = oMetaModel;
39
+ return convertTypes(oMetaModel);
40
+ }).then(function (_converterOutput) {
41
+ converterOutput = _converterOutput;
42
+ manifestSettings = getPageManifest("test/sap/fe/core/jest/data/OKRA/manifest.json", "BusinessPartnersList");
43
+ converterContext = new ConverterContext(converterOutput, manifestSettings, mockDiagnostics, merge, getInvolvedDataModelObjects(metaModel.createBindingContext("/BusinessPartners")));
44
+ });
45
+ });
46
+ test("- groupable properties from AggregationHelper", {
47
+ "references": [{
48
+ "type": "JIRA",
49
+ "ID": "FIORITECHP1-19161"
50
+ }]
51
+ }, function () {
52
+ var entityType = converterContext.getEntityType();
53
+ var aggregationHelper = new AggregationHelper(entityType, converterContext);
54
+ var expectedGroupable = {
55
+ "Id": false,
56
+ "Name": true,
57
+ "Country": true,
58
+ "Region": true,
59
+ "Segment": true,
60
+ "Industry": false,
61
+ "AccountResponsible": true,
62
+ "SalesNumber": false,
63
+ "SalesAmount": false,
64
+ "SalesAmountLocalCurrency": false,
65
+ "AmountPerSale": false,
66
+ "Currency": true,
67
+ "LocalCurrency": true,
68
+ "SalesQuantity": false,
69
+ "QuantityUnit": true,
70
+ "myMessages": false,
71
+ "CountryVisibility": false,
72
+ "Country_Code": false,
73
+ "ReferencedCustomerId": false
74
+ };
75
+ entityType.entityProperties.forEach(function (property) {
76
+ expect(aggregationHelper.isPropertyGroupable(property)).toEqual(expectedGroupable[property.name]); //"check if property " + property.name + " is groupable"
77
+ });
78
+ });
79
+ test("- aggregatable properties from AggregationHelper", {
80
+ "references": [{
81
+ "type": "JIRA",
82
+ "ID": "FIORITECHP1-21270"
83
+ }]
84
+ }, function () {
85
+ var entityType = converterContext.getEntityType();
86
+ var aggregationHelper = new AggregationHelper(entityType, converterContext);
87
+ var expectedAggregatable = {
88
+ "Id": false,
89
+ "Name": false,
90
+ "Country": false,
91
+ "Region": false,
92
+ "Segment": false,
93
+ "Industry": false,
94
+ "AccountResponsible": false,
95
+ "SalesNumber": true,
96
+ "SalesAmount": false,
97
+ "SalesAmountLocalCurrency": true,
98
+ "AmountPerSale": true,
99
+ "Currency": true,
100
+ "LocalCurrency": true,
101
+ "SalesQuantity": true,
102
+ "QuantityUnit": false,
103
+ "myMessages": false,
104
+ "CountryVisibility": false,
105
+ "Country_Code": false,
106
+ "ReferencedCustomerId": false
107
+ };
108
+ entityType.entityProperties.forEach(function (property) {
109
+ expect(aggregationHelper.isPropertyAggregatable(property)).toEqual(expectedAggregatable[property.name]); //"check if property " + property.name + " is aggregatable"
110
+ });
111
+ });
112
+ test("- custom aggregations from AggregationHelper", {
113
+ "references": [{
114
+ "type": "JIRA",
115
+ "ID": "FIORITECHP1-19161"
116
+ }]
117
+ }, function () {
118
+ var entityType = converterContext.getEntityType();
119
+ var aggregationHelper = new AggregationHelper(entityType, converterContext);
120
+ var expectedAggregates = {
121
+ "SalesAmountLocalCurrency": ["LocalCurrency"],
122
+ "AmountPerSale": ["Currency"],
123
+ "SalesNumber": [],
124
+ "SalesQuantity": [],
125
+ "Currency": [],
126
+ "LocalCurrency": []
127
+ };
128
+ var aggregationAnnotations = aggregationHelper.getCustomAggregateDefinitions();
129
+ var aggregates = {};
130
+ aggregationAnnotations.forEach(function (annotation) {
131
+ var oAggregatedProperty = aggregationHelper._entityType.entityProperties.find(function (oProperty) {
132
+ return oProperty.name === annotation.qualifier;
133
+ });
134
+
135
+ if (oAggregatedProperty) {
136
+ var _annotation$annotatio, _annotation$annotatio2;
137
+
138
+ var aContextDefiningProperties = (_annotation$annotatio = annotation.annotations) === null || _annotation$annotatio === void 0 ? void 0 : (_annotation$annotatio2 = _annotation$annotatio.Aggregation) === null || _annotation$annotatio2 === void 0 ? void 0 : _annotation$annotatio2.ContextDefiningProperties;
139
+ aggregates[oAggregatedProperty.name] = aContextDefiningProperties ? aContextDefiningProperties.map(function (oCtxDefProperty) {
140
+ return oCtxDefProperty.value;
141
+ }) : [];
142
+ }
143
+ });
144
+ expect(Object.keys(aggregates).length).toEqual(Object.keys(expectedAggregates).length); //, "Correct number of custom aggregates");
145
+
146
+ Object.keys(aggregates).forEach(function (aggregateKey) {
147
+ expect(aggregates[aggregateKey]).toEqual(expectedAggregates[aggregateKey]); //"Check aggregate " + aggregateKey + " and context-defining properties"
148
+ });
149
+ });
150
+ test("- Column properties", {
151
+ "references": [{
152
+ "type": "JIRA",
153
+ "ID": "FIORITECHP1-19161"
154
+ }]
155
+ }, function () {
156
+ var resolvedTarget = converterContext.getEntityTypeAnnotation("@com.sap.vocabularies.UI.v1.LineItem");
157
+ var lineItem = resolvedTarget.annotation;
158
+ var visualization = createTableVisualization(lineItem, "@com.sap.vocabularies.UI.v1.LineItem", converterContext);
159
+ var aColumns = visualization.columns; // Check on key properties
160
+
161
+ var aKeyProperties = aColumns.filter(function (column) {
162
+ return column.isKey;
163
+ }).map(function (column) {
164
+ return column.relativePath;
165
+ });
166
+ expect(aKeyProperties).toEqual(["Id"]); //, "Check on key properties");
167
+ // Check on groupable properties
168
+
169
+ var aGroupableProperties = aColumns.filter(function (column) {
170
+ return column.isGroupable && !column.propertyInfos;
171
+ }).map(function (column) {
172
+ return column.relativePath;
173
+ });
174
+ var aExpectedGroupableProperties = ["Name", "Country", "Region", "Segment", "AccountResponsible", "Currency", "LocalCurrency", "QuantityUnit"];
175
+ expect(aGroupableProperties.length).toEqual(aExpectedGroupableProperties.length); // , "Check number of groupable properties");
176
+
177
+ aGroupableProperties.forEach(function (sPropName) {
178
+ expect(aExpectedGroupableProperties.indexOf(sPropName)).not.toEqual(-1); // , "Checking " + sPropName + " is groupable");
179
+ }); // Check on units/currencies
180
+
181
+ var aColumnsWithUnits = aColumns.filter(function (column) {
182
+ return column.unit !== undefined;
183
+ }).map(function (column) {
184
+ return {
185
+ path: column.relativePath,
186
+ unit: column.unit
187
+ };
188
+ });
189
+ var aExpectColumnsWithUnits = [{
190
+ path: "SalesAmount",
191
+ unit: "Property::Currency"
192
+ }, {
193
+ path: "SalesAmountLocalCurrency",
194
+ unit: "LocalCurrency"
195
+ }, {
196
+ path: "AmountPerSale",
197
+ unit: "Property::Currency"
198
+ }, {
199
+ path: "SalesQuantity",
200
+ unit: "QuantityUnit"
201
+ }];
202
+ expect(aColumnsWithUnits.length).toEqual(aExpectColumnsWithUnits.length); // , "Check number of properties with units");
203
+
204
+ aColumnsWithUnits.forEach(function (oColumn) {
205
+ var oExpected = aExpectColumnsWithUnits.find(function (oExpectedColumn) {
206
+ return oExpectedColumn.path === oColumn.path;
207
+ });
208
+ expect(oExpected).not.toEqual(undefined); // );
209
+
210
+ expect(oColumn.unit).toEqual(oExpected === null || oExpected === void 0 ? void 0 : oExpected.unit); // , "Checking " + oColumn.path + " has proper unit");
211
+ }); // Check on aggregates
212
+
213
+ var expectedAggregates = {
214
+ "Property::SalesAmountLocalCurrency": {
215
+ defaultAggregate: {
216
+ contextDefiningProperties: ["LocalCurrency"]
217
+ },
218
+ relativePath: "SalesAmountLocalCurrency"
219
+ },
220
+ "Property::AmountPerSale": {
221
+ defaultAggregate: {
222
+ contextDefiningProperties: ["Property::Currency"]
223
+ },
224
+ "relativePath": "AmountPerSale"
225
+ },
226
+ "Property::SalesNumber": {
227
+ defaultAggregate: {},
228
+ relativePath: "SalesNumber"
229
+ },
230
+ "Property::SalesQuantity": {
231
+ defaultAggregate: {},
232
+ "relativePath": "SalesQuantity"
233
+ }
234
+ };
235
+ var aggregates = visualization.aggregates || {};
236
+ expect(Object.keys(aggregates).length).toEqual(Object.keys(expectedAggregates).length); //, "Correct number of custom aggregates");
237
+
238
+ Object.keys(aggregates).forEach(function (aggregateKey) {
239
+ expect(aggregates[aggregateKey]).toEqual(expectedAggregates[aggregateKey]); //"Check aggregate " + aggregateKey + " and context-defining properties"
240
+ }); // Check initial aggregates/groups
241
+
242
+ expect(visualization.annotation.groupConditions).toEqual(undefined); // , "No visual groupings by default");
243
+
244
+ expect(visualization.annotation.aggregateConditions).toEqual(undefined); // , "No aggregates by default");
245
+ });
246
+ });
247
+ describe("Table Converter Unit Tests with Analytics - Personalization settings:", function () {
248
+ beforeEach(function () {
249
+ return getMetaModel(path.join(__dirname, "../../data/OKRA/metadata.xml")).then(function (oMetaModel) {
250
+ metaModel = oMetaModel;
251
+ return convertTypes(oMetaModel);
252
+ }).then(function (_converterOutput) {
253
+ converterOutput = _converterOutput;
254
+ });
255
+ });
256
+ var aP13NTestData = [{
257
+ "desc": "default settings",
258
+ "options": {
259
+ "references": [{
260
+ "type": "JIRA",
261
+ "ID": "FIORITECHP1-19161"
262
+ }]
263
+ },
264
+ "personalization": undefined,
265
+ "groupEnabled": true,
266
+ "aggregateEnabled": true
267
+ }, {
268
+ "desc": "all settings",
269
+ "options": {
270
+ "references": [{
271
+ "type": "JIRA",
272
+ "ID": "FIORITECHP1-19161"
273
+ }]
274
+ },
275
+ "personalization": true,
276
+ "groupEnabled": true,
277
+ "aggregateEnabled": true
278
+ }, {
279
+ "desc": "group only",
280
+ "options": {
281
+ "references": [{
282
+ "type": "JIRA",
283
+ "ID": "FIORITECHP1-19161"
284
+ }]
285
+ },
286
+ "personalization": {
287
+ "group": true
288
+ },
289
+ "groupEnabled": true,
290
+ "aggregateEnabled": false
291
+ }, {
292
+ "desc": "aggregate only",
293
+ "options": {
294
+ "references": [{
295
+ "type": "JIRA",
296
+ "ID": "FIORITECHP1-19161"
297
+ }]
298
+ },
299
+ "personalization": {
300
+ "aggregate": true
301
+ },
302
+ "groupEnabled": false,
303
+ "aggregateEnabled": true
304
+ }, {
305
+ "desc": "group + aggregate",
306
+ "options": {
307
+ "references": [{
308
+ "type": "JIRA",
309
+ "ID": "FIORITECHP1-19161"
310
+ }]
311
+ },
312
+ "personalization": {
313
+ "group": true,
314
+ "aggregate": true
315
+ },
316
+ "groupEnabled": true,
317
+ "aggregateEnabled": true
318
+ }, {
319
+ "desc": "no group nor aggregate",
320
+ "options": {
321
+ "references": [{
322
+ "type": "JIRA",
323
+ "ID": "FIORITECHP1-19161"
324
+ }]
325
+ },
326
+ "personalization": {
327
+ sort: true
328
+ },
329
+ "groupEnabled": false,
330
+ "aggregateEnabled": false
331
+ }];
332
+ aP13NTestData.forEach(function (testData) {
333
+ test(testData.desc, testData.options, function () {
334
+ manifestSettings = getPageManifest("test/sap/fe/core/jest/data/OKRA/manifest.json", "BusinessPartnersList");
335
+ manifestSettings["controlConfiguration"]["@com.sap.vocabularies.UI.v1.LineItem"]["tableSettings"]["personalization"] = testData.personalization;
336
+ converterContext = new ConverterContext(converterOutput, manifestSettings, mockDiagnostics, merge, getInvolvedDataModelObjects(metaModel.createBindingContext("/BusinessPartners")));
337
+ var resolvedTarget = converterContext.getEntityTypeAnnotation("@com.sap.vocabularies.UI.v1.LineItem");
338
+ var lineItem = resolvedTarget.annotation;
339
+ var visualization = createTableVisualization(lineItem, "@com.sap.vocabularies.UI.v1.LineItem", converterContext);
340
+
341
+ if (testData.groupEnabled) {
342
+ var _visualization$annota;
343
+
344
+ expect((_visualization$annota = visualization.annotation.p13nMode) === null || _visualization$annota === void 0 ? void 0 : _visualization$annota.indexOf("Group")).not.toEqual(-1); // , "Group personalization is enabled");
345
+ } else {
346
+ var _visualization$annota2;
347
+
348
+ expect((_visualization$annota2 = visualization.annotation.p13nMode) === null || _visualization$annota2 === void 0 ? void 0 : _visualization$annota2.indexOf("Group")).toEqual(-1); // , "Group personalization is disabled");
349
+ }
350
+
351
+ if (testData.aggregateEnabled) {
352
+ var _visualization$annota3;
353
+
354
+ expect((_visualization$annota3 = visualization.annotation.p13nMode) === null || _visualization$annota3 === void 0 ? void 0 : _visualization$annota3.indexOf("Aggregate")).not.toEqual(-1); // , "Aggregate personalization is enabled");
355
+ } else {
356
+ var _visualization$annota4;
357
+
358
+ expect((_visualization$annota4 = visualization.annotation.p13nMode) === null || _visualization$annota4 === void 0 ? void 0 : _visualization$annota4.indexOf("Aggregate")).toEqual(-1); // , "Aggregate personalization is disabled");
359
+ }
360
+ });
361
+ });
362
+ });
363
+ describe("Table Converter Unit Tests with Presentation Variant", function () {
364
+ test("- Check default aggregates and visual groupings", function () {
365
+ return getMetaModel(path.join(__dirname, "../../data/OKRA/metadata_withPV.xml")).then(function (oMetaModel) {
366
+ metaModel = oMetaModel;
367
+ return convertTypes(oMetaModel);
368
+ }).then(function (_converterOutput) {
369
+ converterOutput = _converterOutput;
370
+ manifestSettings = getPageManifest("test/sap/fe/core/jest/data/OKRA/manifest.json", "BusinessPartnersList");
371
+ converterContext = new ConverterContext(converterOutput, manifestSettings, mockDiagnostics, merge, getInvolvedDataModelObjects(metaModel.createBindingContext("/BusinessPartners")));
372
+ var resolvedTarget = converterContext.getEntityTypeAnnotation("@com.sap.vocabularies.UI.v1.PresentationVariant");
373
+ var presentationVariant = resolvedTarget.annotation;
374
+ var lineItem = presentationVariant.Visualizations[0].$target;
375
+ var visualization = createTableVisualization(lineItem, "@com.sap.vocabularies.UI.v1.LineItem", converterContext, presentationVariant); // Check initial aggregates/groups
376
+
377
+ var expectedGroups = {
378
+ groupLevels: [{
379
+ name: "Property::Segment"
380
+ }, {
381
+ name: "Industry"
382
+ }]
383
+ };
384
+ var expectedAggregates = {
385
+ "Property::SalesAmount": {},
386
+ "Property::SalesAmountLocalCurrency": {}
387
+ };
388
+ expect(JSON.parse(visualization.annotation.groupConditions || "")).toEqual(expectedGroups); //"Check initial visual groupings"
389
+
390
+ expect(JSON.parse(visualization.annotation.aggregateConditions || "")).toEqual(expectedAggregates); // "Check initial aggregates"
391
+ });
392
+ });
393
+ });
394
+ describe("AggregationHelper Unit Tests for groupable properties", function () {
395
+ test("AggregationHelper Unit Tests for groupable properties - Different options to flag groupable props", {
396
+ "references": [{
397
+ "type": "JIRA",
398
+ "ID": "FIORITECHP1-19935"
399
+ }]
400
+ }, function () {
401
+ return getMetaModel(path.join(__dirname, "../../data/OKRA/metadata_groupable_options.xml")).then(function (oMetaModel) {
402
+ metaModel = oMetaModel;
403
+ return convertTypes(oMetaModel);
404
+ }).then(function (_converterOutput) {
405
+ converterOutput = _converterOutput;
406
+ manifestSettings = getPageManifest("test/sap/fe/core/jest/data/OKRA/manifest.json", "BusinessPartnersList");
407
+ var testData = [{
408
+ entitySet: "BusinessPartners",
409
+ expectedGroupable: {
410
+ "Id": false,
411
+ "Name": true,
412
+ "Country": true,
413
+ "Region": true,
414
+ "Segment": true,
415
+ "Industry": true
416
+ }
417
+ }, {
418
+ entitySet: "Customers"
419
+ }, {
420
+ entitySet: "Industries"
421
+ }]; //testData.forEach(oData => {
422
+
423
+ var _loop = function (I) {
424
+ var oData = testData[I];
425
+ converterContext = new ConverterContext(converterOutput, manifestSettings, mockDiagnostics, merge, getInvolvedDataModelObjects(metaModel.createBindingContext("/" + oData.entitySet)));
426
+ var entityType = converterContext.getEntityType();
427
+ var aggregationHelper = new AggregationHelper(entityType, converterContext);
428
+ entityType.entityProperties.forEach(function (property) {
429
+ expect(aggregationHelper.isPropertyGroupable(property)).toEqual(oData.expectedGroupable === undefined || oData.expectedGroupable[property.name]); //, oData.entitySet + ": check if property " + property.name + " is groupable");
430
+ });
431
+ };
432
+
433
+ for (var I = 0; I < testData.length; I++) {
434
+ _loop(I);
435
+ }
436
+ });
437
+ });
438
+ });
439
+ describe("Table Converter Unit Tests for groupheader format", function () {
440
+ test("- Check format info", function () {
441
+ return getMetaModel(path.join(__dirname, "../../data/OKRA/metadata_textArrangement.xml")).then(function (oMetaModel) {
442
+ metaModel = oMetaModel;
443
+ return convertTypes(oMetaModel);
444
+ }).then(function (_converterOutput) {
445
+ converterOutput = _converterOutput;
446
+ manifestSettings = getPageManifest("test/sap/fe/core/jest/data/OKRA/manifest.json", "BusinessPartnersList");
447
+ converterContext = new ConverterContext(converterOutput, manifestSettings, mockDiagnostics, merge, getInvolvedDataModelObjects(metaModel.createBindingContext("/BusinessPartners")));
448
+ var resolvedTarget = converterContext.getEntityTypeAnnotation("@com.sap.vocabularies.UI.v1.LineItem");
449
+ var lineItem = resolvedTarget.annotation;
450
+ var visualization = createTableVisualization(lineItem, "@com.sap.vocabularies.UI.v1.LineItem", converterContext);
451
+ var aColumns = visualization.columns;
452
+ var expectedFormatInfo = [{
453
+ path: "Country_Code1",
454
+ mode: "ValueDescription",
455
+ description: "Format for TextLast"
456
+ }, {
457
+ path: "Country_Code2",
458
+ mode: "DescriptionValue",
459
+ description: "Format for TextFirst"
460
+ }, {
461
+ path: "Country_Code3",
462
+ mode: "Description",
463
+ description: "Format for TextOnly"
464
+ }, {
465
+ path: "Country_Code4",
466
+ mode: undefined,
467
+ description: "Format for TextSeparate"
468
+ }, {
469
+ path: "Country_Code5",
470
+ mode: "DescriptionValue",
471
+ description: "Format for unspecified text arrangement"
472
+ }, {
473
+ path: "Country_Code6",
474
+ mode: undefined,
475
+ description: "Format when Common.Text isn't a path"
476
+ }];
477
+ expectedFormatInfo.forEach(function (info) {
478
+ var oColumn = aColumns.find(function (oCol) {
479
+ return !oCol.propertyInfos && oCol.relativePath === info.path;
480
+ });
481
+ expect(oColumn).not.toEqual(undefined); // , "Found related column for " + info.path);
482
+
483
+ if (info.mode) {
484
+ var _oColumn$textArrangem, _oColumn$textArrangem2;
485
+
486
+ expect(oColumn === null || oColumn === void 0 ? void 0 : oColumn.textArrangement).not.toEqual(undefined); // , "Column for " + info.path + " has a text arrangement info");
487
+
488
+ expect(oColumn === null || oColumn === void 0 ? void 0 : (_oColumn$textArrangem = oColumn.textArrangement) === null || _oColumn$textArrangem === void 0 ? void 0 : _oColumn$textArrangem.mode).toEqual(info.mode); // , "Check mode - " + info.description + " = " + info.mode);
489
+
490
+ expect(oColumn === null || oColumn === void 0 ? void 0 : (_oColumn$textArrangem2 = oColumn.textArrangement) === null || _oColumn$textArrangem2 === void 0 ? void 0 : _oColumn$textArrangem2.textProperty).toEqual("CountryDesc"); // , "Check text property");
491
+ } else {
492
+ expect(oColumn === null || oColumn === void 0 ? void 0 : oColumn.textArrangement).toEqual(undefined); // , "Check " + info.path + " has no text arrangement info (" + info.description + ")");
493
+ }
494
+ });
495
+ });
496
+ });
497
+ });
498
+ describe("Table Converter Unit Tests with Analytics service", function () {
499
+ beforeEach(function () {
500
+ return getMetaModel(path.join(__dirname, "../../data/OKRA/metadata.xml")).then(function (oMetaModel) {
501
+ metaModel = oMetaModel;
502
+ return convertTypes(oMetaModel);
503
+ }).then(function (_converterOutput) {
504
+ converterOutput = _converterOutput;
505
+ manifestSettings = getPageManifest("test/sap/fe/core/jest/data/OKRA/manifest.json", "BusinessPartnersList");
506
+ converterContext = new ConverterContext(converterOutput, manifestSettings, mockDiagnostics, merge, getInvolvedDataModelObjects(metaModel.createBindingContext("/BusinessPartners")));
507
+ });
508
+ });
509
+ test("- Column properties", {
510
+ "references": [{
511
+ "type": "JIRA",
512
+ "ID": "FIORITECHP1-19862"
513
+ }]
514
+ }, function () {
515
+ var resolvedTarget = converterContext.getEntityTypeAnnotation("@com.sap.vocabularies.UI.v1.LineItem");
516
+ var lineItem = resolvedTarget.annotation;
517
+ var visualization = createTableVisualization(lineItem, "@com.sap.vocabularies.UI.v1.LineItem", converterContext);
518
+ var aColumns = visualization.columns;
519
+ var actualResult = aColumns.filter(function (column) {
520
+ return column.additionalPropertyInfos;
521
+ }).map(function (col) {
522
+ return {
523
+ "key": col.key,
524
+ "additionalPropertyInfos": col.additionalPropertyInfos
525
+ };
526
+ });
527
+ var expectedResult = [{
528
+ "key": "DataField::Country",
529
+ "additionalPropertyInfos": ["CountryVisibility"]
530
+ }, {
531
+ "key": "DataField::Country_Code",
532
+ "additionalPropertyInfos": ["CountryVisibility"]
533
+ }, {
534
+ "key": "DataFieldForAnnotation::FieldGroup",
535
+ "additionalPropertyInfos": ["CountryVisibility"]
536
+ }, {
537
+ "key": "DataField::SalesAmount",
538
+ "additionalPropertyInfos": ["_Customer/SetSalesAmountHidden"]
539
+ }];
540
+ expect(actualResult).toEqual(expectedResult); //, "Table columns definition does not match the expectation");
541
+ });
542
+ });
543
+ describe("Table Converter Unit Tests with non-Analytics service", function () {
544
+ beforeEach(function () {
545
+ return getMetaModel(path.join(__dirname, "../../data/salesOrderMetadata_qunit.xml")).then(function (oMetaModel) {
546
+ metaModel = oMetaModel;
547
+ return convertTypes(oMetaModel);
548
+ }).then(function (_converterOutput) {
549
+ converterOutput = _converterOutput;
550
+ manifestSettings = getPageManifest("test/sap/fe/core/jest/data/manifest.json", "SalesOrderManageList");
551
+ converterContext = new ConverterContext(converterOutput, manifestSettings, mockDiagnostics, merge, getInvolvedDataModelObjects(metaModel.createBindingContext("/SalesOrderManage")));
552
+ });
553
+ });
554
+ test("Table Converter Unit Tests with non-Analytics - no groupable properties from AggregationHelper", function () {
555
+ var entityType = converterContext.getEntityType();
556
+ var aggregationHelper = new AggregationHelper(entityType, converterContext);
557
+ entityType.entityProperties.forEach(function (property) {
558
+ expect(aggregationHelper.isPropertyGroupable(property)).toEqual(undefined); // , "isPropertyGroupable shall be undefined for property " + property.name);
559
+ });
560
+ });
561
+ test("Table Converter Unit Tests with non-Analytics - no custom aggregations from AggregationHelper", function () {
562
+ var entityType = converterContext.getEntityType();
563
+ var aggregationHelper = new AggregationHelper(entityType, converterContext);
564
+ var aggregates = aggregationHelper.getCustomAggregateDefinitions();
565
+ expect(Object.keys(aggregates).length).toEqual(0); // , "No custom aggregates are defined");
566
+ });
567
+ test("Table Converter Unit Tests with non-Analytics - Column properties", function () {
568
+ var resolvedTarget = converterContext.getEntityTypeAnnotation("@com.sap.vocabularies.UI.v1.LineItem");
569
+ var lineItem = resolvedTarget.annotation;
570
+ var visualization = createTableVisualization(lineItem, "@com.sap.vocabularies.UI.v1.LineItem", converterContext);
571
+ var aColumns = visualization.columns; // Check on key properties
572
+
573
+ var aKeyProperties = aColumns.filter(function (column) {
574
+ return column.isKey;
575
+ }).map(function (column) {
576
+ return column.relativePath;
577
+ });
578
+ expect(aKeyProperties).toEqual(["IsActiveEntity", "ID"]); // "Check on key properties");
579
+ // Check on groupable properties
580
+
581
+ var aGroupableProperties = aColumns.filter(function (column) {
582
+ return column.isGroupable;
583
+ }).map(function (column) {
584
+ return column.relativePath;
585
+ });
586
+ expect(aGroupableProperties.length).toEqual(0); // , "No groupable properties");
587
+ // Check on units/currencies
588
+
589
+ var aColumnsWithUnits = aColumns.filter(function (column) {
590
+ return column.unit !== undefined;
591
+ }).map(function (column) {
592
+ return {
593
+ path: column.relativePath,
594
+ unit: column.unit
595
+ };
596
+ });
597
+ var aExpectColumnsWithUnits = [{
598
+ path: "TotalNetAmount",
599
+ unit: "TransactionCurrency"
600
+ }];
601
+ expect(aColumnsWithUnits.length).toEqual(aExpectColumnsWithUnits.length); // , "Check number of properties with units");
602
+
603
+ aColumnsWithUnits.forEach(function (oColumn) {
604
+ var oExpected = aExpectColumnsWithUnits.find(function (oExpectedColumn) {
605
+ return oExpectedColumn.path === oColumn.path;
606
+ });
607
+ expect(oExpected).not.toEqual(undefined); // );
608
+
609
+ expect(oColumn.unit).toEqual(oExpected === null || oExpected === void 0 ? void 0 : oExpected.unit); // , "Checking " + oColumn.path + " has proper unit");
610
+ }); // Check on aggregates
611
+
612
+ expect(visualization.aggregates).toEqual(undefined); // , "No aggregates are defined");
613
+ });
614
+ });
615
+ }, false);
616
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlQW5hbHl0aWNzLnNwZWMudHMiXSwibmFtZXMiOlsiY29udmVydGVyT3V0cHV0IiwibWV0YU1vZGVsIiwibWFuaWZlc3RTZXR0aW5ncyIsImNvbnZlcnRlckNvbnRleHQiLCJtb2NrU2hlbGxTZXJ2aWNlIiwiZ2V0Q29udGVudERlbnNpdHkiLCJtb2NrRGlhZ25vc3RpY3MiLCJhZGRJc3N1ZSIsImlzc3VlQ2F0ZWdvcnkiLCJpc3N1ZVNldmVyaXR5IiwiZGV0YWlscyIsImNvbnNvbGUiLCJsb2ciLCJnZXRJc3N1ZXMiLCJjaGVja0lmSXNzdWVFeGlzdHMiLCJpc3N1ZUNhdGVnb3J5VHlwZSIsImlzc3VlU3ViQ2F0ZWdvcnkiLCJkZXNjcmliZSIsImJlZm9yZUVhY2giLCJnZXRNZXRhTW9kZWwiLCJwYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsInRoZW4iLCJvTWV0YU1vZGVsIiwiY29udmVydFR5cGVzIiwiX2NvbnZlcnRlck91dHB1dCIsImdldFBhZ2VNYW5pZmVzdCIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwidGVzdCIsImVudGl0eVR5cGUiLCJnZXRFbnRpdHlUeXBlIiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImV4cGVjdGVkR3JvdXBhYmxlIiwiZW50aXR5UHJvcGVydGllcyIsImZvckVhY2giLCJwcm9wZXJ0eSIsImV4cGVjdCIsImlzUHJvcGVydHlHcm91cGFibGUiLCJ0b0VxdWFsIiwibmFtZSIsImV4cGVjdGVkQWdncmVnYXRhYmxlIiwiaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZSIsImV4cGVjdGVkQWdncmVnYXRlcyIsImFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImFnZ3JlZ2F0ZXMiLCJhbm5vdGF0aW9uIiwib0FnZ3JlZ2F0ZWRQcm9wZXJ0eSIsIl9lbnRpdHlUeXBlIiwiZmluZCIsIm9Qcm9wZXJ0eSIsInF1YWxpZmllciIsImFDb250ZXh0RGVmaW5pbmdQcm9wZXJ0aWVzIiwiYW5ub3RhdGlvbnMiLCJBZ2dyZWdhdGlvbiIsIkNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMiLCJtYXAiLCJvQ3R4RGVmUHJvcGVydHkiLCJ2YWx1ZSIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJhZ2dyZWdhdGVLZXkiLCJyZXNvbHZlZFRhcmdldCIsImdldEVudGl0eVR5cGVBbm5vdGF0aW9uIiwibGluZUl0ZW0iLCJ2aXN1YWxpemF0aW9uIiwiY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uIiwiYUNvbHVtbnMiLCJjb2x1bW5zIiwiYUtleVByb3BlcnRpZXMiLCJmaWx0ZXIiLCJjb2x1bW4iLCJpc0tleSIsInJlbGF0aXZlUGF0aCIsImFHcm91cGFibGVQcm9wZXJ0aWVzIiwiaXNHcm91cGFibGUiLCJwcm9wZXJ0eUluZm9zIiwiYUV4cGVjdGVkR3JvdXBhYmxlUHJvcGVydGllcyIsInNQcm9wTmFtZSIsImluZGV4T2YiLCJub3QiLCJhQ29sdW1uc1dpdGhVbml0cyIsInVuaXQiLCJ1bmRlZmluZWQiLCJhRXhwZWN0Q29sdW1uc1dpdGhVbml0cyIsIm9Db2x1bW4iLCJvRXhwZWN0ZWQiLCJvRXhwZWN0ZWRDb2x1bW4iLCJkZWZhdWx0QWdncmVnYXRlIiwiY29udGV4dERlZmluaW5nUHJvcGVydGllcyIsImdyb3VwQ29uZGl0aW9ucyIsImFnZ3JlZ2F0ZUNvbmRpdGlvbnMiLCJhUDEzTlRlc3REYXRhIiwic29ydCIsInRlc3REYXRhIiwiZGVzYyIsIm9wdGlvbnMiLCJwZXJzb25hbGl6YXRpb24iLCJncm91cEVuYWJsZWQiLCJwMTNuTW9kZSIsImFnZ3JlZ2F0ZUVuYWJsZWQiLCJwcmVzZW50YXRpb25WYXJpYW50IiwiVmlzdWFsaXphdGlvbnMiLCIkdGFyZ2V0IiwiZXhwZWN0ZWRHcm91cHMiLCJncm91cExldmVscyIsIkpTT04iLCJwYXJzZSIsImVudGl0eVNldCIsIkkiLCJvRGF0YSIsImV4cGVjdGVkRm9ybWF0SW5mbyIsIm1vZGUiLCJkZXNjcmlwdGlvbiIsImluZm8iLCJvQ29sIiwidGV4dEFycmFuZ2VtZW50IiwidGV4dFByb3BlcnR5IiwiYWN0dWFsUmVzdWx0IiwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3MiLCJjb2wiLCJrZXkiLCJleHBlY3RlZFJlc3VsdCJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUFhQSxNQUFJQSxlQUFKO0FBQ0EsTUFBSUMsU0FBSjtBQUNBLE1BQUlDLGdCQUFKO0FBQ0EsTUFBSUMsZ0JBQUo7QUFFQSxNQUFNQyxnQkFBcUIsR0FBRztBQUM3QkMsSUFBQUEsaUJBRDZCLGNBQ1Q7QUFDbkIsYUFBTyxxQkFBUDtBQUNBO0FBSDRCLEdBQTlCO0FBTUEsTUFBTUMsZUFBNkIsR0FBRztBQUNyQ0MsSUFBQUEsUUFEcUMsWUFDNUJDLGFBRDRCLEVBQ0VDLGFBREYsRUFDZ0NDLE9BRGhDLEVBQ3VEO0FBQzNGQyxNQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUYsT0FBWjtBQUNBLEtBSG9DO0FBSXJDRyxJQUFBQSxTQUpxQyxjQUlsQjtBQUNsQixhQUFPLEVBQVA7QUFDQSxLQU5vQztBQU9yQ0MsSUFBQUEsa0JBUHFDLFlBUXBDTixhQVJvQyxFQVNwQ0MsYUFUb0MsRUFVcENDLE9BVm9DLEVBV3BDSyxpQkFYb0MsRUFZcENDLGdCQVpvQyxFQWExQjtBQUNWLGFBQU8sS0FBUDtBQUNBO0FBZm9DLEdBQXRDO0FBa0JBQyxFQUFBQSxRQUFRLENBQUMsMkNBQUQsRUFBOEMsWUFBVztBQUNoRUMsSUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDaEIsYUFBT0MsWUFBWSxDQUFDQyxJQUFJLENBQUNDLElBQUwsQ0FBVUMsU0FBVixFQUFxQiw4QkFBckIsQ0FBRCxDQUFaLENBQ0xDLElBREssQ0FDQSxVQUFBQyxVQUFVLEVBQUk7QUFDbkJ2QixRQUFBQSxTQUFTLEdBQUd1QixVQUFaO0FBQ0EsZUFBT0MsWUFBWSxDQUFDRCxV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QUFDcEMsWUFBTUMsU0FBUyxHQUFHRix1QkFBdUIsQ0FBQ3BDLElBQXhCLENBQTZCLFVBQUF1QyxlQUFlLEVBQUk7QUFDakUsaUJBQU9BLGVBQWUsQ0FBQ3pFLElBQWhCLEtBQXlCdUUsT0FBTyxDQUFDdkUsSUFBeEM7QUFDQSxTQUZpQixDQUFsQjtBQUdBcUIsUUFBQUEsTUFBTSxDQUFDbUQsU0FBRCxDQUFOLENBQWtCTixHQUFsQixDQUFzQjNDLE9BQXRCLENBQThCOEMsU0FBOUIsRUFKb0MsQ0FJTTs7QUFDMUNoRCxRQUFBQSxNQUFNLENBQUNrRCxPQUFPLENBQUNILElBQVQsQ0FBTixDQUFxQjdDLE9BQXJCLENBQTZCaUQsU0FBN0IsYUFBNkJBLFNBQTdCLHVCQUE2QkEsU0FBUyxDQUFFSixJQUF4QyxFQUxvQyxDQUtXO0FBQy9DLE9BTkQsRUF0QitFLENBOEIvRTs7QUFDQS9DLE1BQUFBLE1BQU0sQ0FBQzhCLGFBQWEsQ0FBQ3JCLFVBQWYsQ0FBTixDQUFpQ1AsT0FBakMsQ0FBeUM4QyxTQUF6QyxFQS9CK0UsQ0ErQjFCO0FBQ3JELEtBaENHLENBQUo7QUFpQ0EsR0F0RU8sQ0FBUiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGluZUl0ZW0sIFByZXNlbnRhdGlvblZhcmlhbnRUeXBlVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB7IENvbnZlcnRlck91dHB1dCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRQYWdlTWFuaWZlc3QgfSBmcm9tIFwiLi4vLi4vZGF0YS9EYXRhQ29udmVydGVyXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbiwgQW5ub3RhdGlvblRhYmxlQ29sdW1uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHsgZ2V0TWV0YU1vZGVsIH0gZnJvbSBcInNhcC9mZS90ZXN0L0plc3RUZW1wbGF0aW5nSGVscGVyXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5sZXQgY29udmVydGVyT3V0cHV0OiBDb252ZXJ0ZXJPdXRwdXQ7XG5sZXQgbWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcbmxldCBtYW5pZmVzdFNldHRpbmdzOiBhbnk7XG5sZXQgY29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDtcblxuY29uc3QgbW9ja1NoZWxsU2VydmljZTogYW55ID0ge1xuXHRnZXRDb250ZW50RGVuc2l0eSgpIHtcblx0XHRyZXR1cm4gXCJub3QtYS1jb3JyZWN0LXZhbHVlXCI7XG5cdH1cbn07XG5cbmNvbnN0IG1vY2tEaWFnbm9zdGljczogSURpYWdub3N0aWNzID0ge1xuXHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zb2xlLmxvZyhkZXRhaWxzKTtcblx0fSxcblx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRyZXR1cm4gW107XG5cdH0sXG5cdGNoZWNrSWZJc3N1ZUV4aXN0cyhcblx0XHRpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LFxuXHRcdGlzc3VlU2V2ZXJpdHk6IElzc3VlU2V2ZXJpdHksXG5cdFx0ZGV0YWlsczogc3RyaW5nLFxuXHRcdGlzc3VlQ2F0ZWdvcnlUeXBlPzogYW55LFxuXHRcdGlzc3VlU3ViQ2F0ZWdvcnk/OiBzdHJpbmdcblx0KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5kZXNjcmliZShcIlRhYmxlIENvbnZlcnRlciBVbml0IFRlc3RzIHdpdGggQW5hbHl0aWNzXCIsIGZ1bmN0aW9uKCkge1xuXHRiZWZvcmVFYWNoKCgpID0+IHtcblx0XHRyZXR1cm4gZ2V0TWV0YU1vZGVsKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vLi4vZGF0YS9PS1JBL21ldGFkYXRhLnhtbFwiKSlcblx0XHRcdC50aGVuKG9NZXRhTW9kZWwgPT4ge1xuXHRcdFx0XHRtZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChfY29udmVydGVyT3V0cHV0OiBDb252ZXJ0ZXJPdXRwdXQpID0+IHtcblx0XHRcdFx0Y29udmVydGVyT3V0cHV0ID0gX2NvbnZlcnRlck91dHB1dDtcblx0XHRcdFx0bWFuaWZlc3RTZXR0aW5ncyA9IGdldFBhZ2VNYW5pZmVzdChcInRlc3Qvc2FwL2ZlL2NvcmUvamVzdC9kYXRhL09LUkEvbWFuaWZlc3QuanNvblwiLCBcIkJ1c2luZXNzUGFydG5lcnNMaXN0XCIpO1xuXHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0ID0gbmV3IENvbnZlcnRlckNvbnRleHQoXG5cdFx0XHRcdFx0Y29udmVydGVyT3V0cHV0LFxuXHRcdFx0XHRcdG1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0XHRcdFx0bW9ja0RpYWdub3N0aWNzLFxuXHRcdFx0XHRcdG1lcmdlLFxuXHRcdFx0XHRcdGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvQnVzaW5lc3NQYXJ0bmVyc1wiKSBhcyBDb250ZXh0KVxuXHRcdFx0XHQpO1xuXHRcdFx0fSk7XG5cdH0pO1xuXG5cdHRlc3QoXG5cdFx0XCItIGdyb3VwYWJsZSBwcm9wZXJ0aWVzIGZyb20gQWdncmVnYXRpb25IZWxwZXJcIixcblx0XHR7XG5cdFx0XHRcInJlZmVyZW5jZXNcIjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiSklSQVwiLFxuXHRcdFx0XHRcdFwiSURcIjogXCJGSU9SSVRFQ0hQMS0xOTE2MVwiXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdCgpID0+IHtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdFx0XHRjb25zdCBleHBlY3RlZEdyb3VwYWJsZTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7XG5cdFx0XHRcdFwiSWRcIjogZmFsc2UsXG5cdFx0XHRcdFwiTmFtZVwiOiB0cnVlLFxuXHRcdFx0XHRcIkNvdW50cnlcIjogdHJ1ZSxcblx0XHRcdFx0XCJSZWdpb25cIjogdHJ1ZSxcblx0XHRcdFx0XCJTZWdtZW50XCI6IHRydWUsXG5cdFx0XHRcdFwiSW5kdXN0cnlcIjogZmFsc2UsXG5cdFx0XHRcdFwiQWNjb3VudFJlc3BvbnNpYmxlXCI6IHRydWUsXG5cdFx0XHRcdFwiU2FsZXNOdW1iZXJcIjogZmFsc2UsXG5cdFx0XHRcdFwiU2FsZXNBbW91bnRcIjogZmFsc2UsXG5cdFx0XHRcdFwiU2FsZXNBbW91bnRMb2NhbEN1cnJlbmN5XCI6IGZhbHNlLFxuXHRcdFx0XHRcIkFtb3VudFBlclNhbGVcIjogZmFsc2UsXG5cdFx0XHRcdFwiQ3VycmVuY3lcIjogdHJ1ZSxcblx0XHRcdFx0XCJMb2NhbEN1cnJlbmN5XCI6IHRydWUsXG5cdFx0XHRcdFwiU2FsZXNRdWFudGl0eVwiOiBmYWxzZSxcblx0XHRcdFx0XCJRdWFudGl0eVVuaXRcIjogdHJ1ZSxcblx0XHRcdFx0XCJteU1lc3NhZ2VzXCI6IGZhbHNlLFxuXHRcdFx0XHRcIkNvdW50cnlWaXNpYmlsaXR5XCI6IGZhbHNlLFxuXHRcdFx0XHRcIkNvdW50cnlfQ29kZVwiOiBmYWxzZSxcblx0XHRcdFx0XCJSZWZlcmVuY2VkQ3VzdG9tZXJJZFwiOiBmYWxzZVxuXHRcdFx0fTtcblxuXHRcdFx0ZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRleHBlY3QoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUdyb3VwYWJsZShwcm9wZXJ0eSkpLnRvRXF1YWwoZXhwZWN0ZWRHcm91cGFibGVbcHJvcGVydHkubmFtZV0pOyAvL1wiY2hlY2sgaWYgcHJvcGVydHkgXCIgKyBwcm9wZXJ0eS5uYW1lICsgXCIgaXMgZ3JvdXBhYmxlXCJcblx0XHRcdH0pO1xuXHRcdH1cblx0KTtcblxuXHR0ZXN0KFxuXHRcdFwiLSBhZ2dyZWdhdGFibGUgcHJvcGVydGllcyBmcm9tIEFnZ3JlZ2F0aW9uSGVscGVyXCIsXG5cdFx0e1xuXHRcdFx0XCJyZWZlcmVuY2VzXCI6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidHlwZVwiOiBcIkpJUkFcIixcblx0XHRcdFx0XHRcIklEXCI6IFwiRklPUklURUNIUDEtMjEyNzBcIlxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHQoKSA9PiB7XG5cdFx0XHRjb25zdCBlbnRpdHlUeXBlID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCk7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdFx0Y29uc3QgZXhwZWN0ZWRBZ2dyZWdhdGFibGU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge1xuXHRcdFx0XHRcIklkXCI6IGZhbHNlLFxuXHRcdFx0XHRcIk5hbWVcIjogZmFsc2UsXG5cdFx0XHRcdFwiQ291bnRyeVwiOiBmYWxzZSxcblx0XHRcdFx0XCJSZWdpb25cIjogZmFsc2UsXG5cdFx0XHRcdFwiU2VnbWVudFwiOiBmYWxzZSxcblx0XHRcdFx0XCJJbmR1c3RyeVwiOiBmYWxzZSxcblx0XHRcdFx0XCJBY2NvdW50UmVzcG9uc2libGVcIjogZmFsc2UsXG5cdFx0XHRcdFwiU2FsZXNOdW1iZXJcIjogdHJ1ZSxcblx0XHRcdFx0XCJTYWxlc0Ftb3VudFwiOiBmYWxzZSxcblx0XHRcdFx0XCJTYWxlc0Ftb3VudExvY2FsQ3VycmVuY3lcIjogdHJ1ZSxcblx0XHRcdFx0XCJBbW91bnRQZXJTYWxlXCI6IHRydWUsXG5cdFx0XHRcdFwiQ3VycmVuY3lcIjogdHJ1ZSxcblx0XHRcdFx0XCJMb2NhbEN1cnJlbmN5XCI6IHRydWUsXG5cdFx0XHRcdFwiU2FsZXNRdWFudGl0eVwiOiB0cnVlLFxuXHRcdFx0XHRcIlF1YW50aXR5VW5pdFwiOiBmYWxzZSxcblx0XHRcdFx0XCJteU1lc3NhZ2VzXCI6IGZhbHNlLFxuXHRcdFx0XHRcIkNvdW50cnlWaXNpYmlsaXR5XCI6IGZhbHNlLFxuXHRcdFx0XHRcIkNvdW50cnlfQ29kZVwiOiBmYWxzZSxcblx0XHRcdFx0XCJSZWZlcmVuY2VkQ3VzdG9tZXJJZFwiOiBmYWxzZVxuXHRcdFx0fTtcblxuXHRcdFx0ZW50aXR5VHlwZS5lbnRpdHlQcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5OiBQcm9wZXJ0eSkgPT4ge1xuXHRcdFx0XHRleHBlY3QoYWdncmVnYXRpb25IZWxwZXIuaXNQcm9wZXJ0eUFnZ3JlZ2F0YWJsZShwcm9wZXJ0eSkpLnRvRXF1YWwoZXhwZWN0ZWRBZ2dyZWdhdGFibGVbcHJvcGVydHkubmFtZV0pOyAvL1wiY2hlY2sgaWYgcHJvcGVydHkgXCIgKyBwcm9wZXJ0eS5uYW1lICsgXCIgaXMgYWdncmVnYXRhYmxlXCJcblx0XHRcdH0pO1xuXHRcdH1cblx0KTtcblxuXHR0ZXN0KFxuXHRcdFwiLSBjdXN0b20gYWdncmVnYXRpb25zIGZyb20gQWdncmVnYXRpb25IZWxwZXJcIixcblx0XHR7XG5cdFx0XHRcInJlZmVyZW5jZXNcIjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiSklSQVwiLFxuXHRcdFx0XHRcdFwiSURcIjogXCJGSU9SSVRFQ0hQMS0xOTE2MVwiXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdCgpID0+IHtcblx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdFx0XHRjb25zdCBleHBlY3RlZEFnZ3JlZ2F0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHtcblx0XHRcdFx0XCJTYWxlc0Ftb3VudExvY2FsQ3VycmVuY3lcIjogW1wiTG9jYWxDdXJyZW5jeVwiXSxcblx0XHRcdFx0XCJBbW91bnRQZXJTYWxlXCI6IFtcIkN1cnJlbmN5XCJdLFxuXHRcdFx0XHRcIlNhbGVzTnVtYmVyXCI6IFtdLFxuXHRcdFx0XHRcIlNhbGVzUXVhbnRpdHlcIjogW10sXG5cdFx0XHRcdFwiQ3VycmVuY3lcIjogW10sXG5cdFx0XHRcdFwiTG9jYWxDdXJyZW5jeVwiOiBbXVxuXHRcdFx0fTtcblxuXHRcdFx0Y29uc3QgYWdncmVnYXRpb25Bbm5vdGF0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdFx0XHRjb25zdCBhZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0XHRcdGFnZ3JlZ2F0aW9uQW5ub3RhdGlvbnMuZm9yRWFjaChhbm5vdGF0aW9uID0+IHtcblx0XHRcdFx0Y29uc3Qgb0FnZ3JlZ2F0ZWRQcm9wZXJ0eSA9IGFnZ3JlZ2F0aW9uSGVscGVyLl9lbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZmluZChvUHJvcGVydHkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBvUHJvcGVydHkubmFtZSA9PT0gYW5ub3RhdGlvbi5xdWFsaWZpZXI7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGlmIChvQWdncmVnYXRlZFByb3BlcnR5KSB7XG5cdFx0XHRcdFx0Y29uc3QgYUNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXMgPSBhbm5vdGF0aW9uLmFubm90YXRpb25zPy5BZ2dyZWdhdGlvbj8uQ29udGV4dERlZmluaW5nUHJvcGVydGllcztcblx0XHRcdFx0XHRhZ2dyZWdhdGVzW29BZ2dyZWdhdGVkUHJvcGVydHkubmFtZV0gPSBhQ29udGV4dERlZmluaW5nUHJvcGVydGllc1xuXHRcdFx0XHRcdFx0PyBhQ29udGV4dERlZmluaW5nUHJvcGVydGllcy5tYXAob0N0eERlZlByb3BlcnR5ID0+IHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb0N0eERlZlByb3BlcnR5LnZhbHVlO1xuXHRcdFx0XHRcdFx0ICB9KVxuXHRcdFx0XHRcdFx0OiBbXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRleHBlY3QoT2JqZWN0LmtleXMoYWdncmVnYXRlcykubGVuZ3RoKS50b0VxdWFsKE9iamVjdC5rZXlzKGV4cGVjdGVkQWdncmVnYXRlcykubGVuZ3RoKTsgLy8sIFwiQ29ycmVjdCBudW1iZXIgb2YgY3VzdG9tIGFnZ3JlZ2F0ZXNcIik7XG5cdFx0XHRPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5mb3JFYWNoKGFnZ3JlZ2F0ZUtleSA9PiB7XG5cdFx0XHRcdGV4cGVjdChhZ2dyZWdhdGVzW2FnZ3JlZ2F0ZUtleV0pLnRvRXF1YWwoZXhwZWN0ZWRBZ2dyZWdhdGVzW2FnZ3JlZ2F0ZUtleV0pOyAvL1wiQ2hlY2sgYWdncmVnYXRlIFwiICsgYWdncmVnYXRlS2V5ICsgXCIgYW5kIGNvbnRleHQtZGVmaW5pbmcgcHJvcGVydGllc1wiXG5cdFx0XHR9KTtcblx0XHR9XG5cdCk7XG5cblx0dGVzdChcblx0XHRcIi0gQ29sdW1uIHByb3BlcnRpZXNcIixcblx0XHR7XG5cdFx0XHRcInJlZmVyZW5jZXNcIjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiSklSQVwiLFxuXHRcdFx0XHRcdFwiSURcIjogXCJGSU9SSVRFQ0hQMS0xOTE2MVwiXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdCgpID0+IHtcblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiKTtcblx0XHRcdGNvbnN0IGxpbmVJdGVtID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBMaW5lSXRlbTtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb24gPSBjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24obGluZUl0ZW0sIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCIsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdFx0Y29uc3QgYUNvbHVtbnMgPSB2aXN1YWxpemF0aW9uLmNvbHVtbnMgYXMgQW5ub3RhdGlvblRhYmxlQ29sdW1uW107XG5cblx0XHRcdC8vIENoZWNrIG9uIGtleSBwcm9wZXJ0aWVzXG5cdFx0XHRjb25zdCBhS2V5UHJvcGVydGllcyA9IGFDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmlzS2V5KS5tYXAoY29sdW1uID0+IGNvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0ZXhwZWN0KGFLZXlQcm9wZXJ0aWVzKS50b0VxdWFsKFtcIklkXCJdKTsgLy8sIFwiQ2hlY2sgb24ga2V5IHByb3BlcnRpZXNcIik7XG5cblx0XHRcdC8vIENoZWNrIG9uIGdyb3VwYWJsZSBwcm9wZXJ0aWVzXG5cdFx0XHRjb25zdCBhR3JvdXBhYmxlUHJvcGVydGllcyA9IGFDb2x1bW5zXG5cdFx0XHRcdC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5pc0dyb3VwYWJsZSAmJiAhY29sdW1uLnByb3BlcnR5SW5mb3MpXG5cdFx0XHRcdC5tYXAoY29sdW1uID0+IGNvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdFx0Y29uc3QgYUV4cGVjdGVkR3JvdXBhYmxlUHJvcGVydGllcyA9IFtcblx0XHRcdFx0XCJOYW1lXCIsXG5cdFx0XHRcdFwiQ291bnRyeVwiLFxuXHRcdFx0XHRcIlJlZ2lvblwiLFxuXHRcdFx0XHRcIlNlZ21lbnRcIixcblx0XHRcdFx0XCJBY2NvdW50UmVzcG9uc2libGVcIixcblx0XHRcdFx0XCJDdXJyZW5jeVwiLFxuXHRcdFx0XHRcIkxvY2FsQ3VycmVuY3lcIixcblx0XHRcdFx0XCJRdWFudGl0eVVuaXRcIlxuXHRcdFx0XTtcblx0XHRcdGV4cGVjdChhR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGgpLnRvRXF1YWwoYUV4cGVjdGVkR3JvdXBhYmxlUHJvcGVydGllcy5sZW5ndGgpOyAvLyAsIFwiQ2hlY2sgbnVtYmVyIG9mIGdyb3VwYWJsZSBwcm9wZXJ0aWVzXCIpO1xuXHRcdFx0YUdyb3VwYWJsZVByb3BlcnRpZXMuZm9yRWFjaChzUHJvcE5hbWUgPT4ge1xuXHRcdFx0XHRleHBlY3QoYUV4cGVjdGVkR3JvdXBhYmxlUHJvcGVydGllcy5pbmRleE9mKHNQcm9wTmFtZSkpLm5vdC50b0VxdWFsKC0xKTsgLy8gLCBcIkNoZWNraW5nIFwiICsgc1Byb3BOYW1lICsgXCIgaXMgZ3JvdXBhYmxlXCIpO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIENoZWNrIG9uIHVuaXRzL2N1cnJlbmNpZXNcblx0XHRcdGNvbnN0IGFDb2x1bW5zV2l0aFVuaXRzID0gYUNvbHVtbnNcblx0XHRcdFx0LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnVuaXQgIT09IHVuZGVmaW5lZClcblx0XHRcdFx0Lm1hcChjb2x1bW4gPT4ge1xuXHRcdFx0XHRcdHJldHVybiB7IHBhdGg6IGNvbHVtbi5yZWxhdGl2ZVBhdGgsIHVuaXQ6IGNvbHVtbi51bml0IH07XG5cdFx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgYUV4cGVjdENvbHVtbnNXaXRoVW5pdHMgPSBbXG5cdFx0XHRcdHsgcGF0aDogXCJTYWxlc0Ftb3VudFwiLCB1bml0OiBcIlByb3BlcnR5OjpDdXJyZW5jeVwiIH0sXG5cdFx0XHRcdHsgcGF0aDogXCJTYWxlc0Ftb3VudExvY2FsQ3VycmVuY3lcIiwgdW5pdDogXCJMb2NhbEN1cnJlbmN5XCIgfSxcblx0XHRcdFx0eyBwYXRoOiBcIkFtb3VudFBlclNhbGVcIiwgdW5pdDogXCJQcm9wZXJ0eTo6Q3VycmVuY3lcIiB9LFxuXHRcdFx0XHR7IHBhdGg6IFwiU2FsZXNRdWFudGl0eVwiLCB1bml0OiBcIlF1YW50aXR5VW5pdFwiIH1cblx0XHRcdF07XG5cdFx0XHRleHBlY3QoYUNvbHVtbnNXaXRoVW5pdHMubGVuZ3RoKS50b0VxdWFsKGFFeHBlY3RDb2x1bW5zV2l0aFVuaXRzLmxlbmd0aCk7IC8vICwgXCJDaGVjayBudW1iZXIgb2YgcHJvcGVydGllcyB3aXRoIHVuaXRzXCIpO1xuXHRcdFx0YUNvbHVtbnNXaXRoVW5pdHMuZm9yRWFjaChvQ29sdW1uID0+IHtcblx0XHRcdFx0Y29uc3Qgb0V4cGVjdGVkID0gYUV4cGVjdENvbHVtbnNXaXRoVW5pdHMuZmluZChvRXhwZWN0ZWRDb2x1bW4gPT4ge1xuXHRcdFx0XHRcdHJldHVybiBvRXhwZWN0ZWRDb2x1bW4ucGF0aCA9PT0gb0NvbHVtbi5wYXRoO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZXhwZWN0KG9FeHBlY3RlZCkubm90LnRvRXF1YWwodW5kZWZpbmVkKTsgLy8gKTtcblx0XHRcdFx0ZXhwZWN0KG9Db2x1bW4udW5pdCkudG9FcXVhbChvRXhwZWN0ZWQ/LnVuaXQpOyAvLyAsIFwiQ2hlY2tpbmcgXCIgKyBvQ29sdW1uLnBhdGggKyBcIiBoYXMgcHJvcGVyIHVuaXRcIik7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQ2hlY2sgb24gYWdncmVnYXRlc1xuXHRcdFx0Y29uc3QgZXhwZWN0ZWRBZ2dyZWdhdGVzOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3Q+ID0ge1xuXHRcdFx0XHRcIlByb3BlcnR5OjpTYWxlc0Ftb3VudExvY2FsQ3VycmVuY3lcIjoge1xuXHRcdFx0XHRcdGRlZmF1bHRBZ2dyZWdhdGU6IHsgY29udGV4dERlZmluaW5nUHJvcGVydGllczogW1wiTG9jYWxDdXJyZW5jeVwiXSB9LFxuXHRcdFx0XHRcdHJlbGF0aXZlUGF0aDogXCJTYWxlc0Ftb3VudExvY2FsQ3VycmVuY3lcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcIlByb3BlcnR5OjpBbW91bnRQZXJTYWxlXCI6IHtcblx0XHRcdFx0XHRkZWZhdWx0QWdncmVnYXRlOiB7IGNvbnRleHREZWZpbmluZ1Byb3BlcnRpZXM6IFtcIlByb3BlcnR5OjpDdXJyZW5jeVwiXSB9LFxuXHRcdFx0XHRcdFwicmVsYXRpdmVQYXRoXCI6IFwiQW1vdW50UGVyU2FsZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiUHJvcGVydHk6OlNhbGVzTnVtYmVyXCI6IHsgZGVmYXVsdEFnZ3JlZ2F0ZToge30sIHJlbGF0aXZlUGF0aDogXCJTYWxlc051bWJlclwiIH0sXG5cdFx0XHRcdFwiUHJvcGVydHk6OlNhbGVzUXVhbnRpdHlcIjogeyBkZWZhdWx0QWdncmVnYXRlOiB7fSwgXCJyZWxhdGl2ZVBhdGhcIjogXCJTYWxlc1F1YW50aXR5XCIgfVxuXHRcdFx0fTtcblx0XHRcdGNvbnN0IGFnZ3JlZ2F0ZXMgPSB2aXN1YWxpemF0aW9uLmFnZ3JlZ2F0ZXMgfHwge307XG5cblx0XHRcdGV4cGVjdChPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5sZW5ndGgpLnRvRXF1YWwoT2JqZWN0LmtleXMoZXhwZWN0ZWRBZ2dyZWdhdGVzKS5sZW5ndGgpOyAvLywgXCJDb3JyZWN0IG51bWJlciBvZiBjdXN0b20gYWdncmVnYXRlc1wiKTtcblx0XHRcdE9iamVjdC5rZXlzKGFnZ3JlZ2F0ZXMpLmZvckVhY2goYWdncmVnYXRlS2V5ID0+IHtcblx0XHRcdFx0ZXhwZWN0KGFnZ3JlZ2F0ZXNbYWdncmVnYXRlS2V5XSkudG9FcXVhbChleHBlY3RlZEFnZ3JlZ2F0ZXNbYWdncmVnYXRlS2V5XSk7IC8vXCJDaGVjayBhZ2dyZWdhdGUgXCIgKyBhZ2dyZWdhdGVLZXkgKyBcIiBhbmQgY29udGV4dC1kZWZpbmluZyBwcm9wZXJ0aWVzXCJcblx0XHRcdH0pO1xuXG5cdFx0XHQvLyBDaGVjayBpbml0aWFsIGFnZ3JlZ2F0ZXMvZ3JvdXBzXG5cdFx0XHRleHBlY3QodmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLmdyb3VwQ29uZGl0aW9ucykudG9FcXVhbCh1bmRlZmluZWQpOyAvLyAsIFwiTm8gdmlzdWFsIGdyb3VwaW5ncyBieSBkZWZhdWx0XCIpO1xuXHRcdFx0ZXhwZWN0KHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zKS50b0VxdWFsKHVuZGVmaW5lZCk7IC8vICwgXCJObyBhZ2dyZWdhdGVzIGJ5IGRlZmF1bHRcIik7XG5cdFx0fVxuXHQpO1xufSk7XG5kZXNjcmliZShcIlRhYmxlIENvbnZlcnRlciBVbml0IFRlc3RzIHdpdGggQW5hbHl0aWNzIC0gUGVyc29uYWxpemF0aW9uIHNldHRpbmdzOlwiLCBmdW5jdGlvbigpIHtcblx0YmVmb3JlRWFjaCgoKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1ldGFNb2RlbChwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uLy4uL2RhdGEvT0tSQS9tZXRhZGF0YS54bWxcIikpXG5cdFx0XHQudGhlbihvTWV0YU1vZGVsID0+IHtcblx0XHRcdFx0bWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoX2NvbnZlcnRlck91dHB1dDogQ29udmVydGVyT3V0cHV0KSA9PiB7XG5cdFx0XHRcdGNvbnZlcnRlck91dHB1dCA9IF9jb252ZXJ0ZXJPdXRwdXQ7XG5cdFx0XHR9KTtcblx0fSk7XG5cblx0Y29uc3QgYVAxM05UZXN0RGF0YSA9IFtcblx0XHR7XG5cdFx0XHRcImRlc2NcIjogXCJkZWZhdWx0IHNldHRpbmdzXCIsXG5cdFx0XHRcIm9wdGlvbnNcIjoge1xuXHRcdFx0XHRcInJlZmVyZW5jZXNcIjogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFwidHlwZVwiOiBcIkpJUkFcIixcblx0XHRcdFx0XHRcdFwiSURcIjogXCJGSU9SSVRFQ0hQMS0xOTE2MVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdXG5cdFx0XHR9LFxuXHRcdFx0XCJwZXJzb25hbGl6YXRpb25cIjogdW5kZWZpbmVkLFxuXHRcdFx0XCJncm91cEVuYWJsZWRcIjogdHJ1ZSxcblx0XHRcdFwiYWdncmVnYXRlRW5hYmxlZFwiOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRcImRlc2NcIjogXCJhbGwgc2V0dGluZ3NcIixcblx0XHRcdFwib3B0aW9uc1wiOiB7XG5cdFx0XHRcdFwicmVmZXJlbmNlc1wiOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XCJ0eXBlXCI6IFwiSklSQVwiLFxuXHRcdFx0XHRcdFx0XCJJRFwiOiBcIkZJT1JJVEVDSFAxLTE5MTYxXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF1cblx0XHRcdH0sXG5cdFx0XHRcInBlcnNvbmFsaXphdGlvblwiOiB0cnVlLFxuXHRcdFx0XCJncm91cEVuYWJsZWRcIjogdHJ1ZSxcblx0XHRcdFwiYWdncmVnYXRlRW5hYmxlZFwiOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRcImRlc2NcIjogXCJncm91cCBvbmx5XCIsXG5cdFx0XHRcIm9wdGlvbnNcIjoge1xuXHRcdFx0XHRcInJlZmVyZW5jZXNcIjogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFwidHlwZVwiOiBcIkpJUkFcIixcblx0XHRcdFx0XHRcdFwiSURcIjogXCJGSU9SSVRFQ0hQMS0xOTE2MVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdXG5cdFx0XHR9LFxuXHRcdFx0XCJwZXJzb25hbGl6YXRpb25cIjoge1xuXHRcdFx0XHRcImdyb3VwXCI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImdyb3VwRW5hYmxlZFwiOiB0cnVlLFxuXHRcdFx0XCJhZ2dyZWdhdGVFbmFibGVkXCI6IGZhbHNlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRcImRlc2NcIjogXCJhZ2dyZWdhdGUgb25seVwiLFxuXHRcdFx0XCJvcHRpb25zXCI6IHtcblx0XHRcdFx0XCJyZWZlcmVuY2VzXCI6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcInR5cGVcIjogXCJKSVJBXCIsXG5cdFx0XHRcdFx0XHRcIklEXCI6IFwiRklPUklURUNIUDEtMTkxNjFcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fSxcblx0XHRcdFwicGVyc29uYWxpemF0aW9uXCI6IHtcblx0XHRcdFx0XCJhZ2dyZWdhdGVcIjogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdFwiZ3JvdXBFbmFibGVkXCI6IGZhbHNlLFxuXHRcdFx0XCJhZ2dyZWdhdGVFbmFibGVkXCI6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdFwiZGVzY1wiOiBcImdyb3VwICsgYWdncmVnYXRlXCIsXG5cdFx0XHRcIm9wdGlvbnNcIjoge1xuXHRcdFx0XHRcInJlZmVyZW5jZXNcIjogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFwidHlwZVwiOiBcIkpJUkFcIixcblx0XHRcdFx0XHRcdFwiSURcIjogXCJGSU9SSVRFQ0hQMS0xOTE2MVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdXG5cdFx0XHR9LFxuXHRcdFx0XCJwZXJzb25hbGl6YXRpb25cIjoge1xuXHRcdFx0XHRcImdyb3VwXCI6IHRydWUsXG5cdFx0XHRcdFwiYWdncmVnYXRlXCI6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImdyb3VwRW5hYmxlZFwiOiB0cnVlLFxuXHRcdFx0XCJhZ2dyZWdhdGVFbmFibGVkXCI6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdFwiZGVzY1wiOiBcIm5vIGdyb3VwIG5vciBhZ2dyZWdhdGVcIixcblx0XHRcdFwib3B0aW9uc1wiOiB7XG5cdFx0XHRcdFwicmVmZXJlbmNlc1wiOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XCJ0eXBlXCI6IFwiSklSQVwiLFxuXHRcdFx0XHRcdFx0XCJJRFwiOiBcIkZJT1JJVEVDSFAxLTE5MTYxXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF1cblx0XHRcdH0sXG5cdFx0XHRcInBlcnNvbmFsaXphdGlvblwiOiB7XG5cdFx0XHRcdHNvcnQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRcImdyb3VwRW5hYmxlZFwiOiBmYWxzZSxcblx0XHRcdFwiYWdncmVnYXRlRW5hYmxlZFwiOiBmYWxzZVxuXHRcdH1cblx0XTtcblxuXHRhUDEzTlRlc3REYXRhLmZvckVhY2godGVzdERhdGEgPT4ge1xuXHRcdHRlc3QodGVzdERhdGEuZGVzYywgdGVzdERhdGEub3B0aW9ucywgKCkgPT4ge1xuXHRcdFx0bWFuaWZlc3RTZXR0aW5ncyA9IGdldFBhZ2VNYW5pZmVzdChcInRlc3Qvc2FwL2ZlL2NvcmUvamVzdC9kYXRhL09LUkEvbWFuaWZlc3QuanNvblwiLCBcIkJ1c2luZXNzUGFydG5lcnNMaXN0XCIpO1xuXHRcdFx0bWFuaWZlc3RTZXR0aW5nc1tcImNvbnRyb2xDb25maWd1cmF0aW9uXCJdW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCJdW1widGFibGVTZXR0aW5nc1wiXVtcInBlcnNvbmFsaXphdGlvblwiXSA9XG5cdFx0XHRcdHRlc3REYXRhLnBlcnNvbmFsaXphdGlvbjtcblx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSBuZXcgQ29udmVydGVyQ29udGV4dChcblx0XHRcdFx0Y29udmVydGVyT3V0cHV0LFxuXHRcdFx0XHRtYW5pZmVzdFNldHRpbmdzLFxuXHRcdFx0XHRtb2NrRGlhZ25vc3RpY3MsXG5cdFx0XHRcdG1lcmdlLFxuXHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL0J1c2luZXNzUGFydG5lcnNcIikgYXMgQ29udGV4dClcblx0XHRcdCk7XG5cblx0XHRcdGNvbnN0IHJlc29sdmVkVGFyZ2V0ID0gY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbihcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiKTtcblx0XHRcdGNvbnN0IGxpbmVJdGVtID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBMaW5lSXRlbTtcblx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb24gPSBjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24obGluZUl0ZW0sIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCIsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdFx0XHRpZiAodGVzdERhdGEuZ3JvdXBFbmFibGVkKSB7XG5cdFx0XHRcdGV4cGVjdCh2aXN1YWxpemF0aW9uLmFubm90YXRpb24ucDEzbk1vZGU/LmluZGV4T2YoXCJHcm91cFwiKSkubm90LnRvRXF1YWwoLTEpOyAvLyAsIFwiR3JvdXAgcGVyc29uYWxpemF0aW9uIGlzIGVuYWJsZWRcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHBlY3QodmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLnAxM25Nb2RlPy5pbmRleE9mKFwiR3JvdXBcIikpLnRvRXF1YWwoLTEpOyAvLyAsIFwiR3JvdXAgcGVyc29uYWxpemF0aW9uIGlzIGRpc2FibGVkXCIpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGVzdERhdGEuYWdncmVnYXRlRW5hYmxlZCkge1xuXHRcdFx0XHRleHBlY3QodmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLnAxM25Nb2RlPy5pbmRleE9mKFwiQWdncmVnYXRlXCIpKS5ub3QudG9FcXVhbCgtMSk7IC8vICwgXCJBZ2dyZWdhdGUgcGVyc29uYWxpemF0aW9uIGlzIGVuYWJsZWRcIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHBlY3QodmlzdWFsaXphdGlvbi5hbm5vdGF0aW9uLnAxM25Nb2RlPy5pbmRleE9mKFwiQWdncmVnYXRlXCIpKS50b0VxdWFsKC0xKTsgLy8gLCBcIkFnZ3JlZ2F0ZSBwZXJzb25hbGl6YXRpb24gaXMgZGlzYWJsZWRcIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiVGFibGUgQ29udmVydGVyIFVuaXQgVGVzdHMgd2l0aCBQcmVzZW50YXRpb24gVmFyaWFudFwiLCBmdW5jdGlvbigpIHtcblx0dGVzdChcIi0gQ2hlY2sgZGVmYXVsdCBhZ2dyZWdhdGVzIGFuZCB2aXN1YWwgZ3JvdXBpbmdzXCIsICgpID0+IHtcblx0XHRyZXR1cm4gZ2V0TWV0YU1vZGVsKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi4vLi4vZGF0YS9PS1JBL21ldGFkYXRhX3dpdGhQVi54bWxcIikpXG5cdFx0XHQudGhlbihvTWV0YU1vZGVsID0+IHtcblx0XHRcdFx0bWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0XHRcdFx0cmV0dXJuIGNvbnZlcnRUeXBlcyhvTWV0YU1vZGVsKTtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoX2NvbnZlcnRlck91dHB1dDogQ29udmVydGVyT3V0cHV0KSA9PiB7XG5cdFx0XHRcdGNvbnZlcnRlck91dHB1dCA9IF9jb252ZXJ0ZXJPdXRwdXQ7XG5cdFx0XHRcdG1hbmlmZXN0U2V0dGluZ3MgPSBnZXRQYWdlTWFuaWZlc3QoXCJ0ZXN0L3NhcC9mZS9jb3JlL2plc3QvZGF0YS9PS1JBL21hbmlmZXN0Lmpzb25cIiwgXCJCdXNpbmVzc1BhcnRuZXJzTGlzdFwiKTtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCA9IG5ldyBDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHRcdGNvbnZlcnRlck91dHB1dCxcblx0XHRcdFx0XHRtYW5pZmVzdFNldHRpbmdzLFxuXHRcdFx0XHRcdG1vY2tEaWFnbm9zdGljcyxcblx0XHRcdFx0XHRtZXJnZSxcblx0XHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL0J1c2luZXNzUGFydG5lcnNcIikgYXMgQ29udGV4dClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuUHJlc2VudGF0aW9uVmFyaWFudFwiKTtcblx0XHRcdFx0Y29uc3QgcHJlc2VudGF0aW9uVmFyaWFudCA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgUHJlc2VudGF0aW9uVmFyaWFudFR5cGVUeXBlcztcblx0XHRcdFx0Y29uc3QgbGluZUl0ZW0gPSBwcmVzZW50YXRpb25WYXJpYW50LlZpc3VhbGl6YXRpb25zWzBdLiR0YXJnZXQgYXMgTGluZUl0ZW07XG5cdFx0XHRcdGNvbnN0IHZpc3VhbGl6YXRpb24gPSBjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24oXG5cdFx0XHRcdFx0bGluZUl0ZW0sXG5cdFx0XHRcdFx0XCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIixcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LFxuXHRcdFx0XHRcdHByZXNlbnRhdGlvblZhcmlhbnRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBDaGVjayBpbml0aWFsIGFnZ3JlZ2F0ZXMvZ3JvdXBzXG5cdFx0XHRcdGNvbnN0IGV4cGVjdGVkR3JvdXBzID0ge1xuXHRcdFx0XHRcdGdyb3VwTGV2ZWxzOiBbeyBuYW1lOiBcIlByb3BlcnR5OjpTZWdtZW50XCIgfSwgeyBuYW1lOiBcIkluZHVzdHJ5XCIgfV1cblx0XHRcdFx0fTtcblx0XHRcdFx0Y29uc3QgZXhwZWN0ZWRBZ2dyZWdhdGVzID0ge1xuXHRcdFx0XHRcdFwiUHJvcGVydHk6OlNhbGVzQW1vdW50XCI6IHt9LFxuXHRcdFx0XHRcdFwiUHJvcGVydHk6OlNhbGVzQW1vdW50TG9jYWxDdXJyZW5jeVwiOiB7fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRleHBlY3QoSlNPTi5wYXJzZSh2aXN1YWxpemF0aW9uLmFubm90YXRpb24uZ3JvdXBDb25kaXRpb25zIHx8IFwiXCIpKS50b0VxdWFsKGV4cGVjdGVkR3JvdXBzKTsgLy9cIkNoZWNrIGluaXRpYWwgdmlzdWFsIGdyb3VwaW5nc1wiXG5cdFx0XHRcdGV4cGVjdChKU09OLnBhcnNlKHZpc3VhbGl6YXRpb24uYW5ub3RhdGlvbi5hZ2dyZWdhdGVDb25kaXRpb25zIHx8IFwiXCIpKS50b0VxdWFsKGV4cGVjdGVkQWdncmVnYXRlcyk7IC8vIFwiQ2hlY2sgaW5pdGlhbCBhZ2dyZWdhdGVzXCJcblx0XHRcdH0pO1xuXHR9KTtcbn0pO1xuZGVzY3JpYmUoXCJBZ2dyZWdhdGlvbkhlbHBlciBVbml0IFRlc3RzIGZvciBncm91cGFibGUgcHJvcGVydGllc1wiLCBmdW5jdGlvbigpIHtcblx0dGVzdChcblx0XHRcIkFnZ3JlZ2F0aW9uSGVscGVyIFVuaXQgVGVzdHMgZm9yIGdyb3VwYWJsZSBwcm9wZXJ0aWVzIC0gRGlmZmVyZW50IG9wdGlvbnMgdG8gZmxhZyBncm91cGFibGUgcHJvcHNcIixcblx0XHR7XG5cdFx0XHRcInJlZmVyZW5jZXNcIjogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiSklSQVwiLFxuXHRcdFx0XHRcdFwiSURcIjogXCJGSU9SSVRFQ0hQMS0xOTkzNVwiXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9LFxuXHRcdCgpID0+IHtcblx0XHRcdHJldHVybiBnZXRNZXRhTW9kZWwocGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi8uLi9kYXRhL09LUkEvbWV0YWRhdGFfZ3JvdXBhYmxlX29wdGlvbnMueG1sXCIpKVxuXHRcdFx0XHQudGhlbihvTWV0YU1vZGVsID0+IHtcblx0XHRcdFx0XHRtZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHRcdFx0XHRcdHJldHVybiBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC50aGVuKChfY29udmVydGVyT3V0cHV0OiBDb252ZXJ0ZXJPdXRwdXQpID0+IHtcblx0XHRcdFx0XHRjb252ZXJ0ZXJPdXRwdXQgPSBfY29udmVydGVyT3V0cHV0O1xuXHRcdFx0XHRcdG1hbmlmZXN0U2V0dGluZ3MgPSBnZXRQYWdlTWFuaWZlc3QoXCJ0ZXN0L3NhcC9mZS9jb3JlL2plc3QvZGF0YS9PS1JBL21hbmlmZXN0Lmpzb25cIiwgXCJCdXNpbmVzc1BhcnRuZXJzTGlzdFwiKTtcblxuXHRcdFx0XHRcdGNvbnN0IHRlc3REYXRhID0gW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IFwiQnVzaW5lc3NQYXJ0bmVyc1wiLFxuXHRcdFx0XHRcdFx0XHRleHBlY3RlZEdyb3VwYWJsZToge1xuXHRcdFx0XHRcdFx0XHRcdFwiSWRcIjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XCJOYW1lXCI6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XCJDb3VudHJ5XCI6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XCJSZWdpb25cIjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcIlNlZ21lbnRcIjogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcIkluZHVzdHJ5XCI6IHRydWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0ZW50aXR5U2V0OiBcIkN1c3RvbWVyc1wiXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRlbnRpdHlTZXQ6IFwiSW5kdXN0cmllc1wiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XTtcblxuXHRcdFx0XHRcdC8vdGVzdERhdGEuZm9yRWFjaChvRGF0YSA9PiB7XG5cdFx0XHRcdFx0Zm9yIChsZXQgSSA9IDA7IEkgPCB0ZXN0RGF0YS5sZW5ndGg7IEkrKykge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb0RhdGEgPSB0ZXN0RGF0YVtJXTtcblx0XHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSBuZXcgQ29udmVydGVyQ29udGV4dChcblx0XHRcdFx0XHRcdFx0Y29udmVydGVyT3V0cHV0LFxuXHRcdFx0XHRcdFx0XHRtYW5pZmVzdFNldHRpbmdzLFxuXHRcdFx0XHRcdFx0XHRtb2NrRGlhZ25vc3RpY3MsXG5cdFx0XHRcdFx0XHRcdG1lcmdlLFxuXHRcdFx0XHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiICsgb0RhdGEuZW50aXR5U2V0KSBhcyBDb250ZXh0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRcdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uSGVscGVyID0gbmV3IEFnZ3JlZ2F0aW9uSGVscGVyKGVudGl0eVR5cGUsIGNvbnZlcnRlckNvbnRleHQpO1xuXG5cdFx0XHRcdFx0XHRlbnRpdHlUeXBlLmVudGl0eVByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHk6IFByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGV4cGVjdChhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5KSkudG9FcXVhbChcblx0XHRcdFx0XHRcdFx0XHRvRGF0YS5leHBlY3RlZEdyb3VwYWJsZSA9PT0gdW5kZWZpbmVkIHx8IChvRGF0YS5leHBlY3RlZEdyb3VwYWJsZSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPilbcHJvcGVydHkubmFtZV1cblx0XHRcdFx0XHRcdFx0KTsgLy8sIG9EYXRhLmVudGl0eVNldCArIFwiOiBjaGVjayBpZiBwcm9wZXJ0eSBcIiArIHByb3BlcnR5Lm5hbWUgKyBcIiBpcyBncm91cGFibGVcIik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0KTtcbn0pO1xuZGVzY3JpYmUoXCJUYWJsZSBDb252ZXJ0ZXIgVW5pdCBUZXN0cyBmb3IgZ3JvdXBoZWFkZXIgZm9ybWF0XCIsIGZ1bmN0aW9uKCkge1xuXHR0ZXN0KFwiLSBDaGVjayBmb3JtYXQgaW5mb1wiLCAoKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1ldGFNb2RlbChwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uLy4uL2RhdGEvT0tSQS9tZXRhZGF0YV90ZXh0QXJyYW5nZW1lbnQueG1sXCIpKVxuXHRcdFx0LnRoZW4ob01ldGFNb2RlbCA9PiB7XG5cdFx0XHRcdG1ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdFx0XHRcdHJldHVybiBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKF9jb252ZXJ0ZXJPdXRwdXQ6IENvbnZlcnRlck91dHB1dCkgPT4ge1xuXHRcdFx0XHRjb252ZXJ0ZXJPdXRwdXQgPSBfY29udmVydGVyT3V0cHV0O1xuXHRcdFx0XHRtYW5pZmVzdFNldHRpbmdzID0gZ2V0UGFnZU1hbmlmZXN0KFwidGVzdC9zYXAvZmUvY29yZS9qZXN0L2RhdGEvT0tSQS9tYW5pZmVzdC5qc29uXCIsIFwiQnVzaW5lc3NQYXJ0bmVyc0xpc3RcIik7XG5cblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCA9IG5ldyBDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHRcdGNvbnZlcnRlck91dHB1dCxcblx0XHRcdFx0XHRtYW5pZmVzdFNldHRpbmdzLFxuXHRcdFx0XHRcdG1vY2tEaWFnbm9zdGljcyxcblx0XHRcdFx0XHRtZXJnZSxcblx0XHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL0J1c2luZXNzUGFydG5lcnNcIikgYXMgQ29udGV4dClcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIik7XG5cdFx0XHRcdGNvbnN0IGxpbmVJdGVtID0gcmVzb2x2ZWRUYXJnZXQuYW5ub3RhdGlvbiBhcyBMaW5lSXRlbTtcblx0XHRcdFx0Y29uc3QgdmlzdWFsaXphdGlvbiA9IGNyZWF0ZVRhYmxlVmlzdWFsaXphdGlvbihsaW5lSXRlbSwgXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIiwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0XHRcdGNvbnN0IGFDb2x1bW5zID0gdmlzdWFsaXphdGlvbi5jb2x1bW5zIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbltdO1xuXG5cdFx0XHRcdGNvbnN0IGV4cGVjdGVkRm9ybWF0SW5mbyA9IFtcblx0XHRcdFx0XHR7IHBhdGg6IFwiQ291bnRyeV9Db2RlMVwiLCBtb2RlOiBcIlZhbHVlRGVzY3JpcHRpb25cIiwgZGVzY3JpcHRpb246IFwiRm9ybWF0IGZvciBUZXh0TGFzdFwiIH0sXG5cdFx0XHRcdFx0eyBwYXRoOiBcIkNvdW50cnlfQ29kZTJcIiwgbW9kZTogXCJEZXNjcmlwdGlvblZhbHVlXCIsIGRlc2NyaXB0aW9uOiBcIkZvcm1hdCBmb3IgVGV4dEZpcnN0XCIgfSxcblx0XHRcdFx0XHR7IHBhdGg6IFwiQ291bnRyeV9Db2RlM1wiLCBtb2RlOiBcIkRlc2NyaXB0aW9uXCIsIGRlc2NyaXB0aW9uOiBcIkZvcm1hdCBmb3IgVGV4dE9ubHlcIiB9LFxuXHRcdFx0XHRcdHsgcGF0aDogXCJDb3VudHJ5X0NvZGU0XCIsIG1vZGU6IHVuZGVmaW5lZCwgZGVzY3JpcHRpb246IFwiRm9ybWF0IGZvciBUZXh0U2VwYXJhdGVcIiB9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdGg6IFwiQ291bnRyeV9Db2RlNVwiLFxuXHRcdFx0XHRcdFx0bW9kZTogXCJEZXNjcmlwdGlvblZhbHVlXCIsXG5cdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogXCJGb3JtYXQgZm9yIHVuc3BlY2lmaWVkIHRleHQgYXJyYW5nZW1lbnRcIlxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0eyBwYXRoOiBcIkNvdW50cnlfQ29kZTZcIiwgbW9kZTogdW5kZWZpbmVkLCBkZXNjcmlwdGlvbjogXCJGb3JtYXQgd2hlbiBDb21tb24uVGV4dCBpc24ndCBhIHBhdGhcIiB9XG5cdFx0XHRcdF07XG5cblx0XHRcdFx0ZXhwZWN0ZWRGb3JtYXRJbmZvLmZvckVhY2goaW5mbyA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbHVtbiA9IGFDb2x1bW5zLmZpbmQob0NvbCA9PiAhb0NvbC5wcm9wZXJ0eUluZm9zICYmIG9Db2wucmVsYXRpdmVQYXRoID09PSBpbmZvLnBhdGgpO1xuXHRcdFx0XHRcdGV4cGVjdChvQ29sdW1uKS5ub3QudG9FcXVhbCh1bmRlZmluZWQpOyAvLyAsIFwiRm91bmQgcmVsYXRlZCBjb2x1bW4gZm9yIFwiICsgaW5mby5wYXRoKTtcblx0XHRcdFx0XHRpZiAoaW5mby5tb2RlKSB7XG5cdFx0XHRcdFx0XHRleHBlY3Qob0NvbHVtbj8udGV4dEFycmFuZ2VtZW50KS5ub3QudG9FcXVhbCh1bmRlZmluZWQpOyAvLyAsIFwiQ29sdW1uIGZvciBcIiArIGluZm8ucGF0aCArIFwiIGhhcyBhIHRleHQgYXJyYW5nZW1lbnQgaW5mb1wiKTtcblx0XHRcdFx0XHRcdGV4cGVjdChvQ29sdW1uPy50ZXh0QXJyYW5nZW1lbnQ/Lm1vZGUpLnRvRXF1YWwoaW5mby5tb2RlKTsgLy8gLCBcIkNoZWNrIG1vZGUgLSBcIiArIGluZm8uZGVzY3JpcHRpb24gKyBcIiA9IFwiICsgaW5mby5tb2RlKTtcblx0XHRcdFx0XHRcdGV4cGVjdChvQ29sdW1uPy50ZXh0QXJyYW5nZW1lbnQ/LnRleHRQcm9wZXJ0eSkudG9FcXVhbChcIkNvdW50cnlEZXNjXCIpOyAvLyAsIFwiQ2hlY2sgdGV4dCBwcm9wZXJ0eVwiKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZXhwZWN0KG9Db2x1bW4/LnRleHRBcnJhbmdlbWVudCkudG9FcXVhbCh1bmRlZmluZWQpOyAvLyAsIFwiQ2hlY2sgXCIgKyBpbmZvLnBhdGggKyBcIiBoYXMgbm8gdGV4dCBhcnJhbmdlbWVudCBpbmZvIChcIiArIGluZm8uZGVzY3JpcHRpb24gKyBcIilcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHR9KTtcbn0pO1xuXG5kZXNjcmliZShcIlRhYmxlIENvbnZlcnRlciBVbml0IFRlc3RzIHdpdGggQW5hbHl0aWNzIHNlcnZpY2VcIiwgZnVuY3Rpb24oKSB7XG5cdGJlZm9yZUVhY2goKCkgPT4ge1xuXHRcdHJldHVybiBnZXRNZXRhTW9kZWwocGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLi8uLi9kYXRhL09LUkEvbWV0YWRhdGEueG1sXCIpKVxuXHRcdFx0LnRoZW4ob01ldGFNb2RlbCA9PiB7XG5cdFx0XHRcdG1ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdFx0XHRcdHJldHVybiBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCk7XG5cdFx0XHR9KVxuXHRcdFx0LnRoZW4oKF9jb252ZXJ0ZXJPdXRwdXQ6IENvbnZlcnRlck91dHB1dCkgPT4ge1xuXHRcdFx0XHRjb252ZXJ0ZXJPdXRwdXQgPSBfY29udmVydGVyT3V0cHV0O1xuXHRcdFx0XHRtYW5pZmVzdFNldHRpbmdzID0gZ2V0UGFnZU1hbmlmZXN0KFwidGVzdC9zYXAvZmUvY29yZS9qZXN0L2RhdGEvT0tSQS9tYW5pZmVzdC5qc29uXCIsIFwiQnVzaW5lc3NQYXJ0bmVyc0xpc3RcIik7XG5cdFx0XHRcdGNvbnZlcnRlckNvbnRleHQgPSBuZXcgQ29udmVydGVyQ29udGV4dChcblx0XHRcdFx0XHRjb252ZXJ0ZXJPdXRwdXQsXG5cdFx0XHRcdFx0bWFuaWZlc3RTZXR0aW5ncyxcblx0XHRcdFx0XHRtb2NrRGlhZ25vc3RpY3MsXG5cdFx0XHRcdFx0bWVyZ2UsXG5cdFx0XHRcdFx0Z2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9CdXNpbmVzc1BhcnRuZXJzXCIpIGFzIENvbnRleHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9KTtcblx0fSk7XG5cdHRlc3QoXG5cdFx0XCItIENvbHVtbiBwcm9wZXJ0aWVzXCIsXG5cdFx0e1xuXHRcdFx0XCJyZWZlcmVuY2VzXCI6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidHlwZVwiOiBcIkpJUkFcIixcblx0XHRcdFx0XHRcIklEXCI6IFwiRklPUklURUNIUDEtMTk4NjJcIlxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fSxcblx0XHQoKSA9PiB7XG5cdFx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIik7XG5cdFx0XHRjb25zdCBsaW5lSXRlbSA9IHJlc29sdmVkVGFyZ2V0LmFubm90YXRpb24gYXMgTGluZUl0ZW07XG5cdFx0XHRjb25zdCB2aXN1YWxpemF0aW9uID0gY3JlYXRlVGFibGVWaXN1YWxpemF0aW9uKGxpbmVJdGVtLCBcIkBjb20uc2FwLnZvY2FidWxhcmllcy5VSS52MS5MaW5lSXRlbVwiLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRcdGNvbnN0IGFDb2x1bW5zID0gdmlzdWFsaXphdGlvbi5jb2x1bW5zIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbltdO1xuXHRcdFx0Y29uc3QgYWN0dWFsUmVzdWx0ID0gYUNvbHVtbnNcblx0XHRcdFx0LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zKVxuXHRcdFx0XHQubWFwKGZ1bmN0aW9uKGNvbCkge1xuXHRcdFx0XHRcdHJldHVybiB7IFwia2V5XCI6IGNvbC5rZXksIFwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3NcIjogY29sLmFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zIH07XG5cdFx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgZXhwZWN0ZWRSZXN1bHQgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcImtleVwiOiBcIkRhdGFGaWVsZDo6Q291bnRyeVwiLFxuXHRcdFx0XHRcdFwiYWRkaXRpb25hbFByb3BlcnR5SW5mb3NcIjogW1wiQ291bnRyeVZpc2liaWxpdHlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwia2V5XCI6IFwiRGF0YUZpZWxkOjpDb3VudHJ5X0NvZGVcIixcblx0XHRcdFx0XHRcImFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zXCI6IFtcIkNvdW50cnlWaXNpYmlsaXR5XCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcImtleVwiOiBcIkRhdGFGaWVsZEZvckFubm90YXRpb246OkZpZWxkR3JvdXBcIixcblx0XHRcdFx0XHRcImFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zXCI6IFtcIkNvdW50cnlWaXNpYmlsaXR5XCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcImtleVwiOiBcIkRhdGFGaWVsZDo6U2FsZXNBbW91bnRcIixcblx0XHRcdFx0XHRcImFkZGl0aW9uYWxQcm9wZXJ0eUluZm9zXCI6IFtcIl9DdXN0b21lci9TZXRTYWxlc0Ftb3VudEhpZGRlblwiXVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXG5cdFx0XHRleHBlY3QoYWN0dWFsUmVzdWx0KS50b0VxdWFsKGV4cGVjdGVkUmVzdWx0KTsgLy8sIFwiVGFibGUgY29sdW1ucyBkZWZpbml0aW9uIGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RhdGlvblwiKTtcblx0XHR9XG5cdCk7XG59KTtcblxuZGVzY3JpYmUoXCJUYWJsZSBDb252ZXJ0ZXIgVW5pdCBUZXN0cyB3aXRoIG5vbi1BbmFseXRpY3Mgc2VydmljZVwiLCBmdW5jdGlvbigpIHtcblx0YmVmb3JlRWFjaCgoKSA9PiB7XG5cdFx0cmV0dXJuIGdldE1ldGFNb2RlbChwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uLy4uL2RhdGEvc2FsZXNPcmRlck1ldGFkYXRhX3F1bml0LnhtbFwiKSlcblx0XHRcdC50aGVuKG9NZXRhTW9kZWwgPT4ge1xuXHRcdFx0XHRtZXRhTW9kZWwgPSBvTWV0YU1vZGVsO1xuXHRcdFx0XHRyZXR1cm4gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xuXHRcdFx0fSlcblx0XHRcdC50aGVuKChfY29udmVydGVyT3V0cHV0OiBDb252ZXJ0ZXJPdXRwdXQpID0+IHtcblx0XHRcdFx0Y29udmVydGVyT3V0cHV0ID0gX2NvbnZlcnRlck91dHB1dDtcblx0XHRcdFx0bWFuaWZlc3RTZXR0aW5ncyA9IGdldFBhZ2VNYW5pZmVzdChcInRlc3Qvc2FwL2ZlL2NvcmUvamVzdC9kYXRhL21hbmlmZXN0Lmpzb25cIiwgXCJTYWxlc09yZGVyTWFuYWdlTGlzdFwiKTtcblx0XHRcdFx0Y29udmVydGVyQ29udGV4dCA9IG5ldyBDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHRcdGNvbnZlcnRlck91dHB1dCxcblx0XHRcdFx0XHRtYW5pZmVzdFNldHRpbmdzLFxuXHRcdFx0XHRcdG1vY2tEaWFnbm9zdGljcyxcblx0XHRcdFx0XHRtZXJnZSxcblx0XHRcdFx0XHRnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMobWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1NhbGVzT3JkZXJNYW5hZ2VcIikgYXMgQ29udGV4dClcblx0XHRcdFx0KTtcblx0XHRcdH0pO1xuXHR9KTtcblxuXHR0ZXN0KFwiVGFibGUgQ29udmVydGVyIFVuaXQgVGVzdHMgd2l0aCBub24tQW5hbHl0aWNzIC0gIG5vIGdyb3VwYWJsZSBwcm9wZXJ0aWVzIGZyb20gQWdncmVnYXRpb25IZWxwZXJcIiwgKCkgPT4ge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblxuXHRcdGVudGl0eVR5cGUuZW50aXR5UHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eTogUHJvcGVydHkpID0+IHtcblx0XHRcdGV4cGVjdChhZ2dyZWdhdGlvbkhlbHBlci5pc1Byb3BlcnR5R3JvdXBhYmxlKHByb3BlcnR5KSkudG9FcXVhbCh1bmRlZmluZWQpOyAvLyAsIFwiaXNQcm9wZXJ0eUdyb3VwYWJsZSBzaGFsbCBiZSB1bmRlZmluZWQgZm9yIHByb3BlcnR5IFwiICsgcHJvcGVydHkubmFtZSk7XG5cdFx0fSk7XG5cdH0pO1xuXG5cdHRlc3QoXCJUYWJsZSBDb252ZXJ0ZXIgVW5pdCBUZXN0cyB3aXRoIG5vbi1BbmFseXRpY3MgLSBubyBjdXN0b20gYWdncmVnYXRpb25zIGZyb20gQWdncmVnYXRpb25IZWxwZXJcIiwgKCkgPT4ge1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihlbnRpdHlUeXBlLCBjb252ZXJ0ZXJDb250ZXh0KTtcblx0XHRjb25zdCBhZ2dyZWdhdGVzID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0Q3VzdG9tQWdncmVnYXRlRGVmaW5pdGlvbnMoKTtcblxuXHRcdGV4cGVjdChPYmplY3Qua2V5cyhhZ2dyZWdhdGVzKS5sZW5ndGgpLnRvRXF1YWwoMCk7IC8vICwgXCJObyBjdXN0b20gYWdncmVnYXRlcyBhcmUgZGVmaW5lZFwiKTtcblx0fSk7XG5cblx0dGVzdChcIlRhYmxlIENvbnZlcnRlciBVbml0IFRlc3RzIHdpdGggbm9uLUFuYWx5dGljcyAtIENvbHVtbiBwcm9wZXJ0aWVzXCIsICgpID0+IHtcblx0XHRjb25zdCByZXNvbHZlZFRhcmdldCA9IGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb24oXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuVUkudjEuTGluZUl0ZW1cIik7XG5cdFx0Y29uc3QgbGluZUl0ZW0gPSByZXNvbHZlZFRhcmdldC5hbm5vdGF0aW9uIGFzIExpbmVJdGVtO1xuXHRcdGNvbnN0IHZpc3VhbGl6YXRpb24gPSBjcmVhdGVUYWJsZVZpc3VhbGl6YXRpb24obGluZUl0ZW0sIFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLlVJLnYxLkxpbmVJdGVtXCIsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGFDb2x1bW5zID0gdmlzdWFsaXphdGlvbi5jb2x1bW5zIGFzIEFubm90YXRpb25UYWJsZUNvbHVtbltdO1xuXG5cdFx0Ly8gQ2hlY2sgb24ga2V5IHByb3BlcnRpZXNcblx0XHRjb25zdCBhS2V5UHJvcGVydGllcyA9IGFDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmlzS2V5KS5tYXAoY29sdW1uID0+IGNvbHVtbi5yZWxhdGl2ZVBhdGgpO1xuXHRcdGV4cGVjdChhS2V5UHJvcGVydGllcykudG9FcXVhbChbXCJJc0FjdGl2ZUVudGl0eVwiLCBcIklEXCJdKTsgLy8gXCJDaGVjayBvbiBrZXkgcHJvcGVydGllc1wiKTtcblxuXHRcdC8vIENoZWNrIG9uIGdyb3VwYWJsZSBwcm9wZXJ0aWVzXG5cdFx0Y29uc3QgYUdyb3VwYWJsZVByb3BlcnRpZXMgPSBhQ29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5pc0dyb3VwYWJsZSkubWFwKGNvbHVtbiA9PiBjb2x1bW4ucmVsYXRpdmVQYXRoKTtcblx0XHRleHBlY3QoYUdyb3VwYWJsZVByb3BlcnRpZXMubGVuZ3RoKS50b0VxdWFsKDApOyAvLyAsIFwiTm8gZ3JvdXBhYmxlIHByb3BlcnRpZXNcIik7XG5cblx0XHQvLyBDaGVjayBvbiB1bml0cy9jdXJyZW5jaWVzXG5cdFx0Y29uc3QgYUNvbHVtbnNXaXRoVW5pdHMgPSBhQ29sdW1uc1xuXHRcdFx0LmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnVuaXQgIT09IHVuZGVmaW5lZClcblx0XHRcdC5tYXAoY29sdW1uID0+IHtcblx0XHRcdFx0cmV0dXJuIHsgcGF0aDogY29sdW1uLnJlbGF0aXZlUGF0aCwgdW5pdDogY29sdW1uLnVuaXQgfTtcblx0XHRcdH0pO1xuXHRcdGNvbnN0IGFFeHBlY3RDb2x1bW5zV2l0aFVuaXRzID0gW3sgcGF0aDogXCJUb3RhbE5ldEFtb3VudFwiLCB1bml0OiBcIlRyYW5zYWN0aW9uQ3VycmVuY3lcIiB9XTtcblx0XHRleHBlY3QoYUNvbHVtbnNXaXRoVW5pdHMubGVuZ3RoKS50b0VxdWFsKGFFeHBlY3RDb2x1bW5zV2l0aFVuaXRzLmxlbmd0aCk7IC8vICwgXCJDaGVjayBudW1iZXIgb2YgcHJvcGVydGllcyB3aXRoIHVuaXRzXCIpO1xuXHRcdGFDb2x1bW5zV2l0aFVuaXRzLmZvckVhY2gob0NvbHVtbiA9PiB7XG5cdFx0XHRjb25zdCBvRXhwZWN0ZWQgPSBhRXhwZWN0Q29sdW1uc1dpdGhVbml0cy5maW5kKG9FeHBlY3RlZENvbHVtbiA9PiB7XG5cdFx0XHRcdHJldHVybiBvRXhwZWN0ZWRDb2x1bW4ucGF0aCA9PT0gb0NvbHVtbi5wYXRoO1xuXHRcdFx0fSk7XG5cdFx0XHRleHBlY3Qob0V4cGVjdGVkKS5ub3QudG9FcXVhbCh1bmRlZmluZWQpOyAvLyApO1xuXHRcdFx0ZXhwZWN0KG9Db2x1bW4udW5pdCkudG9FcXVhbChvRXhwZWN0ZWQ/LnVuaXQpOyAvLyAsIFwiQ2hlY2tpbmcgXCIgKyBvQ29sdW1uLnBhdGggKyBcIiBoYXMgcHJvcGVyIHVuaXRcIik7XG5cdFx0fSk7XG5cblx0XHQvLyBDaGVjayBvbiBhZ2dyZWdhdGVzXG5cdFx0ZXhwZWN0KHZpc3VhbGl6YXRpb24uYWdncmVnYXRlcykudG9FcXVhbCh1bmRlZmluZWQpOyAvLyAsIFwiTm8gYWdncmVnYXRlcyBhcmUgZGVmaW5lZFwiKTtcblx0fSk7XG59KTtcbiJdfQ==