@sapui5/sap.fe.core 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 (246) hide show
  1. package/package.json +4 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +1 -69
  4. package/src/sap/fe/core/AnnotationHelper.ts +0 -70
  5. package/src/sap/fe/core/AppComponent.js +388 -399
  6. package/src/sap/fe/core/AppComponent.ts +403 -0
  7. package/src/sap/fe/core/AppStateHandler.js +127 -158
  8. package/src/sap/fe/core/BaseController.js +82 -58
  9. package/src/sap/fe/core/BaseController.ts +68 -0
  10. package/src/sap/fe/core/CommonUtils.js +111 -20
  11. package/src/sap/fe/core/CommonUtils.ts +131 -32
  12. package/src/sap/fe/core/ExtensionAPI.js +278 -274
  13. package/src/sap/fe/core/ExtensionAPI.ts +250 -0
  14. package/src/sap/fe/core/PageController.js +157 -29
  15. package/src/sap/fe/core/PageController.ts +60 -32
  16. package/src/sap/fe/core/RouterProxy.js +694 -756
  17. package/src/sap/fe/core/RouterProxy.ts +11 -9
  18. package/src/sap/fe/core/Synchronization.js +21 -31
  19. package/src/sap/fe/core/TemplateComponent.js +1 -1
  20. package/src/sap/fe/core/TemplateComponent.ts +10 -3
  21. package/src/sap/fe/core/TemplateModel.js +20 -38
  22. package/src/sap/fe/core/TemplateModel.ts +1 -1
  23. package/src/sap/fe/core/TransactionHelper.js +1354 -1370
  24. package/src/sap/fe/core/TransactionHelper.ts +33 -22
  25. package/src/sap/fe/core/actions/collaboration/ActivitySync.js +392 -0
  26. package/src/sap/fe/core/actions/collaboration/ActivitySync.ts +355 -0
  27. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +136 -0
  28. package/src/sap/fe/core/actions/collaboration/CollaborationCommon.ts +119 -0
  29. package/src/sap/fe/core/actions/collaboration/Manage.js +262 -0
  30. package/src/sap/fe/core/actions/collaboration/Manage.ts +244 -0
  31. package/src/sap/fe/core/actions/collaboration/ManageDialog.fragment.xml +103 -0
  32. package/src/sap/fe/core/actions/collaboration/UserDetails.fragment.xml +13 -0
  33. package/src/sap/fe/core/actions/draft.js +30 -68
  34. package/src/sap/fe/core/actions/draft.ts +44 -71
  35. package/src/sap/fe/core/actions/messageHandling.js +55 -36
  36. package/src/sap/fe/core/actions/messageHandling.ts +66 -46
  37. package/src/sap/fe/core/actions/operations.js +34 -15
  38. package/src/sap/fe/core/actions/operations.ts +48 -18
  39. package/src/sap/fe/core/actions/sticky.js +17 -4
  40. package/src/sap/fe/core/actions/sticky.ts +21 -4
  41. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +69 -66
  42. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.ts +65 -0
  43. package/src/sap/fe/core/controllerextensions/EditFlow.js +1593 -1669
  44. package/src/sap/fe/core/controllerextensions/EditFlow.ts +1672 -0
  45. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +79 -54
  46. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +61 -0
  47. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +718 -779
  48. package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +783 -0
  49. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +796 -816
  50. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +803 -0
  51. package/src/sap/fe/core/controllerextensions/InternalRouting.js +1004 -1005
  52. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +978 -0
  53. package/src/sap/fe/core/controllerextensions/KPIManagement.js +487 -521
  54. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +2 -2
  55. package/src/sap/fe/core/controllerextensions/MassEdit.js +141 -169
  56. package/src/sap/fe/core/controllerextensions/MassEdit.ts +156 -0
  57. package/src/sap/fe/core/controllerextensions/MessageHandler.js +233 -244
  58. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +225 -0
  59. package/src/sap/fe/core/controllerextensions/PageReady.js +301 -336
  60. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -10
  61. package/src/sap/fe/core/controllerextensions/Paginator.js +188 -175
  62. package/src/sap/fe/core/controllerextensions/Paginator.ts +163 -0
  63. package/src/sap/fe/core/controllerextensions/Placeholder.js +157 -149
  64. package/src/sap/fe/core/controllerextensions/Placeholder.ts +151 -0
  65. package/src/sap/fe/core/controllerextensions/Routing.js +144 -125
  66. package/src/sap/fe/core/controllerextensions/Routing.ts +132 -0
  67. package/src/sap/fe/core/controllerextensions/RoutingListener.js +7 -6
  68. package/src/sap/fe/core/controllerextensions/RoutingListener.ts +3 -0
  69. package/src/sap/fe/core/controllerextensions/Share.js +230 -268
  70. package/src/sap/fe/core/controllerextensions/Share.ts +231 -0
  71. package/src/sap/fe/core/controllerextensions/SideEffects.js +592 -633
  72. package/src/sap/fe/core/controllerextensions/SideEffects.ts +8 -7
  73. package/src/sap/fe/core/controllerextensions/ViewState.js +788 -806
  74. package/src/sap/fe/core/controllerextensions/ViewState.ts +805 -0
  75. package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +2 -2
  76. package/src/sap/fe/core/controls/ActionPartial.fragment.xml +2 -2
  77. package/src/sap/fe/core/controls/CommandExecution.js +67 -66
  78. package/src/sap/fe/core/controls/CommandExecution.ts +72 -0
  79. package/src/sap/fe/core/controls/ConditionalWrapper.js +90 -75
  80. package/src/sap/fe/core/controls/ConditionalWrapper.ts +83 -0
  81. package/src/sap/fe/core/controls/CustomQuickViewPage.js +130 -125
  82. package/src/sap/fe/core/controls/CustomQuickViewPage.ts +126 -0
  83. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +103 -112
  84. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +101 -0
  85. package/src/sap/fe/core/controls/FieldWrapper.js +122 -135
  86. package/src/sap/fe/core/controls/FieldWrapper.ts +115 -0
  87. package/src/sap/fe/core/controls/FilterBar.js +162 -159
  88. package/src/sap/fe/core/controls/FilterBar.ts +143 -0
  89. package/src/sap/fe/core/controls/FormElementWrapper.js +45 -39
  90. package/src/sap/fe/core/controls/FormElementWrapper.ts +40 -0
  91. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +37 -42
  92. package/src/sap/fe/core/controls/MultiValueParameterDelegate.ts +31 -0
  93. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +126 -116
  94. package/src/sap/fe/core/controls/filterbar/FilterContainer.ts +98 -0
  95. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +241 -255
  96. package/src/sap/fe/core/controls/filterbar/VisualFilter.ts +245 -0
  97. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +150 -141
  98. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.ts +125 -0
  99. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +335 -322
  100. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +337 -0
  101. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +74 -74
  102. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +70 -0
  103. package/src/sap/fe/core/converters/ConverterContext.js +348 -379
  104. package/src/sap/fe/core/converters/ConverterContext.ts +19 -16
  105. package/src/sap/fe/core/converters/ManifestSettings.js +12 -1
  106. package/src/sap/fe/core/converters/ManifestSettings.ts +12 -1
  107. package/src/sap/fe/core/converters/ManifestWrapper.js +354 -378
  108. package/src/sap/fe/core/converters/ManifestWrapper.ts +10 -0
  109. package/src/sap/fe/core/converters/MetaModelConverter.js +6 -4
  110. package/src/sap/fe/core/converters/MetaModelConverter.ts +5 -2
  111. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  112. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -1
  113. package/src/sap/fe/core/converters/annotations/DataField.js +26 -12
  114. package/src/sap/fe/core/converters/annotations/DataField.ts +37 -13
  115. package/src/sap/fe/core/converters/controls/Common/Form.js +2 -2
  116. package/src/sap/fe/core/converters/controls/Common/Form.ts +4 -2
  117. package/src/sap/fe/core/converters/controls/Common/KPI.js +1 -1
  118. package/src/sap/fe/core/converters/controls/Common/KPI.ts +3 -2
  119. package/src/sap/fe/core/converters/controls/Common/Table.js +130 -23
  120. package/src/sap/fe/core/converters/controls/Common/Table.ts +134 -29
  121. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +118 -53
  122. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +156 -93
  123. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +161 -207
  124. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +148 -206
  125. package/src/sap/fe/core/converters/helpers/Aggregation.js +115 -133
  126. package/src/sap/fe/core/converters/helpers/BindingHelper.js +20 -6
  127. package/src/sap/fe/core/converters/helpers/BindingHelper.ts +16 -4
  128. package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +12 -1
  129. package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +11 -0
  130. package/src/sap/fe/core/converters/helpers/Key.js +42 -57
  131. package/src/sap/fe/core/converters/helpers/Key.ts +1 -1
  132. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +25 -4
  133. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +20 -3
  134. package/src/sap/fe/core/converters/templates/ListReportConverter.js +10 -4
  135. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +15 -4
  136. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -5
  137. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +5 -1
  138. package/src/sap/fe/core/designtime/AppComponent.designtime.js +92 -98
  139. package/src/sap/fe/core/designtime/AppComponent.designtime.ts +91 -0
  140. package/src/sap/fe/core/formatters/CollaborationFormatter.js +104 -0
  141. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +60 -0
  142. package/src/sap/fe/core/formatters/TableFormatter.js +53 -2
  143. package/src/sap/fe/core/formatters/TableFormatter.ts +51 -0
  144. package/src/sap/fe/core/fpm/Component.js +50 -54
  145. package/src/sap/fe/core/fpm/Component.ts +48 -0
  146. package/src/sap/fe/core/helpers/AppStartupHelper.js +323 -309
  147. package/src/sap/fe/core/helpers/AppStartupHelper.ts +363 -337
  148. package/src/sap/fe/core/helpers/BindingExpression.js +7 -7
  149. package/src/sap/fe/core/helpers/BindingExpression.ts +7 -7
  150. package/src/sap/fe/core/helpers/ClassSupport.js +186 -62
  151. package/src/sap/fe/core/helpers/ClassSupport.ts +168 -52
  152. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +5 -4
  153. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +1 -5
  154. package/src/sap/fe/core/helpers/FPMHelper.js +1 -1
  155. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  156. package/src/sap/fe/core/helpers/MassEditHelper.js +601 -684
  157. package/src/sap/fe/core/helpers/MassEditHelper.ts +699 -0
  158. package/src/sap/fe/core/helpers/ModelHelper.js +25 -1
  159. package/src/sap/fe/core/helpers/ModelHelper.ts +23 -0
  160. package/src/sap/fe/core/helpers/SemanticDateOperators.js +5 -1
  161. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +4 -0
  162. package/src/sap/fe/core/library.js +426 -451
  163. package/src/sap/fe/core/library.support.js +22 -33
  164. package/src/sap/fe/core/library.support.ts +23 -0
  165. package/src/sap/fe/core/library.ts +420 -0
  166. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +5 -3
  167. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +4 -1
  168. package/src/sap/fe/core/messagebundle.properties +22 -5
  169. package/src/sap/fe/core/messagebundle_ar.properties +27 -7
  170. package/src/sap/fe/core/messagebundle_bg.properties +27 -7
  171. package/src/sap/fe/core/messagebundle_ca.properties +27 -7
  172. package/src/sap/fe/core/messagebundle_cs.properties +27 -7
  173. package/src/sap/fe/core/messagebundle_cy.properties +27 -7
  174. package/src/sap/fe/core/messagebundle_da.properties +27 -7
  175. package/src/sap/fe/core/messagebundle_de.properties +27 -7
  176. package/src/sap/fe/core/messagebundle_el.properties +27 -7
  177. package/src/sap/fe/core/messagebundle_en.properties +27 -7
  178. package/src/sap/fe/core/messagebundle_en_GB.properties +27 -7
  179. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +27 -7
  180. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +27 -7
  181. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +27 -7
  182. package/src/sap/fe/core/messagebundle_es.properties +27 -7
  183. package/src/sap/fe/core/messagebundle_es_MX.properties +27 -7
  184. package/src/sap/fe/core/messagebundle_et.properties +27 -7
  185. package/src/sap/fe/core/messagebundle_fi.properties +28 -8
  186. package/src/sap/fe/core/messagebundle_fr.properties +28 -8
  187. package/src/sap/fe/core/messagebundle_fr_CA.properties +29 -9
  188. package/src/sap/fe/core/messagebundle_hi.properties +27 -7
  189. package/src/sap/fe/core/messagebundle_hr.properties +27 -7
  190. package/src/sap/fe/core/messagebundle_hu.properties +27 -7
  191. package/src/sap/fe/core/messagebundle_id.properties +27 -7
  192. package/src/sap/fe/core/messagebundle_it.properties +27 -7
  193. package/src/sap/fe/core/messagebundle_iw.properties +27 -7
  194. package/src/sap/fe/core/messagebundle_ja.properties +26 -6
  195. package/src/sap/fe/core/messagebundle_kk.properties +27 -7
  196. package/src/sap/fe/core/messagebundle_ko.properties +27 -7
  197. package/src/sap/fe/core/messagebundle_lt.properties +27 -7
  198. package/src/sap/fe/core/messagebundle_lv.properties +28 -8
  199. package/src/sap/fe/core/messagebundle_ms.properties +27 -7
  200. package/src/sap/fe/core/messagebundle_nl.properties +27 -7
  201. package/src/sap/fe/core/messagebundle_no.properties +27 -7
  202. package/src/sap/fe/core/messagebundle_pl.properties +27 -7
  203. package/src/sap/fe/core/messagebundle_pt.properties +28 -8
  204. package/src/sap/fe/core/messagebundle_pt_PT.properties +27 -7
  205. package/src/sap/fe/core/messagebundle_ro.properties +27 -7
  206. package/src/sap/fe/core/messagebundle_ru.properties +27 -7
  207. package/src/sap/fe/core/messagebundle_sh.properties +27 -7
  208. package/src/sap/fe/core/messagebundle_sk.properties +27 -7
  209. package/src/sap/fe/core/messagebundle_sl.properties +27 -7
  210. package/src/sap/fe/core/messagebundle_sv.properties +27 -7
  211. package/src/sap/fe/core/messagebundle_th.properties +26 -6
  212. package/src/sap/fe/core/messagebundle_tr.properties +30 -10
  213. package/src/sap/fe/core/messagebundle_uk.properties +27 -7
  214. package/src/sap/fe/core/messagebundle_vi.properties +27 -7
  215. package/src/sap/fe/core/messagebundle_zh_CN.properties +27 -7
  216. package/src/sap/fe/core/messagebundle_zh_TW.properties +27 -7
  217. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +45 -71
  218. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +154 -192
  219. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +4 -4
  220. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +66 -92
  221. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +1 -1
  222. package/src/sap/fe/core/services/NavigationServiceFactory.js +284 -339
  223. package/src/sap/fe/core/services/NavigationServiceFactory.ts +10 -13
  224. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +67 -102
  225. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +5 -2
  226. package/src/sap/fe/core/services/RoutingServiceFactory.js +754 -814
  227. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -13
  228. package/src/sap/fe/core/services/ShellServicesFactory.js +649 -736
  229. package/src/sap/fe/core/services/ShellServicesFactory.ts +7 -4
  230. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +567 -592
  231. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +22 -3
  232. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +354 -386
  233. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +21 -14
  234. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +1 -1
  235. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +1 -1
  236. package/src/sap/fe/core/support/CommonHelper.js +1 -1
  237. package/src/sap/fe/core/support/CommonHelper.ts +1 -1
  238. package/src/sap/fe/core/support/Diagnostics.js +36 -48
  239. package/src/sap/fe/core/templating/DataModelPathHelper.js +93 -85
  240. package/src/sap/fe/core/templating/DataModelPathHelper.ts +104 -95
  241. package/src/sap/fe/core/templating/FilterHelper.js +25 -32
  242. package/src/sap/fe/core/templating/FilterHelper.ts +36 -35
  243. package/src/sap/fe/core/templating/PropertyHelper.js +2 -2
  244. package/src/sap/fe/core/templating/PropertyHelper.ts +1 -1
  245. package/src/sap/fe/core/templating/UIFormatters.js +32 -26
  246. package/src/sap/fe/core/templating/UIFormatters.ts +37 -24
@@ -7,28 +7,10 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
7
7
 
8
8
  var _exports = {};
9
9
 
10
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
-
12
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13
-
14
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
15
-
16
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
17
-
18
10
  function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
19
11
 
20
12
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
21
13
 
22
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
23
-
24
- function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
25
-
26
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
27
-
28
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
29
-
30
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
31
-
32
14
  function getMetadataETag(sUrl, sETag, mUpdatedMetaModelETags) {
33
15
  return new Promise(function (resolve) {
34
16
  // There is an Url in the FE cache, that's not in the MetaModel yet -> we need to check the ETag
@@ -51,155 +33,144 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
51
33
  var CacheHandlerService = /*#__PURE__*/function (_Service) {
52
34
  _inherits(CacheHandlerService, _Service);
53
35
 
54
- var _super = _createSuper(CacheHandlerService);
55
-
56
36
  function CacheHandlerService() {
57
- _classCallCheck(this, CacheHandlerService);
58
-
59
- return _super.apply(this, arguments);
37
+ return _Service.apply(this, arguments) || this;
60
38
  }
61
39
 
62
40
  _exports.CacheHandlerService = CacheHandlerService;
41
+ var _proto = CacheHandlerService.prototype;
63
42
 
64
- _createClass(CacheHandlerService, [{
65
- key: "init",
66
- value: function init() {
67
- var _this = this;
43
+ _proto.init = function init() {
44
+ var _this = this;
68
45
 
69
- var oContext = this.getContext();
70
- this.oFactory = oContext.factory;
71
- var mSettings = oContext.settings;
46
+ var oContext = this.getContext();
47
+ this.oFactory = oContext.factory;
48
+ var mSettings = oContext.settings;
72
49
 
73
- if (!mSettings.metaModel) {
74
- throw new Error("a `metaModel` property is expected when instantiating the CacheHandlerService");
75
- }
76
-
77
- this.oMetaModel = mSettings.metaModel;
78
- this.oAppComponent = mSettings.appComponent;
79
- this.oComponent = mSettings.component;
80
- this.initPromise = this.oMetaModel.fetchEntityContainer().then(function () {
81
- return _this;
82
- });
83
- this.mCacheNeedsInvalidate = {};
84
- }
85
- }, {
86
- key: "exit",
87
- value: function exit() {
88
- // Deregister global instance
89
- this.oFactory.removeGlobalInstance(this.oMetaModel);
50
+ if (!mSettings.metaModel) {
51
+ throw new Error("a `metaModel` property is expected when instantiating the CacheHandlerService");
90
52
  }
91
- }, {
92
- key: "validateCacheKey",
93
- value: function validateCacheKey(sCacheIdentifier) {
94
- var _this2 = this;
95
-
96
- // Keep track if the cache will anyway need to be updated
97
- var bCacheNeedUpdate = true;
98
- return CacheManager.get(sCacheIdentifier).then(function (mCacheOutput) {
99
- // We provide a default key so that an xml view cache is written
100
- var mMetaModelETags = _this2.getETags();
101
-
102
- var sUpdatedCacheKey = JSON.stringify(mMetaModelETags); // Case #1a - No cache, so mCacheOuput is empty, cacheKey = current metamodel ETags
103
-
104
- if (mCacheOutput) {
105
- // Case #2 - Cache entry found, check if it's still valid
106
- var mUpdatedMetaModelETags = {};
107
- var mCachedETags = JSON.parse(mCacheOutput.cachedETags);
108
- return Promise.all(Object.keys(mCachedETags).map(function (sUrl) {
109
- // Check validity of every single Url that's in the FE Cache object
110
- if (mCachedETags[sUrl]) {
111
- if (mMetaModelETags[sUrl]) {
112
- // Case #2a - Same number of ETags in the cache and in the metadata
113
- mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
114
- return mCachedETags[sUrl] === mMetaModelETags[sUrl];
115
- } else {
116
- // Case #2b - No ETag in the cache for that URL, cachedETags was enhanced
117
- return getMetadataETag(sUrl, mCachedETags[sUrl], mUpdatedMetaModelETags);
118
- }
119
- } else {
120
- // Case #2z - Last Templating added an URL without ETag
53
+
54
+ this.oMetaModel = mSettings.metaModel;
55
+ this.oAppComponent = mSettings.appComponent;
56
+ this.oComponent = mSettings.component;
57
+ this.initPromise = this.oMetaModel.fetchEntityContainer().then(function () {
58
+ return _this;
59
+ });
60
+ this.mCacheNeedsInvalidate = {};
61
+ };
62
+
63
+ _proto.exit = function exit() {
64
+ // Deregister global instance
65
+ this.oFactory.removeGlobalInstance(this.oMetaModel);
66
+ };
67
+
68
+ _proto.validateCacheKey = function validateCacheKey(sCacheIdentifier) {
69
+ var _this2 = this;
70
+
71
+ // Keep track if the cache will anyway need to be updated
72
+ var bCacheNeedUpdate = true;
73
+ return CacheManager.get(sCacheIdentifier).then(function (mCacheOutput) {
74
+ // We provide a default key so that an xml view cache is written
75
+ var mMetaModelETags = _this2.getETags();
76
+
77
+ var sUpdatedCacheKey = JSON.stringify(mMetaModelETags); // Case #1a - No cache, so mCacheOuput is empty, cacheKey = current metamodel ETags
78
+
79
+ if (mCacheOutput) {
80
+ // Case #2 - Cache entry found, check if it's still valid
81
+ var mUpdatedMetaModelETags = {};
82
+ var mCachedETags = JSON.parse(mCacheOutput.cachedETags);
83
+ return Promise.all(Object.keys(mCachedETags).map(function (sUrl) {
84
+ // Check validity of every single Url that's in the FE Cache object
85
+ if (mCachedETags[sUrl]) {
86
+ if (mMetaModelETags[sUrl]) {
87
+ // Case #2a - Same number of ETags in the cache and in the metadata
121
88
  mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
122
89
  return mCachedETags[sUrl] === mMetaModelETags[sUrl];
123
- }
124
- })).then(function (aValidETags) {
125
- bCacheNeedUpdate = aValidETags.indexOf(false) >= 0; // Case #2a - Same number of ETags and all valid -> we return the viewCacheKey
126
- // Case #2b - Different number of ETags and still all valid -> we return the viewCacheKey
127
- // Case #2c - Same number of ETags but different values, main service Etag has changed, use that as cache key
128
- // Case #2d - Different number of ETags but different value, main service Etag or linked service Etag has changed, new ETags should be used as cacheKey
129
- // Case #2z - Cache has an invalid Etag - if there is an Etag provided from MetaModel use it as cacheKey
130
-
131
- if (Object.keys(mUpdatedMetaModelETags).some(function (sUrl) {
132
- return !mUpdatedMetaModelETags[sUrl];
133
- })) {
134
- // At least one of the MetaModel URLs doesn't provide an ETag, so no caching
135
- return null;
136
90
  } else {
137
- return bCacheNeedUpdate ? JSON.stringify(mUpdatedMetaModelETags) : mCacheOutput.viewCacheKey;
91
+ // Case #2b - No ETag in the cache for that URL, cachedETags was enhanced
92
+ return getMetadataETag(sUrl, mCachedETags[sUrl], mUpdatedMetaModelETags);
138
93
  }
139
- });
140
- } else if (Object.keys(mMetaModelETags).some(function (sUrl) {
141
- return !mMetaModelETags[sUrl];
142
- })) {
143
- // Check if cache can be used (all the metadata and annotations have to provide at least a ETag or a Last-Modified header)
144
- // Case #1-b - No Cache, mCacheOuput is empty, but metamodel etags cannot be used, so no caching
145
- bCacheNeedUpdate = true;
146
- sUpdatedCacheKey = null;
147
- }
148
-
149
- return sUpdatedCacheKey;
150
- }).catch(function () {
151
- // Don't use view cache in case of issues with the LRU cache
94
+ } else {
95
+ // Case #2z - Last Templating added an URL without ETag
96
+ mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
97
+ return mCachedETags[sUrl] === mMetaModelETags[sUrl];
98
+ }
99
+ })).then(function (aValidETags) {
100
+ bCacheNeedUpdate = aValidETags.indexOf(false) >= 0; // Case #2a - Same number of ETags and all valid -> we return the viewCacheKey
101
+ // Case #2b - Different number of ETags and still all valid -> we return the viewCacheKey
102
+ // Case #2c - Same number of ETags but different values, main service Etag has changed, use that as cache key
103
+ // Case #2d - Different number of ETags but different value, main service Etag or linked service Etag has changed, new ETags should be used as cacheKey
104
+ // Case #2z - Cache has an invalid Etag - if there is an Etag provided from MetaModel use it as cacheKey
105
+
106
+ if (Object.keys(mUpdatedMetaModelETags).some(function (sUrl) {
107
+ return !mUpdatedMetaModelETags[sUrl];
108
+ })) {
109
+ // At least one of the MetaModel URLs doesn't provide an ETag, so no caching
110
+ return null;
111
+ } else {
112
+ return bCacheNeedUpdate ? JSON.stringify(mUpdatedMetaModelETags) : mCacheOutput.viewCacheKey;
113
+ }
114
+ });
115
+ } else if (Object.keys(mMetaModelETags).some(function (sUrl) {
116
+ return !mMetaModelETags[sUrl];
117
+ })) {
118
+ // Check if cache can be used (all the metadata and annotations have to provide at least a ETag or a Last-Modified header)
119
+ // Case #1-b - No Cache, mCacheOuput is empty, but metamodel etags cannot be used, so no caching
152
120
  bCacheNeedUpdate = true;
153
- return null;
154
- }).then(function (sCacheKey) {
155
- _this2.mCacheNeedsInvalidate[sCacheIdentifier] = bCacheNeedUpdate;
156
- return sCacheKey;
157
- });
158
- }
159
- }, {
160
- key: "invalidateIfNeeded",
161
- value: function invalidateIfNeeded(sCacheKeys, sCacheIdentifier) {
162
- // Check FE cache after XML view is processed completely
163
- var sDataSourceETags = JSON.stringify(this.getETags());
164
-
165
- if (this.mCacheNeedsInvalidate[sCacheIdentifier] || sCacheKeys && sCacheKeys !== sDataSourceETags) {
166
- // Something in the sources and/or its ETags changed -> update the FE cache
167
- var mCacheKeys = {}; // New ETags that need to be verified, may differ from the one used to generate the view
168
-
169
- mCacheKeys.cachedETags = sDataSourceETags; // Old ETags that are used for the xml view cache as key
170
-
171
- mCacheKeys.viewCacheKey = sCacheKeys;
172
- return CacheManager.set(sCacheIdentifier, mCacheKeys);
173
- } else {
174
- return Promise.resolve();
121
+ sUpdatedCacheKey = null;
175
122
  }
123
+
124
+ return sUpdatedCacheKey;
125
+ }).catch(function () {
126
+ // Don't use view cache in case of issues with the LRU cache
127
+ bCacheNeedUpdate = true;
128
+ return null;
129
+ }).then(function (sCacheKey) {
130
+ _this2.mCacheNeedsInvalidate[sCacheIdentifier] = bCacheNeedUpdate;
131
+ return sCacheKey;
132
+ });
133
+ };
134
+
135
+ _proto.invalidateIfNeeded = function invalidateIfNeeded(sCacheKeys, sCacheIdentifier) {
136
+ // Check FE cache after XML view is processed completely
137
+ var sDataSourceETags = JSON.stringify(this.getETags());
138
+
139
+ if (this.mCacheNeedsInvalidate[sCacheIdentifier] || sCacheKeys && sCacheKeys !== sDataSourceETags) {
140
+ // Something in the sources and/or its ETags changed -> update the FE cache
141
+ var mCacheKeys = {}; // New ETags that need to be verified, may differ from the one used to generate the view
142
+
143
+ mCacheKeys.cachedETags = sDataSourceETags; // Old ETags that are used for the xml view cache as key
144
+
145
+ mCacheKeys.viewCacheKey = sCacheKeys;
146
+ return CacheManager.set(sCacheIdentifier, mCacheKeys);
147
+ } else {
148
+ return Promise.resolve();
176
149
  }
177
- }, {
178
- key: "getETags",
179
- value: function getETags() {
180
- var mMetaModelETags = this.oMetaModel.getETags(); // ETags from UI5 are either a Date or a string, let's rationalize that
181
-
182
- Object.keys(mMetaModelETags).forEach(function (sMetaModelKey) {
183
- if (mMetaModelETags[sMetaModelKey] instanceof Date) {
184
- // MetaModel contains a Last-Modified timestamp for the URL
185
- mMetaModelETags[sMetaModelKey] = mMetaModelETags[sMetaModelKey].toISOString();
186
- }
187
- }); // add also the manifest hash as UI5 only considers the root component hash
188
-
189
- var oManifestContent = this.oAppComponent.getManifest();
190
- var sManifestHash = hash(JSON.stringify({
191
- sapApp: oManifestContent["sap.app"],
192
- viewData: this.oComponent.getViewData()
193
- }));
194
- mMetaModelETags["manifest"] = sManifestHash;
195
- return mMetaModelETags;
196
- }
197
- }, {
198
- key: "getInterface",
199
- value: function getInterface() {
200
- return this;
201
- }
202
- }]);
150
+ };
151
+
152
+ _proto.getETags = function getETags() {
153
+ var mMetaModelETags = this.oMetaModel.getETags(); // ETags from UI5 are either a Date or a string, let's rationalize that
154
+
155
+ Object.keys(mMetaModelETags).forEach(function (sMetaModelKey) {
156
+ if (mMetaModelETags[sMetaModelKey] instanceof Date) {
157
+ // MetaModel contains a Last-Modified timestamp for the URL
158
+ mMetaModelETags[sMetaModelKey] = mMetaModelETags[sMetaModelKey].toISOString();
159
+ }
160
+ }); // add also the manifest hash as UI5 only considers the root component hash
161
+
162
+ var oManifestContent = this.oAppComponent.getManifest();
163
+ var sManifestHash = hash(JSON.stringify({
164
+ sapApp: oManifestContent["sap.app"],
165
+ viewData: this.oComponent.getViewData()
166
+ }));
167
+ mMetaModelETags["manifest"] = sManifestHash;
168
+ return mMetaModelETags;
169
+ };
170
+
171
+ _proto.getInterface = function getInterface() {
172
+ return this;
173
+ };
203
174
 
204
175
  return CacheHandlerService;
205
176
  }(Service);
@@ -209,63 +180,54 @@ sap.ui.define(["sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactor
209
180
  var CacheHandlerServiceFactory = /*#__PURE__*/function (_ServiceFactory) {
210
181
  _inherits(CacheHandlerServiceFactory, _ServiceFactory);
211
182
 
212
- var _super2 = _createSuper(CacheHandlerServiceFactory);
213
-
214
183
  function CacheHandlerServiceFactory() {
215
184
  var _this3;
216
185
 
217
- _classCallCheck(this, CacheHandlerServiceFactory);
218
-
219
186
  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
220
187
  args[_key] = arguments[_key];
221
188
  }
222
189
 
223
- _this3 = _super2.call.apply(_super2, [this].concat(args));
224
-
225
- _defineProperty(_assertThisInitialized(_this3), "_oInstanceRegistry", {});
226
-
190
+ _this3 = _ServiceFactory.call.apply(_ServiceFactory, [this].concat(args)) || this;
191
+ _this3._oInstanceRegistry = {};
227
192
  return _this3;
228
193
  }
229
194
 
230
- _createClass(CacheHandlerServiceFactory, [{
231
- key: "createInstance",
232
- value: function createInstance(oServiceContext) {
233
- var _this4 = this;
195
+ var _proto2 = CacheHandlerServiceFactory.prototype;
234
196
 
235
- var sMetaModelId = oServiceContext.settings.metaModel.getId();
236
- var cacheHandlerInstance = this._oInstanceRegistry[sMetaModelId];
197
+ _proto2.createInstance = function createInstance(oServiceContext) {
198
+ var _this4 = this;
237
199
 
238
- if (!cacheHandlerInstance) {
239
- this._oInstanceRegistry[sMetaModelId] = cacheHandlerInstance = new CacheHandlerService(Object.assign({
240
- factory: this,
241
- scopeObject: null,
242
- scopeType: "service"
243
- }, oServiceContext));
244
- }
200
+ var sMetaModelId = oServiceContext.settings.metaModel.getId();
201
+ var cacheHandlerInstance = this._oInstanceRegistry[sMetaModelId];
245
202
 
246
- return cacheHandlerInstance.initPromise.then(function () {
247
- return _this4._oInstanceRegistry[sMetaModelId];
248
- }).catch(function (e) {
249
- // In case of error delete the global instance;
250
- _this4._oInstanceRegistry[sMetaModelId] = null;
251
- throw e;
252
- });
253
- }
254
- }, {
255
- key: "getInstance",
256
- value: function getInstance(oMetaModel) {
257
- return this._oInstanceRegistry[oMetaModel.getId()];
203
+ if (!cacheHandlerInstance) {
204
+ this._oInstanceRegistry[sMetaModelId] = cacheHandlerInstance = new CacheHandlerService(Object.assign({
205
+ factory: this,
206
+ scopeObject: null,
207
+ scopeType: "service"
208
+ }, oServiceContext));
258
209
  }
259
- }, {
260
- key: "removeGlobalInstance",
261
- value: function removeGlobalInstance(oMetaModel) {
262
- this._oInstanceRegistry[oMetaModel.getId()] = null;
263
- }
264
- }]);
210
+
211
+ return cacheHandlerInstance.initPromise.then(function () {
212
+ return _this4._oInstanceRegistry[sMetaModelId];
213
+ }).catch(function (e) {
214
+ // In case of error delete the global instance;
215
+ _this4._oInstanceRegistry[sMetaModelId] = null;
216
+ throw e;
217
+ });
218
+ };
219
+
220
+ _proto2.getInstance = function getInstance(oMetaModel) {
221
+ return this._oInstanceRegistry[oMetaModel.getId()];
222
+ };
223
+
224
+ _proto2.removeGlobalInstance = function removeGlobalInstance(oMetaModel) {
225
+ this._oInstanceRegistry[oMetaModel.getId()] = null;
226
+ };
265
227
 
266
228
  return CacheHandlerServiceFactory;
267
229
  }(ServiceFactory);
268
230
 
269
231
  return CacheHandlerServiceFactory;
270
232
  }, false);
271
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5LnRzIl0sIm5hbWVzIjpbImdldE1ldGFkYXRhRVRhZyIsInNVcmwiLCJzRVRhZyIsIm1VcGRhdGVkTWV0YU1vZGVsRVRhZ3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsImpRdWVyeSIsImFqYXgiLCJtZXRob2QiLCJkb25lIiwib1Jlc3BvbnNlIiwic1RleHRTdGF0dXMiLCJqcVhIUiIsImdldFJlc3BvbnNlSGVhZGVyIiwiZmFpbCIsIkNhY2hlSGFuZGxlclNlcnZpY2UiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJvRmFjdG9yeSIsImZhY3RvcnkiLCJtU2V0dGluZ3MiLCJzZXR0aW5ncyIsIm1ldGFNb2RlbCIsIkVycm9yIiwib01ldGFNb2RlbCIsIm9BcHBDb21wb25lbnQiLCJhcHBDb21wb25lbnQiLCJvQ29tcG9uZW50IiwiY29tcG9uZW50IiwiaW5pdFByb21pc2UiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsInRoZW4iLCJtQ2FjaGVOZWVkc0ludmFsaWRhdGUiLCJyZW1vdmVHbG9iYWxJbnN0YW5jZSIsInNDYWNoZUlkZW50aWZpZXIiLCJiQ2FjaGVOZWVkVXBkYXRlIiwiQ2FjaGVNYW5hZ2VyIiwiZ2V0IiwibUNhY2hlT3V0cHV0IiwibU1ldGFNb2RlbEVUYWdzIiwiZ2V0RVRhZ3MiLCJzVXBkYXRlZENhY2hlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm1DYWNoZWRFVGFncyIsInBhcnNlIiwiY2FjaGVkRVRhZ3MiLCJhbGwiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwiYVZhbGlkRVRhZ3MiLCJpbmRleE9mIiwic29tZSIsInZpZXdDYWNoZUtleSIsImNhdGNoIiwic0NhY2hlS2V5Iiwic0NhY2hlS2V5cyIsInNEYXRhU291cmNlRVRhZ3MiLCJtQ2FjaGVLZXlzIiwic2V0IiwiZm9yRWFjaCIsInNNZXRhTW9kZWxLZXkiLCJEYXRlIiwidG9JU09TdHJpbmciLCJvTWFuaWZlc3RDb250ZW50IiwiZ2V0TWFuaWZlc3QiLCJzTWFuaWZlc3RIYXNoIiwiaGFzaCIsInNhcEFwcCIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJTZXJ2aWNlIiwiQ2FjaGVIYW5kbGVyU2VydmljZUZhY3RvcnkiLCJvU2VydmljZUNvbnRleHQiLCJzTWV0YU1vZGVsSWQiLCJnZXRJZCIsImNhY2hlSGFuZGxlckluc3RhbmNlIiwiX29JbnN0YW5jZVJlZ2lzdHJ5IiwiYXNzaWduIiwic2NvcGVPYmplY3QiLCJzY29wZVR5cGUiLCJlIiwiU2VydmljZUZhY3RvcnkiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRQSxXQUFTQSxlQUFULENBQXlCQyxJQUF6QixFQUFvQ0MsS0FBcEMsRUFBZ0RDLHNCQUFoRCxFQUE2RTtBQUM1RSxXQUFPLElBQUlDLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQWtCO0FBQ3BDO0FBQ0NDLE1BQUFBLE1BQUQsQ0FDRUMsSUFERixDQUNPTixJQURQLEVBQ2E7QUFBRU8sUUFBQUEsTUFBTSxFQUFFO0FBQVYsT0FEYixFQUVFQyxJQUZGLENBRU8sVUFBU0MsU0FBVCxFQUF5QkMsV0FBekIsRUFBMkNDLEtBQTNDLEVBQXVEO0FBQzVEO0FBQ0E7QUFDQTtBQUNBVCxRQUFBQSxzQkFBc0IsQ0FBQ0YsSUFBRCxDQUF0QixHQUErQlcsS0FBSyxDQUFDQyxpQkFBTixDQUF3QixNQUF4QixLQUFtQ0QsS0FBSyxDQUFDQyxpQkFBTixDQUF3QixlQUF4QixDQUFsRTtBQUNBUixRQUFBQSxPQUFPLENBQUNILEtBQUssS0FBS0Msc0JBQXNCLENBQUNGLElBQUQsQ0FBakMsQ0FBUDtBQUNBLE9BUkYsRUFTRWEsSUFURixDQVNPLFlBQVc7QUFDaEI7QUFDQVgsUUFBQUEsc0JBQXNCLENBQUNGLElBQUQsQ0FBdEIsR0FBK0IsRUFBL0I7QUFDQUksUUFBQUEsT0FBTyxDQUFDLEtBQUQsQ0FBUDtBQUNBLE9BYkY7QUFjQSxLQWhCTSxDQUFQO0FBaUJBOztNQUtZVSxt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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBDYWNoZU1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL2NhY2hlL0NhY2hlTWFuYWdlclwiO1xuaW1wb3J0IGhhc2ggZnJvbSBcInNhcC9iYXNlL3N0cmluZ3MvaGFzaFwiO1xuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZVwiO1xuaW1wb3J0IGpRdWVyeSBmcm9tIFwic2FwL3VpL3RoaXJkcGFydHkvanF1ZXJ5XCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSBcInNhcC9mZS9jb3JlXCI7XG5pbXBvcnQgVUlDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL1VJQ29tcG9uZW50XCI7XG5cbmZ1bmN0aW9uIGdldE1ldGFkYXRhRVRhZyhzVXJsOiBhbnksIHNFVGFnOiBhbnksIG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3M6IGFueSkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdC8vIFRoZXJlIGlzIGFuIFVybCBpbiB0aGUgRkUgY2FjaGUsIHRoYXQncyBub3QgaW4gdGhlIE1ldGFNb2RlbCB5ZXQgLT4gd2UgbmVlZCB0byBjaGVjayB0aGUgRVRhZ1xuXHRcdChqUXVlcnkgYXMgYW55KVxuXHRcdFx0LmFqYXgoc1VybCwgeyBtZXRob2Q6IFwiR0VUXCIgfSlcblx0XHRcdC5kb25lKGZ1bmN0aW9uKG9SZXNwb25zZTogYW55LCBzVGV4dFN0YXR1czogYW55LCBqcVhIUjogYW55KSB7XG5cdFx0XHRcdC8vIEVUYWcgaXMgbm90IHRoZSBzYW1lIC0+IGludmFsaWRcblx0XHRcdFx0Ly8gRVRhZyBpcyB0aGUgc2FtZSAtPiB2YWxpZFxuXHRcdFx0XHQvLyBJZiBFVGFnIGlzIGF2YWlsYWJsZSB1c2UgaXQsIG90aGVyd2lzZSB1c2UgTGFzdC1Nb2RpZmllZFxuXHRcdFx0XHRtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJFVGFnXCIpIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKFwiTGFzdC1Nb2RpZmllZFwiKTtcblx0XHRcdFx0cmVzb2x2ZShzRVRhZyA9PT0gbVVwZGF0ZWRNZXRhTW9kZWxFVGFnc1tzVXJsXSk7XG5cdFx0XHR9KVxuXHRcdFx0LmZhaWwoZnVuY3Rpb24oKSB7XG5cdFx0XHRcdC8vIENhc2UgMnogLSBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSBtYXAgc28gdGhhdCB3ZSBpbnZhbGlkYXRlIHRoZSBjYWNoZVxuXHRcdFx0XHRtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdID0gXCJcIjtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9KTtcblx0fSk7XG59XG50eXBlIENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncyA9IHtcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbDtcbn07XG5cbmV4cG9ydCBjbGFzcyBDYWNoZUhhbmRsZXJTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxDYWNoZUhhbmRsZXJTZXJ2aWNlU2V0dGluZ3M+IHtcblx0cmVzb2x2ZUZuOiBhbnk7XG5cdHJlamVjdEZuOiBhbnk7XG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxhbnk+O1xuXG5cdG9GYWN0b3J5ITogQ2FjaGVIYW5kbGVyU2VydmljZUZhY3Rvcnk7XG5cdG9NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50O1xuXHRvQ29tcG9uZW50ITogVUlDb21wb25lbnQ7XG5cdG1DYWNoZU5lZWRzSW52YWxpZGF0ZTogYW55O1xuXG5cdGluaXQoKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHR0aGlzLm9GYWN0b3J5ID0gb0NvbnRleHQuZmFjdG9yeTtcblx0XHRjb25zdCBtU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRpZiAoIW1TZXR0aW5ncy5tZXRhTW9kZWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImEgYG1ldGFNb2RlbGAgcHJvcGVydHkgaXMgZXhwZWN0ZWQgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBDYWNoZUhhbmRsZXJTZXJ2aWNlXCIpO1xuXHRcdH1cblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBtU2V0dGluZ3MubWV0YU1vZGVsO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG1TZXR0aW5ncy5hcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5vQ29tcG9uZW50ID0gbVNldHRpbmdzLmNvbXBvbmVudDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gdGhpcy5vTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0XHR0aGlzLm1DYWNoZU5lZWRzSW52YWxpZGF0ZSA9IHt9O1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0Ly8gRGVyZWdpc3RlciBnbG9iYWwgaW5zdGFuY2Vcblx0XHR0aGlzLm9GYWN0b3J5LnJlbW92ZUdsb2JhbEluc3RhbmNlKHRoaXMub01ldGFNb2RlbCk7XG5cdH1cblx0dmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyOiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdC8vIEtlZXAgdHJhY2sgaWYgdGhlIGNhY2hlIHdpbGwgYW55d2F5IG5lZWQgdG8gYmUgdXBkYXRlZFxuXHRcdGxldCBiQ2FjaGVOZWVkVXBkYXRlID0gdHJ1ZTtcblx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLmdldChzQ2FjaGVJZGVudGlmaWVyKVxuXHRcdFx0LnRoZW4oKG1DYWNoZU91dHB1dDogYW55KSA9PiB7XG5cdFx0XHRcdC8vIFdlIHByb3ZpZGUgYSBkZWZhdWx0IGtleSBzbyB0aGF0IGFuIHhtbCB2aWV3IGNhY2hlIGlzIHdyaXR0ZW5cblx0XHRcdFx0Y29uc3QgbU1ldGFNb2RlbEVUYWdzID0gdGhpcy5nZXRFVGFncygpO1xuXHRcdFx0XHRsZXQgc1VwZGF0ZWRDYWNoZUtleTogc3RyaW5nIHwgbnVsbCA9IEpTT04uc3RyaW5naWZ5KG1NZXRhTW9kZWxFVGFncyk7XG5cdFx0XHRcdC8vIENhc2UgIzFhIC0gTm8gY2FjaGUsIHNvIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBjYWNoZUtleSA9IGN1cnJlbnQgbWV0YW1vZGVsIEVUYWdzXG5cdFx0XHRcdGlmIChtQ2FjaGVPdXRwdXQpIHtcblx0XHRcdFx0XHQvLyBDYXNlICMyIC0gQ2FjaGUgZW50cnkgZm91bmQsIGNoZWNrIGlmIGl0J3Mgc3RpbGwgdmFsaWRcblx0XHRcdFx0XHRjb25zdCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRjb25zdCBtQ2FjaGVkRVRhZ3MgPSBKU09OLnBhcnNlKG1DYWNoZU91dHB1dC5jYWNoZWRFVGFncyk7XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobUNhY2hlZEVUYWdzKS5tYXAoZnVuY3Rpb24oc1VybDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIHZhbGlkaXR5IG9mIGV2ZXJ5IHNpbmdsZSBVcmwgdGhhdCdzIGluIHRoZSBGRSBDYWNoZSBvYmplY3Rcblx0XHRcdFx0XHRcdFx0aWYgKG1DYWNoZWRFVGFnc1tzVXJsXSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc1VybF0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJhIC0gU2FtZSBudW1iZXIgb2YgRVRhZ3MgaW4gdGhlIGNhY2hlIGFuZCBpbiB0aGUgbWV0YWRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbUNhY2hlZEVUYWdzW3NVcmxdID09PSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJiIC0gTm8gRVRhZyBpbiB0aGUgY2FjaGUgZm9yIHRoYXQgVVJMLCBjYWNoZWRFVGFncyB3YXMgZW5oYW5jZWRcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBnZXRNZXRhZGF0YUVUYWcoc1VybCwgbUNhY2hlZEVUYWdzW3NVcmxdLCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBMYXN0IFRlbXBsYXRpbmcgYWRkZWQgYW4gVVJMIHdpdGhvdXQgRVRhZ1xuXHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1DYWNoZWRFVGFnc1tzVXJsXSA9PT0gbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCkudGhlbihmdW5jdGlvbihhVmFsaWRFVGFnczogYW55W10pIHtcblx0XHRcdFx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSBhVmFsaWRFVGFncy5pbmRleE9mKGZhbHNlKSA+PSAwO1xuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmEgLSBTYW1lIG51bWJlciBvZiBFVGFncyBhbmQgYWxsIHZhbGlkIC0+IHdlIHJldHVybiB0aGUgdmlld0NhY2hlS2V5XG5cdFx0XHRcdFx0XHQvLyBDYXNlICMyYiAtIERpZmZlcmVudCBudW1iZXIgb2YgRVRhZ3MgYW5kIHN0aWxsIGFsbCB2YWxpZCAtPiB3ZSByZXR1cm4gdGhlIHZpZXdDYWNoZUtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmMgLSBTYW1lIG51bWJlciBvZiBFVGFncyBidXQgZGlmZmVyZW50IHZhbHVlcywgbWFpbiBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIHVzZSB0aGF0IGFzIGNhY2hlIGtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmQgLSBEaWZmZXJlbnQgbnVtYmVyIG9mIEVUYWdzIGJ1dCBkaWZmZXJlbnQgdmFsdWUsIG1haW4gc2VydmljZSBFdGFnIG9yIGxpbmtlZCBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIG5ldyBFVGFncyBzaG91bGQgYmUgdXNlZCBhcyBjYWNoZUtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBDYWNoZSBoYXMgYW4gaW52YWxpZCBFdGFnIC0gaWYgdGhlcmUgaXMgYW4gRXRhZyBwcm92aWRlZCBmcm9tIE1ldGFNb2RlbCB1c2UgaXQgYXMgY2FjaGVLZXlcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykuc29tZShmdW5jdGlvbihzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIW1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXQgbGVhc3Qgb25lIG9mIHRoZSBNZXRhTW9kZWwgVVJMcyBkb2Vzbid0IHByb3ZpZGUgYW4gRVRhZywgc28gbm8gY2FjaGluZ1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ2FjaGVOZWVkVXBkYXRlID8gSlNPTi5zdHJpbmdpZnkobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykgOiBtQ2FjaGVPdXRwdXQudmlld0NhY2hlS2V5O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuc29tZShmdW5jdGlvbihzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAhbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGNhY2hlIGNhbiBiZSB1c2VkIChhbGwgdGhlIG1ldGFkYXRhIGFuZCBhbm5vdGF0aW9ucyBoYXZlIHRvIHByb3ZpZGUgYXQgbGVhc3QgYSBFVGFnIG9yIGEgTGFzdC1Nb2RpZmllZCBoZWFkZXIpXG5cdFx0XHRcdFx0Ly8gQ2FzZSAjMS1iIC0gTm8gQ2FjaGUsIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBidXQgbWV0YW1vZGVsIGV0YWdzIGNhbm5vdCBiZSB1c2VkLCBzbyBubyBjYWNoaW5nXG5cdFx0XHRcdFx0YkNhY2hlTmVlZFVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0c1VwZGF0ZWRDYWNoZUtleSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNVcGRhdGVkQ2FjaGVLZXk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0Ly8gRG9uJ3QgdXNlIHZpZXcgY2FjaGUgaW4gY2FzZSBvZiBpc3N1ZXMgd2l0aCB0aGUgTFJVIGNhY2hlXG5cdFx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoc0NhY2hlS2V5OiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gPSBiQ2FjaGVOZWVkVXBkYXRlO1xuXHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0fSk7XG5cdH1cblx0aW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleXM6IHN0cmluZywgc0NhY2hlSWRlbnRpZmllcjogc3RyaW5nKSB7XG5cdFx0Ly8gQ2hlY2sgRkUgY2FjaGUgYWZ0ZXIgWE1MIHZpZXcgaXMgcHJvY2Vzc2VkIGNvbXBsZXRlbHlcblx0XHRjb25zdCBzRGF0YVNvdXJjZUVUYWdzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRFVGFncygpKTtcblx0XHRpZiAodGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gfHwgKHNDYWNoZUtleXMgJiYgc0NhY2hlS2V5cyAhPT0gc0RhdGFTb3VyY2VFVGFncykpIHtcblx0XHRcdC8vIFNvbWV0aGluZyBpbiB0aGUgc291cmNlcyBhbmQvb3IgaXRzIEVUYWdzIGNoYW5nZWQgLT4gdXBkYXRlIHRoZSBGRSBjYWNoZVxuXHRcdFx0Y29uc3QgbUNhY2hlS2V5czogYW55ID0ge307XG5cdFx0XHQvLyBOZXcgRVRhZ3MgdGhhdCBuZWVkIHRvIGJlIHZlcmlmaWVkLCBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB2aWV3XG5cdFx0XHRtQ2FjaGVLZXlzLmNhY2hlZEVUYWdzID0gc0RhdGFTb3VyY2VFVGFncztcblx0XHRcdC8vIE9sZCBFVGFncyB0aGF0IGFyZSB1c2VkIGZvciB0aGUgeG1sIHZpZXcgY2FjaGUgYXMga2V5XG5cdFx0XHRtQ2FjaGVLZXlzLnZpZXdDYWNoZUtleSA9IHNDYWNoZUtleXM7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLnNldChzQ2FjaGVJZGVudGlmaWVyLCBtQ2FjaGVLZXlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXHRnZXRFVGFncygpIHtcblx0XHRjb25zdCBtTWV0YU1vZGVsRVRhZ3MgPSAodGhpcy5vTWV0YU1vZGVsIGFzIGFueSkuZ2V0RVRhZ3MoKTtcblx0XHQvLyBFVGFncyBmcm9tIFVJNSBhcmUgZWl0aGVyIGEgRGF0ZSBvciBhIHN0cmluZywgbGV0J3MgcmF0aW9uYWxpemUgdGhhdFxuXHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuZm9yRWFjaChmdW5jdGlvbihzTWV0YU1vZGVsS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc01ldGFNb2RlbEtleV0gaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdC8vIE1ldGFNb2RlbCBjb250YWlucyBhIExhc3QtTW9kaWZpZWQgdGltZXN0YW1wIGZvciB0aGUgVVJMXG5cdFx0XHRcdG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XSA9IG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XS50b0lTT1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gYWRkIGFsc28gdGhlIG1hbmlmZXN0IGhhc2ggYXMgVUk1IG9ubHkgY29uc2lkZXJzIHRoZSByb290IGNvbXBvbmVudCBoYXNoXG5cdFx0Y29uc3Qgb01hbmlmZXN0Q29udGVudCA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpO1xuXHRcdGNvbnN0IHNNYW5pZmVzdEhhc2ggPSBoYXNoKFxuXHRcdFx0SlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRzYXBBcHA6IG9NYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdLFxuXHRcdFx0XHR2aWV3RGF0YTogKHRoaXMub0NvbXBvbmVudCBhcyBhbnkpLmdldFZpZXdEYXRhKClcblx0XHRcdH0pXG5cdFx0KTtcblx0XHRtTWV0YU1vZGVsRVRhZ3NbXCJtYW5pZmVzdFwiXSA9IHNNYW5pZmVzdEhhc2g7XG5cdFx0cmV0dXJuIG1NZXRhTW9kZWxFVGFncztcblx0fVxuXHRnZXRJbnRlcmZhY2UoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBDYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncz4ge1xuXHRfb0luc3RhbmNlUmVnaXN0cnk6IFJlY29yZDxzdHJpbmcsIENhY2hlSGFuZGxlclNlcnZpY2UgfCBudWxsPiA9IHt9O1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncz4pIHtcblx0XHRjb25zdCBzTWV0YU1vZGVsSWQgPSBvU2VydmljZUNvbnRleHQuc2V0dGluZ3MubWV0YU1vZGVsLmdldElkKCk7XG5cdFx0bGV0IGNhY2hlSGFuZGxlckluc3RhbmNlID0gdGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbc01ldGFNb2RlbElkXTtcblx0XHRpZiAoIWNhY2hlSGFuZGxlckluc3RhbmNlKSB7XG5cdFx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdID0gY2FjaGVIYW5kbGVySW5zdGFuY2UgPSBuZXcgQ2FjaGVIYW5kbGVyU2VydmljZShcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRmYWN0b3J5OiB0aGlzLFxuXHRcdFx0XHRcdFx0c2NvcGVPYmplY3Q6IG51bGwsXG5cdFx0XHRcdFx0XHRzY29wZVR5cGU6IFwic2VydmljZVwiXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvU2VydmljZUNvbnRleHRcblx0XHRcdFx0KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY2FjaGVIYW5kbGVySW5zdGFuY2UuaW5pdFByb21pc2Vcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF0gYXMgQ2FjaGVIYW5kbGVyU2VydmljZTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2goKGU6IGFueSkgPT4ge1xuXHRcdFx0XHQvLyBJbiBjYXNlIG9mIGVycm9yIGRlbGV0ZSB0aGUgZ2xvYmFsIGluc3RhbmNlO1xuXHRcdFx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdID0gbnVsbDtcblx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdH0pO1xuXHR9XG5cdGdldEluc3RhbmNlKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKSB7XG5cdFx0cmV0dXJuIHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W29NZXRhTW9kZWwuZ2V0SWQoKV07XG5cdH1cblx0cmVtb3ZlR2xvYmFsSW5zdGFuY2Uob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHR0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtvTWV0YU1vZGVsLmdldElkKCldID0gbnVsbDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBDYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==
233
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkNhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5LnRzIl0sIm5hbWVzIjpbImdldE1ldGFkYXRhRVRhZyIsInNVcmwiLCJzRVRhZyIsIm1VcGRhdGVkTWV0YU1vZGVsRVRhZ3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsImpRdWVyeSIsImFqYXgiLCJtZXRob2QiLCJkb25lIiwib1Jlc3BvbnNlIiwic1RleHRTdGF0dXMiLCJqcVhIUiIsImdldFJlc3BvbnNlSGVhZGVyIiwiZmFpbCIsIkNhY2hlSGFuZGxlclNlcnZpY2UiLCJpbml0Iiwib0NvbnRleHQiLCJnZXRDb250ZXh0Iiwib0ZhY3RvcnkiLCJmYWN0b3J5IiwibVNldHRpbmdzIiwic2V0dGluZ3MiLCJtZXRhTW9kZWwiLCJFcnJvciIsIm9NZXRhTW9kZWwiLCJvQXBwQ29tcG9uZW50IiwiYXBwQ29tcG9uZW50Iiwib0NvbXBvbmVudCIsImNvbXBvbmVudCIsImluaXRQcm9taXNlIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJ0aGVuIiwibUNhY2hlTmVlZHNJbnZhbGlkYXRlIiwiZXhpdCIsInJlbW92ZUdsb2JhbEluc3RhbmNlIiwidmFsaWRhdGVDYWNoZUtleSIsInNDYWNoZUlkZW50aWZpZXIiLCJiQ2FjaGVOZWVkVXBkYXRlIiwiQ2FjaGVNYW5hZ2VyIiwiZ2V0IiwibUNhY2hlT3V0cHV0IiwibU1ldGFNb2RlbEVUYWdzIiwiZ2V0RVRhZ3MiLCJzVXBkYXRlZENhY2hlS2V5IiwiSlNPTiIsInN0cmluZ2lmeSIsIm1DYWNoZWRFVGFncyIsInBhcnNlIiwiY2FjaGVkRVRhZ3MiLCJhbGwiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwiYVZhbGlkRVRhZ3MiLCJpbmRleE9mIiwic29tZSIsInZpZXdDYWNoZUtleSIsImNhdGNoIiwic0NhY2hlS2V5IiwiaW52YWxpZGF0ZUlmTmVlZGVkIiwic0NhY2hlS2V5cyIsInNEYXRhU291cmNlRVRhZ3MiLCJtQ2FjaGVLZXlzIiwic2V0IiwiZm9yRWFjaCIsInNNZXRhTW9kZWxLZXkiLCJEYXRlIiwidG9JU09TdHJpbmciLCJvTWFuaWZlc3RDb250ZW50IiwiZ2V0TWFuaWZlc3QiLCJzTWFuaWZlc3RIYXNoIiwiaGFzaCIsInNhcEFwcCIsInZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiQ2FjaGVIYW5kbGVyU2VydmljZUZhY3RvcnkiLCJfb0luc3RhbmNlUmVnaXN0cnkiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsInNNZXRhTW9kZWxJZCIsImdldElkIiwiY2FjaGVIYW5kbGVySW5zdGFuY2UiLCJhc3NpZ24iLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsImUiLCJnZXRJbnN0YW5jZSIsIlNlcnZpY2VGYWN0b3J5Il0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBUUEsV0FBU0EsZUFBVCxDQUF5QkMsSUFBekIsRUFBb0NDLEtBQXBDLEVBQWdEQyxzQkFBaEQsRUFBNkU7QUFDNUUsV0FBTyxJQUFJQyxPQUFKLENBQVksVUFBU0MsT0FBVCxFQUFrQjtBQUNwQztBQUNDQyxNQUFBQSxNQUFELENBQ0VDLElBREYsQ0FDT04sSUFEUCxFQUNhO0FBQUVPLFFBQUFBLE1BQU0sRUFBRTtBQUFWLE9BRGIsRUFFRUMsSUFGRixDQUVPLFVBQVNDLFNBQVQsRUFBeUJDLFdBQXpCLEVBQTJDQyxLQUEzQyxFQUF1RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQVQsUUFBQUEsc0JBQXNCLENBQUNGLElBQUQsQ0FBdEIsR0FBK0JXLEtBQUssQ0FBQ0MsaUJBQU4sQ0FBd0IsTUFBeEIsS0FBbUNELEtBQUssQ0FBQ0MsaUJBQU4sQ0FBd0IsZUFBeEIsQ0FBbEU7QUFDQVIsUUFBQUEsT0FBTyxDQUFDSCxLQUFLLEtBQUtDLHNCQUFzQixDQUFDRixJQUFELENBQWpDLENBQVA7QUFDQSxPQVJGLEVBU0VhLElBVEYsQ0FTTyxZQUFXO0FBQ2hCO0FBQ0FYLFFBQUFBLHNCQUFzQixDQUFDRixJQUFELENBQXRCLEdB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QUNBLEs7O1lBQ0RoRCxvQixHQUFBLDhCQUFxQlYsVUFBckIsRUFBaUQ7QUFDaEQsV0FBS3NELGtCQUFMLENBQXdCdEQsVUFBVSxDQUFDMEQsS0FBWCxFQUF4QixJQUE4QyxJQUE5QztBQUNBLEs7OztJQWpDdUNPLGM7O1NBb0MxQlosMEIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IENhY2hlTWFuYWdlciBmcm9tIFwic2FwL3VpL2NvcmUvY2FjaGUvQ2FjaGVNYW5hZ2VyXCI7XG5pbXBvcnQgaGFzaCBmcm9tIFwic2FwL2Jhc2Uvc3RyaW5ncy9oYXNoXCI7XG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlXCI7XG5pbXBvcnQgalF1ZXJ5IGZyb20gXCJzYXAvdWkvdGhpcmRwYXJ0eS9qcXVlcnlcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcblxuZnVuY3Rpb24gZ2V0TWV0YWRhdGFFVGFnKHNVcmw6IGFueSwgc0VUYWc6IGFueSwgbVVwZGF0ZWRNZXRhTW9kZWxFVGFnczogYW55KSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlKSB7XG5cdFx0Ly8gVGhlcmUgaXMgYW4gVXJsIGluIHRoZSBGRSBjYWNoZSwgdGhhdCdzIG5vdCBpbiB0aGUgTWV0YU1vZGVsIHlldCAtPiB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBFVGFnXG5cdFx0KGpRdWVyeSBhcyBhbnkpXG5cdFx0XHQuYWpheChzVXJsLCB7IG1ldGhvZDogXCJHRVRcIiB9KVxuXHRcdFx0LmRvbmUoZnVuY3Rpb24ob1Jlc3BvbnNlOiBhbnksIHNUZXh0U3RhdHVzOiBhbnksIGpxWEhSOiBhbnkpIHtcblx0XHRcdFx0Ly8gRVRhZyBpcyBub3QgdGhlIHNhbWUgLT4gaW52YWxpZFxuXHRcdFx0XHQvLyBFVGFnIGlzIHRoZSBzYW1lIC0+IHZhbGlkXG5cdFx0XHRcdC8vIElmIEVUYWcgaXMgYXZhaWxhYmxlIHVzZSBpdCwgb3RoZXJ3aXNlIHVzZSBMYXN0LU1vZGlmaWVkXG5cdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcihcIkVUYWdcIikgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJMYXN0LU1vZGlmaWVkXCIpO1xuXHRcdFx0XHRyZXNvbHZlKHNFVGFnID09PSBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzW3NVcmxdKTtcblx0XHRcdH0pXG5cdFx0XHQuZmFpbChmdW5jdGlvbigpIHtcblx0XHRcdFx0Ly8gQ2FzZSAyeiAtIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIG1hcCBzbyB0aGF0IHdlIGludmFsaWRhdGUgdGhlIGNhY2hlXG5cdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBcIlwiO1xuXHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdH0pO1xuXHR9KTtcbn1cbnR5cGUgQ2FjaGVIYW5kbGVyU2VydmljZVNldHRpbmdzID0ge1xuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsO1xufTtcblxuZXhwb3J0IGNsYXNzIENhY2hlSGFuZGxlclNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPENhY2hlSGFuZGxlclNlcnZpY2VTZXR0aW5ncz4ge1xuXHRyZXNvbHZlRm46IGFueTtcblx0cmVqZWN0Rm46IGFueTtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPGFueT47XG5cblx0b0ZhY3RvcnkhOiBDYWNoZUhhbmRsZXJTZXJ2aWNlRmFjdG9yeTtcblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXHRvQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXHRvQ29tcG9uZW50ITogVUlDb21wb25lbnQ7XG5cdG1DYWNoZU5lZWRzSW52YWxpZGF0ZTogYW55O1xuXG5cdGluaXQoKSB7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHR0aGlzLm9GYWN0b3J5ID0gb0NvbnRleHQuZmFjdG9yeTtcblx0XHRjb25zdCBtU2V0dGluZ3MgPSBvQ29udGV4dC5zZXR0aW5ncztcblx0XHRpZiAoIW1TZXR0aW5ncy5tZXRhTW9kZWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImEgYG1ldGFNb2RlbGAgcHJvcGVydHkgaXMgZXhwZWN0ZWQgd2hlbiBpbnN0YW50aWF0aW5nIHRoZSBDYWNoZUhhbmRsZXJTZXJ2aWNlXCIpO1xuXHRcdH1cblx0XHR0aGlzLm9NZXRhTW9kZWwgPSBtU2V0dGluZ3MubWV0YU1vZGVsO1xuXHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG1TZXR0aW5ncy5hcHBDb21wb25lbnQ7XG5cdFx0dGhpcy5vQ29tcG9uZW50ID0gbVNldHRpbmdzLmNvbXBvbmVudDtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gKHRoaXMub01ldGFNb2RlbCBhcyBhbnkpLmZldGNoRW50aXR5Q29udGFpbmVyKCkudGhlbigoKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9KTtcblx0XHR0aGlzLm1DYWNoZU5lZWRzSW52YWxpZGF0ZSA9IHt9O1xuXHR9XG5cdGV4aXQoKSB7XG5cdFx0Ly8gRGVyZWdpc3RlciBnbG9iYWwgaW5zdGFuY2Vcblx0XHR0aGlzLm9GYWN0b3J5LnJlbW92ZUdsb2JhbEluc3RhbmNlKHRoaXMub01ldGFNb2RlbCk7XG5cdH1cblx0dmFsaWRhdGVDYWNoZUtleShzQ2FjaGVJZGVudGlmaWVyOiBhbnkpOiBQcm9taXNlPHN0cmluZz4ge1xuXHRcdC8vIEtlZXAgdHJhY2sgaWYgdGhlIGNhY2hlIHdpbGwgYW55d2F5IG5lZWQgdG8gYmUgdXBkYXRlZFxuXHRcdGxldCBiQ2FjaGVOZWVkVXBkYXRlID0gdHJ1ZTtcblx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLmdldChzQ2FjaGVJZGVudGlmaWVyKVxuXHRcdFx0LnRoZW4oKG1DYWNoZU91dHB1dDogYW55KSA9PiB7XG5cdFx0XHRcdC8vIFdlIHByb3ZpZGUgYSBkZWZhdWx0IGtleSBzbyB0aGF0IGFuIHhtbCB2aWV3IGNhY2hlIGlzIHdyaXR0ZW5cblx0XHRcdFx0Y29uc3QgbU1ldGFNb2RlbEVUYWdzID0gdGhpcy5nZXRFVGFncygpO1xuXHRcdFx0XHRsZXQgc1VwZGF0ZWRDYWNoZUtleTogc3RyaW5nIHwgbnVsbCA9IEpTT04uc3RyaW5naWZ5KG1NZXRhTW9kZWxFVGFncyk7XG5cdFx0XHRcdC8vIENhc2UgIzFhIC0gTm8gY2FjaGUsIHNvIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBjYWNoZUtleSA9IGN1cnJlbnQgbWV0YW1vZGVsIEVUYWdzXG5cdFx0XHRcdGlmIChtQ2FjaGVPdXRwdXQpIHtcblx0XHRcdFx0XHQvLyBDYXNlICMyIC0gQ2FjaGUgZW50cnkgZm91bmQsIGNoZWNrIGlmIGl0J3Mgc3RpbGwgdmFsaWRcblx0XHRcdFx0XHRjb25zdCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzOiBhbnkgPSB7fTtcblx0XHRcdFx0XHRjb25zdCBtQ2FjaGVkRVRhZ3MgPSBKU09OLnBhcnNlKG1DYWNoZU91dHB1dC5jYWNoZWRFVGFncyk7XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobUNhY2hlZEVUYWdzKS5tYXAoZnVuY3Rpb24oc1VybDogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIHZhbGlkaXR5IG9mIGV2ZXJ5IHNpbmdsZSBVcmwgdGhhdCdzIGluIHRoZSBGRSBDYWNoZSBvYmplY3Rcblx0XHRcdFx0XHRcdFx0aWYgKG1DYWNoZWRFVGFnc1tzVXJsXSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc1VybF0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJhIC0gU2FtZSBudW1iZXIgb2YgRVRhZ3MgaW4gdGhlIGNhY2hlIGFuZCBpbiB0aGUgbWV0YWRhdGFcblx0XHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbUNhY2hlZEVUYWdzW3NVcmxdID09PSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIENhc2UgIzJiIC0gTm8gRVRhZyBpbiB0aGUgY2FjaGUgZm9yIHRoYXQgVVJMLCBjYWNoZWRFVGFncyB3YXMgZW5oYW5jZWRcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBnZXRNZXRhZGF0YUVUYWcoc1VybCwgbUNhY2hlZEVUYWdzW3NVcmxdLCBtVXBkYXRlZE1ldGFNb2RlbEVUYWdzKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBMYXN0IFRlbXBsYXRpbmcgYWRkZWQgYW4gVVJMIHdpdGhvdXQgRVRhZ1xuXHRcdFx0XHRcdFx0XHRcdG1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF0gPSBtTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG1DYWNoZWRFVGFnc1tzVXJsXSA9PT0gbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCkudGhlbihmdW5jdGlvbihhVmFsaWRFVGFnczogYW55W10pIHtcblx0XHRcdFx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSBhVmFsaWRFVGFncy5pbmRleE9mKGZhbHNlKSA+PSAwO1xuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmEgLSBTYW1lIG51bWJlciBvZiBFVGFncyBhbmQgYWxsIHZhbGlkIC0+IHdlIHJldHVybiB0aGUgdmlld0NhY2hlS2V5XG5cdFx0XHRcdFx0XHQvLyBDYXNlICMyYiAtIERpZmZlcmVudCBudW1iZXIgb2YgRVRhZ3MgYW5kIHN0aWxsIGFsbCB2YWxpZCAtPiB3ZSByZXR1cm4gdGhlIHZpZXdDYWNoZUtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmMgLSBTYW1lIG51bWJlciBvZiBFVGFncyBidXQgZGlmZmVyZW50IHZhbHVlcywgbWFpbiBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIHVzZSB0aGF0IGFzIGNhY2hlIGtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMmQgLSBEaWZmZXJlbnQgbnVtYmVyIG9mIEVUYWdzIGJ1dCBkaWZmZXJlbnQgdmFsdWUsIG1haW4gc2VydmljZSBFdGFnIG9yIGxpbmtlZCBzZXJ2aWNlIEV0YWcgaGFzIGNoYW5nZWQsIG5ldyBFVGFncyBzaG91bGQgYmUgdXNlZCBhcyBjYWNoZUtleVxuXHRcdFx0XHRcdFx0Ly8gQ2FzZSAjMnogLSBDYWNoZSBoYXMgYW4gaW52YWxpZCBFdGFnIC0gaWYgdGhlcmUgaXMgYW4gRXRhZyBwcm92aWRlZCBmcm9tIE1ldGFNb2RlbCB1c2UgaXQgYXMgY2FjaGVLZXlcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmtleXMobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykuc29tZShmdW5jdGlvbihzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIW1VcGRhdGVkTWV0YU1vZGVsRVRhZ3Nbc1VybF07XG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXQgbGVhc3Qgb25lIG9mIHRoZSBNZXRhTW9kZWwgVVJMcyBkb2Vzbid0IHByb3ZpZGUgYW4gRVRhZywgc28gbm8gY2FjaGluZ1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBiQ2FjaGVOZWVkVXBkYXRlID8gSlNPTi5zdHJpbmdpZnkobVVwZGF0ZWRNZXRhTW9kZWxFVGFncykgOiBtQ2FjaGVPdXRwdXQudmlld0NhY2hlS2V5O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuc29tZShmdW5jdGlvbihzVXJsOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdHJldHVybiAhbU1ldGFNb2RlbEVUYWdzW3NVcmxdO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdC8vIENoZWNrIGlmIGNhY2hlIGNhbiBiZSB1c2VkIChhbGwgdGhlIG1ldGFkYXRhIGFuZCBhbm5vdGF0aW9ucyBoYXZlIHRvIHByb3ZpZGUgYXQgbGVhc3QgYSBFVGFnIG9yIGEgTGFzdC1Nb2RpZmllZCBoZWFkZXIpXG5cdFx0XHRcdFx0Ly8gQ2FzZSAjMS1iIC0gTm8gQ2FjaGUsIG1DYWNoZU91cHV0IGlzIGVtcHR5LCBidXQgbWV0YW1vZGVsIGV0YWdzIGNhbm5vdCBiZSB1c2VkLCBzbyBubyBjYWNoaW5nXG5cdFx0XHRcdFx0YkNhY2hlTmVlZFVwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0c1VwZGF0ZWRDYWNoZUtleSA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNVcGRhdGVkQ2FjaGVLZXk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKCgpID0+IHtcblx0XHRcdFx0Ly8gRG9uJ3QgdXNlIHZpZXcgY2FjaGUgaW4gY2FzZSBvZiBpc3N1ZXMgd2l0aCB0aGUgTFJVIGNhY2hlXG5cdFx0XHRcdGJDYWNoZU5lZWRVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH0pXG5cdFx0XHQudGhlbigoc0NhY2hlS2V5OiBhbnkpID0+IHtcblx0XHRcdFx0dGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gPSBiQ2FjaGVOZWVkVXBkYXRlO1xuXHRcdFx0XHRyZXR1cm4gc0NhY2hlS2V5O1xuXHRcdFx0fSk7XG5cdH1cblx0aW52YWxpZGF0ZUlmTmVlZGVkKHNDYWNoZUtleXM6IHN0cmluZywgc0NhY2hlSWRlbnRpZmllcjogc3RyaW5nKSB7XG5cdFx0Ly8gQ2hlY2sgRkUgY2FjaGUgYWZ0ZXIgWE1MIHZpZXcgaXMgcHJvY2Vzc2VkIGNvbXBsZXRlbHlcblx0XHRjb25zdCBzRGF0YVNvdXJjZUVUYWdzID0gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRFVGFncygpKTtcblx0XHRpZiAodGhpcy5tQ2FjaGVOZWVkc0ludmFsaWRhdGVbc0NhY2hlSWRlbnRpZmllcl0gfHwgKHNDYWNoZUtleXMgJiYgc0NhY2hlS2V5cyAhPT0gc0RhdGFTb3VyY2VFVGFncykpIHtcblx0XHRcdC8vIFNvbWV0aGluZyBpbiB0aGUgc291cmNlcyBhbmQvb3IgaXRzIEVUYWdzIGNoYW5nZWQgLT4gdXBkYXRlIHRoZSBGRSBjYWNoZVxuXHRcdFx0Y29uc3QgbUNhY2hlS2V5czogYW55ID0ge307XG5cdFx0XHQvLyBOZXcgRVRhZ3MgdGhhdCBuZWVkIHRvIGJlIHZlcmlmaWVkLCBtYXkgZGlmZmVyIGZyb20gdGhlIG9uZSB1c2VkIHRvIGdlbmVyYXRlIHRoZSB2aWV3XG5cdFx0XHRtQ2FjaGVLZXlzLmNhY2hlZEVUYWdzID0gc0RhdGFTb3VyY2VFVGFncztcblx0XHRcdC8vIE9sZCBFVGFncyB0aGF0IGFyZSB1c2VkIGZvciB0aGUgeG1sIHZpZXcgY2FjaGUgYXMga2V5XG5cdFx0XHRtQ2FjaGVLZXlzLnZpZXdDYWNoZUtleSA9IHNDYWNoZUtleXM7XG5cdFx0XHRyZXR1cm4gQ2FjaGVNYW5hZ2VyLnNldChzQ2FjaGVJZGVudGlmaWVyLCBtQ2FjaGVLZXlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXHRnZXRFVGFncygpIHtcblx0XHRjb25zdCBtTWV0YU1vZGVsRVRhZ3MgPSAodGhpcy5vTWV0YU1vZGVsIGFzIGFueSkuZ2V0RVRhZ3MoKTtcblx0XHQvLyBFVGFncyBmcm9tIFVJNSBhcmUgZWl0aGVyIGEgRGF0ZSBvciBhIHN0cmluZywgbGV0J3MgcmF0aW9uYWxpemUgdGhhdFxuXHRcdE9iamVjdC5rZXlzKG1NZXRhTW9kZWxFVGFncykuZm9yRWFjaChmdW5jdGlvbihzTWV0YU1vZGVsS2V5OiBzdHJpbmcpIHtcblx0XHRcdGlmIChtTWV0YU1vZGVsRVRhZ3Nbc01ldGFNb2RlbEtleV0gaW5zdGFuY2VvZiBEYXRlKSB7XG5cdFx0XHRcdC8vIE1ldGFNb2RlbCBjb250YWlucyBhIExhc3QtTW9kaWZpZWQgdGltZXN0YW1wIGZvciB0aGUgVVJMXG5cdFx0XHRcdG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XSA9IG1NZXRhTW9kZWxFVGFnc1tzTWV0YU1vZGVsS2V5XS50b0lTT1N0cmluZygpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gYWRkIGFsc28gdGhlIG1hbmlmZXN0IGhhc2ggYXMgVUk1IG9ubHkgY29uc2lkZXJzIHRoZSByb290IGNvbXBvbmVudCBoYXNoXG5cdFx0Y29uc3Qgb01hbmlmZXN0Q29udGVudDogYW55ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCk7XG5cdFx0Y29uc3Qgc01hbmlmZXN0SGFzaCA9IGhhc2goXG5cdFx0XHRKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdHNhcEFwcDogb01hbmlmZXN0Q29udGVudFtcInNhcC5hcHBcIl0sXG5cdFx0XHRcdHZpZXdEYXRhOiAodGhpcy5vQ29tcG9uZW50IGFzIGFueSkuZ2V0Vmlld0RhdGEoKVxuXHRcdFx0fSlcblx0XHQpO1xuXHRcdG1NZXRhTW9kZWxFVGFnc1tcIm1hbmlmZXN0XCJdID0gc01hbmlmZXN0SGFzaDtcblx0XHRyZXR1cm4gbU1ldGFNb2RlbEVUYWdzO1xuXHR9XG5cdGdldEludGVyZmFjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmNsYXNzIENhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8Q2FjaGVIYW5kbGVyU2VydmljZVNldHRpbmdzPiB7XG5cdF9vSW5zdGFuY2VSZWdpc3RyeTogUmVjb3JkPHN0cmluZywgQ2FjaGVIYW5kbGVyU2VydmljZSB8IG51bGw+ID0ge307XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Q2FjaGVIYW5kbGVyU2VydmljZVNldHRpbmdzPikge1xuXHRcdGNvbnN0IHNNZXRhTW9kZWxJZCA9IG9TZXJ2aWNlQ29udGV4dC5zZXR0aW5ncy5tZXRhTW9kZWwuZ2V0SWQoKTtcblx0XHRsZXQgY2FjaGVIYW5kbGVySW5zdGFuY2UgPSB0aGlzLl9vSW5zdGFuY2VSZWdpc3RyeVtzTWV0YU1vZGVsSWRdO1xuXHRcdGlmICghY2FjaGVIYW5kbGVySW5zdGFuY2UpIHtcblx0XHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF0gPSBjYWNoZUhhbmRsZXJJbnN0YW5jZSA9IG5ldyBDYWNoZUhhbmRsZXJTZXJ2aWNlKFxuXHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGZhY3Rvcnk6IHRoaXMsXG5cdFx0XHRcdFx0XHRzY29wZU9iamVjdDogbnVsbCxcblx0XHRcdFx0XHRcdHNjb3BlVHlwZTogXCJzZXJ2aWNlXCJcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG9TZXJ2aWNlQ29udGV4dFxuXHRcdFx0XHQpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBjYWNoZUhhbmRsZXJJbnN0YW5jZS5pbml0UHJvbWlzZVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbc01ldGFNb2RlbElkXSBhcyBDYWNoZUhhbmRsZXJTZXJ2aWNlO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCgoZTogYW55KSA9PiB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgZXJyb3IgZGVsZXRlIHRoZSBnbG9iYWwgaW5zdGFuY2U7XG5cdFx0XHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W3NNZXRhTW9kZWxJZF0gPSBudWxsO1xuXHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0fSk7XG5cdH1cblx0Z2V0SW5zdGFuY2Uob01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwpIHtcblx0XHRyZXR1cm4gdGhpcy5fb0luc3RhbmNlUmVnaXN0cnlbb01ldGFNb2RlbC5nZXRJZCgpXTtcblx0fVxuXHRyZW1vdmVHbG9iYWxJbnN0YW5jZShvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCkge1xuXHRcdHRoaXMuX29JbnN0YW5jZVJlZ2lzdHJ5W29NZXRhTW9kZWwuZ2V0SWQoKV0gPSBudWxsO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENhY2hlSGFuZGxlclNlcnZpY2VGYWN0b3J5O1xuIl19
@@ -5,7 +5,7 @@ import hash from "sap/base/strings/hash";
5
5
  import { ServiceContext } from "sap/ui/core/service";
6
6
  import jQuery from "sap/ui/thirdparty/jquery";
7
7
  import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
8
- import { AppComponent } from "sap/fe/core";
8
+ import AppComponent from "sap/fe/core/AppComponent";
9
9
  import UIComponent from "sap/ui/core/UIComponent";
10
10
 
11
11
  function getMetadataETag(sUrl: any, sETag: any, mUpdatedMetaModelETags: any) {
@@ -38,7 +38,7 @@ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
38
38
 
39
39
  oFactory!: CacheHandlerServiceFactory;
40
40
  oMetaModel!: ODataMetaModel;
41
- oAppComponent: AppComponent;
41
+ oAppComponent!: AppComponent;
42
42
  oComponent!: UIComponent;
43
43
  mCacheNeedsInvalidate: any;
44
44
 
@@ -52,7 +52,7 @@ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
52
52
  this.oMetaModel = mSettings.metaModel;
53
53
  this.oAppComponent = mSettings.appComponent;
54
54
  this.oComponent = mSettings.component;
55
- this.initPromise = this.oMetaModel.fetchEntityContainer().then(() => {
55
+ this.initPromise = (this.oMetaModel as any).fetchEntityContainer().then(() => {
56
56
  return this;
57
57
  });
58
58
  this.mCacheNeedsInvalidate = {};
@@ -158,7 +158,7 @@ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
158
158
  });
159
159
 
160
160
  // add also the manifest hash as UI5 only considers the root component hash
161
- const oManifestContent = this.oAppComponent.getManifest();
161
+ const oManifestContent: any = this.oAppComponent.getManifest();
162
162
  const sManifestHash = hash(
163
163
  JSON.stringify({
164
164
  sapApp: oManifestContent["sap.app"],