@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
@@ -10,10 +10,9 @@ sap.ui.define([
10
10
  "./_Helper",
11
11
  "./_Requestor",
12
12
  "sap/base/Log",
13
- "sap/base/util/isEmptyObject",
14
13
  "sap/ui/base/SyncPromise",
15
14
  "sap/ui/model/odata/ODataUtils"
16
- ], function (_GroupLock, _Helper, _Requestor, Log, isEmptyObject, SyncPromise, ODataUtils) {
15
+ ], function (_GroupLock, _Helper, _Requestor, Log, SyncPromise, ODataUtils) {
17
16
  "use strict";
18
17
  /*eslint max-nested-callbacks: 0 */
19
18
 
@@ -30,20 +29,6 @@ sap.ui.define([
30
29
  // (ID='42') -> aMatches[1] === "", aMatches[2] === "(ID='42')"
31
30
  rSegmentWithPredicate = /^([^(]*)(\(.*\))$/;
32
31
 
33
- /**
34
- * Adds the given delta to the collection's $count if there is one.
35
- *
36
- * @param {object} mChangeListeners A map of change listeners by path
37
- * @param {string} sPath The path of the collection in the cache (as used by change listeners)
38
- * @param {array} aCollection The collection
39
- * @param {number} iDelta The delta
40
- */
41
- function addToCount(mChangeListeners, sPath, aCollection, iDelta) {
42
- if (aCollection.$count !== undefined) {
43
- setCount(mChangeListeners, sPath, aCollection, aCollection.$count + iDelta);
44
- }
45
- }
46
-
47
32
  /**
48
33
  * Returns <code>true</code> if <code>sRequestPath</code> is a sub-path of <code>sPath</code>.
49
34
  *
@@ -55,26 +40,6 @@ sap.ui.define([
55
40
  return sPath === "" || sRequestPath === sPath || sRequestPath.startsWith(sPath + "/");
56
41
  }
57
42
 
58
- /**
59
- * Sets the collection's $count: a number representing the sum of the element count on
60
- * server-side and the number of transient elements created on the client. It may be
61
- * <code>undefined</code>, but not <code>Infinity</code>.
62
- *
63
- * @param {object} mChangeListeners A map of change listeners by path
64
- * @param {string} sPath The path of the collection in the cache (as used by change listeners)
65
- * @param {array} aCollection The collection
66
- * @param {string|number} vCount The count
67
- */
68
- function setCount(mChangeListeners, sPath, aCollection, vCount) {
69
- // Note: @odata.count is of type Edm.Int64, represented as a string in OData responses;
70
- // $count should be a number and the loss of precision is acceptable
71
- if (typeof vCount === "string") {
72
- vCount = parseInt(vCount);
73
- }
74
- // Note: this relies on $count being present as an own property of aCollection
75
- _Helper.updateExisting(mChangeListeners, sPath, aCollection, {$count : vCount});
76
- }
77
-
78
43
  //*********************************************************************************************
79
44
  // Cache
80
45
  //*********************************************************************************************
@@ -87,7 +52,7 @@ sap.ui.define([
87
52
  * @param {string} sResourcePath
88
53
  * A resource path relative to the service URL
89
54
  * @param {object} [mQueryOptions]
90
- * A map of key-value pairs representing the query string
55
+ * A map of key-value pairs representing the query string (requires "copy on write"!)
91
56
  * @param {boolean} [bSortExpandSelect]
92
57
  * Whether the paths in $expand and $select shall be sorted in the cache's query string;
93
58
  * note that this flag can safely be ignored for all "new" features (after 1.47) which
@@ -190,14 +155,14 @@ sap.ui.define([
190
155
  _Helper.removeByPath(that.mChangeRequests, sEntityPath, oRequestPromise);
191
156
 
192
157
  if (aMessages.length) {
193
- oModelInterface.fireMessageChange({newMessages : aMessages});
158
+ oModelInterface.updateMessages(undefined, aMessages);
194
159
  }
195
160
 
196
161
  delete oEntity["@$ui5.context.isDeleted"];
197
162
  if (Array.isArray(vCacheData)) {
198
163
  iIndex = oDeleted.index;
199
164
  if (iIndex !== undefined) {
200
- addToCount(that.mChangeListeners, sParentPath, vCacheData, 1);
165
+ _Helper.addToCount(that.mChangeListeners, sParentPath, vCacheData, 1);
201
166
  }
202
167
  iDeletedIndex = vCacheData.$deleted.indexOf(oDeleted);
203
168
  that.adjustIndexes(sParentPath, vCacheData, iIndex, 1, iDeletedIndex);
@@ -241,7 +206,7 @@ sap.ui.define([
241
206
  aMessages = oModelInterface.getMessagesByPath(
242
207
  _Helper.buildPath("/", that.sResourcePath, sEntityPath), true);
243
208
 
244
- oModelInterface.fireMessageChange({oldMessages : aMessages});
209
+ oModelInterface.updateMessages(aMessages);
245
210
 
246
211
  oEntity["@$ui5.context.isDeleted"] = true;
247
212
  if (Array.isArray(vCacheData)) {
@@ -278,7 +243,7 @@ sap.ui.define([
278
243
  } else if (vDeleteProperty) {
279
244
  // set to null and notify listeners
280
245
  _Helper.updateExisting(that.mChangeListeners, sParentPath,
281
- vCacheData, _Cache.makeUpdateData([vDeleteProperty], null));
246
+ vCacheData, _Helper.makeUpdateData([vDeleteProperty], null));
282
247
  } else { // deleting at root level
283
248
  oEntity["$ui5.deleted"] = true;
284
249
  }
@@ -495,7 +460,7 @@ sap.ui.define([
495
460
  };
496
461
 
497
462
  /**
498
- * Creates a transient entity, inserts it in the list and adds a POST request to the batch
463
+ * Creates a transient entity, inserts it into the list, and adds a POST request to the batch
499
464
  * group with the given ID. If the POST request failed, <code>fnErrorCallback</code> is called
500
465
  * with an Error object, the POST request is automatically added again to the same batch
501
466
  * group (for SubmitMode.API) or parked (for SubmitMode.Auto or SubmitMode.Direct). Parked POST
@@ -509,8 +474,8 @@ sap.ui.define([
509
474
  * The collection's path within the cache (as used by change listeners)
510
475
  * @param {string} sTransientPredicate
511
476
  * A (temporary) key predicate for the transient entity: "($uid=...)"
512
- * @param {string} [oEntityData={}]
513
- * The initial entity data
477
+ * @param {object} oEntityData
478
+ * The initial entity data, already cloned and cleaned of client-side annotations
514
479
  * @param {boolean} bAtEndOfCreated
515
480
  * Whether the newly created entity should be inserted after previously created entities or at
516
481
  * the front of the list.
@@ -565,7 +530,7 @@ sap.ui.define([
565
530
  if (!sPath) {
566
531
  that.iActiveElements -= 1;
567
532
  }
568
- addToCount(that.mChangeListeners, sPath, aCollection, -1);
533
+ _Helper.addToCount(that.mChangeListeners, sPath, aCollection, -1);
569
534
  }
570
535
  delete aCollection.$byPredicate[sTransientPredicate];
571
536
  that.adjustIndexes(sPath, aCollection, iIndex, -1);
@@ -615,23 +580,25 @@ sap.ui.define([
615
580
  // contexts still use the transient predicate to access the data
616
581
  } // else: transient element was not kept by #reset, leave it like that!
617
582
  }
583
+ _Helper.cancelNestedCreates(oEntityData, "Deep create of " + sPostPath
584
+ + " succeeded. Do not use this promise.");
618
585
  // update the cache with the POST response
619
- aSelect = _Helper.getQueryOptionsForPath(
620
- that.mLateQueryOptions || that.mQueryOptions, sPath
621
- ).$select;
622
586
  sResultingPath = _Helper.buildPath(sPath, sPredicate || sTransientPredicate);
623
- // update selected properties (incl. single-valued navigation properties), ETags,
624
- // and predicates
587
+ // check for a deep create and update the created nested collections
588
+ const bDeepCreate = _Helper.updateNestedCreates(that.mChangeListeners,
589
+ that.mQueryOptions, sResultingPath, oEntityData, oCreatedEntity,
590
+ _Helper.getPrivateAnnotation(oEntityData, "select"));
591
+ if (!bDeepCreate) { // after a deep create the complete response is accepted
592
+ aSelect = _Helper.getQueryOptionsForPath(
593
+ that.mLateQueryOptions || that.mQueryOptions, sPath
594
+ ).$select;
595
+ }
596
+ // update selected properties (or in case of a deep create all of them incl.
597
+ // single-valued navigation properties), ETags, and predicates
625
598
  _Helper.updateSelected(that.mChangeListeners, sResultingPath, oEntityData,
626
599
  oCreatedEntity, aSelect, /*fnCheckKeyPredicate*/ undefined,
627
600
  /*bOkIfMissing*/ true);
628
- _Helper.cancelNestedCreates(oEntityData, "Deep create of " + sPostPath
629
- + " succeeded. Do not use this promise.");
630
- _Helper.setPrivateAnnotation(oEntityData, "deepCreate",
631
- // update properties from collections in a deep create
632
- that.updateNestedCreates(sResultingPath, oEntityData, oCreatedEntity,
633
- _Helper.getPrivateAnnotation(oEntityData, "select"))
634
- );
601
+ _Helper.setPrivateAnnotation(oEntityData, "deepCreate", bDeepCreate);
635
602
  _Helper.deletePrivateAnnotation(oEntityData, "select");
636
603
 
637
604
  that.removePendingRequest();
@@ -671,10 +638,7 @@ sap.ui.define([
671
638
  + "' does not reference a collection");
672
639
  }
673
640
 
674
- // clone data to avoid modifications outside the cache
675
- // remove any property starting with "@$ui5."
676
- oEntityData = _Helper.publicClone(oEntityData, true) || {};
677
- oPostBody = _Helper.merge({}, oEntityData);
641
+ oPostBody = _Helper.clone(oEntityData);
678
642
  // keep post body separate to allow local property changes in the cache
679
643
  _Helper.setPrivateAnnotation(oEntityData, "postBody", oPostBody);
680
644
  _Helper.setPrivateAnnotation(oEntityData, "transientPredicate", sTransientPredicate);
@@ -688,7 +652,7 @@ sap.ui.define([
688
652
  if (!sPath) {
689
653
  this.iActiveElements += 1;
690
654
  }
691
- addToCount(this.mChangeListeners, sPath, aCollection, 1);
655
+ _Helper.addToCount(this.mChangeListeners, sPath, aCollection, 1);
692
656
  }
693
657
 
694
658
  if (bAtEndOfCreated) {
@@ -879,13 +843,17 @@ sap.ui.define([
879
843
  return oPromise.then(function step(vValue, bAgain) {
880
844
  var vIndex, aMatches, oParentValue;
881
845
 
846
+ if (vValue === undefined) {
847
+ // already knowing there is nothing, but unable to stop the reduce loop early
848
+ return undefined;
849
+ }
882
850
  if (sSegment === "$count") {
883
851
  return Array.isArray(vValue) ? vValue.$count : invalidSegment(sSegment);
884
852
  }
885
- if (vValue === undefined || vValue === null) {
886
- // already beyond the valid data: an unresolved navigation property or a
887
- // property of a complex type which is null
888
- return undefined;
853
+ if (vValue === null) {
854
+ // a complex or navigation property is null -> treat it as transient
855
+ bTransient = true;
856
+ return missingValue({}, sSegment, i + 1);
889
857
  }
890
858
  if (typeof vValue !== "object" || sSegment === "@$ui5._"
891
859
  || Array.isArray(vValue) && (sSegment[0] === "$" || sSegment === "length")) {
@@ -952,11 +920,11 @@ sap.ui.define([
952
920
  * The path of the requested property relative to oResource; this property is requested from
953
921
  * the server. For annotations, except client annotations, the annotated property is requested
954
922
  * from the server.
955
- * @returns {Promise|boolean}
956
- * A promise resolving w/o any result if the requested property is an expected late property,
957
- * or a <code>boolean</code> value if it is not; it rejects with an error if the GET request
958
- * failed, or if the key predicate or the ETag has changed. The returned <code>boolean</code>
959
- * value tells if the issue can be safely ignored.
923
+ * @returns {Promise<void>|boolean}
924
+ * A promise which is resolved without a defined result if the requested property is an
925
+ * expected late property, or a <code>boolean</code> value if it is not; it is rejected with
926
+ * an error if the GET request failed, or if the key predicate or the ETag has changed. The
927
+ * returned <code>boolean</code> value tells if the issue can be safely ignored.
960
928
  *
961
929
  * @private
962
930
  */
@@ -1019,7 +987,7 @@ sap.ui.define([
1019
987
  }
1020
988
  }
1021
989
 
1022
- if (!this.mLateQueryOptions) {
990
+ if (!(this.mLateQueryOptions || this.mQueryOptions && this.mQueryOptions.$select)) {
1023
991
  return false; // no autoExpandSelect
1024
992
  }
1025
993
 
@@ -1032,10 +1000,15 @@ sap.ui.define([
1032
1000
  aUpdateProperties = [sRequestedPropertyPath];
1033
1001
 
1034
1002
  sFullResourceMetaPath = _Helper.buildPath(this.sMetaPath, sResourceMetaPath);
1003
+ mQueryOptions = this.mLateQueryOptions
1004
+ || { // ensure that $select precedes $expand in the resulting query
1005
+ $select : this.mQueryOptions.$select,
1006
+ $expand : this.mQueryOptions.$expand
1007
+ };
1035
1008
  // sRequestedPropertyPath is also a metapath because the binding does not accept a path with
1036
1009
  // a collection-valued navigation property for a late property
1037
1010
  mQueryOptions = _Helper.intersectQueryOptions(
1038
- _Helper.getQueryOptionsForPath(this.mLateQueryOptions, sResourcePath),
1011
+ _Helper.getQueryOptionsForPath(mQueryOptions, sResourcePath),
1039
1012
  [sRequestedPropertyPath], this.oRequestor.getModelInterface().fetchMetadata,
1040
1013
  sFullResourceMetaPath);
1041
1014
  if (!mQueryOptions) {
@@ -1308,7 +1281,7 @@ sap.ui.define([
1308
1281
  /**
1309
1282
  * Returns this cache's query options.
1310
1283
  *
1311
- * @returns {object} The query options
1284
+ * @returns {object|undefined} The query options, if any
1312
1285
  *
1313
1286
  * @public
1314
1287
  * @see #setQueryOptions
@@ -1354,7 +1327,7 @@ sap.ui.define([
1354
1327
  * @see #registerChangeListener
1355
1328
  */
1356
1329
  _Cache.prototype.hasChangeListeners = function () {
1357
- return !isEmptyObject(this.mChangeListeners);
1330
+ return !_Helper.isEmptyObject(this.mChangeListeners);
1358
1331
  };
1359
1332
 
1360
1333
  /**
@@ -1559,8 +1532,8 @@ sap.ui.define([
1559
1532
  mInCollectionQueryOptions = {},
1560
1533
  sInCollectionUrl,
1561
1534
  sKeyFilter,
1562
- mQueryOptions
1563
- = Object.assign({}, _Helper.getQueryOptionsForPath(that.mQueryOptions, sPath)),
1535
+ mQueryOptions = _Helper.clone(
1536
+ _Helper.getQueryOptionsForPath(that.mQueryOptions, sPath)),
1564
1537
  sReadUrl,
1565
1538
  sReadUrlPrefix = _Helper.buildPath(that.sResourcePath, sPath),
1566
1539
  aRequests = [],
@@ -1700,7 +1673,7 @@ sap.ui.define([
1700
1673
  }
1701
1674
  if (iIndex >= 0) {
1702
1675
  aElements.splice(iIndex, 1);
1703
- addToCount(this.mChangeListeners, sPath, aElements, -1);
1676
+ _Helper.addToCount(this.mChangeListeners, sPath, aElements, -1);
1704
1677
  if (sTransientPredicate) {
1705
1678
  aElements.$created -= 1;
1706
1679
  if (!sPath) {
@@ -1839,7 +1812,7 @@ sap.ui.define([
1839
1812
  }).then(function (oResult) {
1840
1813
  var iCount = parseInt(oResult["@odata.count"]) + that.iActiveElements;
1841
1814
 
1842
- setCount(that.mChangeListeners, "", that.aElements, iCount);
1815
+ _Helper.setCount(that.mChangeListeners, "", that.aElements, iCount);
1843
1816
  that.iLimit = iCount;
1844
1817
  return iCount;
1845
1818
  });
@@ -1983,7 +1956,7 @@ sap.ui.define([
1983
1956
  return this.fetchValue(_GroupLock.$cached, sEntityPath, null, null, true)
1984
1957
  .then(function (oEntity) {
1985
1958
  _Helper.updateAll(that.mChangeListeners, sEntityPath, oEntity,
1986
- _Cache.makeUpdateData(sPropertyPath.split("/"), vValue, bUpdating));
1959
+ _Helper.makeUpdateData(sPropertyPath.split("/"), vValue, bUpdating));
1987
1960
  });
1988
1961
  };
1989
1962
 
@@ -2119,7 +2092,7 @@ sap.ui.define([
2119
2092
  bSkip,
2120
2093
  sTransientGroup,
2121
2094
  sUnitOrCurrencyValue,
2122
- oUpdateData = _Cache.makeUpdateData(aPropertyPath, vValue);
2095
+ oUpdateData = _Helper.makeUpdateData(aPropertyPath, vValue);
2123
2096
 
2124
2097
  /*
2125
2098
  * Synchronous callback to cancel the PATCH request so that it is really gone when
@@ -2275,7 +2248,7 @@ sap.ui.define([
2275
2248
  }
2276
2249
  // remember the old value
2277
2250
  oOldData
2278
- = _Cache.makeUpdateData(aPropertyPath, _Helper.drillDown(oEntity, aPropertyPath));
2251
+ = _Helper.makeUpdateData(aPropertyPath, _Helper.drillDown(oEntity, aPropertyPath));
2279
2252
 
2280
2253
  oPostBody = _Helper.getPrivateAnnotation(oEntity, "postBody");
2281
2254
  if (oPostBody) {
@@ -2285,7 +2258,7 @@ sap.ui.define([
2285
2258
  oUpdateData["@$ui5.context.isInactive"] = false;
2286
2259
  _Helper.deletePrivateAnnotation(oEntity, "initialData");
2287
2260
  that.iActiveElements += 1;
2288
- addToCount(that.mChangeListeners, "", that.aElements, 1);
2261
+ _Helper.addToCount(that.mChangeListeners, "", that.aElements, 1);
2289
2262
  }
2290
2263
  }
2291
2264
  // write the changed value into the cache
@@ -2302,7 +2275,7 @@ sap.ui.define([
2302
2275
  } else {
2303
2276
  // some servers need unit and currency information
2304
2277
  _Helper.merge(sTransientGroup ? oPostBody : oUpdateData,
2305
- _Cache.makeUpdateData(aUnitOrCurrencyPath, sUnitOrCurrencyValue));
2278
+ _Helper.makeUpdateData(aUnitOrCurrencyPath, sUnitOrCurrencyValue));
2306
2279
  }
2307
2280
  }
2308
2281
  if (sTransientGroup) {
@@ -2328,79 +2301,6 @@ sap.ui.define([
2328
2301
  });
2329
2302
  };
2330
2303
 
2331
- /**
2332
- * Creates key predicates and rebuilds the nested entity collections after a deep create (in the
2333
- * assumption that the response may differ significantly from the request regarding order and
2334
- * count).
2335
- *
2336
- * @param {string} sPath - The path of the created entity within the cache
2337
- * @param {object} oCacheEntity - The entity in the cache
2338
- * @param {object} oCreatedEntity - The created entity from the response
2339
- * @param {object} mSelectForMetaPath
2340
- * A map of $select properties per meta path of the nested collections
2341
- * @returns {boolean} Whether there actually was a deep create
2342
- *
2343
- * @private
2344
- */
2345
- _Cache.prototype.updateNestedCreates = function (sPath, oCacheEntity, oCreatedEntity,
2346
- mSelectForMetaPath) {
2347
- var bDeepCreate = false,
2348
- that = this;
2349
-
2350
- if (!mSelectForMetaPath) { // no nested collections -> no deep create
2351
- return false;
2352
- }
2353
-
2354
- Object.keys(mSelectForMetaPath).filter(function (sMetaPath) {
2355
- return !sMetaPath.includes("/"); // only look at the direct descendants
2356
- }).forEach(function (sSegment) {
2357
- var sCollectionPath = sPath + "/" + sSegment,
2358
- aNestedCacheEntities,
2359
- aNestedCreatedEntities = oCreatedEntity[sSegment],
2360
- sPrefix = sSegment + "/",
2361
- aSelect,
2362
- mSelectForChildMetaPath = {};
2363
-
2364
- if (!aNestedCreatedEntities) { // create not called in this nested collection
2365
- // #addTransientEntity added this in preparation of a deep create
2366
- delete oCacheEntity[sSegment];
2367
- return;
2368
- }
2369
-
2370
- aSelect = mSelectForMetaPath[sSegment]
2371
- || _Helper.getQueryOptionsForPath(that.mQueryOptions, sCollectionPath).$select;
2372
- // rebuild the collection from the response only taking the selected properties
2373
- oCacheEntity[sSegment] = aNestedCacheEntities
2374
- = new Array(aNestedCreatedEntities.length);
2375
- aNestedCacheEntities.$count = undefined; // so that setCount always fires a change event
2376
- aNestedCacheEntities.$created = 0;
2377
- aNestedCacheEntities.$byPredicate = {};
2378
- setCount(that.mChangeListeners, sCollectionPath, aNestedCacheEntities,
2379
- aNestedCreatedEntities.length);
2380
- // build the next level
2381
- Object.keys(mSelectForMetaPath).forEach(function (sMetaPath) {
2382
- if (sMetaPath.startsWith(sPrefix)) {
2383
- mSelectForChildMetaPath[sMetaPath.slice(sPrefix.length)]
2384
- = mSelectForMetaPath[sMetaPath];
2385
- }
2386
- });
2387
- aNestedCreatedEntities.forEach(function (oCreatedChildEntity, i) {
2388
- var sPredicate = _Helper.getPrivateAnnotation(oCreatedChildEntity, "predicate");
2389
-
2390
- aNestedCacheEntities.$byPredicate[sPredicate] = aNestedCacheEntities[i] = {};
2391
- // no change events, the listeners are recreated anyway
2392
- _Helper.updateSelected({}, sCollectionPath + sPredicate, aNestedCacheEntities[i],
2393
- oCreatedChildEntity, aSelect, /*fnCheckKeyPredicate*/undefined, true);
2394
- that.updateNestedCreates(sCollectionPath + sPredicate, aNestedCacheEntities[i],
2395
- oCreatedChildEntity, mSelectForChildMetaPath);
2396
- });
2397
-
2398
- bDeepCreate = true;
2399
- });
2400
-
2401
- return bDeepCreate;
2402
- };
2403
-
2404
2304
  /**
2405
2305
  * Processes the response from the server. All arrays are annotated by their length, influenced
2406
2306
  * by the annotations "@odata.count" and "@odata.nextLink". Recursively calculates the key
@@ -2556,15 +2456,16 @@ sap.ui.define([
2556
2456
  if (Array.isArray(vPropertyValue)) {
2557
2457
  vPropertyValue.$created = 0; // number of (client-side) created elements
2558
2458
  // compute count
2559
- vPropertyValue.$count = undefined; // see setCount
2560
2459
  sCount = oInstance[sProperty + "@odata.count"];
2561
2460
  // Note: ignore change listeners, because any change listener that is already
2562
2461
  // registered, is still waiting for its value and gets it via fetchValue
2563
2462
  if (sCount) {
2564
- setCount({}, "", vPropertyValue, sCount);
2463
+ vPropertyValue.$count = parseInt(sCount);
2565
2464
  } else if (!oInstance[sProperty + "@odata.nextLink"]) {
2566
2465
  // Note: This relies on the fact that $skip/$top is not used on nested lists
2567
- setCount({}, "", vPropertyValue, vPropertyValue.length);
2466
+ vPropertyValue.$count = vPropertyValue.length;
2467
+ } else {
2468
+ vPropertyValue.$count = undefined; // see _Helper.setCount
2568
2469
  }
2569
2470
  visitArray(vPropertyValue, sPropertyMetaPath, sPropertyPath,
2570
2471
  buildContextUrl(sContextUrl, oInstance[sProperty + "@odata.context"]));
@@ -2624,7 +2525,7 @@ sap.ui.define([
2624
2525
  this.sContext = undefined; // the "@odata.context" from the responses
2625
2526
  this.aElements = []; // the available elements
2626
2527
  this.aElements.$byPredicate = {};
2627
- this.aElements.$count = undefined; // see setCount
2528
+ this.aElements.$count = undefined; // see _Helper.setCount
2628
2529
  // number of all (client-side) created elements (active or inactive)
2629
2530
  this.aElements.$created = 0;
2630
2531
  this.aElements.$tail = undefined; // promise for a read w/o $top
@@ -3005,7 +2906,7 @@ sap.ui.define([
3005
2906
  }
3006
2907
  }
3007
2908
  if (iLimit !== -1) {
3008
- setCount(this.mChangeListeners, "", this.aElements,
2909
+ _Helper.setCount(this.mChangeListeners, "", this.aElements,
3009
2910
  iLimit !== undefined ? iLimit + this.iActiveElements : undefined);
3010
2911
  }
3011
2912
 
@@ -3260,9 +3161,9 @@ sap.ui.define([
3260
3161
  * no longer exist after refresh; the index is undefined for a non-created element
3261
3162
  * @param {boolean} [bDropApply]
3262
3163
  * Whether to drop the "$apply" system query option from the resulting GET
3263
- * @returns {Promise|undefined}
3264
- * A promise resolving without a defined result, or rejecting with an error if the refresh
3265
- * fails, or <code>undefined</code> if there are no kept-alive elements.
3164
+ * @returns {Promise<void>|undefined}
3165
+ * A promise which is resolved without a defined result, or rejected with an error if the
3166
+ * refresh fails, or <code>undefined</code> if there are no kept-alive elements.
3266
3167
  * @throws {Error}
3267
3168
  * If the cache is shared
3268
3169
  *
@@ -3283,7 +3184,7 @@ sap.ui.define([
3283
3184
  */
3284
3185
  function calculateKeptElementsQuery() {
3285
3186
  var aKeyFilters,
3286
- mQueryOptions = _Helper.merge({}, that.mQueryOptions);
3187
+ mQueryOptions = _Helper.clone(that.mQueryOptions);
3287
3188
 
3288
3189
  if (that.mLateQueryOptions) {
3289
3190
  _Helper.aggregateExpandSelect(mQueryOptions, that.mLateQueryOptions);
@@ -3361,6 +3262,20 @@ sap.ui.define([
3361
3262
  });
3362
3263
  };
3363
3264
 
3265
+ /**
3266
+ * Removes the element with the given predicate from $byPredicate of the cache's element list.
3267
+ *
3268
+ * @param {string} sPredicate - The predicate
3269
+ * @throws {Error}
3270
+ * If the cache is shared
3271
+ *
3272
+ * @public
3273
+ */
3274
+ _CollectionCache.prototype.removeKeptElement = function (sPredicate) {
3275
+ this.checkSharedRequest();
3276
+ delete this.aElements.$byPredicate[sPredicate];
3277
+ };
3278
+
3364
3279
  /**
3365
3280
  * Requests the elements in the given range and places them into the aElements list. Calculates
3366
3281
  * the key predicates for all entities in the result before the promise is resolved. While the
@@ -3377,8 +3292,8 @@ sap.ui.define([
3377
3292
  * @param {function} [fnDataRequested]
3378
3293
  * The function is called when the back-end requests have been sent.
3379
3294
  * @returns {sap.ui.base.SyncPromise}
3380
- * A promise resolving without a defined result when the request is finished and rejecting in
3381
- * case of error
3295
+ * A promise which is resolved without a defined result when the request is finished and
3296
+ * rejected in case of error
3382
3297
  * @throws {Error}
3383
3298
  * If group ID is '$cached'. The error has a property <code>$cached = true</code>
3384
3299
  *
@@ -3443,9 +3358,9 @@ sap.ui.define([
3443
3358
  * in this case
3444
3359
  * @param {boolean} bWithMessages
3445
3360
  * Whether the "@com.sap.vocabularies.Common.v1.Messages" path is treated specially
3446
- * @returns {Promise|sap.ui.base.SyncPromise}
3447
- * A promise resolving without a defined result, or rejecting with an error if loading of side
3448
- * effects fails
3361
+ * @returns {Promise<void>|sap.ui.base.SyncPromise}
3362
+ * A promise which is resolved without a defined result, or rejected with an error if loading
3363
+ * of side effects fails
3449
3364
  * @throws {Error}
3450
3365
  * If group ID is '$cached' (the error has a property <code>$cached = true</code> then) or if
3451
3366
  * the cache is shared
@@ -3618,7 +3533,7 @@ sap.ui.define([
3618
3533
  this.sContext = undefined;
3619
3534
  this.aElements.length = this.aElements.$created = iCreated;
3620
3535
  this.aElements.$byPredicate = {};
3621
- this.aElements.$count = undefined; // needed for setCount()
3536
+ this.aElements.$count = undefined; // needed for _Helper.setCount
3622
3537
  this.iLimit = Infinity;
3623
3538
 
3624
3539
  Object.keys(mChangeListeners).forEach(function (sPath) {
@@ -4002,6 +3917,11 @@ sap.ui.define([
4002
3917
  ]).then(function (aResult) {
4003
3918
  that.buildOriginalResourcePath(aResult[0], aResult[1], fnGetOriginalResourcePath);
4004
3919
  that.visitResponse(aResult[0], aResult[1]);
3920
+ if (that.mQueryOptions && that.mQueryOptions.$select) {
3921
+ // add "@$ui5.noData" annotations, e.g. for missing Edm.Stream properties
3922
+ _Helper.updateSelected({}, "", aResult[0], aResult[0],
3923
+ that.mQueryOptions.$select);
3924
+ }
4005
3925
  that.bPosting = false;
4006
3926
  if (oRequestLock) {
4007
3927
  oRequestLock.unlock();
@@ -4052,7 +3972,7 @@ sap.ui.define([
4052
3972
  if (oData) {
4053
3973
  sHttpMethod = oData["X-HTTP-Method"] || sHttpMethod;
4054
3974
  delete oData["X-HTTP-Method"];
4055
- if (this.oRequestor.isActionBodyOptional() && !Object.keys(oData).length) {
3975
+ if (this.oRequestor.isActionBodyOptional() && _Helper.isEmptyObject(oData)) {
4056
3976
  oData = undefined;
4057
3977
  }
4058
3978
  }
@@ -4080,8 +4000,8 @@ sap.ui.define([
4080
4000
  * @param {string} [sResourcePath=this.sResourcePath]
4081
4001
  * A resource path relative to the service URL; it must not contain a query string
4082
4002
  * @returns {sap.ui.base.SyncPromise}
4083
- * A promise resolving without a defined result, or rejecting with an error if loading of side
4084
- * effects fails.
4003
+ * A promise which is resolved without a defined result, or rejected with an error if loading
4004
+ * of side effects fails.
4085
4005
  * @throws {Error} If the side effects require a $expand, if group ID is '$cached' (the error
4086
4006
  * has a property <code>$cached = true</code> then), or if the cache is shared
4087
4007
  *
@@ -4465,39 +4385,5 @@ sap.ui.define([
4465
4385
  return iIndex;
4466
4386
  };
4467
4387
 
4468
- /**
4469
- * Makes an object that has the given value exactly at the given property path allowing to use
4470
- * the result in _Helper.updateExisting().
4471
- *
4472
- * Examples:
4473
- * <ul>
4474
- * <li> ["Age"], 42 -> {Age: 42}
4475
- * <li> ["Address", "City"], "Walldorf" -> {Address: {City: "Walldorf"}}
4476
- * </ul>
4477
- *
4478
- * @param {string[]} aPropertyPath
4479
- * The property path split into an array of segments
4480
- * @param {any} vValue
4481
- * The property value
4482
- * @param {boolean} [bUpdating]
4483
- * Whether the given property will not be overwritten by a creation POST(+GET) response
4484
- * @returns {object}
4485
- * The resulting object
4486
- *
4487
- * @private
4488
- */
4489
- _Cache.makeUpdateData = function (aPropertyPath, vValue, bUpdating) {
4490
- return aPropertyPath.reduceRight(function (vValue0, sSegment) {
4491
- var oResult = {};
4492
-
4493
- oResult[sSegment] = vValue0;
4494
- if (bUpdating) {
4495
- oResult[sSegment + "@$ui5.updating"] = true;
4496
- bUpdating = false;
4497
- }
4498
- return oResult;
4499
- }, vValue);
4500
- };
4501
-
4502
4388
  return _Cache;
4503
4389
  }, /* bExport= */false);