@openui5/sap.ui.core 1.115.1 → 1.117.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 (685) hide show
  1. package/.dtsgenrc +18 -0
  2. package/.eslintrc.json +1 -11
  3. package/.reuse/dep5 +0 -5
  4. package/THIRDPARTY.txt +1 -7
  5. package/package.json +1 -1
  6. package/src/jquery.sap.global.js +1 -1
  7. package/src/jquery.sap.properties.js +1 -1
  8. package/src/jquery.sap.resources.js +1 -1
  9. package/src/jquery.sap.script.js +1 -1
  10. package/src/jquery.sap.sjax.js +2 -2
  11. package/src/jquery.sap.storage.js +3 -3
  12. package/src/sap/base/Event.js +106 -0
  13. package/src/sap/base/Eventing.js +319 -0
  14. package/src/sap/base/config/MemoryConfigurationProvider.js +10 -1
  15. package/src/sap/base/config.js +3 -2
  16. package/src/sap/base/i18n/Formatting.js +989 -0
  17. package/src/sap/base/i18n/LanguageTag.js +189 -0
  18. package/src/sap/base/i18n/Localization.js +710 -0
  19. package/src/sap/base/i18n/ResourceBundle.js +5 -20
  20. package/src/sap/base/i18n/date/CalendarType.js +54 -0
  21. package/src/sap/base/i18n/date/CalendarWeekNumbering.js +105 -0
  22. package/src/sap/base/i18n/date/TimezoneUtils.js +287 -0
  23. package/src/sap/base/util/JSTokenizer.js +1 -1
  24. package/src/sap/base/util/fetch.js +4 -4
  25. package/src/sap/base/util/mixedFetch.js +2 -2
  26. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  27. package/src/sap/base/util/restricted/_castArray.js +1 -1
  28. package/src/sap/base/util/restricted/_compact.js +1 -1
  29. package/src/sap/base/util/restricted/_curry.js +1 -1
  30. package/src/sap/base/util/restricted/_debounce.js +1 -1
  31. package/src/sap/base/util/restricted/_difference.js +1 -1
  32. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  33. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  34. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  35. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  36. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  37. package/src/sap/base/util/restricted/_flatten.js +1 -1
  38. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  39. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  40. package/src/sap/base/util/restricted/_intersection.js +1 -1
  41. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  42. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  43. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  44. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  45. package/src/sap/base/util/restricted/_isNil.js +1 -1
  46. package/src/sap/base/util/restricted/_max.js +1 -1
  47. package/src/sap/base/util/restricted/_merge.js +1 -1
  48. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  49. package/src/sap/base/util/restricted/_min.js +1 -1
  50. package/src/sap/base/util/restricted/_omit.js +1 -1
  51. package/src/sap/base/util/restricted/_pick.js +1 -1
  52. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  53. package/src/sap/base/util/restricted/_throttle.js +1 -1
  54. package/src/sap/base/util/restricted/_toArray.js +1 -1
  55. package/src/sap/base/util/restricted/_union.js +1 -1
  56. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  57. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  58. package/src/sap/base/util/restricted/_uniq.js +1 -1
  59. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  60. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  61. package/src/sap/base/util/restricted/_without.js +1 -1
  62. package/src/sap/base/util/restricted/_xor.js +1 -1
  63. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  64. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  65. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  66. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  67. package/src/sap/base/util/syncFetch.js +2 -2
  68. package/src/sap/ui/Device.js +3 -3
  69. package/src/sap/ui/Global.js +4 -4
  70. package/src/sap/ui/base/Event.js +6 -4
  71. package/src/sap/ui/base/EventProvider.js +4 -12
  72. package/src/sap/ui/base/Interface.js +1 -1
  73. package/src/sap/ui/base/ManagedObject.js +9 -15
  74. package/src/sap/ui/base/ManagedObjectMetadata.js +33 -12
  75. package/src/sap/ui/base/Metadata.js +1 -1
  76. package/src/sap/ui/base/Object.js +1 -1
  77. package/src/sap/ui/base/ObjectPool.js +1 -1
  78. package/src/sap/ui/base/SyncPromise.js +10 -5
  79. package/src/sap/ui/core/.library +3 -3
  80. package/src/sap/ui/core/AccessKeysEnablement.js +10 -5
  81. package/src/sap/ui/core/AnimationMode.js +49 -0
  82. package/src/sap/ui/core/BusyIndicator.js +33 -42
  83. package/src/sap/ui/core/CalendarType.js +11 -37
  84. package/src/sap/ui/core/Component.js +4 -5
  85. package/src/sap/ui/core/ComponentContainer.js +1 -1
  86. package/src/sap/ui/core/ComponentMetadata.js +2 -2
  87. package/src/sap/ui/core/ComponentSupport.js +1 -1
  88. package/src/sap/ui/core/ConfigTest.js +17 -0
  89. package/src/sap/ui/core/Configuration.js +409 -1282
  90. package/src/sap/ui/core/Control.js +7 -12
  91. package/src/sap/ui/core/ControlBehavior.js +157 -0
  92. package/src/sap/ui/core/Core.js +126 -132
  93. package/src/sap/ui/core/CustomData.js +1 -1
  94. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  95. package/src/sap/ui/core/Element.js +14 -3
  96. package/src/sap/ui/core/ElementMetadata.js +2 -4
  97. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  98. package/src/sap/ui/core/EventBus.js +1 -1
  99. package/src/sap/ui/core/Fragment.js +1 -1
  100. package/src/sap/ui/core/HTML.js +1 -1
  101. package/src/sap/ui/core/History.js +1 -1
  102. package/src/sap/ui/core/Icon.js +1 -1
  103. package/src/sap/ui/core/IconPool.js +1 -2
  104. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  105. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  106. package/src/sap/ui/core/InvisibleMessage.js +5 -7
  107. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  108. package/src/sap/ui/core/InvisibleText.js +12 -12
  109. package/src/sap/ui/core/Item.js +1 -1
  110. package/src/sap/ui/core/LabelEnablement.js +1 -1
  111. package/src/sap/ui/core/LayoutData.js +1 -1
  112. package/src/sap/ui/core/Lib.js +126 -38
  113. package/src/sap/ui/core/ListItem.js +1 -1
  114. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  115. package/src/sap/ui/core/Locale.js +154 -430
  116. package/src/sap/ui/core/LocaleData.js +50 -14
  117. package/src/sap/ui/core/Manifest.js +5 -5
  118. package/src/sap/ui/core/Message.js +1 -1
  119. package/src/sap/ui/core/Popup.js +37 -50
  120. package/src/sap/ui/core/RenderManager.js +1 -1
  121. package/src/sap/ui/core/Renderer.js +1 -1
  122. package/src/sap/ui/core/Rendering.js +1 -1
  123. package/src/sap/ui/core/ResizeHandler.js +1 -1
  124. package/src/sap/ui/core/ScrollBar.js +1 -1
  125. package/src/sap/ui/core/SeparatorItem.js +1 -1
  126. package/src/sap/ui/core/Shortcut.js +11 -9
  127. package/src/sap/ui/core/StaticArea.js +31 -17
  128. package/src/sap/ui/core/Theming.js +458 -0
  129. package/src/sap/ui/core/Title.js +1 -1
  130. package/src/sap/ui/core/TooltipBase.js +1 -1
  131. package/src/sap/ui/core/UIArea.js +1 -1
  132. package/src/sap/ui/core/UIComponent.js +1 -1
  133. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  134. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  135. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  136. package/src/sap/ui/core/XMLComposite.js +1 -1
  137. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  138. package/src/sap/ui/core/XMLTemplateProcessor.js +28 -5
  139. package/src/sap/ui/core/_IconRegistry.js +89 -12
  140. package/src/sap/ui/core/boot/_bootConfig.js +137 -0
  141. package/src/sap/ui/core/boot/_runBoot.js +16 -0
  142. package/src/sap/ui/core/boot/initDOM.js +96 -0
  143. package/src/sap/ui/core/boot/loadCalendar.js +50 -0
  144. package/src/sap/ui/core/boot/loadManifest.js +55 -0
  145. package/src/sap/ui/core/boot/loadModules.js +80 -0
  146. package/src/sap/ui/core/boot/manifest.json +11 -0
  147. package/src/sap/ui/core/boot/onInit.js +44 -0
  148. package/src/sap/ui/core/boot.js +107 -0
  149. package/src/sap/ui/core/date/CalendarWeekNumbering.js +12 -83
  150. package/src/sap/ui/core/date/UI5Date.js +10 -4
  151. package/src/sap/ui/core/delegate/ItemNavigation.js +8 -10
  152. package/src/sap/ui/core/delegate/ScrollEnablement.js +5 -5
  153. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  154. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  155. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  156. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  157. package/src/sap/ui/core/format/DateFormat.js +33 -27
  158. package/src/sap/ui/core/format/TimezoneUtil.js +15 -273
  159. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  160. package/src/sap/ui/core/library.js +32 -6
  161. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  162. package/src/sap/ui/core/message/Message.js +1 -1
  163. package/src/sap/ui/core/message/MessageManager.js +1 -1
  164. package/src/sap/ui/core/message/MessageMixin.js +6 -5
  165. package/src/sap/ui/core/message/MessageParser.js +1 -1
  166. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  167. package/src/sap/ui/core/messagebundle_ar.properties +57 -55
  168. package/src/sap/ui/core/messagebundle_bg.properties +57 -55
  169. package/src/sap/ui/core/messagebundle_ca.properties +30 -28
  170. package/src/sap/ui/core/messagebundle_cs.properties +44 -42
  171. package/src/sap/ui/core/messagebundle_cy.properties +59 -57
  172. package/src/sap/ui/core/messagebundle_da.properties +57 -55
  173. package/src/sap/ui/core/messagebundle_de.properties +59 -57
  174. package/src/sap/ui/core/messagebundle_el.properties +48 -46
  175. package/src/sap/ui/core/messagebundle_en.properties +59 -57
  176. package/src/sap/ui/core/messagebundle_en_GB.properties +59 -57
  177. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +2 -0
  178. package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +2 -0
  179. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +3 -0
  180. package/src/sap/ui/core/messagebundle_es.properties +48 -46
  181. package/src/sap/ui/core/messagebundle_es_MX.properties +58 -56
  182. package/src/sap/ui/core/messagebundle_et.properties +55 -53
  183. package/src/sap/ui/core/messagebundle_fi.properties +51 -49
  184. package/src/sap/ui/core/messagebundle_fr.properties +36 -34
  185. package/src/sap/ui/core/messagebundle_fr_CA.properties +21 -19
  186. package/src/sap/ui/core/messagebundle_hi.properties +42 -40
  187. package/src/sap/ui/core/messagebundle_hr.properties +57 -55
  188. package/src/sap/ui/core/messagebundle_hu.properties +58 -56
  189. package/src/sap/ui/core/messagebundle_id.properties +59 -57
  190. package/src/sap/ui/core/messagebundle_it.properties +75 -73
  191. package/src/sap/ui/core/messagebundle_iw.properties +59 -57
  192. package/src/sap/ui/core/messagebundle_ja.properties +50 -48
  193. package/src/sap/ui/core/messagebundle_kk.properties +44 -42
  194. package/src/sap/ui/core/messagebundle_ko.properties +20 -18
  195. package/src/sap/ui/core/messagebundle_lt.properties +59 -57
  196. package/src/sap/ui/core/messagebundle_lv.properties +59 -57
  197. package/src/sap/ui/core/messagebundle_ms.properties +60 -58
  198. package/src/sap/ui/core/messagebundle_nl.properties +58 -56
  199. package/src/sap/ui/core/messagebundle_no.properties +56 -54
  200. package/src/sap/ui/core/messagebundle_pl.properties +56 -54
  201. package/src/sap/ui/core/messagebundle_pt.properties +58 -56
  202. package/src/sap/ui/core/messagebundle_pt_PT.properties +58 -56
  203. package/src/sap/ui/core/messagebundle_ro.properties +59 -57
  204. package/src/sap/ui/core/messagebundle_ru.properties +57 -55
  205. package/src/sap/ui/core/messagebundle_sh.properties +59 -57
  206. package/src/sap/ui/core/messagebundle_sk.properties +57 -55
  207. package/src/sap/ui/core/messagebundle_sl.properties +58 -56
  208. package/src/sap/ui/core/messagebundle_sv.properties +54 -52
  209. package/src/sap/ui/core/messagebundle_th.properties +18 -16
  210. package/src/sap/ui/core/messagebundle_tr.properties +58 -56
  211. package/src/sap/ui/core/messagebundle_uk.properties +59 -57
  212. package/src/sap/ui/core/messagebundle_vi.properties +59 -57
  213. package/src/sap/ui/core/messagebundle_zh_CN.properties +58 -56
  214. package/src/sap/ui/core/messagebundle_zh_TW.properties +58 -56
  215. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  216. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  217. package/src/sap/ui/core/mvc/JSView.js +1 -1
  218. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  219. package/src/sap/ui/core/mvc/View.js +1 -1
  220. package/src/sap/ui/core/mvc/XMLView.js +14 -2
  221. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  222. package/src/sap/ui/core/plugin/LessSupport.js +14 -16
  223. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  224. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  225. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  226. package/src/sap/ui/core/routing/HashChanger.js +1 -0
  227. package/src/sap/ui/core/routing/Route.js +1 -0
  228. package/src/sap/ui/core/routing/Router.js +3 -1
  229. package/src/sap/ui/core/rules/Config.support.js +2 -2
  230. package/src/sap/ui/core/rules/Misc.support.js +1 -1
  231. package/src/sap/ui/core/rules/Model.support.js +3 -1
  232. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  233. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  234. package/src/sap/ui/core/service/Service.js +1 -1
  235. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  236. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  237. package/src/sap/ui/core/support/Plugin.js +1 -1
  238. package/src/sap/ui/core/support/Support.js +7 -4
  239. package/src/sap/ui/core/support/controls/TimelineOverview.js +1 -1
  240. package/src/sap/ui/core/support/plugins/ControlTree.js +2 -2
  241. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  242. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  243. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  244. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  245. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  246. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  247. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  248. package/src/sap/ui/core/themes/base/Icon.less +2 -2
  249. package/src/sap/ui/core/themes/base/LocalBusyIndicator.less +4 -4
  250. package/src/sap/ui/core/themes/base/base.less +41 -20
  251. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  252. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  253. package/src/sap/ui/core/theming/Parameters.js +6 -10
  254. package/src/sap/ui/core/theming/ThemeManager.js +312 -450
  255. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  256. package/src/sap/ui/core/tmpl/DOMElement.js +5 -10
  257. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  258. package/src/sap/ui/core/tmpl/Template.js +1 -1
  259. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  260. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  261. package/src/sap/ui/core/util/Export.js +1 -1
  262. package/src/sap/ui/core/util/ExportCell.js +1 -1
  263. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  264. package/src/sap/ui/core/util/ExportRow.js +1 -1
  265. package/src/sap/ui/core/util/ExportType.js +1 -1
  266. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  267. package/src/sap/ui/core/util/File.js +1 -1
  268. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  269. package/src/sap/ui/core/util/MockServer.js +4 -5
  270. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  271. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +3 -1
  272. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  273. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  274. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  275. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  276. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  277. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  278. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  279. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  280. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  281. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  282. package/src/sap/ui/debug/ControlTree.js +1 -1
  283. package/src/sap/ui/debug/DebugEnv.js +1 -1
  284. package/src/sap/ui/debug/PropertyList.js +1 -1
  285. package/src/sap/ui/events/PseudoEvents.js +17 -9
  286. package/src/sap/ui/model/Binding.js +19 -15
  287. package/src/sap/ui/model/ClientModel.js +1 -1
  288. package/src/sap/ui/model/CompositeBinding.js +57 -19
  289. package/src/sap/ui/model/CompositeDataState.js +1 -1
  290. package/src/sap/ui/model/CompositeType.js +1 -1
  291. package/src/sap/ui/model/DataState.js +1 -1
  292. package/src/sap/ui/model/ListBinding.js +42 -1
  293. package/src/sap/ui/model/MetaModel.js +1 -1
  294. package/src/sap/ui/model/Model.js +5 -4
  295. package/src/sap/ui/model/PropertyBinding.js +10 -0
  296. package/src/sap/ui/model/SelectionModel.js +1 -1
  297. package/src/sap/ui/model/SimpleType.js +4 -1
  298. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  299. package/src/sap/ui/model/Type.js +1 -1
  300. package/src/sap/ui/model/analytics/AnalyticalBinding.js +166 -79
  301. package/src/sap/ui/model/analytics/AnalyticalVersionInfo.js +4 -3
  302. package/src/sap/ui/model/analytics/BatchResponseCollector.js +2 -2
  303. package/src/sap/ui/model/analytics/ODataModelAdapter.js +14 -27
  304. package/src/sap/ui/model/analytics/odata4analytics.js +6 -12
  305. package/src/sap/ui/model/base/ManagedObjectModel.js +3 -2
  306. package/src/sap/ui/model/json/JSONModel.js +6 -1
  307. package/src/sap/ui/model/message/MessageModel.js +1 -1
  308. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  309. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  310. package/src/sap/ui/model/odata/ODataMetaModel.js +191 -5
  311. package/src/sap/ui/model/odata/ODataMetadata.js +38 -4
  312. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  313. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  314. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  315. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  316. package/src/sap/ui/model/odata/type/Date.js +1 -1
  317. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  318. package/src/sap/ui/model/odata/type/DateTimeBase.js +8 -1
  319. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  320. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  321. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  322. package/src/sap/ui/model/odata/type/Double.js +1 -1
  323. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  324. package/src/sap/ui/model/odata/type/Int.js +1 -1
  325. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  326. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  327. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  328. package/src/sap/ui/model/odata/type/ODataType.js +3 -3
  329. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  330. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  331. package/src/sap/ui/model/odata/type/Single.js +1 -1
  332. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  333. package/src/sap/ui/model/odata/type/String.js +1 -1
  334. package/src/sap/ui/model/odata/type/Time.js +1 -1
  335. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  336. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  337. package/src/sap/ui/model/odata/v2/Context.js +3 -2
  338. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  339. package/src/sap/ui/model/odata/v2/ODataListBinding.js +14 -3
  340. package/src/sap/ui/model/odata/v2/ODataModel.js +46 -32
  341. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  342. package/src/sap/ui/model/odata/v4/AnnotationHelper.js +4 -4
  343. package/src/sap/ui/model/odata/v4/Context.js +39 -32
  344. package/src/sap/ui/model/odata/v4/ODataBinding.js +85 -52
  345. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +23 -19
  346. package/src/sap/ui/model/odata/v4/ODataListBinding.js +139 -50
  347. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +30 -36
  348. package/src/sap/ui/model/odata/v4/ODataModel.js +49 -44
  349. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +72 -37
  350. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +34 -29
  351. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +95 -9
  352. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +25 -27
  353. package/src/sap/ui/model/odata/v4/lib/_Cache.js +95 -209
  354. package/src/sap/ui/model/odata/v4/lib/_Helper.js +168 -1
  355. package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +14 -5
  356. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +34 -19
  357. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +4 -4
  358. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +1 -1
  359. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  360. package/src/sap/ui/model/type/Boolean.js +1 -1
  361. package/src/sap/ui/model/type/Currency.js +1 -1
  362. package/src/sap/ui/model/type/Date.js +1 -1
  363. package/src/sap/ui/model/type/DateInterval.js +1 -1
  364. package/src/sap/ui/model/type/DateTime.js +1 -1
  365. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  366. package/src/sap/ui/model/type/FileSize.js +1 -1
  367. package/src/sap/ui/model/type/Float.js +1 -1
  368. package/src/sap/ui/model/type/Integer.js +1 -1
  369. package/src/sap/ui/model/type/String.js +1 -1
  370. package/src/sap/ui/model/type/Time.js +1 -1
  371. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  372. package/src/sap/ui/model/type/Unit.js +1 -1
  373. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  374. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  375. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  376. package/src/sap/ui/test/Opa5.js +1 -1
  377. package/src/sap/ui/test/TestUtils.js +1 -1
  378. package/src/sap/ui/test/autowaiter/_autoWaiter.js +1 -1
  379. package/src/sap/ui/test/generic/TestBase.js +1 -1
  380. package/src/sap/ui/test/generic/_EnforceSemanticRendering.js +1 -3
  381. package/src/sap/ui/test/gherkin/simpleGherkinParser.js +10 -5
  382. package/src/sap/ui/test/matchers/LabelFor.js +1 -0
  383. package/src/sap/ui/test/matchers/_Visitor.js +6 -1
  384. package/src/sap/ui/test/starter/_setupAndStart.js +2 -5
  385. package/src/sap/ui/thirdparty/caja-html-sanitizer.js +111 -96
  386. package/src/sap/ui/thirdparty/qunit-2.js +9 -3
  387. package/src/sap/ui/util/ActivityDetection.js +7 -1
  388. package/src/sap/ui/util/Mobile.js +21 -14
  389. package/src/sap/ui/util/Storage.js +1 -1
  390. package/src/sap-ui-boot.js +23 -6
  391. package/src/ui5-boot.js +50 -0
  392. package/src/ui5loader-autoconfig.js +150 -75
  393. package/src/ui5loader.js +458 -514
  394. package/test/sap/ui/core/Device.js +1 -1
  395. package/test/sap/ui/core/FormatHelper.js +3 -2
  396. package/test/sap/ui/core/demokit/docuindex.json +6 -0
  397. package/test/sap/ui/core/demokit/sample/OpaAction/applicationUnderTest/view/Main.view.xml +1 -0
  398. package/test/sap/ui/core/demokit/sample/OpaBusyIndicator/OpaBusyIndicator.js +1 -1
  399. package/test/sap/ui/core/demokit/sample/OpaMatchers/OpaMatchers.js +2 -2
  400. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/MIT.ODataTypes.html +9 -14
  401. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Opa.qunit.js +7 -0
  402. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Template.controller.js +2 -2
  403. package/test/sap/ui/core/demokit/sample/common/pages/Any.js +1 -1
  404. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/AutoExpand.view.xml +24 -5
  405. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.view.xml +24 -6
  406. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.view.xml +20 -5
  407. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Opa.qunit.js +2 -1
  408. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/tests/filter.js +2 -2
  409. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Component.js +27 -0
  410. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ListReport.controller.js +43 -0
  411. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ListReport.view.xml +47 -0
  412. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Main.controller.js +27 -0
  413. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Main.view.xml +7 -0
  414. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/NotFound.view.xml +8 -0
  415. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ObjectPage.controller.js +123 -0
  416. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ObjectPage.view.xml +92 -0
  417. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.html +27 -0
  418. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.js +70 -0
  419. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/README.html +55 -0
  420. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/SandboxModel.js +56 -0
  421. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/POST-SalesOrderList.json +66 -0
  422. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000000')-SO_2_SOITEM.json +57 -0
  423. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000000').json +20 -0
  424. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000001').json +9 -0
  425. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList('0500000007')-SO_2_BP.json +12 -0
  426. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/SalesOrderList.json +62 -0
  427. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_CurrencyCode.json +85 -0
  428. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_CurrencyCode.xml +185 -0
  429. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_ProductID.json +93 -0
  430. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/VH_ProductID.xml +262 -0
  431. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/data/metadata.xml +1779 -0
  432. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/manifest.json +134 -0
  433. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/pages/Main.js +119 -0
  434. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Opa.qunit.js +2 -1
  435. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Opa.qunit.js +2 -1
  436. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.view.xml +4 -1
  437. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Opa.qunit.js +2 -1
  438. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/GridTable.view.xml +12 -3
  439. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Main.controller.js +2 -1
  440. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.js +2 -1
  441. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.qunit.js +2 -1
  442. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Opa.qunit.js +2 -1
  443. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Opa.qunit.js +2 -1
  444. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.js +2 -1
  445. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/pages/Main.js +0 -41
  446. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Opa.qunit.js +2 -1
  447. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +26 -8
  448. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/data/metadata.xml +4 -0
  449. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Opa.qunit.js +2 -1
  450. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/manifest.json +1 -1
  451. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Opa.qunit.js +2 -1
  452. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/manifest.json +1 -1
  453. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.controller.js +5 -17
  454. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Opa.qunit.js +2 -1
  455. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/pages/Main.js +18 -0
  456. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/Create.js +10 -6
  457. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Opa.qunit.js +2 -1
  458. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/manifest.json +18 -0
  459. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Opa.qunit.js +2 -1
  460. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Main.view.xml +3 -3
  461. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Opa.qunit.js +2 -1
  462. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/pages/Main.js +4 -1
  463. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Opa.qunit.js +2 -1
  464. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/controller/App.controller.js +1 -6
  465. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/localService/mockserver.js +1 -0
  466. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/controller/App.controller.js +1 -6
  467. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/localService/mockserver.js +1 -0
  468. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/controller/App.controller.js +1 -6
  469. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/localService/mockserver.js +1 -0
  470. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/arrangements/Startup.js +1 -1
  471. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/controller/App.controller.js +1 -6
  472. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/localService/mockserver.js +1 -0
  473. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/controller/App.controller.js +3 -8
  474. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/localService/mockserver.js +1 -0
  475. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/controller/App.controller.js +3 -8
  476. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/localService/mockserver.js +1 -0
  477. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/arrangements/Startup.js +1 -1
  478. package/test/sap/ui/core/qunit/CompositeBinding.qunit.js +25 -7
  479. package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +86 -2
  480. package/test/sap/ui/core/qunit/DataState.qunit.js +2 -7
  481. package/test/sap/ui/core/qunit/HTML.qunit.js +31 -31
  482. package/test/sap/ui/core/qunit/IconPool.qunit.js +53 -4
  483. package/test/sap/ui/core/qunit/Lib.qunit.js +55 -2
  484. package/test/sap/ui/core/qunit/LocalBusyIndicator.qunit.js +22 -15
  485. package/test/sap/ui/core/qunit/ManagedObject.qunit.js +5 -3
  486. package/test/sap/ui/core/qunit/ManagedObjectModel.qunit.js +43 -5
  487. package/test/sap/ui/core/qunit/Object.qunit.js +4 -1
  488. package/test/sap/ui/core/qunit/ThemeManager.qunit.js +2 -2
  489. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +9 -3
  490. package/test/sap/ui/core/qunit/Theming.beforeBootstrap.qunit.js +13 -0
  491. package/test/sap/ui/core/qunit/Theming.qunit.js +247 -0
  492. package/test/sap/ui/core/qunit/analytics/AnalyticalBinding.qunit.js +510 -185
  493. package/test/sap/ui/core/qunit/analytics/AnalyticalTreeBindingAdapter.qunit.js +2 -7
  494. package/test/sap/ui/core/qunit/analytics/ODataModelAdapter.qunit.js +81 -16
  495. package/test/sap/ui/core/qunit/analytics/odata4analytics.qunit.js +20 -29
  496. package/test/sap/ui/core/qunit/app/MessageListBinding.qunit.js +2 -7
  497. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +18 -1
  498. package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.html +24 -0
  499. package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.js +277 -0
  500. package/test/sap/ui/core/qunit/base/i18n/Localization.qunit.js +282 -0
  501. package/test/sap/ui/core/qunit/base/i18n/ResourceBundle.qunit.js +5 -6
  502. package/test/sap/ui/core/qunit/base/security/sanitizeHTML.qunit.js +17 -0
  503. package/test/sap/ui/core/qunit/bootstrap/BootstrapPreload.qunit.js +1 -2
  504. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithCustomBootTask.beforeBootstrap.qunit.js +13 -12
  505. package/test/sap/ui/core/qunit/bootstrap/Configuration.main.qunit.js +11 -0
  506. package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.html +4 -3
  507. package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.js +451 -281
  508. package/test/sap/ui/core/qunit/bootstrap/ThemeVersion.qunit.js +19 -30
  509. package/test/sap/ui/core/qunit/component/Models.qunit.js +12 -30
  510. package/test/sap/ui/core/qunit/component/Models_unavoidablySync.qunit.js +8 -26
  511. package/test/sap/ui/core/qunit/component/testdata/async/lib2/library-preload.js +2 -2
  512. package/test/sap/ui/core/qunit/component/testdata/async/lib2/library-preload.json +1 -1
  513. package/test/sap/ui/core/qunit/component/testdata/async/lib2/library.js +2 -2
  514. package/test/sap/ui/core/qunit/component/testdata/async/lib3/library-preload.js +2 -2
  515. package/test/sap/ui/core/qunit/component/testdata/async/lib3/library-preload.json +1 -1
  516. package/test/sap/ui/core/qunit/component/testdata/async/lib3/library.js +2 -2
  517. package/test/sap/ui/core/qunit/component/testdata/async/lib4/library-preload.js +2 -2
  518. package/test/sap/ui/core/qunit/component/testdata/async/lib4/library-preload.json +1 -1
  519. package/test/sap/ui/core/qunit/component/testdata/async/lib4/library.js +2 -2
  520. package/test/sap/ui/core/qunit/component/testdata/async/manifestcomp/Component-preload.js +1 -1
  521. package/test/sap/ui/core/qunit/component/testdata/async/manifestcomp/Component.js +2 -2
  522. package/test/sap/ui/core/qunit/component/testdata/async/mycomp/Component-preload.js +1 -1
  523. package/test/sap/ui/core/qunit/component/testdata/async/mycomp/Component.js +2 -2
  524. package/test/sap/ui/core/qunit/component/testdata/async/mysubcomp/Component-preload.js +1 -1
  525. package/test/sap/ui/core/qunit/component/testdata/async/mysubcomp/Component.js +2 -3
  526. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/Component.js +0 -4
  527. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/sync/Component.js +2 -6
  528. package/test/sap/ui/core/qunit/component/testdata/customizing/customersub/Component.js +0 -4
  529. package/test/sap/ui/core/qunit/component/testdata/inherit/Component.js +2 -7
  530. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/Component.js +2 -7
  531. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/Component.js +2 -2
  532. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentA/Component.js +2 -2
  533. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentB/Component.js +2 -2
  534. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/Component.js +2 -2
  535. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentA/Component.js +2 -2
  536. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentB/Component.js +2 -2
  537. package/test/sap/ui/core/qunit/component/testdata/other/Component.js +2 -7
  538. package/test/sap/ui/core/qunit/component/testdata/terminologies/Component.js +2 -2
  539. package/test/sap/ui/core/qunit/component/testdata/terminologies/component1/Component.js +2 -2
  540. package/test/sap/ui/core/qunit/component/testdata/terminologies/component2/Component.js +2 -2
  541. package/test/sap/ui/core/qunit/component/testdata/terminologies/component3/Component.js +2 -2
  542. package/test/sap/ui/core/qunit/component/testdata/terminologies/component5/Component.js +2 -2
  543. package/test/sap/ui/core/qunit/component/testdata/terminologies/reuse/Component.js +2 -3
  544. package/test/sap/ui/core/qunit/component/testdata/v1/Component.js +2 -7
  545. package/test/sap/ui/core/qunit/component/testdata/v1empty/Component.js +2 -7
  546. package/test/sap/ui/core/qunit/component/testdata/v1inline/Component.js +2 -5
  547. package/test/sap/ui/core/qunit/component/testdata/v1missing/Component.js +2 -7
  548. package/test/sap/ui/core/qunit/component/testdata/v2/Component.js +2 -5
  549. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/Component.js +2 -5
  550. package/test/sap/ui/core/qunit/component/testdata/v2empty/Component.js +2 -9
  551. package/test/sap/ui/core/qunit/component/testdata/v2inline/Component.js +2 -5
  552. package/test/sap/ui/core/qunit/component/testdata/v2missing/Component.js +2 -9
  553. package/test/sap/ui/core/qunit/component/testdata/v2version/Component.js +2 -2
  554. package/test/sap/ui/core/qunit/dnd/DragDropInfo.qunit.js +1 -2
  555. package/test/sap/ui/core/qunit/generic/EnforceSemanticRendering.qunit.js +2 -2
  556. package/test/sap/ui/core/qunit/generic/SettersContextReturn.qunit.js +2 -2
  557. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +2 -0
  558. package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +2 -0
  559. package/test/sap/ui/core/qunit/generic/legacy/SettersContextReturn.qunit.js +2 -2
  560. package/test/sap/ui/core/qunit/gherkin/dataTableUtils.qunit.js +2 -2
  561. package/test/sap/ui/core/qunit/i18n/Locale.qunit.js +0 -52
  562. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +49 -14
  563. package/test/sap/ui/core/qunit/i18n/UI5Date.qunit.js +16 -4
  564. package/test/sap/ui/core/qunit/i18n/UniversalDate.qunit.js +74 -114
  565. package/test/sap/ui/core/qunit/i18n/UniversalDateUtils.qunit.js +34 -39
  566. package/test/sap/ui/core/qunit/i18n/testsuite.i18n.qunit.js +18 -0
  567. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +1 -0
  568. package/test/sap/ui/core/qunit/internal/BeforePush.ODataV4.js +28 -0
  569. package/test/sap/ui/core/qunit/internal/BeforePush.html +1 -0
  570. package/test/sap/ui/core/qunit/internal/BeforePush.js +15 -0
  571. package/test/sap/ui/core/qunit/internal/performance/ExpressionParser.performance.qunit.js +1 -0
  572. package/test/sap/ui/core/qunit/json/JSONListBinding.qunit.js +2 -7
  573. package/test/sap/ui/core/qunit/json/JSONPropertyBinding.qunit.js +7 -12
  574. package/test/sap/ui/core/qunit/json/JSONTwoWay.qunit.js +3 -8
  575. package/test/sap/ui/core/qunit/loader/asyncMode.qunit.js +2 -2
  576. package/test/sap/ui/core/qunit/loader/asyncMode_unavoidablySync.qunit.js +1 -1
  577. package/test/sap/ui/core/qunit/loader/fixture/amd-with-export-true/module1.js +2 -2
  578. package/test/sap/ui/core/qunit/loader/testsuite.loader.qunit.js +0 -3
  579. package/test/sap/ui/core/qunit/messages/MessageMixin.qunit.js +2 -7
  580. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +1 -1
  581. package/test/sap/ui/core/qunit/model/Binding.qunit.js +36 -11
  582. package/test/sap/ui/core/qunit/model/ClientListBinding.qunit.js +2 -7
  583. package/test/sap/ui/core/qunit/model/ClientTreeBinding.qunit.js +2 -7
  584. package/test/sap/ui/core/qunit/model/CompositeDataState.qunit.js +2 -7
  585. package/test/sap/ui/core/qunit/model/Context.qunit.js +2 -7
  586. package/test/sap/ui/core/qunit/model/ContextBinding.qunit.js +2 -7
  587. package/test/sap/ui/core/qunit/model/FAR_CUSTOMER_LINE_ITEMS.metadata.xml +2 -0
  588. package/test/sap/ui/core/qunit/model/ListBinding.qunit.js +63 -6
  589. package/test/sap/ui/core/qunit/model/Model.qunit.js +2 -7
  590. package/test/sap/ui/core/qunit/model/PropertyBinding.qunit.js +40 -0
  591. package/test/sap/ui/core/qunit/model/TreeBinding.qunit.js +2 -7
  592. package/test/sap/ui/core/qunit/model/TreeBindingAdapter.qunit.js +2 -7
  593. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +51 -0
  594. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +9 -8
  595. package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions.qunit.js +4 -4
  596. package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions_legacy.qunit.js +4 -4
  597. package/test/sap/ui/core/qunit/mvc/testdata/Async.view.xml +1 -1
  598. package/test/sap/ui/core/qunit/mvc/testdata/AsyncTypedView.js +5 -1
  599. package/test/sap/ui/core/qunit/odata/AnnotationParserNoFakeService.qunit.js +2 -7
  600. package/test/sap/ui/core/qunit/odata/ODataMessageParser.qunit.js +1 -1
  601. package/test/sap/ui/core/qunit/odata/ODataMessageParserNoFakeService.qunit.js +2 -8
  602. package/test/sap/ui/core/qunit/odata/ODataMetadataNoFakeService.qunit.js +68 -9
  603. package/test/sap/ui/core/qunit/odata/type/DateTimeBase.qunit.js +24 -0
  604. package/test/sap/ui/core/qunit/odata/v2/Context.qunit.js +2 -7
  605. package/test/sap/ui/core/qunit/odata/v2/ODataContextBindingNoFakeService.qunit.js +2 -7
  606. package/test/sap/ui/core/qunit/odata/v2/ODataListBindingNoFakeService.qunit.js +31 -17
  607. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +260 -56
  608. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +70 -15
  609. package/test/sap/ui/core/qunit/odata/v2/ODataPropertyBindingNoFakeService.qunit.js +2 -7
  610. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingFlatNoFakeService.qunit.js +4 -9
  611. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingNoFakeService.qunit.js +2 -7
  612. package/test/sap/ui/core/qunit/odata/v2/V2ODataModel.qunit.js +1 -1
  613. package/test/sap/ui/core/qunit/odata/v2/_CreatedContextsCache.qunit.js +2 -7
  614. package/test/sap/ui/core/qunit/odata/v4/AnnotationHelper.qunit.js +1 -1
  615. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +55 -22
  616. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +184 -151
  617. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +60 -30
  618. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +305 -69
  619. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +20 -69
  620. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1282 -255
  621. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +90 -61
  622. package/test/sap/ui/core/qunit/odata/v4/ODataModel.realOData.qunit.js +0 -3
  623. package/test/sap/ui/core/qunit/odata/v4/ODataParentBinding.qunit.js +283 -170
  624. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +103 -78
  625. package/test/sap/ui/core/qunit/odata/v4/data/metadata.json +2 -1
  626. package/test/sap/ui/core/qunit/odata/v4/data/metadata.xml +4 -0
  627. package/test/sap/ui/core/qunit/odata/v4/data/metadata_special_cases.xml +2 -0
  628. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +151 -1
  629. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +24 -11
  630. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +279 -458
  631. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +204 -3
  632. package/test/sap/ui/core/qunit/odata/v4/lib/_MetadataRequestor.qunit.js +7 -3
  633. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +145 -26
  634. package/test/sap/ui/core/qunit/odata/v4/testsuite.odatav4.qunit.js +4 -0
  635. package/test/sap/ui/core/qunit/opa/_LogCollector.qunit.js +1 -1
  636. package/test/sap/ui/core/qunit/opa/matchers/LabelFor.qunit.js +4 -2
  637. package/test/sap/ui/core/qunit/opa/matchers/_Busy.qunit.js +129 -2
  638. package/test/sap/ui/core/qunit/opa/matchers/_Editable.qunit.js +5 -1
  639. package/test/sap/ui/core/qunit/performance/trace/FESR.qunit.js +5 -0
  640. package/test/sap/ui/core/qunit/resource/ResourceModel.qunit.js +17 -37
  641. package/test/sap/ui/core/qunit/routing/HashChanger.qunit.js +1 -6
  642. package/test/sap/ui/core/qunit/routing/RouterHashChanger.qunit.js +1 -10
  643. package/test/sap/ui/core/qunit/routing/async/Router.qunit.js +1 -22
  644. package/test/sap/ui/core/qunit/routing/async/Target.qunit.js +1 -4
  645. package/test/sap/ui/core/qunit/routing/fixture/Async1.view.xml +1 -1
  646. package/test/sap/ui/core/qunit/rule/model/modelSupport.qunit.js +34 -1
  647. package/test/sap/ui/core/qunit/testdata/fastnavigation/view/FastNavigation.view.xml +2 -2
  648. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib1/i18n.properties +1 -0
  649. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib1/library.js +10 -0
  650. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib1/manifest.json +10 -0
  651. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib2/library.js +10 -0
  652. package/test/sap/ui/core/qunit/testdata/libraries/resourcebundle/lib2/messagebundle.properties +1 -0
  653. package/test/sap/ui/core/qunit/testdata/xml-require/helper/Formatter.js +7 -4
  654. package/test/sap/ui/core/qunit/testdata/xml-require/view/XMLTemplateProcessorAsync_require_in_html.view.xml +36 -0
  655. package/test/sap/ui/core/qunit/testsuites/testsuite.databinding.qunit.js +3 -0
  656. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +29 -0
  657. package/test/sap/ui/core/qunit/types/DateFormatTimezones.qunit.js +1381 -1570
  658. package/test/sap/ui/core/qunit/types/SimpleType.qunit.js +16 -2
  659. package/test/sap/ui/core/qunit/types/Types.qunit.js +2 -37
  660. package/test/sap/ui/core/qunit/types/testsuite.types.qunit.js +1 -1
  661. package/test/sap/ui/core/qunit/util/Popup.qunit.js +7 -11
  662. package/test/sap/ui/core/qunit/util/SyncPromise.qunit.js +4 -1
  663. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +3 -1
  664. package/test/sap/ui/core/qunit/util/jQuery.sap.Version.qunit.js +3 -0
  665. package/test/sap/ui/core/qunit/util/jQuery.sap.measure.qunit.js +16 -11
  666. package/test/sap/ui/core/qunit/util/reflection/BaseTreeModifier.qunit.js +1 -1
  667. package/test/sap/ui/core/qunit/xml/XMLListBinding.qunit.js +1 -3
  668. package/test/sap/ui/core/qunit/xml/XMLModel.qunit.js +4 -14
  669. package/test/sap/ui/core/qunit/xml/XMLPropertyBinding.qunit.js +7 -11
  670. package/test/sap/ui/core/qunit/xml/XMLTreeBinding.qunit.js +1 -1
  671. package/test/sap/ui/core/qunit/xml/XMLTwoWay.qunit.js +3 -7
  672. package/test/sap/ui/core/relnotes/changes-1.115.json +1 -37
  673. package/test/sap/ui/core/relnotes/changes-1.116.json +71 -0
  674. package/test/sap/ui/core/relnotes/changes-1.117.json +127 -0
  675. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
  676. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
  677. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
  678. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
  679. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
  680. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
  681. package/test/sap/ui/core/visual/images/HyphenationPlayground/windows/1600x1200/chrome/horizon/ltr/cozy/19_thirdParty_language_sl.ref.lnk +1 -1
  682. package/test/testsuite/js/samples.js +2 -0
  683. package/ui5.yaml +166 -1
  684. package/src/sap/ui/core/util/MockServerAnnotationsHandler.js +0 -45
  685. /package/test/sap/ui/core/qunit/bootstrap/{GlobalConfigurationSettings.js → Configuration.beforeBootstrap.qunit.js} +0 -0
@@ -57,7 +57,7 @@ sap.ui.define([
57
57
  * @mixes sap.ui.model.odata.v4.ODataParentBinding
58
58
  * @public
59
59
  * @since 1.37.0
60
- * @version 1.115.1
60
+ * @version 1.117.0
61
61
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
62
62
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
63
63
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -338,7 +338,7 @@ sap.ui.define([
338
338
  sApply = _AggregationHelper.buildApply(mParameters.$$aggregation).$apply;
339
339
  }
340
340
  this.mQueryOptions = this.oModel.buildQueryOptions(mParameters, true);
341
- this.oQueryOptionsPromise = undefined; // @see #doFetchQueryOptions
341
+ this.oQueryOptionsPromise = undefined; // @see #doFetchOrGetQueryOptions
342
342
  this.mParameters = mParameters; // store mParameters at binding after validation
343
343
  if (sApply) {
344
344
  this.mQueryOptions.$apply = sApply;
@@ -376,8 +376,8 @@ sap.ui.define([
376
376
  * detailed reason as parameters.
377
377
  *
378
378
  * @param {sap.ui.base.Event} oEvent
379
- * @param {object} oEvent.getParameters()
380
- * @param {sap.ui.model.ChangeReason} oEvent.getParameters().reason
379
+ * @param {object} oEvent.getParameters
380
+ * @param {sap.ui.model.ChangeReason} oEvent.getParameters.reason
381
381
  * The reason for the 'change' event is
382
382
  * <ul>
383
383
  * <li> {@link sap.ui.model.ChangeReason.Add Add} when a new context is created,
@@ -388,7 +388,7 @@ sap.ui.define([
388
388
  * </ul>
389
389
  * Additionally each {@link #event:refresh 'refresh'} event is followed by a 'change' event
390
390
  * repeating the change reason when the requested data is available.
391
- * @param {string} oEvent.getParameters().detailedReason
391
+ * @param {string} oEvent.getParameters.detailedReason
392
392
  * During automatic determination of $expand and $select, a "virtual" context is first added
393
393
  * with detailed reason "AddVirtualContext" and then removed with detailed reason
394
394
  * "RemoveVirtualContext" (since 1.69.0); <code>undefined</code> is used in all other cases
@@ -408,7 +408,7 @@ sap.ui.define([
408
408
  *
409
409
  * @param {sap.ui.base.Event} oEvent The event object
410
410
  * @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
411
- * @param {sap.ui.model.odata.v4.Context} oEvent.getParameters().context The affected context
411
+ * @param {sap.ui.model.odata.v4.Context} oEvent.getParameters.context The affected context
412
412
  *
413
413
  * @event sap.ui.model.odata.v4.ODataListBinding#createActivate
414
414
  * @public
@@ -423,10 +423,10 @@ sap.ui.define([
423
423
  *
424
424
  * @param {sap.ui.base.Event} oEvent The event object
425
425
  * @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
426
- * @param {object} oEvent.getParameters() Object containing all event parameters
427
- * @param {sap.ui.model.odata.v4.Context} oEvent.getParameters().context
426
+ * @param {object} oEvent.getParameters Object containing all event parameters
427
+ * @param {sap.ui.model.odata.v4.Context} oEvent.getParameters.context
428
428
  * The context for the created entity
429
- * @param {boolean} oEvent.getParameters().success
429
+ * @param {boolean} oEvent.getParameters.success
430
430
  * Whether the POST was successfully processed; in case of an error, the error is already
431
431
  * reported to the {@link sap.ui.core.message.MessageManager}
432
432
  *
@@ -442,8 +442,8 @@ sap.ui.define([
442
442
  *
443
443
  * @param {sap.ui.base.Event} oEvent The event object
444
444
  * @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
445
- * @param {object} oEvent.getParameters() Object containing all event parameters
446
- * @param {sap.ui.model.odata.v4.Context} oEvent.getParameters().context
445
+ * @param {object} oEvent.getParameters Object containing all event parameters
446
+ * @param {sap.ui.model.odata.v4.Context} oEvent.getParameters.context
447
447
  * The context for the created entity
448
448
  *
449
449
  * @event sap.ui.model.odata.v4.ODataListBinding#createSent
@@ -474,10 +474,10 @@ sap.ui.define([
474
474
  * @param {sap.ui.base.Event} oEvent
475
475
  * @param {function} oEvent.cancelBubble
476
476
  * A callback function to prevent that the event is bubbled up to the model
477
- * @param {object} oEvent.getParameters()
478
- * @param {object} [oEvent.getParameters().data]
477
+ * @param {object} oEvent.getParameters
478
+ * @param {object} [oEvent.getParameters.data]
479
479
  * An empty data object if a back-end request succeeds
480
- * @param {Error} [oEvent.getParameters().error] The error object if a back-end request failed.
480
+ * @param {Error} [oEvent.getParameters.error] The error object if a back-end request failed.
481
481
  * If there are multiple failed back-end requests, the error of the first one is provided.
482
482
  *
483
483
  * @event sap.ui.model.odata.v4.ODataListBinding#dataReceived
@@ -513,8 +513,8 @@ sap.ui.define([
513
513
  *
514
514
  * @param {sap.ui.base.Event} oEvent The event object
515
515
  * @param {sap.ui.model.odata.v4.ODataListBinding} oEvent.getSource() This binding
516
- * @param {object} oEvent.getParameters() Object containing all event parameters
517
- * @param {boolean} oEvent.getParameters().success
516
+ * @param {object} oEvent.getParameters Object containing all event parameters
517
+ * @param {boolean} oEvent.getParameters.success
518
518
  * Whether all PATCHes are successfully processed
519
519
  *
520
520
  * @event sap.ui.model.odata.v4.ODataListBinding#patchCompleted
@@ -544,8 +544,8 @@ sap.ui.define([
544
544
  * binding. Registered event handlers are called with the change reason as parameter.
545
545
  *
546
546
  * @param {sap.ui.base.Event} oEvent
547
- * @param {object} oEvent.getParameters()
548
- * @param {sap.ui.model.ChangeReason} oEvent.getParameters().reason
547
+ * @param {object} oEvent.getParameters
548
+ * @param {sap.ui.model.ChangeReason} oEvent.getParameters.reason
549
549
  * The reason for the 'refresh' event could be
550
550
  * <ul>
551
551
  * <li> {@link sap.ui.model.ChangeReason.Context Context} when the binding's
@@ -731,7 +731,7 @@ sap.ui.define([
731
731
  * method then adds a transient entity to the parent's navigation property, which is sent with
732
732
  * the payload of the parent entity. Such a nested context cannot be inactive.
733
733
  *
734
- * <b>Beware:</b> After a succesful creation of the main entity the context returned for a
734
+ * <b>Note:</b> After a succesful creation of the main entity the context returned for a
735
735
  * nested entity is no longer valid. Do not use the
736
736
  * {@link sap.ui.model.odata.v4.Context#created created} promise of such a context! New contexts
737
737
  * are created for the nested collection because it is not possible to reliably assign the
@@ -740,6 +740,13 @@ sap.ui.define([
740
740
  * of <code>Error</code>, even if the deep create succeeds. This error always has the property
741
741
  * <code>canceled</code> with the value <code>true</code>.
742
742
  *
743
+ * Since 1.117.0 deep create also supports single-valued navigation properties; no API call is
744
+ * required in this case. Simply bind properties of the related entity relative to a transient
745
+ * context. An update to the property adds it to the POST request of the parent entity, and by
746
+ * this the create becomes deep.
747
+ *
748
+ * <b>Note</b>: Deep create for single-valued navigation properties is <b>experimental</b>.
749
+ *
743
750
  * Deep create requires the <code>autoExpandSelect</code> parameter at the
744
751
  * {@link sap.ui.model.odata.v4.ODataModel#constructor model}. The refresh after a deep create
745
752
  * is optimized. Only the (navigation) properties missing from the POST response are actually
@@ -750,11 +757,25 @@ sap.ui.define([
750
757
  * the case if the complete collection has been read or if the system query option
751
758
  * <code>$count</code> is <code>true</code> and the binding has processed at least one request.
752
759
  *
760
+ * Creating a new child beneath an existing and visible parent node (which must either be a leaf
761
+ * or expanded, but not collapsed) is supported (@experimental as of version 1.117.0) in case of
762
+ * a recursive hierarchy (see {@link #setAggregation}). The parent node must be identified via a
763
+ * {@link sap.ui.model.odata.v4.Context} instance given as
764
+ * <code>oInitialData["@$ui5.node.parent"]</code>. <code>oAggregation.expandTo</code> (see
765
+ * {@link #setAggregation}) must be one, <code>bSkipRefresh</code> must be set, but both
766
+ * <code>bAtEnd</code> and <code>bInactive</code> must not be set. No other creation must be
767
+ * pending, and no other modification (including collapse of some ancestor node) must happen
768
+ * while this creation is pending!
769
+ *
753
770
  * @param {object} [oInitialData={}]
754
771
  * The initial data for the created entity
755
772
  * @param {boolean} [bSkipRefresh]
756
- * Whether an automatic refresh of the created entity will be skipped; ignored within a deep
757
- * create (when the binding's parent context is transient)
773
+ * Whether an automatic refresh of the created entity will be skipped.
774
+ * <br>
775
+ * <b>Note:</b> Do not use this parameter for a deep create. It leads to multiple single row
776
+ * requests if the POST response did not supply all properties of the nested list. If it is
777
+ * not set, the model checks whether all required properties and child entities are available
778
+ * on the client and requests only data that is missing.
758
779
  * @param {boolean} [bAtEnd]
759
780
  * Whether the entity is inserted at the end of the list. Supported since 1.66.0.
760
781
  * Since 1.99.0 the first insertion determines the overall position of created contexts
@@ -798,17 +819,22 @@ sap.ui.define([
798
819
  * <li> an automatic refresh of the created entity cannot be performed and
799
820
  * <code>bSkipRefresh</code> is missing. This could be caused by a side-effects refresh
800
821
  * happening in parallel to creation (error thrown since 1.114.0; previously failed
801
- * without an adequate error message).
822
+ * without an adequate error message),
823
+ * <li> the restrictions for creating in a recursive hierarchy (see above) are not met.
802
824
  * </ul>
803
825
  * @public
804
826
  * @since 1.43.0
805
827
  */
806
828
  ODataListBinding.prototype.create = function (oInitialData, bSkipRefresh, bAtEnd, bInactive) {
807
- var oContext,
829
+ var oAggregation = this.mParameters.$$aggregation,
830
+ iChildIndex,
831
+ oContext,
808
832
  oCreatePathPromise = this.fetchResourcePath(),
809
833
  oCreatePromise,
834
+ oEntityData,
810
835
  sGroupId = this.getUpdateGroupId(),
811
836
  oGroupLock,
837
+ oParentContext,
812
838
  sResolvedPath = this.getResolvedPath(),
813
839
  sTransientPredicate = "($uid=" + _Helper.uid() + ")",
814
840
  sTransientPath = sResolvedPath + sTransientPredicate,
@@ -819,7 +845,7 @@ sap.ui.define([
819
845
  throw new Error("Binding is unresolved: " + this);
820
846
  }
821
847
  this.checkSuspended();
822
- if (this.mParameters.$$aggregation) {
848
+ if (_Helper.isDataAggregation(this.mParameters)) {
823
849
  throw new Error("Cannot create in " + this + " when using data aggregation");
824
850
  }
825
851
  if (this.isTransient()) {
@@ -842,7 +868,7 @@ sap.ui.define([
842
868
  throw new Error("Missing $$ownRequest at " + this);
843
869
  }
844
870
  sGroupId = "$inactive." + sGroupId;
845
- } else {
871
+ } else if (!oAggregation) {
846
872
  this.iActiveContexts += 1;
847
873
  }
848
874
 
@@ -850,6 +876,32 @@ sap.ui.define([
850
876
  this.bFirstCreateAtEnd = bAtEnd;
851
877
  }
852
878
 
879
+ // clone data to avoid modifications outside the cache
880
+ // remove any property starting with "@$ui5."
881
+ oEntityData = _Helper.publicClone(oInitialData, true) || {};
882
+ if (oAggregation) {
883
+ if (oAggregation.expandTo > 1) {
884
+ throw new Error("Unsupported $$aggregation.expandTo: " + oAggregation.expandTo);
885
+ }
886
+ if (!bSkipRefresh) {
887
+ throw new Error("Missing bSkipRefresh");
888
+ }
889
+ if (arguments.length > 2) {
890
+ throw new Error("Only the parameters oInitialData and bSkipRefresh are supported");
891
+ }
892
+ oParentContext = oInitialData["@$ui5.node.parent"];
893
+ iChildIndex = this.aContexts.indexOf(oParentContext) + 1;
894
+ if (iChildIndex <= 0) {
895
+ throw new Error("Invalid parent context: " + oParentContext);
896
+ }
897
+ if (oParentContext.isExpanded() === false) {
898
+ throw new Error("Unsupported collapsed parent: " + oParentContext);
899
+ }
900
+ oEntityData["@$ui5.node.parent"] = oParentContext.getCanonicalPath().slice(1);
901
+ } else {
902
+ this.iCreatedContexts += 1;
903
+ }
904
+
853
905
  // only for createInCache
854
906
  oGroupLock = this.lockGroup(sGroupId, true, true, function () {
855
907
  if (!that.aContexts.includes(oContext)) { // #setContext changed the parent context
@@ -867,7 +919,7 @@ sap.ui.define([
867
919
  });
868
920
  });
869
921
  oCreatePromise = this.createInCache(oGroupLock, oCreatePathPromise, sResolvedPath,
870
- sTransientPredicate, oInitialData, this.bFirstCreateAtEnd !== bAtEnd,
922
+ sTransientPredicate, oEntityData, this.bFirstCreateAtEnd !== bAtEnd,
871
923
  function (oError) { // error callback
872
924
  that.oModel.reportError("POST on '" + oCreatePathPromise
873
925
  + "' failed; will be repeated automatically", sClassName, oError);
@@ -904,8 +956,8 @@ sap.ui.define([
904
956
  throw oError;
905
957
  });
906
958
 
907
- this.iCreatedContexts += 1;
908
- oContext = Context.create(this.oModel, this, sTransientPath, -this.iCreatedContexts,
959
+ oContext = Context.create(this.oModel, this, sTransientPath,
960
+ oParentContext ? iChildIndex : -this.iCreatedContexts,
909
961
  oCreatePromise, bInactive);
910
962
  if (this.isTransient()) {
911
963
  oContext.created().catch(this.oModel.getReporter());
@@ -918,7 +970,15 @@ sap.ui.define([
918
970
  } // else: context already destroyed
919
971
  });
920
972
 
921
- if (this.bFirstCreateAtEnd !== bAtEnd) {
973
+ if (oParentContext) {
974
+ this.aContexts.splice(iChildIndex, 0, oContext);
975
+ for (i = this.aContexts.length - 1; i > iChildIndex; i -= 1) {
976
+ if (this.aContexts[i]) {
977
+ this.aContexts[i].iIndex += 1;
978
+ }
979
+ }
980
+ this.iMaxLength += 1;
981
+ } else if (this.bFirstCreateAtEnd !== bAtEnd) {
922
982
  this.aContexts.splice(this.iCreatedContexts - 1, 0, oContext);
923
983
  for (i = this.iCreatedContexts - 1; i >= 0; i -= 1) {
924
984
  this.aContexts[i].iIndex = i - this.iCreatedContexts;
@@ -1193,7 +1253,8 @@ sap.ui.define([
1193
1253
  * @private
1194
1254
  */
1195
1255
  ODataListBinding.prototype.destroyPreviousContexts = function (aPathsToDelete) {
1196
- var mPreviousContextsByPath = this.mPreviousContextsByPath;
1256
+ var mPreviousContextsByPath = this.mPreviousContextsByPath,
1257
+ that = this;
1197
1258
 
1198
1259
  if (mPreviousContextsByPath) { // binding may have been destroyed already
1199
1260
  (aPathsToDelete || Object.keys(mPreviousContextsByPath)).forEach(function (sPath) {
@@ -1206,6 +1267,11 @@ sap.ui.define([
1206
1267
  } else {
1207
1268
  if (!oContext.isTransient()) {
1208
1269
  oContext.destroy();
1270
+ if (oContext.iIndex === undefined && that.oCache) {
1271
+ // was kept alive (or deleted)
1272
+ that.oCache.removeKeptElement(
1273
+ _Helper.getRelativePath(sPath, that.oHeaderContext.getPath()));
1274
+ }
1209
1275
  }
1210
1276
  delete mPreviousContextsByPath[sPath];
1211
1277
  }
@@ -1282,9 +1348,9 @@ sap.ui.define([
1282
1348
 
1283
1349
  /**
1284
1350
  * @override
1285
- * @see sap.ui.model.odata.v4.ODataBinding#doFetchQueryOptions
1351
+ * @see sap.ui.model.odata.v4.ODataBinding#doFetchOrGetQueryOptions
1286
1352
  */
1287
- ODataListBinding.prototype.doFetchQueryOptions = function (oContext) {
1353
+ ODataListBinding.prototype.doFetchOrGetQueryOptions = function (oContext) {
1288
1354
  // Note: an absolute binding needs no parent context :-)
1289
1355
  var sMetaPath = oContext && _Helper.getMetaPath(oContext.getPath()),
1290
1356
  that = this;
@@ -2445,14 +2511,20 @@ sap.ui.define([
2445
2511
  * Additionally, you must be aware of server-driven paging and be ready to send a follow-up
2446
2512
  * request if the response contains <code>@odata.nextlink</code>.
2447
2513
  *
2514
+ * The URL cannot be determined synchronously in all cases; use {@link #requestDownloadUrl} to
2515
+ * allow for asynchronous determination then.
2516
+ *
2448
2517
  * @returns {string}
2449
2518
  * The download URL
2450
2519
  * @throws {Error}
2451
- * If the binding is unresolved or if the URL determination is not finished yet
2520
+ * If the binding is unresolved or if the URL cannot be determined synchronously (either due
2521
+ * to a pending metadata request or because the <code>autoExpandSelect</code> parameter at the
2522
+ * {@link sap.ui.model.odata.v4.ODataModel#constructor model} is used and the binding has been
2523
+ * newly created and is thus still automatically generating its $select and $expand system
2524
+ * query options from the binding hierarchy)
2452
2525
  *
2453
2526
  * @function
2454
2527
  * @public
2455
- * @see #requestDownloadUrl
2456
2528
  * @since 1.74.0
2457
2529
  */
2458
2530
  ODataListBinding.prototype.getDownloadUrl = _Helper.createGetMethod("fetchDownloadUrl", true);
@@ -2805,7 +2877,7 @@ sap.ui.define([
2805
2877
  ODataListBinding.prototype.inheritQueryOptions = function (mQueryOptions, oContext) {
2806
2878
  var mInheritedQueryOptions;
2807
2879
 
2808
- if (!Object.keys(this.mParameters).length) {
2880
+ if (_Helper.isEmptyObject(this.mParameters)) {
2809
2881
  // mix-in inherited static query options
2810
2882
  mInheritedQueryOptions = this.getQueryOptionsForPath("", oContext);
2811
2883
  if (mQueryOptions.$orderby && mInheritedQueryOptions.$orderby) {
@@ -2815,7 +2887,7 @@ sap.ui.define([
2815
2887
  mQueryOptions.$filter = "(" + mQueryOptions.$filter + ") and ("
2816
2888
  + mInheritedQueryOptions.$filter + ")";
2817
2889
  }
2818
- mQueryOptions = Object.assign({}, mInheritedQueryOptions, mQueryOptions);
2890
+ mQueryOptions = _Helper.merge({}, mInheritedQueryOptions, mQueryOptions);
2819
2891
  _Helper.aggregateExpandSelect(mQueryOptions, mInheritedQueryOptions);
2820
2892
  }
2821
2893
 
@@ -2880,7 +2952,7 @@ sap.ui.define([
2880
2952
  // When suspended it matches if it already has contexts. Then its getKeepAliveContext fails.
2881
2953
  return this.mParameters.$$getKeepAliveContext && this.getResolvedPath() === sPath
2882
2954
  && (!this.isRootBindingSuspended() || this.aContexts.length
2883
- || Object.keys(this.mPreviousContextsByPath).length);
2955
+ || !_Helper.isEmptyObject(this.mPreviousContextsByPath));
2884
2956
  };
2885
2957
 
2886
2958
  /**
@@ -2995,6 +3067,21 @@ sap.ui.define([
2995
3067
  }
2996
3068
  };
2997
3069
 
3070
+ /**
3071
+ * Notification from a context that its effective keep-alive status changed.
3072
+ *
3073
+ * @param {sap.ui.model.odata.v4.Context} oContext - The context
3074
+ *
3075
+ * @private
3076
+ */
3077
+ ODataListBinding.prototype.onKeepAliveChanged = function (oContext) {
3078
+ if (!oContext.isDeleted() // data of a deleted context must remain for the exclusion filter
3079
+ && oContext.getPath() in this.mPreviousContextsByPath
3080
+ && !oContext.isEffectivelyKeptAlive()) {
3081
+ this.destroyPreviousContextsLater([oContext.getPath()]);
3082
+ }
3083
+ };
3084
+
2998
3085
  /**
2999
3086
  * Prepares the nested binding for a deep create if it is below a transient parent context. Adds
3000
3087
  * a transient collection to the parent binding's cache. Creates contexts for nested entities in
@@ -3180,8 +3267,8 @@ sap.ui.define([
3180
3267
  * @param {string} sGroupId
3181
3268
  * The effective group ID
3182
3269
  * @returns {sap.ui.base.SyncPromise}
3183
- * A promise resolving without a defined result, or rejecting with an error if the refresh
3184
- * fails.
3270
+ * A promise which is resolved without a defined result, or rejected with an error if the
3271
+ * refresh fails.
3185
3272
  *
3186
3273
  * @private
3187
3274
  */
@@ -3570,10 +3657,9 @@ sap.ui.define([
3570
3657
  });
3571
3658
  }
3572
3659
 
3573
- if (this.mParameters.$$aggregation && !this.mParameters.$$aggregation.hierarchyQualifier) {
3660
+ if (_Helper.isDataAggregation(this.mParameters)) {
3574
3661
  if (bSingle) {
3575
- throw new Error(
3576
- "Must not request side effects for a context of a binding with $$aggregation");
3662
+ throw new Error("Must not request side effects when using data aggregation");
3577
3663
  }
3578
3664
 
3579
3665
  if (_AggregationHelper.isAffected(this.mParameters.$$aggregation,
@@ -3813,7 +3899,8 @@ sap.ui.define([
3813
3899
  * Since 1.105.0, either a recursive hierarchy or pure data aggregation is supported, but no
3814
3900
  * mix; <code>hierarchyQualifier</code> is the leading property that decides between those two
3815
3901
  * use cases - this is an <b>experimental API</b> and is only supported if the model uses the
3816
- * <code>autoExpandSelect</code> parameter!
3902
+ * <code>autoExpandSelect</code> parameter! Since 1.117.0, it is available for read-only
3903
+ * hierarchies.
3817
3904
  * @param {object} [oAggregation.aggregate]
3818
3905
  * A map from aggregatable property names or aliases to objects containing the following
3819
3906
  * details:
@@ -3843,9 +3930,10 @@ sap.ui.define([
3843
3930
  * </ul>
3844
3931
  * @param {number} [oAggregation.expandTo=1]
3845
3932
  * The number (as a positive integer) of different levels initially available without calling
3846
- * {@link sap.ui.model.odata.v4.Context#expand} (@experimental as of version 1.105.0),
3847
- * supported only if a <code>hierarchyQualifier</code> is given. Root nodes are on the first
3848
- * level. By default, only root nodes are available; they are not yet expanded.
3933
+ * {@link sap.ui.model.odata.v4.Context#expand} (@experimental as of version 1.105.0;
3934
+ * available for read-only hierarchies since 1.117.0), supported only if a
3935
+ * <code>hierarchyQualifier</code> is given. Root nodes are on the first level. By default,
3936
+ * only root nodes are available; they are not yet expanded.
3849
3937
  * @param {boolean} [oAggregation.grandTotalAtBottomOnly]
3850
3938
  * Tells whether the grand totals for aggregatable properties are displayed at the bottom only
3851
3939
  * (since 1.86.0); <code>true</code> for bottom only, <code>false</code> for top and bottom,
@@ -3871,10 +3959,10 @@ sap.ui.define([
3871
3959
  * @param {string} [oAggregation.hierarchyQualifier]
3872
3960
  * The qualifier for the pair of "Org.OData.Aggregation.V1.RecursiveHierarchy" and
3873
3961
  * "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchy" annotations at this binding's
3874
- * entity type (@experimental as of version 1.105.0). If present, a recursive hierarchy
3875
- * without data aggregation is defined, and the only other supported properties are
3876
- * <code>expandTo</code> and <code>search</code>. A recursive hierarchy cannot be combined
3877
- * with:
3962
+ * entity type (@experimental as of version 1.105.0; available for read-only hierarchies since
3963
+ * 1.117.0). If present, a recursive hierarchy without data aggregation is defined, and the
3964
+ * only other supported properties are <code>expandTo</code> and <code>search</code>. A
3965
+ * recursive hierarchy cannot be combined with:
3878
3966
  * <ul>
3879
3967
  * <li> "$search",
3880
3968
  * <li> the <code>vGroup</code> parameter of {@link sap.ui.model.Sorter} (since 1.107.0),
@@ -4009,6 +4097,7 @@ sap.ui.define([
4009
4097
  if (this.mParameters.$$aggregation) {
4010
4098
  _AggregationHelper.setPath(this.mParameters.$$aggregation, sResolvedPath);
4011
4099
  } else if (this.bHasPathReductionToParent && this.oModel.bAutoExpandSelect) {
4100
+ this.mCanUseCachePromiseByChildPath = {};
4012
4101
  this.sChangeReason = "AddVirtualContext"; // JIRA: CPOUI5ODATAV4-848
4013
4102
  }
4014
4103
  if (oContext.getBinding && oContext.getBinding().isRootBindingSuspended()) {
@@ -11,7 +11,6 @@ sap.ui.define([
11
11
  "./lib/_Helper",
12
12
  "sap/base/assert",
13
13
  "sap/base/Log",
14
- "sap/base/util/isEmptyObject",
15
14
  "sap/base/util/JSTokenizer",
16
15
  "sap/base/util/ObjectPath",
17
16
  "sap/ui/base/ManagedObject",
@@ -43,11 +42,11 @@ sap.ui.define([
43
42
  "sap/ui/model/odata/type/String",
44
43
  "sap/ui/model/odata/type/TimeOfDay",
45
44
  "sap/ui/thirdparty/URI"
46
- ], function (AnnotationHelper, ValueListType, _Helper, assert, Log, isEmptyObject, JSTokenizer,
47
- ObjectPath, ManagedObject, SyncPromise, BindingMode, ChangeReason, ClientListBinding,
48
- BaseContext, ContextBinding, MetaModel, PropertyBinding, OperationMode, Boolean, Byte,
49
- EdmDate, DateTimeOffset, Decimal, Double, Guid, Int16, Int32, Int64, Raw, SByte, Single,
50
- Stream, String, TimeOfDay, URI) {
45
+ ], function (AnnotationHelper, ValueListType, _Helper, assert, Log, JSTokenizer, ObjectPath,
46
+ ManagedObject, SyncPromise, BindingMode, ChangeReason, ClientListBinding, BaseContext,
47
+ ContextBinding, MetaModel, PropertyBinding, OperationMode, Boolean, Byte, EdmDate,
48
+ DateTimeOffset, Decimal, Double, Guid, Int16, Int32, Int64, Raw, SByte, Single, Stream,
49
+ String, TimeOfDay, URI) {
51
50
  "use strict";
52
51
  /*eslint max-nested-callbacks: 0 */
53
52
 
@@ -157,7 +156,7 @@ sap.ui.define([
157
156
  * @hideconstructor
158
157
  * @public
159
158
  * @since 1.37.0
160
- * @version 1.115.1
159
+ * @version 1.117.0
161
160
  */
162
161
  ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
163
162
  constructor : constructor
@@ -1630,7 +1629,7 @@ sap.ui.define([
1630
1629
  }
1631
1630
 
1632
1631
  if (mFormatOptions) {
1633
- if (isEmptyObject(mFormatOptions)) {
1632
+ if (_Helper.isEmptyObject(mFormatOptions)) {
1634
1633
  mFormatOptions = undefined;
1635
1634
  } else if ("parseKeepsEmptyString" in mFormatOptions
1636
1635
  && oProperty.$Type !== "Edm.String") {
@@ -1724,6 +1723,7 @@ sap.ui.define([
1724
1723
  // The relative path following sEntityPath (parameter re-used - encoded)
1725
1724
  //sPropertyPath,
1726
1725
  aSegments, // The resource path split in segments (encoded)
1726
+ bTransient = false, // Whether the property is within a transient entity
1727
1727
  oType; // The type of the data at sInstancePath
1728
1728
 
1729
1729
  // Determines the predicate from a segment (empty string if there is none)
@@ -1733,10 +1733,10 @@ sap.ui.define([
1733
1733
  return i >= 0 ? sSegment.slice(i) : "";
1734
1734
  }
1735
1735
 
1736
- // Pushes a request to append the key predicate for oType and the instance at
1736
+ // Pushes a request to append the segment with the key predicate of the instance at
1737
1737
  // sInstancePath. Does not calculate it yet, because it might be replaced again later.
1738
1738
  function prepareKeyPredicate(sSegment) {
1739
- aEditUrl.push({path : sInstancePath, prefix : sSegment, type : oType});
1739
+ aEditUrl.push({path : sInstancePath, prefix : sSegment});
1740
1740
  }
1741
1741
 
1742
1742
  // Strips off the predicate from a segment
@@ -1746,16 +1746,6 @@ sap.ui.define([
1746
1746
  return i >= 0 ? sSegment.slice(0, i) : sSegment;
1747
1747
  }
1748
1748
 
1749
- // The segment is added to the edit URL; transient predicate is converted to real
1750
- // predicate
1751
- function pushToEditUrl(sSegment) {
1752
- if (sSegment.includes("($uid=")) {
1753
- prepareKeyPredicate(stripPredicate(sSegment));
1754
- } else {
1755
- aEditUrl.push(sSegment);
1756
- }
1757
- }
1758
-
1759
1749
  aSegments = sResolvedPath.slice(1).split("/");
1760
1750
  sFirstSegment = aSegments.shift();
1761
1751
  sInstancePath = "/" + sFirstSegment;
@@ -1768,8 +1758,8 @@ sap.ui.define([
1768
1758
  oType = mScope[oEntitySet.$Type];
1769
1759
  sPropertyPath = "";
1770
1760
  sNavigationPath = "";
1771
- aEditUrl = [];
1772
- pushToEditUrl(sFirstSegment);
1761
+ aEditUrl = [sFirstSegment];
1762
+ bTransient = sFirstSegment.includes("($uid=");
1773
1763
  aSegments.forEach(function (sSegment) {
1774
1764
  var oProperty, sPropertyName;
1775
1765
 
@@ -1793,7 +1783,12 @@ sap.ui.define([
1793
1783
  }
1794
1784
  }
1795
1785
  oType = mScope[oProperty.$Type];
1796
- if (oProperty.$kind === "NavigationProperty") {
1786
+ if (sSegment.includes("($uid=")) {
1787
+ // a transient entity in a nested collection
1788
+ sEntityPath = sInstancePath;
1789
+ sPropertyPath = "";
1790
+ bTransient = true;
1791
+ } else if (!bTransient && oProperty.$kind === "NavigationProperty") {
1797
1792
  if (oEntitySet.$NavigationPropertyBinding
1798
1793
  && sNavigationPath in oEntitySet.$NavigationPropertyBinding) {
1799
1794
  sEntitySetName = oEntitySet.$NavigationPropertyBinding[sNavigationPath];
@@ -1809,7 +1804,7 @@ sap.ui.define([
1809
1804
  prepareKeyPredicate(aEditUrl.pop());
1810
1805
  }
1811
1806
  } else {
1812
- pushToEditUrl(sSegment);
1807
+ aEditUrl.push(sSegment);
1813
1808
  }
1814
1809
  sEntityPath = sInstancePath;
1815
1810
  sPropertyPath = "";
@@ -1819,7 +1814,7 @@ sap.ui.define([
1819
1814
  }
1820
1815
  });
1821
1816
 
1822
- if (bNoEditUrl) {
1817
+ if (bTransient || bNoEditUrl) {
1823
1818
  return SyncPromise.resolve({
1824
1819
  editUrl : undefined,
1825
1820
  entityPath : sEntityPath,
@@ -1839,10 +1834,6 @@ sap.ui.define([
1839
1834
  if (!oEntity) {
1840
1835
  error("No instance to calculate key predicate at " + vSegment.path);
1841
1836
  }
1842
- if (oEntity["@$ui5.context.isTransient"]) {
1843
- bNoEditUrl = true;
1844
- return undefined;
1845
- }
1846
1837
  sPredicate = _Helper.getPrivateAnnotation(oEntity, "predicate");
1847
1838
  if (!sPredicate) {
1848
1839
  error("No key predicate known at " + vSegment.path);
@@ -1853,7 +1844,7 @@ sap.ui.define([
1853
1844
  });
1854
1845
  })).then(function (aFinalEditUrl) {
1855
1846
  return {
1856
- editUrl : bNoEditUrl ? undefined : aFinalEditUrl.join("/"),
1847
+ editUrl : aFinalEditUrl.join("/"),
1857
1848
  entityPath : sEntityPath,
1858
1849
  propertyPath : sPropertyPath
1859
1850
  };
@@ -2203,6 +2194,9 @@ sap.ui.define([
2203
2194
  if (oProperty.$Nullable === false) {
2204
2195
  setConstraint("nullable", false);
2205
2196
  }
2197
+ if (oProperty.$Type === "Edm.DateTimeOffset") {
2198
+ setConstraint("V4", true);
2199
+ }
2206
2200
  }
2207
2201
  return mConstraints;
2208
2202
  };
@@ -2739,7 +2733,7 @@ sap.ui.define([
2739
2733
  * parameter <code>supportReferences</code> of
2740
2734
  * {@link sap.ui.model.odata.v4.ODataModel#constructor}).
2741
2735
  *
2742
- * @returns {Promise}
2736
+ * @returns {Promise<object>}
2743
2737
  * A promise which is resolved with the OData metadata as a "JSON" object as soon as it is
2744
2738
  * available.
2745
2739
  *
@@ -2986,7 +2980,7 @@ sap.ui.define([
2986
2980
  * Optional (binding) parameters; if they are given, <code>oContext</code> cannot be omitted
2987
2981
  * @param {object} [mParameters.scope]
2988
2982
  * Optional scope for lookup of aliases for computed annotations (since 1.43.0)
2989
- * @returns {Promise}
2983
+ * @returns {Promise<any>}
2990
2984
  * A promise which is resolved with the requested metadata value as soon as it is available;
2991
2985
  * it is rejected if the requested metadata cannot be loaded
2992
2986
  *
@@ -3008,7 +3002,7 @@ sap.ui.define([
3008
3002
  * Type-specific format options, since 1.81.0. The boolean format option
3009
3003
  * "parseKeepsEmptyString" applies to {@link sap.ui.model.odata.type.String} only and is
3010
3004
  * ignored for all other types. All other format options are passed "as is".
3011
- * @returns {Promise}
3005
+ * @returns {Promise<sap.ui.model.odata.type.ODataType>}
3012
3006
  * A promise that gets resolved with the corresponding UI5 type from
3013
3007
  * {@link sap.ui.model.odata.type}; if no specific type can be
3014
3008
  * determined, a warning is logged and {@link sap.ui.model.odata.type.Raw} is used
@@ -3119,7 +3113,7 @@ sap.ui.define([
3119
3113
  * Context to resolve "14.5.12 Expression edm:Path" references contained in a
3120
3114
  * "com.sap.vocabularies.Common.v1.ValueListRelevantQualifiers" annotation. Supported since
3121
3115
  * 1.84.0
3122
- * @returns {Promise}
3116
+ * @returns {Promise<Object<object>>}
3123
3117
  * A promise which is resolved with a map of qualifier to value list mapping objects
3124
3118
  * structured as defined by <code>com.sap.vocabularies.Common.v1.ValueListType</code>;
3125
3119
  * the map entry with key "" represents the mapping without qualifier. Each entry has an
@@ -3270,7 +3264,7 @@ sap.ui.define([
3270
3264
 
3271
3265
  // Each reference must have contributed at least one qualifier. So if oValueListInfo
3272
3266
  // is empty, there cannot have been a reference.
3273
- if (isEmptyObject(oValueListInfo)) {
3267
+ if (_Helper.isEmptyObject(oValueListInfo)) {
3274
3268
  throw new Error("No annotation '" + sValueListReferences.slice(1) + "' for "
3275
3269
  + sPropertyPath);
3276
3270
  }
@@ -3341,7 +3335,7 @@ sap.ui.define([
3341
3335
  *
3342
3336
  * @param {string} sPropertyPath
3343
3337
  * An absolute path to an OData property within the OData data model
3344
- * @returns {Promise}
3338
+ * @returns {Promise<sap.ui.model.odata.v4.ValueListType>}
3345
3339
  * A promise that is resolved with the type of the value list, a constant of the enumeration
3346
3340
  * {@link sap.ui.model.odata.v4.ValueListType}. The promise is rejected if the property cannot
3347
3341
  * be found in the metadata.