@sapui5/sap.fe.core 1.98.0 → 1.99.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 (231) hide show
  1. package/package.json +3 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +377 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +385 -0
  5. package/src/sap/fe/core/AppComponent.js +3 -2
  6. package/src/sap/fe/core/AppStateHandler.js +229 -181
  7. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  8. package/src/sap/fe/core/BaseController.js +3 -2
  9. package/src/sap/fe/core/BusyLocker.js +105 -121
  10. package/src/sap/fe/core/BusyLocker.ts +98 -0
  11. package/src/sap/fe/core/CommonUtils.js +2073 -2399
  12. package/src/sap/fe/core/CommonUtils.ts +2078 -0
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -2
  14. package/src/sap/fe/core/PageController.js +84 -125
  15. package/src/sap/fe/core/PageController.ts +101 -0
  16. package/src/sap/fe/core/RouterProxy.js +986 -823
  17. package/src/sap/fe/core/RouterProxy.ts +838 -0
  18. package/src/sap/fe/core/Synchronization.js +51 -35
  19. package/src/sap/fe/core/Synchronization.ts +29 -0
  20. package/src/sap/fe/core/TemplateComponent.js +173 -164
  21. package/src/sap/fe/core/TemplateComponent.ts +166 -0
  22. package/src/sap/fe/core/TemplateModel.js +97 -54
  23. package/src/sap/fe/core/TemplateModel.ts +63 -0
  24. package/src/sap/fe/core/TransactionHelper.js +1576 -1664
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +559 -608
  27. package/src/sap/fe/core/actions/draft.ts +593 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -514
  29. package/src/sap/fe/core/actions/messageHandling.ts +532 -0
  30. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  31. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  32. package/src/sap/fe/core/actions/operations.js +1074 -1215
  33. package/src/sap/fe/core/actions/operations.ts +1162 -0
  34. package/src/sap/fe/core/actions/sticky.js +102 -105
  35. package/src/sap/fe/core/actions/sticky.ts +102 -0
  36. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
  37. package/src/sap/fe/core/controllerextensions/EditFlow.js +54 -211
  38. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
  39. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +279 -11
  40. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -6
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +47 -45
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -3
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +29 -26
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +101 -8
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +17 -8
  46. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  47. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
  48. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -2
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -2
  50. package/src/sap/fe/core/controllerextensions/Routing.js +9 -4
  51. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
  52. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -3
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +18 -18
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
  56. package/src/sap/fe/core/controls/CommandExecution.js +3 -2
  57. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
  58. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  59. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -2
  60. package/src/sap/fe/core/controls/FieldWrapper.js +11 -22
  61. package/src/sap/fe/core/controls/FilterBar.js +3 -2
  62. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -2
  63. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
  64. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  65. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
  66. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
  67. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
  68. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
  69. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -2
  70. package/src/sap/fe/core/converters/ConverterContext.js +2 -2
  71. package/src/sap/fe/core/converters/ConverterContext.ts +4 -3
  72. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  73. package/src/sap/fe/core/converters/ManifestSettings.ts +1 -0
  74. package/src/sap/fe/core/converters/ManifestWrapper.js +39 -26
  75. package/src/sap/fe/core/converters/ManifestWrapper.ts +9 -0
  76. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -8
  77. package/src/sap/fe/core/converters/MetaModelConverter.ts +16 -16
  78. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  79. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
  80. package/src/sap/fe/core/converters/common/AnnotationConverter.js +17 -13
  81. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  82. package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -2
  83. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  84. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  85. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  86. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  87. package/src/sap/fe/core/converters/controls/Common/Form.js +4 -2
  88. package/src/sap/fe/core/converters/controls/Common/Form.ts +16 -2
  89. package/src/sap/fe/core/converters/controls/Common/Table.js +250 -146
  90. package/src/sap/fe/core/converters/controls/Common/Table.ts +300 -167
  91. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +115 -56
  92. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +120 -74
  93. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +467 -32
  94. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +483 -54
  95. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
  96. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
  97. package/src/sap/fe/core/converters/helpers/Aggregation.js +13 -5
  98. package/src/sap/fe/core/converters/helpers/Aggregation.ts +20 -5
  99. package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
  100. package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
  101. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  102. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  103. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
  104. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
  105. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  106. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  107. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  108. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  109. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  110. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  111. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  112. package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
  113. package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
  114. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  115. package/src/sap/fe/core/formatters/ValueFormatter.ts +7 -6
  116. package/src/sap/fe/core/fpm/Component.js +3 -2
  117. package/src/sap/fe/core/helpers/AppStartupHelper.js +2 -2
  118. package/src/sap/fe/core/helpers/AppStartupHelper.ts +7 -4
  119. package/src/sap/fe/core/helpers/BindingExpression.js +314 -355
  120. package/src/sap/fe/core/helpers/BindingExpression.ts +317 -391
  121. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  122. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  123. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  124. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  125. package/src/sap/fe/core/helpers/EditState.js +81 -84
  126. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  127. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  128. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  129. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  130. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  131. package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -4
  132. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +9 -9
  133. package/src/sap/fe/core/helpers/MassEditHelper.js +27 -18
  134. package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
  135. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  136. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  137. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  138. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  139. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  140. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  141. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  142. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  143. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  144. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  145. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  146. package/src/sap/fe/core/library.js +4 -3
  147. package/src/sap/fe/core/library.support.js +3 -2
  148. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  149. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +1 -1
  150. package/src/sap/fe/core/messagebundle.properties +23 -10
  151. package/src/sap/fe/core/messagebundle_ar.properties +9 -0
  152. package/src/sap/fe/core/messagebundle_bg.properties +9 -0
  153. package/src/sap/fe/core/messagebundle_ca.properties +9 -0
  154. package/src/sap/fe/core/messagebundle_cs.properties +10 -1
  155. package/src/sap/fe/core/messagebundle_cy.properties +9 -0
  156. package/src/sap/fe/core/messagebundle_da.properties +9 -0
  157. package/src/sap/fe/core/messagebundle_de.properties +9 -0
  158. package/src/sap/fe/core/messagebundle_el.properties +9 -0
  159. package/src/sap/fe/core/messagebundle_en.properties +9 -0
  160. package/src/sap/fe/core/messagebundle_en_GB.properties +9 -0
  161. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +9 -0
  162. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -0
  163. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +9 -0
  164. package/src/sap/fe/core/messagebundle_es.properties +9 -0
  165. package/src/sap/fe/core/messagebundle_es_MX.properties +9 -0
  166. package/src/sap/fe/core/messagebundle_et.properties +9 -0
  167. package/src/sap/fe/core/messagebundle_fi.properties +9 -0
  168. package/src/sap/fe/core/messagebundle_fr.properties +13 -4
  169. package/src/sap/fe/core/messagebundle_fr_CA.properties +15 -6
  170. package/src/sap/fe/core/messagebundle_hi.properties +15 -6
  171. package/src/sap/fe/core/messagebundle_hr.properties +15 -6
  172. package/src/sap/fe/core/messagebundle_hu.properties +9 -0
  173. package/src/sap/fe/core/messagebundle_id.properties +10 -1
  174. package/src/sap/fe/core/messagebundle_it.properties +9 -0
  175. package/src/sap/fe/core/messagebundle_iw.properties +9 -0
  176. package/src/sap/fe/core/messagebundle_ja.properties +9 -0
  177. package/src/sap/fe/core/messagebundle_kk.properties +15 -6
  178. package/src/sap/fe/core/messagebundle_ko.properties +9 -0
  179. package/src/sap/fe/core/messagebundle_lt.properties +9 -0
  180. package/src/sap/fe/core/messagebundle_lv.properties +15 -6
  181. package/src/sap/fe/core/messagebundle_ms.properties +14 -5
  182. package/src/sap/fe/core/messagebundle_nl.properties +9 -0
  183. package/src/sap/fe/core/messagebundle_no.properties +9 -0
  184. package/src/sap/fe/core/messagebundle_pl.properties +9 -0
  185. package/src/sap/fe/core/messagebundle_pt.properties +9 -0
  186. package/src/sap/fe/core/messagebundle_pt_PT.properties +9 -0
  187. package/src/sap/fe/core/messagebundle_ro.properties +9 -0
  188. package/src/sap/fe/core/messagebundle_ru.properties +9 -0
  189. package/src/sap/fe/core/messagebundle_sh.properties +11 -2
  190. package/src/sap/fe/core/messagebundle_sk.properties +9 -0
  191. package/src/sap/fe/core/messagebundle_sl.properties +15 -6
  192. package/src/sap/fe/core/messagebundle_sv.properties +9 -0
  193. package/src/sap/fe/core/messagebundle_th.properties +9 -0
  194. package/src/sap/fe/core/messagebundle_tr.properties +9 -0
  195. package/src/sap/fe/core/messagebundle_uk.properties +9 -0
  196. package/src/sap/fe/core/messagebundle_vi.properties +9 -0
  197. package/src/sap/fe/core/messagebundle_zh_CN.properties +9 -0
  198. package/src/sap/fe/core/messagebundle_zh_TW.properties +15 -6
  199. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  200. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  201. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  202. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  203. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  204. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
  205. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  206. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  207. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  208. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  209. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -899
  210. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  211. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  212. package/src/sap/fe/core/services/ShellServicesFactory.ts +15 -10
  213. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +35 -81
  214. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +46 -94
  215. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -487
  216. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  217. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  218. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  219. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  220. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  221. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  222. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  223. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  224. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  225. package/src/sap/fe/core/templating/FilterHelper.js +138 -72
  226. package/src/sap/fe/core/templating/FilterHelper.ts +139 -71
  227. package/src/sap/fe/core/templating/UIFormatters.js +31 -1
  228. package/src/sap/fe/core/templating/UIFormatters.ts +33 -2
  229. package/src/sap/fe/core/type/Email.js +1 -1
  230. package/src/sap/fe/core/type/Email.ts +4 -6
  231. package/ui5.yaml +0 -3
@@ -0,0 +1,212 @@
1
+ import Service from "sap/ui/core/service/Service";
2
+ import ServiceFactory from "sap/ui/core/service/ServiceFactory";
3
+ import CacheManager from "sap/ui/core/cache/CacheManager";
4
+ import hash from "sap/base/strings/hash";
5
+ import { ServiceContext } from "sap/ui/core/service";
6
+ import jQuery from "sap/ui/thirdparty/jquery";
7
+ import ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
8
+ import { AppComponent } from "sap/fe/core";
9
+ import UIComponent from "sap/ui/core/UIComponent";
10
+
11
+ function getMetadataETag(sUrl: any, sETag: any, mUpdatedMetaModelETags: any) {
12
+ return new Promise(function(resolve) {
13
+ // There is an Url in the FE cache, that's not in the MetaModel yet -> we need to check the ETag
14
+ (jQuery as any)
15
+ .ajax(sUrl, { method: "GET" })
16
+ .done(function(oResponse: any, sTextStatus: any, jqXHR: any) {
17
+ // ETag is not the same -> invalid
18
+ // ETag is the same -> valid
19
+ // If ETag is available use it, otherwise use Last-Modified
20
+ mUpdatedMetaModelETags[sUrl] = jqXHR.getResponseHeader("ETag") || jqXHR.getResponseHeader("Last-Modified");
21
+ resolve(sETag === mUpdatedMetaModelETags[sUrl]);
22
+ })
23
+ .fail(function() {
24
+ // Case 2z - Make sure we update the map so that we invalidate the cache
25
+ mUpdatedMetaModelETags[sUrl] = "";
26
+ resolve(false);
27
+ });
28
+ });
29
+ }
30
+ type CacheHandlerServiceSettings = {
31
+ metaModel: ODataMetaModel;
32
+ };
33
+
34
+ export class CacheHandlerService extends Service<CacheHandlerServiceSettings> {
35
+ resolveFn: any;
36
+ rejectFn: any;
37
+ initPromise!: Promise<any>;
38
+
39
+ oFactory!: CacheHandlerServiceFactory;
40
+ oMetaModel!: ODataMetaModel;
41
+ oAppComponent: AppComponent;
42
+ oComponent!: UIComponent;
43
+ mCacheNeedsInvalidate: any;
44
+
45
+ init() {
46
+ const oContext = this.getContext();
47
+ this.oFactory = oContext.factory;
48
+ const mSettings = oContext.settings;
49
+ if (!mSettings.metaModel) {
50
+ throw new Error("a `metaModel` property is expected when instantiating the CacheHandlerService");
51
+ }
52
+ this.oMetaModel = mSettings.metaModel;
53
+ this.oAppComponent = mSettings.appComponent;
54
+ this.oComponent = mSettings.component;
55
+ this.initPromise = this.oMetaModel.fetchEntityContainer().then(() => {
56
+ return this;
57
+ });
58
+ this.mCacheNeedsInvalidate = {};
59
+ }
60
+ exit() {
61
+ // Deregister global instance
62
+ this.oFactory.removeGlobalInstance(this.oMetaModel);
63
+ }
64
+ validateCacheKey(sCacheIdentifier: any): Promise<string> {
65
+ // Keep track if the cache will anyway need to be updated
66
+ let bCacheNeedUpdate = true;
67
+ return CacheManager.get(sCacheIdentifier)
68
+ .then((mCacheOutput: any) => {
69
+ // We provide a default key so that an xml view cache is written
70
+ const mMetaModelETags = this.getETags();
71
+ let sUpdatedCacheKey: string | null = JSON.stringify(mMetaModelETags);
72
+ // Case #1a - No cache, so mCacheOuput is empty, cacheKey = current metamodel ETags
73
+ if (mCacheOutput) {
74
+ // Case #2 - Cache entry found, check if it's still valid
75
+ const mUpdatedMetaModelETags: any = {};
76
+ const mCachedETags = JSON.parse(mCacheOutput.cachedETags);
77
+ return Promise.all(
78
+ Object.keys(mCachedETags).map(function(sUrl: string) {
79
+ // Check validity of every single Url that's in the FE Cache object
80
+ if (mCachedETags[sUrl]) {
81
+ if (mMetaModelETags[sUrl]) {
82
+ // Case #2a - Same number of ETags in the cache and in the metadata
83
+ mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
84
+ return mCachedETags[sUrl] === mMetaModelETags[sUrl];
85
+ } else {
86
+ // Case #2b - No ETag in the cache for that URL, cachedETags was enhanced
87
+ return getMetadataETag(sUrl, mCachedETags[sUrl], mUpdatedMetaModelETags);
88
+ }
89
+ } else {
90
+ // Case #2z - Last Templating added an URL without ETag
91
+ mUpdatedMetaModelETags[sUrl] = mMetaModelETags[sUrl];
92
+ return mCachedETags[sUrl] === mMetaModelETags[sUrl];
93
+ }
94
+ })
95
+ ).then(function(aValidETags: any[]) {
96
+ bCacheNeedUpdate = aValidETags.indexOf(false) >= 0;
97
+ // Case #2a - Same number of ETags and all valid -> we return the viewCacheKey
98
+ // Case #2b - Different number of ETags and still all valid -> we return the viewCacheKey
99
+ // Case #2c - Same number of ETags but different values, main service Etag has changed, use that as cache key
100
+ // 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
101
+ // Case #2z - Cache has an invalid Etag - if there is an Etag provided from MetaModel use it as cacheKey
102
+ if (
103
+ Object.keys(mUpdatedMetaModelETags).some(function(sUrl: string) {
104
+ return !mUpdatedMetaModelETags[sUrl];
105
+ })
106
+ ) {
107
+ // At least one of the MetaModel URLs doesn't provide an ETag, so no caching
108
+ return null;
109
+ } else {
110
+ return bCacheNeedUpdate ? JSON.stringify(mUpdatedMetaModelETags) : mCacheOutput.viewCacheKey;
111
+ }
112
+ });
113
+ } else if (
114
+ Object.keys(mMetaModelETags).some(function(sUrl: string) {
115
+ return !mMetaModelETags[sUrl];
116
+ })
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
120
+ bCacheNeedUpdate = true;
121
+ sUpdatedCacheKey = null;
122
+ }
123
+ return sUpdatedCacheKey;
124
+ })
125
+ .catch(() => {
126
+ // Don't use view cache in case of issues with the LRU cache
127
+ bCacheNeedUpdate = true;
128
+ return null;
129
+ })
130
+ .then((sCacheKey: any) => {
131
+ this.mCacheNeedsInvalidate[sCacheIdentifier] = bCacheNeedUpdate;
132
+ return sCacheKey;
133
+ });
134
+ }
135
+ invalidateIfNeeded(sCacheKeys: string, sCacheIdentifier: string) {
136
+ // Check FE cache after XML view is processed completely
137
+ const sDataSourceETags = JSON.stringify(this.getETags());
138
+ if (this.mCacheNeedsInvalidate[sCacheIdentifier] || (sCacheKeys && sCacheKeys !== sDataSourceETags)) {
139
+ // Something in the sources and/or its ETags changed -> update the FE cache
140
+ const mCacheKeys: any = {};
141
+ // New ETags that need to be verified, may differ from the one used to generate the view
142
+ mCacheKeys.cachedETags = sDataSourceETags;
143
+ // Old ETags that are used for the xml view cache as key
144
+ mCacheKeys.viewCacheKey = sCacheKeys;
145
+ return CacheManager.set(sCacheIdentifier, mCacheKeys);
146
+ } else {
147
+ return Promise.resolve();
148
+ }
149
+ }
150
+ getETags() {
151
+ const mMetaModelETags = (this.oMetaModel as any).getETags();
152
+ // ETags from UI5 are either a Date or a string, let's rationalize that
153
+ Object.keys(mMetaModelETags).forEach(function(sMetaModelKey: string) {
154
+ if (mMetaModelETags[sMetaModelKey] instanceof Date) {
155
+ // MetaModel contains a Last-Modified timestamp for the URL
156
+ mMetaModelETags[sMetaModelKey] = mMetaModelETags[sMetaModelKey].toISOString();
157
+ }
158
+ });
159
+
160
+ // add also the manifest hash as UI5 only considers the root component hash
161
+ const oManifestContent = this.oAppComponent.getManifest();
162
+ const sManifestHash = hash(
163
+ JSON.stringify({
164
+ sapApp: oManifestContent["sap.app"],
165
+ viewData: (this.oComponent as any).getViewData()
166
+ })
167
+ );
168
+ mMetaModelETags["manifest"] = sManifestHash;
169
+ return mMetaModelETags;
170
+ }
171
+ getInterface(): any {
172
+ return this;
173
+ }
174
+ }
175
+
176
+ class CacheHandlerServiceFactory extends ServiceFactory<CacheHandlerServiceSettings> {
177
+ _oInstanceRegistry: Record<string, CacheHandlerService | null> = {};
178
+ createInstance(oServiceContext: ServiceContext<CacheHandlerServiceSettings>) {
179
+ const sMetaModelId = oServiceContext.settings.metaModel.getId();
180
+ let cacheHandlerInstance = this._oInstanceRegistry[sMetaModelId];
181
+ if (!cacheHandlerInstance) {
182
+ this._oInstanceRegistry[sMetaModelId] = cacheHandlerInstance = new CacheHandlerService(
183
+ Object.assign(
184
+ {
185
+ factory: this,
186
+ scopeObject: null,
187
+ scopeType: "service"
188
+ },
189
+ oServiceContext
190
+ )
191
+ );
192
+ }
193
+
194
+ return cacheHandlerInstance.initPromise
195
+ .then(() => {
196
+ return this._oInstanceRegistry[sMetaModelId] as CacheHandlerService;
197
+ })
198
+ .catch((e: any) => {
199
+ // In case of error delete the global instance;
200
+ this._oInstanceRegistry[sMetaModelId] = null;
201
+ throw e;
202
+ });
203
+ }
204
+ getInstance(oMetaModel: ODataMetaModel) {
205
+ return this._oInstanceRegistry[oMetaModel.getId()];
206
+ }
207
+ removeGlobalInstance(oMetaModel: ODataMetaModel) {
208
+ this._oInstanceRegistry[oMetaModel.getId()] = null;
209
+ }
210
+ }
211
+
212
+ export default CacheHandlerServiceFactory;
@@ -126,4 +126,4 @@ sap.ui.define(["sap/ui/core/service/ServiceFactory", "sap/ui/core/service/Servic
126
126
 
127
127
  return EnvironmentServiceFactory;
128
128
  }, false);
129
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVudmlyb25tZW50U2VydmljZUZhY3RvcnkudHMiXSwibmFtZXMiOlsiRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwib0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJWZXJzaW9uSW5mbyIsImxvYWQiLCJ1bmRlZmluZWQiLCJ0aGVuIiwidmVyc2lvbkluZm8iLCJDaGFydCIsImxpYnJhcmllcyIsImZpbmQiLCJsaWIiLCJuYW1lIiwiTWljcm9DaGFydCIsIlVTaGVsbCIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIlNpdHVhdGlvbnMiLCJVcmlQYXJhbWV0ZXJzIiwiZnJvbVF1ZXJ5Iiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJnZXQiLCJzZXR0aW5ncyIsImNhdGNoIiwibGlicmFyeU5hbWUiLCJ1aSIsImdldENvcmUiLCJsb2FkTGlicmFyeSIsInJlcGxhY2UiLCJhc3luYyIsImUiLCJvQ2FwYWJpbGl0aWVzIiwiU2VydmljZSIsIkVudmlyb25tZW50U2VydmljZUZhY3RvcnkiLCJvU2VydmljZUNvbnRleHQiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFHTUEsOEI7Ozs7Ozs7Ozs7Ozs7YUFLTDtBQUVBLHNCQUFPO0FBQUE7O0FBQ04sYUFBS0MsV0FBTCxHQUFtQixJQUFJQyxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQ25ELFVBQUEsS0FBSSxDQUFDQyxT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eUU7QUFDeEUsWUFBTUMsOEJBQThCLEdBQUcsSUFBSWpELDhCQUFKLENBQW1DZ0QsZUFBbkMsQ0FBdkM7QUFDQSxlQUFPQyw4QkFBOEIsQ0FBQ2hELFdBQXRDO0FBQ0E7Ozs7SUFKc0NpRCxjOztTQU96QkgseUIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNlcnZpY2VGYWN0b3J5LCBTZXJ2aWNlLCBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMsIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBWZXJzaW9uSW5mbyB9IGZyb20gXCJzYXAvdWlcIjtcbmltcG9ydCB7IFVyaVBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2Jhc2UvdXRpbFwiO1xuXG5jbGFzcyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPEVudmlyb25tZW50Q2FwYWJpbGl0aWVzPiB7XG5cdHJlc29sdmVGbjogYW55O1xuXHRyZWplY3RGbjogYW55O1xuXHRpbml0UHJvbWlzZSE6IFByb21pc2U8YW55Pjtcblx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMhOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcztcblx0Ly8gITogbWVhbnMgdGhhdCB3ZSBrbm93IGl0IHdpbGwgYmUgYXNzaWduZWQgYmVmb3JlIHVzYWdlXG5cblx0aW5pdCgpIHtcblx0XHR0aGlzLmluaXRQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5yZXNvbHZlRm4gPSByZXNvbHZlO1xuXHRcdFx0dGhpcy5yZWplY3RGbiA9IHJlamVjdDtcblx0XHR9KTtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMpO1xuXHRcdFZlcnNpb25JbmZvLmxvYWQodW5kZWZpbmVkIGFzIGFueSlcblx0XHRcdC50aGVuKHZlcnNpb25JbmZvID0+IHtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5DaGFydCA9ICEhdmVyc2lvbkluZm8ubGlicmFyaWVzLmZpbmQoKGxpYjogYW55KSA9PiBsaWIubmFtZSA9PT0gXCJzYXAudml6XCIpO1xuXHRcdFx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLk1pY3JvQ2hhcnQgPSAhIXZlcnNpb25JbmZvLmxpYnJhcmllcy5maW5kKFxuXHRcdFx0XHRcdChsaWI6IGFueSkgPT4gbGliLm5hbWUgPT09IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIlxuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlVTaGVsbCA9ICEhKHNhcCAmJiBzYXAudXNoZWxsICYmIHNhcC51c2hlbGwuQ29udGFpbmVyKTtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5JbnRlbnRCYXNlZE5hdmlnYXRpb24gPSAhIShzYXAgJiYgc2FwLnVzaGVsbCAmJiBzYXAudXNoZWxsLkNvbnRhaW5lcik7XG5cdFx0XHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMuU2l0dWF0aW9ucyA9XG5cdFx0XHRcdFx0VXJpUGFyYW1ldGVycy5mcm9tUXVlcnkod2luZG93LmxvY2F0aW9uLnNlYXJjaCkuZ2V0KFwic2FwLWZlLXh4LXNpdHVhdGlvbnNcIikgPT09IFwidHJ1ZVwiO1xuXHRcdFx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gT2JqZWN0LmFzc2lnbih0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLCBvQ29udGV4dC5zZXR0aW5ncyk7XG5cdFx0XHRcdHRoaXMucmVzb2x2ZUZuKHRoaXMpO1xuXHRcdFx0fSlcblx0XHRcdC5jYXRjaCh0aGlzLnJlamVjdEZuKTtcblx0fVxuXG5cdHJlc29sdmVMaWJyYXJ5KGxpYnJhcnlOYW1lOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0c2FwLnVpXG5cdFx0XHRcdFx0LmdldENvcmUoKVxuXHRcdFx0XHRcdC5sb2FkTGlicmFyeShgJHtsaWJyYXJ5TmFtZS5yZXBsYWNlKC9cXC4vZywgXCIvXCIpfWAsIHsgYXN5bmM6IHRydWUgfSlcblx0XHRcdFx0XHQudGhlbihmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKGZhbHNlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0Q2FwYWJpbGl0aWVzKG9DYXBhYmlsaXRpZXM6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKSB7XG5cdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IG9DYXBhYmlsaXRpZXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2FwYWJpbGl0aWVzKCkge1xuXHRcdHJldHVybiB0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzO1xuXHR9XG5cblx0Z2V0SW50ZXJmYWNlKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuY2xhc3MgRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeSBleHRlbmRzIFNlcnZpY2VGYWN0b3J5PEVudmlyb25tZW50Q2FwYWJpbGl0aWVzPiB7XG5cdGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8RW52aXJvbm1lbnRDYXBhYmlsaXRpZXM+KSB7XG5cdFx0Y29uc3QgZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlID0gbmV3IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZShvU2VydmljZUNvbnRleHQpO1xuXHRcdHJldHVybiBlbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UuaW5pdFByb21pc2U7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeTtcbiJdfQ==
129
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkVudmlyb25tZW50U2VydmljZUZhY3RvcnkudHMiXSwibmFtZXMiOlsiRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIiwiaW5pdFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlc29sdmVGbiIsInJlamVjdEZuIiwib0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJPYmplY3QiLCJhc3NpZ24iLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJWZXJzaW9uSW5mbyIsImxvYWQiLCJ1bmRlZmluZWQiLCJ0aGVuIiwidmVyc2lvbkluZm8iLCJDaGFydCIsImxpYnJhcmllcyIsImZpbmQiLCJsaWIiLCJuYW1lIiwiTWljcm9DaGFydCIsIlVTaGVsbCIsInNhcCIsInVzaGVsbCIsIkNvbnRhaW5lciIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIlNpdHVhdGlvbnMiLCJVcmlQYXJhbWV0ZXJzIiwiZnJvbVF1ZXJ5Iiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJnZXQiLCJzZXR0aW5ncyIsImNhdGNoIiwibGlicmFyeU5hbWUiLCJ1aSIsImdldENvcmUiLCJsb2FkTGlicmFyeSIsInJlcGxhY2UiLCJhc3luYyIsImUiLCJvQ2FwYWJpbGl0aWVzIiwiU2VydmljZSIsIkVudmlyb25tZW50U2VydmljZUZhY3RvcnkiLCJvU2VydmljZUNvbnRleHQiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UiLCJTZXJ2aWNlRmFjdG9yeSJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFNTUEsOEI7Ozs7Ozs7Ozs7Ozs7YUFLTDtBQUVBLHNCQUFPO0FBQUE7O0FBQ04sYUFBS0MsV0FBTCxHQUFtQixJQUFJQyxPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQXFCO0FBQ25ELFVBQUEsS0FBSSxDQUFDQyxT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QUFmLEVBQXlFO0FBQ3hFLFlBQU1DLDhCQUE4QixHQUFHLElBQUlqRCw4QkFBSixDQUFtQ2dELGVBQW5DLENBQXZDO0FBQ0EsZUFBT0MsOEJBQThCLENBQUNoRCxXQUF0QztBQUNBOzs7O0lBSnNDaUQsYzs7U0FPekJILHlCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2VcIjtcblxuaW1wb3J0IHsgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzLCBFbnZpcm9ubWVudENhcGFiaWxpdGllcyB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IFZlcnNpb25JbmZvIGZyb20gXCJzYXAvdWkvVmVyc2lvbkluZm9cIjtcbmltcG9ydCBVcmlQYXJhbWV0ZXJzIGZyb20gXCJzYXAvYmFzZS91dGlsL1VyaVBhcmFtZXRlcnNcIjtcblxuY2xhc3MgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIGV4dGVuZHMgU2VydmljZTxFbnZpcm9ubWVudENhcGFiaWxpdGllcz4ge1xuXHRyZXNvbHZlRm46IGFueTtcblx0cmVqZWN0Rm46IGFueTtcblx0aW5pdFByb21pc2UhOiBQcm9taXNlPGFueT47XG5cdGVudmlyb25tZW50Q2FwYWJpbGl0aWVzITogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXM7XG5cdC8vICE6IG1lYW5zIHRoYXQgd2Uga25vdyBpdCB3aWxsIGJlIGFzc2lnbmVkIGJlZm9yZSB1c2FnZVxuXG5cdGluaXQoKSB7XG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRoaXMucmVzb2x2ZUZuID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucmVqZWN0Rm4gPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0NvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTtcblx0XHRWZXJzaW9uSW5mby5sb2FkKHVuZGVmaW5lZCBhcyBhbnkpXG5cdFx0XHQudGhlbih2ZXJzaW9uSW5mbyA9PiB7XG5cdFx0XHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMuQ2hhcnQgPSAhIXZlcnNpb25JbmZvLmxpYnJhcmllcy5maW5kKChsaWI6IGFueSkgPT4gbGliLm5hbWUgPT09IFwic2FwLnZpelwiKTtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5NaWNyb0NoYXJ0ID0gISF2ZXJzaW9uSW5mby5saWJyYXJpZXMuZmluZChcblx0XHRcdFx0XHQobGliOiBhbnkpID0+IGxpYi5uYW1lID09PSBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCJcblx0XHRcdFx0KTtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcy5VU2hlbGwgPSAhIShzYXAgJiYgc2FwLnVzaGVsbCAmJiBzYXAudXNoZWxsLkNvbnRhaW5lcik7XG5cdFx0XHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMuSW50ZW50QmFzZWROYXZpZ2F0aW9uID0gISEoc2FwICYmIHNhcC51c2hlbGwgJiYgc2FwLnVzaGVsbC5Db250YWluZXIpO1xuXHRcdFx0XHR0aGlzLmVudmlyb25tZW50Q2FwYWJpbGl0aWVzLlNpdHVhdGlvbnMgPVxuXHRcdFx0XHRcdFVyaVBhcmFtZXRlcnMuZnJvbVF1ZXJ5KHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldChcInNhcC1mZS14eC1zaXR1YXRpb25zXCIpID09PSBcInRydWVcIjtcblx0XHRcdFx0dGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IE9iamVjdC5hc3NpZ24odGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcywgb0NvbnRleHQuc2V0dGluZ3MpO1xuXHRcdFx0XHR0aGlzLnJlc29sdmVGbih0aGlzKTtcblx0XHRcdH0pXG5cdFx0XHQuY2F0Y2godGhpcy5yZWplY3RGbik7XG5cdH1cblxuXHRyZXNvbHZlTGlicmFyeShsaWJyYXJ5TmFtZTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdChzYXAudWkuZ2V0Q29yZSgpLmxvYWRMaWJyYXJ5KGAke2xpYnJhcnlOYW1lLnJlcGxhY2UoL1xcLi9nLCBcIi9cIil9YCwgeyBhc3luYzogdHJ1ZSB9KSBhcyBQcm9taXNlPG9iamVjdD4pXG5cdFx0XHRcdFx0LnRoZW4oZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXNvbHZlKHRydWUpO1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmVzb2x2ZShmYWxzZSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdHJlc29sdmUoZmFsc2UpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHVibGljIHNldENhcGFiaWxpdGllcyhvQ2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcykge1xuXHRcdHRoaXMuZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSBvQ2FwYWJpbGl0aWVzO1xuXHR9XG5cblx0cHVibGljIGdldENhcGFiaWxpdGllcygpIHtcblx0XHRyZXR1cm4gdGhpcy5lbnZpcm9ubWVudENhcGFiaWxpdGllcztcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59XG5cbmNsYXNzIEVudmlyb25tZW50U2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxFbnZpcm9ubWVudENhcGFiaWxpdGllcz4ge1xuXHRjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PEVudmlyb25tZW50Q2FwYWJpbGl0aWVzPikge1xuXHRcdGNvbnN0IGVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSA9IG5ldyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2Uob1NlcnZpY2VDb250ZXh0KTtcblx0XHRyZXR1cm4gZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlLmluaXRQcm9taXNlO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEVudmlyb25tZW50U2VydmljZUZhY3Rvcnk7XG4iXX0=
@@ -1,7 +1,10 @@
1
- import { ServiceFactory, Service, ServiceContext } from "sap/ui/core/service";
1
+ import ServiceFactory from "sap/ui/core/service/ServiceFactory";
2
+ import Service from "sap/ui/core/service/Service";
3
+ import { ServiceContext } from "sap/ui/core/service";
4
+
2
5
  import { DefaultEnvironmentCapabilities, EnvironmentCapabilities } from "../converters/MetaModelConverter";
3
- import { VersionInfo } from "sap/ui";
4
- import { UriParameters } from "sap/base/util";
6
+ import VersionInfo from "sap/ui/VersionInfo";
7
+ import UriParameters from "sap/base/util/UriParameters";
5
8
 
6
9
  class EnvironmentCapabilitiesService extends Service<EnvironmentCapabilities> {
7
10
  resolveFn: any;
@@ -36,9 +39,7 @@ class EnvironmentCapabilitiesService extends Service<EnvironmentCapabilities> {
36
39
  resolveLibrary(libraryName: string): Promise<boolean> {
37
40
  return new Promise(function(resolve) {
38
41
  try {
39
- sap.ui
40
- .getCore()
41
- .loadLibrary(`${libraryName.replace(/\./g, "/")}`, { async: true })
42
+ (sap.ui.getCore().loadLibrary(`${libraryName.replace(/\./g, "/")}`, { async: true }) as Promise<object>)
42
43
  .then(function() {
43
44
  resolve(true);
44
45
  })