@openui5/sap.ui.core 1.138.0 → 1.140.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 (365) hide show
  1. package/README.md +1 -1
  2. package/REUSE.toml +8 -1
  3. package/THIRDPARTY.txt +72 -66
  4. package/package.json +2 -2
  5. package/src/jquery.sap.global.js +1 -1
  6. package/src/jquery.sap.mobile.js +0 -8
  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.storage.js +3 -3
  11. package/src/sap/base/Event.js +1 -1
  12. package/src/sap/base/Eventing.js +1 -1
  13. package/src/sap/base/config.js +22 -1
  14. package/src/sap/base/i18n/LanguageFallback.js +18 -2
  15. package/src/sap/base/i18n/LanguageTag.js +11 -5
  16. package/src/sap/base/i18n/Localization.js +36 -9
  17. package/src/sap/base/i18n/ResourceBundle.js +59 -35
  18. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  19. package/src/sap/base/security/URLListValidator.js +7 -3
  20. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  21. package/src/sap/base/util/restricted/_castArray.js +1 -1
  22. package/src/sap/base/util/restricted/_compact.js +1 -1
  23. package/src/sap/base/util/restricted/_curry.js +1 -1
  24. package/src/sap/base/util/restricted/_debounce.js +1 -1
  25. package/src/sap/base/util/restricted/_difference.js +1 -1
  26. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  27. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  28. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  29. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  30. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  31. package/src/sap/base/util/restricted/_flatten.js +1 -1
  32. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  33. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  34. package/src/sap/base/util/restricted/_intersection.js +1 -1
  35. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  36. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  37. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  38. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  39. package/src/sap/base/util/restricted/_isNil.js +1 -1
  40. package/src/sap/base/util/restricted/_max.js +1 -1
  41. package/src/sap/base/util/restricted/_merge.js +1 -1
  42. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  43. package/src/sap/base/util/restricted/_min.js +1 -1
  44. package/src/sap/base/util/restricted/_omit.js +1 -1
  45. package/src/sap/base/util/restricted/_pick.js +1 -1
  46. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  47. package/src/sap/base/util/restricted/_throttle.js +1 -1
  48. package/src/sap/base/util/restricted/_toArray.js +1 -1
  49. package/src/sap/base/util/restricted/_union.js +1 -1
  50. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  51. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  52. package/src/sap/base/util/restricted/_uniq.js +1 -1
  53. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  54. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  55. package/src/sap/base/util/restricted/_without.js +1 -1
  56. package/src/sap/base/util/restricted/_xor.js +1 -1
  57. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  58. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  59. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  60. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  61. package/src/sap/ui/Device.js +3 -3
  62. package/src/sap/ui/Global.js +3 -3
  63. package/src/sap/ui/base/BindingInfo.js +6 -1
  64. package/src/sap/ui/base/BindingParser.js +1 -1
  65. package/src/sap/ui/base/DataType.js +27 -2
  66. package/src/sap/ui/base/Event.js +1 -1
  67. package/src/sap/ui/base/EventProvider.js +1 -1
  68. package/src/sap/ui/base/Interface.js +1 -1
  69. package/src/sap/ui/base/ManagedObject.js +49 -12
  70. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  71. package/src/sap/ui/base/Metadata.js +1 -1
  72. package/src/sap/ui/base/Object.js +1 -1
  73. package/src/sap/ui/base/ObjectPool.js +1 -1
  74. package/src/sap/ui/base/OwnStatics.js +49 -0
  75. package/src/sap/ui/core/.library +8 -3
  76. package/src/sap/ui/core/BlockLayerUtils.js +2 -2
  77. package/src/sap/ui/core/BusyIndicator.js +1 -1
  78. package/src/sap/ui/core/Component.js +11 -9
  79. package/src/sap/ui/core/ComponentContainer.js +13 -3
  80. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  81. package/src/sap/ui/core/ComponentSupport.js +1 -1
  82. package/src/sap/ui/core/Configuration.js +1 -1
  83. package/src/sap/ui/core/Control.js +1 -1
  84. package/src/sap/ui/core/Core.js +2 -11
  85. package/src/sap/ui/core/CustomData.js +1 -1
  86. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  87. package/src/sap/ui/core/Element.js +10 -4
  88. package/src/sap/ui/core/ElementMetadata.js +1 -1
  89. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  90. package/src/sap/ui/core/EventBus.js +1 -1
  91. package/src/sap/ui/core/Fragment.js +10 -8
  92. package/src/sap/ui/core/HTML.js +1 -1
  93. package/src/sap/ui/core/History.js +1 -1
  94. package/src/sap/ui/core/Icon.js +1 -1
  95. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  96. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  97. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  98. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  99. package/src/sap/ui/core/InvisibleText.js +1 -1
  100. package/src/sap/ui/core/Item.js +1 -1
  101. package/src/sap/ui/core/LabelEnablement.js +1 -1
  102. package/src/sap/ui/core/LayoutData.js +1 -1
  103. package/src/sap/ui/core/Lib.js +54 -132
  104. package/src/sap/ui/core/ListItem.js +1 -1
  105. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  106. package/src/sap/ui/core/Locale.js +1 -1
  107. package/src/sap/ui/core/LocaleData.js +1 -1
  108. package/src/sap/ui/core/Manifest.js +1 -1
  109. package/src/sap/ui/core/Message.js +1 -1
  110. package/src/sap/ui/core/RenderManager.js +1 -1
  111. package/src/sap/ui/core/Renderer.js +1 -1
  112. package/src/sap/ui/core/ResizeHandler.js +1 -1
  113. package/src/sap/ui/core/ScrollBar.js +1 -1
  114. package/src/sap/ui/core/SeparatorItem.js +1 -1
  115. package/src/sap/ui/core/Theming.js +145 -76
  116. package/src/sap/ui/core/Title.js +1 -1
  117. package/src/sap/ui/core/TooltipBase.js +1 -1
  118. package/src/sap/ui/core/UIArea.js +1 -1
  119. package/src/sap/ui/core/UIComponent.js +6 -2
  120. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  121. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  122. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  123. package/src/sap/ui/core/XMLComposite.js +1 -1
  124. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  125. package/src/sap/ui/core/XMLTemplateProcessor.js +1 -1
  126. package/src/sap/ui/core/date/UI5Date.js +1 -1
  127. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  128. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  129. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  130. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  131. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  132. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  133. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  134. package/src/sap/ui/core/format/NumberFormat.js +44 -20
  135. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  136. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  137. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  138. package/src/sap/ui/core/i18n/interaction_ar.xml +1 -1
  139. package/src/sap/ui/core/interaction/KeyboardInteractionDisplay.js +64 -37
  140. package/src/sap/ui/core/library.js +3 -3
  141. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  142. package/src/sap/ui/core/message/Message.js +1 -1
  143. package/src/sap/ui/core/message/MessageManager.js +1 -1
  144. package/src/sap/ui/core/message/MessageParser.js +1 -1
  145. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  146. package/src/sap/ui/core/messagebundle.properties +58 -28
  147. package/src/sap/ui/core/messagebundle_ar.properties +26 -11
  148. package/src/sap/ui/core/messagebundle_bg.properties +21 -6
  149. package/src/sap/ui/core/messagebundle_ca.properties +24 -9
  150. package/src/sap/ui/core/messagebundle_cnr.properties +25 -10
  151. package/src/sap/ui/core/messagebundle_cs.properties +24 -9
  152. package/src/sap/ui/core/messagebundle_cy.properties +24 -9
  153. package/src/sap/ui/core/messagebundle_da.properties +21 -6
  154. package/src/sap/ui/core/messagebundle_de.properties +16 -1
  155. package/src/sap/ui/core/messagebundle_el.properties +26 -11
  156. package/src/sap/ui/core/messagebundle_en.properties +24 -9
  157. package/src/sap/ui/core/messagebundle_en_GB.properties +24 -9
  158. package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +24 -9
  159. package/src/sap/ui/core/messagebundle_es.properties +21 -6
  160. package/src/sap/ui/core/messagebundle_es_MX.properties +24 -9
  161. package/src/sap/ui/core/messagebundle_et.properties +31 -16
  162. package/src/sap/ui/core/messagebundle_fi.properties +22 -7
  163. package/src/sap/ui/core/messagebundle_fr.properties +22 -7
  164. package/src/sap/ui/core/messagebundle_fr_CA.properties +20 -5
  165. package/src/sap/ui/core/messagebundle_hi.properties +24 -9
  166. package/src/sap/ui/core/messagebundle_hr.properties +20 -5
  167. package/src/sap/ui/core/messagebundle_hu.properties +23 -8
  168. package/src/sap/ui/core/messagebundle_id.properties +20 -5
  169. package/src/sap/ui/core/messagebundle_it.properties +23 -8
  170. package/src/sap/ui/core/messagebundle_iw.properties +21 -6
  171. package/src/sap/ui/core/messagebundle_ja.properties +19 -4
  172. package/src/sap/ui/core/messagebundle_kk.properties +25 -10
  173. package/src/sap/ui/core/messagebundle_ko.properties +26 -11
  174. package/src/sap/ui/core/messagebundle_lt.properties +20 -5
  175. package/src/sap/ui/core/messagebundle_lv.properties +22 -7
  176. package/src/sap/ui/core/messagebundle_mk.properties +25 -10
  177. package/src/sap/ui/core/messagebundle_ms.properties +24 -9
  178. package/src/sap/ui/core/messagebundle_nl.properties +22 -7
  179. package/src/sap/ui/core/messagebundle_no.properties +22 -7
  180. package/src/sap/ui/core/messagebundle_pl.properties +19 -4
  181. package/src/sap/ui/core/messagebundle_pt.properties +18 -3
  182. package/src/sap/ui/core/messagebundle_pt_PT.properties +18 -3
  183. package/src/sap/ui/core/messagebundle_ro.properties +24 -9
  184. package/src/sap/ui/core/messagebundle_ru.properties +19 -4
  185. package/src/sap/ui/core/messagebundle_sh.properties +25 -10
  186. package/src/sap/ui/core/messagebundle_sk.properties +24 -9
  187. package/src/sap/ui/core/messagebundle_sl.properties +20 -5
  188. package/src/sap/ui/core/messagebundle_sr.properties +25 -10
  189. package/src/sap/ui/core/messagebundle_sv.properties +23 -8
  190. package/src/sap/ui/core/messagebundle_th.properties +20 -5
  191. package/src/sap/ui/core/messagebundle_tr.properties +20 -5
  192. package/src/sap/ui/core/messagebundle_uk.properties +22 -7
  193. package/src/sap/ui/core/messagebundle_vi.properties +26 -11
  194. package/src/sap/ui/core/messagebundle_zh_CN.properties +24 -9
  195. package/src/sap/ui/core/messagebundle_zh_TW.properties +26 -11
  196. package/src/sap/ui/core/mvc/Controller.js +5 -3
  197. package/src/sap/ui/core/mvc/HTMLView.js +6 -2
  198. package/src/sap/ui/core/mvc/JSONView.js +6 -2
  199. package/src/sap/ui/core/mvc/JSView.js +6 -3
  200. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  201. package/src/sap/ui/core/mvc/View.js +63 -20
  202. package/src/sap/ui/core/mvc/XMLView.js +6 -2
  203. package/src/sap/ui/core/mvc/_ViewFactory.js +8 -4
  204. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  205. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  206. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  207. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  208. package/src/sap/ui/core/routing/Route.js +1 -1
  209. package/src/sap/ui/core/routing/Router.js +19 -1
  210. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  211. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  212. package/src/sap/ui/core/service/Service.js +1 -1
  213. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  214. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  215. package/src/sap/ui/core/support/Plugin.js +1 -1
  216. package/src/sap/ui/core/support/Support.js +1 -1
  217. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  218. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  219. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  220. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  221. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  222. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  223. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  224. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  225. package/src/sap/ui/core/themes/base/base.less +6 -6
  226. package/src/sap/ui/core/themes/base/shared.less +4 -1
  227. package/src/sap/ui/core/themes/base/skeleton.less +3 -3
  228. package/src/sap/ui/core/theming/Parameters.js +717 -755
  229. package/src/sap/ui/core/theming/ThemeHelper.js +0 -77
  230. package/src/sap/ui/core/theming/ThemeManager.js +535 -526
  231. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  232. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  233. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  234. package/src/sap/ui/core/tmpl/Template.js +1 -1
  235. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  236. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  237. package/src/sap/ui/core/util/Export.js +1 -1
  238. package/src/sap/ui/core/util/ExportCell.js +1 -1
  239. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  240. package/src/sap/ui/core/util/ExportRow.js +1 -1
  241. package/src/sap/ui/core/util/ExportType.js +1 -1
  242. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  243. package/src/sap/ui/core/util/File.js +1 -1
  244. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  245. package/src/sap/ui/core/util/MockServer.js +1 -1
  246. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  247. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  248. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  249. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  250. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  251. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  252. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  253. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  254. package/src/sap/ui/core/webc/WebComponent.js +93 -45
  255. package/src/sap/ui/core/webc/WebComponentMetadata.js +40 -6
  256. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  257. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  258. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  259. package/src/sap/ui/debug/ControlTree.js +1 -1
  260. package/src/sap/ui/debug/DebugEnv.js +1 -1
  261. package/src/sap/ui/debug/PropertyList.js +1 -1
  262. package/src/sap/ui/dom/findTabbable.js +1 -1
  263. package/src/sap/ui/dom/includeStylesheet.js +4 -1
  264. package/src/sap/ui/model/ClientModel.js +2 -2
  265. package/src/sap/ui/model/CompositeDataState.js +1 -1
  266. package/src/sap/ui/model/CompositeType.js +1 -1
  267. package/src/sap/ui/model/DataState.js +1 -1
  268. package/src/sap/ui/model/Filter.js +55 -35
  269. package/src/sap/ui/model/FilterOperator.js +79 -9
  270. package/src/sap/ui/model/MetaModel.js +1 -1
  271. package/src/sap/ui/model/Model.js +7 -7
  272. package/src/sap/ui/model/SelectionModel.js +1 -1
  273. package/src/sap/ui/model/SimpleType.js +1 -1
  274. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  275. package/src/sap/ui/model/Type.js +1 -1
  276. package/src/sap/ui/model/json/JSONModel.js +1 -1
  277. package/src/sap/ui/model/json/JSONPropertyBinding.js +14 -2
  278. package/src/sap/ui/model/json/TypedJSONContext.js +16 -0
  279. package/src/sap/ui/model/json/TypedJSONModel.js +16 -0
  280. package/src/sap/ui/model/message/MessageModel.js +1 -1
  281. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  282. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  283. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  284. package/src/sap/ui/model/odata/ODataMetadata.js +4 -4
  285. package/src/sap/ui/model/odata/ODataModel.js +3 -3
  286. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +9 -8
  287. package/src/sap/ui/model/odata/_AnnotationHelperExpression.js +2 -2
  288. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  289. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  290. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  291. package/src/sap/ui/model/odata/type/Date.js +1 -1
  292. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  293. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  294. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  295. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  296. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  297. package/src/sap/ui/model/odata/type/Double.js +1 -1
  298. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  299. package/src/sap/ui/model/odata/type/Int.js +1 -1
  300. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  301. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  302. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  303. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  304. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  305. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  306. package/src/sap/ui/model/odata/type/Single.js +1 -1
  307. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  308. package/src/sap/ui/model/odata/type/String.js +1 -1
  309. package/src/sap/ui/model/odata/type/Time.js +1 -1
  310. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  311. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  312. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  313. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +17 -11
  314. package/src/sap/ui/model/odata/v2/ODataContextBinding.js +2 -2
  315. package/src/sap/ui/model/odata/v2/ODataListBinding.js +2 -2
  316. package/src/sap/ui/model/odata/v2/ODataModel.js +44 -61
  317. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +82 -60
  318. package/src/sap/ui/model/odata/v4/Context.js +19 -15
  319. package/src/sap/ui/model/odata/v4/ODataBinding.js +2 -2
  320. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +4 -4
  321. package/src/sap/ui/model/odata/v4/ODataListBinding.js +26 -14
  322. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +38 -23
  323. package/src/sap/ui/model/odata/v4/ODataModel.js +2 -2
  324. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +34 -7
  325. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
  326. package/src/sap/ui/model/odata/v4/ODataUtils.js +2 -2
  327. package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +1 -1
  328. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +78 -26
  329. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +10 -7
  330. package/src/sap/ui/model/odata/v4/lib/_Cache.js +32 -27
  331. package/src/sap/ui/model/odata/v4/lib/_Helper.js +50 -32
  332. package/src/sap/ui/model/odata/v4/lib/_MinMaxHelper.js +1 -1
  333. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +19 -9
  334. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +1 -1
  335. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  336. package/src/sap/ui/model/type/Boolean.js +1 -1
  337. package/src/sap/ui/model/type/Currency.js +1 -1
  338. package/src/sap/ui/model/type/Date.js +1 -1
  339. package/src/sap/ui/model/type/DateInterval.js +1 -1
  340. package/src/sap/ui/model/type/DateTime.js +1 -1
  341. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  342. package/src/sap/ui/model/type/FileSize.js +1 -1
  343. package/src/sap/ui/model/type/Float.js +1 -1
  344. package/src/sap/ui/model/type/Integer.js +1 -1
  345. package/src/sap/ui/model/type/String.js +1 -1
  346. package/src/sap/ui/model/type/Time.js +1 -1
  347. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  348. package/src/sap/ui/model/type/Unit.js +19 -5
  349. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  350. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -2
  351. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  352. package/src/sap/ui/test/TestUtils.js +27 -15
  353. package/src/sap/ui/test/generic/GenericTestCollection.js +11 -1
  354. package/src/sap/ui/test/generic/TestBase.js +1 -1
  355. package/src/sap/ui/test/generic/Utils.js +6 -6
  356. package/src/sap/ui/test/opaQunit.js +3 -0
  357. package/src/sap/ui/thirdparty/jquery.js +1 -1
  358. package/src/sap/ui/thirdparty/qunit-2.js +4 -1
  359. package/src/sap/ui/util/Mobile.js +0 -9
  360. package/src/sap/ui/util/Storage.js +1 -1
  361. package/src/ui5loader-autoconfig.js +49 -42
  362. package/src/ui5loader.js +1 -1
  363. package/ui5.yaml +0 -1
  364. package/src/sap/ui/base/_runWithOwner.js +0 -43
  365. package/src/sap/ui/core/plugin/LessSupport.js +0 -542
@@ -219,7 +219,7 @@ sap.ui.define([
219
219
  * If present, a recursive hierarchy w/o data aggregation is defined and
220
220
  * {@link _AggregationHelper.buildApply4Hierarchy} is invoked instead.
221
221
  * @param {object} [mQueryOptions={}]
222
- * A map of key-value pairs representing the query string; it is not modified
222
+ * A read-only map of key-value pairs representing the query string
223
223
  * @param {boolean} [mQueryOptions.$count]
224
224
  * The value for a "$count" system query option; it is removed from the returned map for a
225
225
  * follow-up request or in case it is turned into an aggregate "$count as UI5__count"
@@ -434,7 +434,7 @@ sap.ui.define([
434
434
  * DistanceFromRoot, DrillState, LimitedDescendantCount, LimitedRank, NodeProperty, and
435
435
  * ParentNavigationProperty are stored at <code>oAggregation</code> using a "$" prefix (if
436
436
  * not already stored). The "com.sap.vocabularies.Hierarchy.v1.RecursiveHierarchyActions"
437
- * annotation is stored as "$Actions".
437
+ * annotation is stored as "$Actions". "expandTo" is normalized.
438
438
  *
439
439
  * @param {object} oAggregation
440
440
  * An object holding the information needed for a recursive hierarchy; see
@@ -455,7 +455,7 @@ sap.ui.define([
455
455
  * Like the value for a "$search" system query option (remember ODATA-1452); it is turned
456
456
  * into the search expression parameter of an "ancestors()" transformation
457
457
  * @param {object} [mQueryOptions={}]
458
- * A map of key-value pairs representing the query string; it is not modified
458
+ * A read-only map of key-value pairs representing the query string
459
459
  * @param {string} [mQueryOptions.$$filterBeforeAggregate]
460
460
  * The value for a filter which identifies a parent node; it is removed from the returned
461
461
  * map and turned into a "filter()" transformation
@@ -558,6 +558,9 @@ sap.ui.define([
558
558
  delete mQueryOptions.$orderby;
559
559
  }
560
560
  oAggregation.expandTo ??= 1;
561
+ if (oAggregation.expandTo > Number.MAX_SAFE_INTEGER) { // normalization
562
+ oAggregation.expandTo = Number.MAX_SAFE_INTEGER;
563
+ }
561
564
  const sExpandLevels = !bAllLevels && oAggregation.$ExpandLevels;
562
565
  sApply += sSapHierarchy + "TopLevels(HierarchyNodes=$root"
563
566
  + (oAggregation.$path || "")
@@ -706,7 +709,7 @@ sap.ui.define([
706
709
  * {@link sap.ui.model.odata.v4.ODataListBinding#setAggregation}.
707
710
  * @param {string} [oAggregation.search] - Ignored
708
711
  * @param {object} mQueryOptions
709
- * A map of key-value pairs representing the query string; it is not modified
712
+ * A read-only map of key-value pairs representing the query string
710
713
  * @param {string} [mQueryOptions.$$filterBeforeAggregate] - Removed from the returned map
711
714
  * @param {string} [mQueryOptions.$apply] - Replaced in the returned map
712
715
  * @param {string} [mQueryOptions.$count] - Removed from the returned map
@@ -793,7 +796,7 @@ sap.ui.define([
793
796
  * Returns a copy of the given query options with a filtered "$orderby".
794
797
  *
795
798
  * @param {object} mQueryOptions
796
- * A map of key-value pairs representing the query string
799
+ * A read-only map of key-value pairs representing the query string
797
800
  * @param {object} oAggregation
798
801
  * An object holding the information needed for data aggregation;
799
802
  * (see {@link .buildApply})
@@ -1042,7 +1045,7 @@ sap.ui.define([
1042
1045
  * @param {object} oAggregation
1043
1046
  * An object holding the information needed for data aggregation; see {@link .buildApply}
1044
1047
  * @param {object} mQueryOptions
1045
- * A map of key-value pairs representing the query string; it is not modified
1048
+ * A read-only map of key-value pairs representing the query string
1046
1049
  * @returns {object}
1047
1050
  * The created query options
1048
1051
  *
@@ -1085,7 +1088,7 @@ sap.ui.define([
1085
1088
  * @param {object} oAggregation
1086
1089
  * An object holding the information needed for data aggregation; see {@link .buildApply}
1087
1090
  * @param {object} mQueryOptions
1088
- * A map of key-value pairs representing the query string; it is not modified
1091
+ * A read-only map of key-value pairs representing the query string
1089
1092
  * @returns {object}
1090
1093
  * The created query options
1091
1094
  *
@@ -1313,7 +1313,7 @@ sap.ui.define([
1313
1313
  /**
1314
1314
  * Returns this cache's query options.
1315
1315
  *
1316
- * @returns {object|undefined} The query options, if any
1316
+ * @returns {object|undefined} The query options, if any (requires "copy on write"!)
1317
1317
  *
1318
1318
  * @public
1319
1319
  * @see #setQueryOptions
@@ -1522,19 +1522,17 @@ sap.ui.define([
1522
1522
  mQueryOptions.$select.push(sMessagesPath);
1523
1523
  bKeepReportedMessagesPath = true;
1524
1524
  }
1525
- // drop collection related system query options
1526
- delete mQueryOptions.$apply;
1527
- delete mQueryOptions.$count;
1528
- delete mQueryOptions.$filter;
1529
- delete mQueryOptions.$orderby;
1530
- delete mQueryOptions.$search;
1531
- sReadUrl += that.oRequestor.buildQueryString(that.sMetaPath, mQueryOptions, false,
1532
- that.bSortExpandSelect);
1525
+ const mMergeableQueryOptions = _Helper.extractMergeableQueryOptions(mQueryOptions);
1526
+ mMergeableQueryOptions.$$sortIfMerged = true;
1527
+ sReadUrl += that.oRequestor.buildQueryString(that.sMetaPath, mQueryOptions,
1528
+ // drop system query options to allow merging with late property requests
1529
+ /*bDropSystemQueryOptions*/true, that.bSortExpandSelect);
1533
1530
 
1534
1531
  that.bSentRequest = true;
1535
1532
  return SyncPromise.all([
1536
1533
  that.oRequestor
1537
- .request("GET", sReadUrl, oGroupLock, undefined, undefined, fnDataRequested),
1534
+ .request("GET", sReadUrl, oGroupLock, undefined, undefined, fnDataRequested,
1535
+ undefined, undefined, undefined, undefined, mMergeableQueryOptions),
1538
1536
  that.fetchTypes()
1539
1537
  ]).then(function (aResult) {
1540
1538
  var oElement = aResult[0];
@@ -1853,6 +1851,9 @@ sap.ui.define([
1853
1851
  aElements[iIndex] = aElements.$byPredicate[sPredicate] = oElement;
1854
1852
  sTransientPredicate = _Helper.getPrivateAnnotation(oOldElement, "transientPredicate");
1855
1853
  if (sTransientPredicate) {
1854
+ if ("@$ui5.context.isInactive" in oOldElement) {
1855
+ oElement["@$ui5.context.isInactive"] = false;
1856
+ }
1856
1857
  oElement["@$ui5.context.isTransient"] = false;
1857
1858
  aElements.$byPredicate[sTransientPredicate] = oElement;
1858
1859
  _Helper.setPrivateAnnotation(oElement, "transientPredicate", sTransientPredicate);
@@ -2096,7 +2097,7 @@ sap.ui.define([
2096
2097
  * Updates this cache's query options if it has not yet sent a request.
2097
2098
  *
2098
2099
  * @param {object} [mQueryOptions={}]
2099
- * The new query options
2100
+ * The new query options (requires "copy on write"!)
2100
2101
  * @param {boolean} [bForce]
2101
2102
  * Forces an update even if a request has been already sent
2102
2103
  * @throws {Error}
@@ -2112,7 +2113,7 @@ sap.ui.define([
2112
2113
  throw new Error("Cannot set query options: Cache has already sent a request");
2113
2114
  }
2114
2115
 
2115
- this.mQueryOptions = mQueryOptions;
2116
+ this.mQueryOptions = mQueryOptions; // Note: requires "copy on write"!
2116
2117
  this.sQueryString = this.oRequestor.buildQueryString(this.sMetaPath, mQueryOptions, false,
2117
2118
  this.bSortExpandSelect);
2118
2119
  };
@@ -2687,7 +2688,7 @@ sap.ui.define([
2687
2688
  * @param {string} sResourcePath
2688
2689
  * A resource path relative to the service URL
2689
2690
  * @param {object} [mQueryOptions]
2690
- * A map of key-value pairs representing the query string
2691
+ * A map of key-value pairs representing the query string (requires "copy on write"!)
2691
2692
  * @param {boolean} [bSortExpandSelect]
2692
2693
  * Whether the paths in $expand and $select shall be sorted in the cache's query string
2693
2694
  * @param {string} [sDeepResourcePath=sResourcePath]
@@ -3224,6 +3225,8 @@ sap.ui.define([
3224
3225
  if (sNewPredicate) {
3225
3226
  sPredicate = sNewPredicate;
3226
3227
  oKeptElement = oElement; // leads to no-op for _Helper.updateNonExisting
3228
+ } else if (iIndex < iStart || iIndex >= iStart + iResultLength) {
3229
+ oKeptElement = oElement; // leads to no-op for _Helper.updateNonExisting
3227
3230
  } else {
3228
3231
  throw new Error("Duplicate key predicate: " + sPredicate);
3229
3232
  }
@@ -4015,7 +4018,7 @@ sap.ui.define([
4015
4018
  * rows and transient elements with a different batch group shall be kept in place and a
4016
4019
  * backup shall be remembered for a later {@link #restore}
4017
4020
  * @param {object} [mQueryOptions]
4018
- * The new query options
4021
+ * The new query options (requires "copy on write"!)
4019
4022
  * @param {object} [_oAggregation]
4020
4023
  * An object holding the information needed for data aggregation; see also "OData Extension
4021
4024
  * for Data Aggregation Version 4.0"; must already be normalized by
@@ -4217,7 +4220,7 @@ sap.ui.define([
4217
4220
  * @param {string} sResourcePath
4218
4221
  * A resource path relative to the service URL
4219
4222
  * @param {object} [mQueryOptions]
4220
- * A map of key-value pairs representing the query string
4223
+ * A map of key-value pairs representing the query string (requires "copy on write"!)
4221
4224
  *
4222
4225
  * @alias sap.ui.model.odata.v4.lib._PropertyCache
4223
4226
  * @constructor
@@ -4327,7 +4330,7 @@ sap.ui.define([
4327
4330
  * @param {string} sResourcePath
4328
4331
  * A resource path relative to the service URL
4329
4332
  * @param {object} [mQueryOptions]
4330
- * A map of key-value pairs representing the query string
4333
+ * A map of key-value pairs representing the query string (requires "copy on write"!)
4331
4334
  * @param {boolean} [bSortExpandSelect]
4332
4335
  * Whether the paths in $expand and $select shall be sorted in the cache's query string
4333
4336
  * @param {boolean} [bSharedRequest]
@@ -4595,7 +4598,9 @@ sap.ui.define([
4595
4598
  }
4596
4599
  }
4597
4600
 
4598
- if (oEntity && !("@odata.etag" in oEntity)) {
4601
+ // Note: ODLB#getKeepAliveContext creates an empty initial object w/ private annotations
4602
+ if (bIgnoreETag && oEntity && !("@odata.etag" in oEntity)
4603
+ && !_Helper.isEmptyObject(_Helper.publicClone(oEntity))) {
4599
4604
  bIgnoreETag = false;
4600
4605
  }
4601
4606
  if (bIgnoreETag || oEntity) {
@@ -4749,7 +4754,7 @@ sap.ui.define([
4749
4754
  * @param {string} sResourcePath
4750
4755
  * A resource path relative to the service URL
4751
4756
  * @param {object} [mQueryOptions]
4752
- * A map of key-value pairs representing the query string
4757
+ * A map of key-value pairs representing the query string (requires "copy on write"!)
4753
4758
  * @private
4754
4759
  */
4755
4760
  function _SingletonPropertyCache(oRequestor, sResourcePath, mQueryOptions) {
@@ -4845,9 +4850,9 @@ sap.ui.define([
4845
4850
  * <br>
4846
4851
  * Example: Products
4847
4852
  * @param {object} [mQueryOptions]
4848
- * A map of key-value pairs representing the query string, the value in this pair has to
4849
- * be a string or an array of strings; if it is an array, the resulting query string
4850
- * repeats the key for each array value.
4853
+ * A map of key-value pairs representing the query string (requires "copy on write"!), the
4854
+ * value in this pair has to be a string or an array of strings; if it is an array, the
4855
+ * resulting query string repeats the key for each array value.
4851
4856
  * Examples:
4852
4857
  * {foo : "bar", "bar" : "baz"} results in the query string "foo=bar&bar=baz"
4853
4858
  * {foo : ["bar", "baz"]} results in the query string "foo=bar&foo=baz"
@@ -4915,9 +4920,9 @@ sap.ui.define([
4915
4920
  * <br>
4916
4921
  * Example: Products
4917
4922
  * @param {object} [mQueryOptions]
4918
- * A map of key-value pairs representing the query string, the value in this pair has to
4919
- * be a string or an array of strings; if it is an array, the resulting query string
4920
- * repeats the key for each array value.
4923
+ * A map of key-value pairs representing the query string (requires "copy on write"!), the
4924
+ * value in this pair has to be a string or an array of strings; if it is an array, the
4925
+ * resulting query string repeats the key for each array value.
4921
4926
  * Examples:
4922
4927
  * {foo : "bar", "bar" : "baz"} results in the query string "foo=bar&bar=baz"
4923
4928
  * {foo : ["bar", "baz"]} results in the query string "foo=bar&foo=baz"
@@ -4943,9 +4948,9 @@ sap.ui.define([
4943
4948
  * <br>
4944
4949
  * Example: Products
4945
4950
  * @param {object} [mQueryOptions]
4946
- * A map of key-value pairs representing the query string, the value in this pair has to
4947
- * be a string or an array of strings; if it is an array, the resulting query string
4948
- * repeats the key for each array value.
4951
+ * A map of key-value pairs representing the query string (requires "copy on write"!), the
4952
+ * value in this pair has to be a string or an array of strings; if it is an array, the
4953
+ * resulting query string repeats the key for each array value.
4949
4954
  * Examples:
4950
4955
  * {foo : "bar", "bar" : "baz"} results in the query string "foo=bar&bar=baz"
4951
4956
  * {foo : ["bar", "baz"]} results in the query string "foo=bar&foo=baz"
@@ -144,8 +144,8 @@ sap.ui.define([
144
144
  /**
145
145
  * Adds the given paths to $select of the given query options.
146
146
  *
147
- * @param {object} mQueryOptions The query options
148
- * @param {string[]} aSelectPaths The paths to add to $select
147
+ * @param {object} mQueryOptions - The query options to be MODIFIED
148
+ * @param {string[]} aSelectPaths - The paths to add to $select
149
149
  *
150
150
  * @public
151
151
  */
@@ -237,9 +237,10 @@ sap.ui.define([
237
237
  * Recursively merges $select and $expand from mQueryOptions into mAggregatedQueryOptions.
238
238
  * All other query options in mAggregatedQueryOptions remain untouched.
239
239
  *
240
- * @param {object} mAggregatedQueryOptions The aggregated query options
241
- * @param {object} mQueryOptions The query options to merge into the aggregated query
242
- * options
240
+ * @param {object} mAggregatedQueryOptions
241
+ * The aggregated query options to be MODIFIED
242
+ * @param {object} mQueryOptions
243
+ * The read-only query options to merge into the aggregated query options
243
244
  *
244
245
  * @public
245
246
  */
@@ -302,7 +303,8 @@ sap.ui.define([
302
303
  /**
303
304
  * Builds a query string from the given parameter map. Takes care of encoding, but ensures
304
305
  * that the characters "$", "(", ")", ";" and "=" are not encoded, so that OData queries
305
- * remain readable.
306
+ * remain readable. A parameter starting with "$$" is meant to be internal and does not
307
+ * become part of the query string.
306
308
  *
307
309
  * ';' is not encoded although RFC 1866 encourages its usage as separator between query
308
310
  * parameters. However OData Version 4.0 Part 2 specifies that only '&' is a valid
@@ -330,7 +332,7 @@ sap.ui.define([
330
332
  return "";
331
333
  }
332
334
 
333
- aKeys = Object.keys(mParameters);
335
+ aKeys = Object.keys(mParameters).filter((sKey) => !sKey.startsWith("$$"));
334
336
  if (aKeys.length === 0) {
335
337
  return "";
336
338
  }
@@ -493,7 +495,7 @@ sap.ui.define([
493
495
  *
494
496
  * $expand must not contain collection-valued navigation properties.
495
497
  *
496
- * @param {object} mQueryOptions - The query options
498
+ * @param {object} mQueryOptions - The read-only query options
497
499
  * @returns {string[]} The paths
498
500
  *
499
501
  * @public
@@ -604,7 +606,7 @@ sap.ui.define([
604
606
  * status code 412 and response header "Preference-Applied:handling=strict"
605
607
  * </ul>
606
608
  * @see <a href=
607
- * "http://docs.oasis-open.org/odata/odata-json-format/v4.0/os/odata-json-format-v4.0-os.html#_Representing_Errors_in"
609
+ * "https://docs.oasis-open.org/odata/odata-json-format/v4.0/odata-json-format-v4.0.html#_Representing_Errors_in"
608
610
  * >"19 Error Response"</a>
609
611
  *
610
612
  * @public
@@ -710,6 +712,10 @@ sap.ui.define([
710
712
  * <code>null</code> value
711
713
  *
712
714
  * @public
715
+ * @see .deleteProperty
716
+ * @see .drillDown
717
+ * @see .inheritPathValue
718
+ * @see .makeUpdateData
713
719
  */
714
720
  createMissing : function (oObject, aSegments) {
715
721
  aSegments.reduce(function (oCurrent, sSegment, i) {
@@ -895,6 +901,10 @@ sap.ui.define([
895
901
  * @param {string} sPath - Some relative path
896
902
  *
897
903
  * @public
904
+ * @see .createMissing
905
+ * @see .drillDown
906
+ * @see .inheritPathValue
907
+ * @see .makeUpdateData
898
908
  */
899
909
  deleteProperty : function (oObject, sPath) {
900
910
  var aSegments;
@@ -950,6 +960,10 @@ sap.ui.define([
950
960
  * into void
951
961
  *
952
962
  * @public
963
+ * @see .createMissing
964
+ * @see .deleteProperty
965
+ * @see .inheritPathValue
966
+ * @see .makeUpdateData
953
967
  */
954
968
  drillDown : function (oObject, vSegments) {
955
969
  if (typeof vSegments === "string") {
@@ -1004,24 +1018,21 @@ sap.ui.define([
1004
1018
  * Extracts the mergeable query options "$expand" and "$select" from the given ones, returns
1005
1019
  * them as a new map while replacing their value with "~" in the old map.
1006
1020
  *
1007
- * @param {object} mQueryOptions
1008
- * The original query options, will be modified
1009
- * @returns {object}
1010
- * The extracted query options
1021
+ * @param {object} mQueryOptions - The original query options to be MODIFIED
1022
+ * @returns {object} The extracted query options in the same order
1011
1023
  *
1012
1024
  * @public
1013
1025
  */
1014
1026
  extractMergeableQueryOptions : function (mQueryOptions) {
1015
1027
  var mExtractedQueryOptions = {};
1016
1028
 
1017
- if ("$expand" in mQueryOptions) {
1018
- mExtractedQueryOptions.$expand = mQueryOptions.$expand;
1019
- mQueryOptions.$expand = "~";
1020
- }
1021
- if ("$select" in mQueryOptions) {
1022
- mExtractedQueryOptions.$select = mQueryOptions.$select;
1023
- mQueryOptions.$select = "~";
1024
- }
1029
+ // ensure to keep the order of the query options
1030
+ Object.keys(mQueryOptions).forEach(function (sKey) {
1031
+ if (sKey === "$expand" || sKey === "$select") {
1032
+ mExtractedQueryOptions[sKey] = mQueryOptions[sKey];
1033
+ mQueryOptions[sKey] = "~";
1034
+ }
1035
+ });
1025
1036
 
1026
1037
  return mExtractedQueryOptions;
1027
1038
  },
@@ -1668,7 +1679,8 @@ sap.ui.define([
1668
1679
  * care of the details).
1669
1680
  *
1670
1681
  * @param {object|object[]} vEntityOrCollection - The entity (collection)
1671
- * @param {object} mQueryOptions - The query options (only $select and $expand required)
1682
+ * @param {object} mQueryOptions
1683
+ * The read-only query options (only $select and $expand required)
1672
1684
  * @returns {string[]}
1673
1685
  * A list of paths relative to vEntityOrCollection for which the property value is missing
1674
1686
  * @throws {Error} If there is a path containing "*"
@@ -1755,7 +1767,7 @@ sap.ui.define([
1755
1767
  * Returns the query options corresponding to the given path.
1756
1768
  *
1757
1769
  * @param {object} [mQueryOptions]
1758
- * A map of query options as returned by
1770
+ * A map of read-only query options as returned by
1759
1771
  * {@link sap.ui.model.odata.v4.ODataModel#buildQueryOptions}
1760
1772
  * @param {string} sPath
1761
1773
  * The path of the cache value in the cache
@@ -1946,6 +1958,10 @@ sap.ui.define([
1946
1958
  * untolerated <code>null</code> value
1947
1959
  *
1948
1960
  * @public
1961
+ * @see .createMissing
1962
+ * @see .deleteProperty
1963
+ * @see .drillDown
1964
+ * @see .makeUpdateData
1949
1965
  */
1950
1966
  inheritPathValue : function (aSegments, oSource, oTarget, bTolerateNull) {
1951
1967
  aSegments.forEach(function (sSegment, i) {
@@ -1997,7 +2013,7 @@ sap.ui.define([
1997
2013
  * key predicate.
1998
2014
  *
1999
2015
  * @param {object} [mCacheQueryOptions]
2000
- * A map of query options as returned by
2016
+ * A read-only map of query options as returned by
2001
2017
  * {@link sap.ui.model.odata.v4.ODataModel#buildQueryOptions}
2002
2018
  * @param {string[]} aPaths
2003
2019
  * The "14.5.11 Expression edm:NavigationPropertyPath" or
@@ -2206,7 +2222,7 @@ sap.ui.define([
2206
2222
  // The safe integers consist of all integers from -(2^53 - 1) inclusive to 2^53 - 1
2207
2223
  // inclusive.
2208
2224
  // 2^53 - 1 = 9007199254740991
2209
- return iNumber <= 9007199254740991 && Math.floor(iNumber) === iNumber;
2225
+ return iNumber <= Number.MAX_SAFE_INTEGER && Math.floor(iNumber) === iNumber;
2210
2226
  },
2211
2227
 
2212
2228
  /**
@@ -2227,7 +2243,7 @@ sap.ui.define([
2227
2243
  * ok, because within all known scenarios such combinations do not happen.
2228
2244
  *
2229
2245
  * @param {string} sPropertyPath The path to the structural property as meta path
2230
- * @param {object} [mQueryOptions] The query options to be analyzed
2246
+ * @param {object} [mQueryOptions] The read-only query options to be analyzed
2231
2247
  * @returns {boolean} Whether the property for the given path was already selected
2232
2248
  *
2233
2249
  * @public
@@ -2307,6 +2323,10 @@ sap.ui.define([
2307
2323
  * The resulting object
2308
2324
  *
2309
2325
  * @public
2326
+ * @see .createMissing
2327
+ * @see .deleteProperty
2328
+ * @see .drillDown
2329
+ * @see .inheritPathValue
2310
2330
  */
2311
2331
  makeUpdateData : function (aPropertyPath, vValue, bUpdating) {
2312
2332
  return aPropertyPath.reduceRight(function (vValue0, sSegment) {
@@ -2330,7 +2350,7 @@ sap.ui.define([
2330
2350
  * Ensures that the original map is left unchanged, but creates a copy only if necessary.
2331
2351
  *
2332
2352
  * @param {object} [mQueryOptions]
2333
- * The map of query options
2353
+ * The read-only map of query options
2334
2354
  * @param {string} [sOrderby]
2335
2355
  * The new value for the query option "$orderby"
2336
2356
  * @param {string[]} [aFilters]
@@ -2640,10 +2660,8 @@ sap.ui.define([
2640
2660
  /**
2641
2661
  * Adds the key properties of the given entity type to $select of the given query options.
2642
2662
  *
2643
- * @param {object} mQueryOptions
2644
- * The query options
2645
- * @param {object} oType
2646
- * The entity type's metadata "JSON"
2663
+ * @param {object} mQueryOptions - The query options to be MODIFIED
2664
+ * @param {object} oType - The entity type's metadata "JSON"
2647
2665
  *
2648
2666
  * @public
2649
2667
  */
@@ -2941,7 +2959,7 @@ sap.ui.define([
2941
2959
  * regarding order and count.
2942
2960
  *
2943
2961
  * @param {object} mChangeListeners - A map of change listeners by path
2944
- * @param {object} mQueryOptions - The query options
2962
+ * @param {object} mQueryOptions - The read-only query options
2945
2963
  * @param {string} sPath
2946
2964
  * The path of the target entity relative to mChangeListeners and mQueryOptions
2947
2965
  * @param {object} oTargetEntity - The target entity
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * Extension for Data Aggregation Version 4.0"; must already be normalized by
26
26
  * {@link _AggregationHelper.buildApply}
27
27
  * @param {object} mQueryOptions
28
- * A map of key-value pairs representing the query string
28
+ * A map of key-value pairs representing the query string (requires "copy on write"!)
29
29
  * @returns {sap.ui.model.odata.v4.lib._Cache}
30
30
  * The cache
31
31
  */
@@ -192,11 +192,14 @@ sap.ui.define([
192
192
  * @param {string} sResourcePath The resource path with possible query options and placeholders
193
193
  * @param {string} sMetaPath The absolute meta path matching the resource path
194
194
  * @param {object} mQueryOptions Query options to add to the resource path
195
+ * @param {boolean} [bSortSystemQueryOptions]
196
+ * Whether system query options are sorted alphabetically and moved to the query string's end
195
197
  * @returns {string} The resource path with the query options
196
198
  *
197
199
  * @private
198
200
  */
199
- _Requestor.prototype.addQueryString = function (sResourcePath, sMetaPath, mQueryOptions) {
201
+ _Requestor.prototype.addQueryString = function (sResourcePath, sMetaPath, mQueryOptions,
202
+ bSortSystemQueryOptions) {
200
203
  var sQueryString;
201
204
 
202
205
  mQueryOptions = this.convertQueryOptions(sMetaPath, mQueryOptions, false, true);
@@ -209,7 +212,7 @@ sap.ui.define([
209
212
  return _Helper.encodePair(sOption, sValue);
210
213
  });
211
214
 
212
- sQueryString = _Helper.buildQuery(mQueryOptions);
215
+ sQueryString = _Helper.buildQuery(mQueryOptions, bSortSystemQueryOptions);
213
216
  if (!sQueryString) {
214
217
  return sResourcePath;
215
218
  }
@@ -297,7 +300,7 @@ sap.ui.define([
297
300
  * @param {string} sMetaPath
298
301
  * The meta path corresponding to the resource path
299
302
  * @param {object} [mQueryOptions]
300
- * A map of key-value pairs representing the query string
303
+ * A read-only map of key-value pairs representing the query string
301
304
  * @param {boolean} [bDropSystemQueryOptions]
302
305
  * Whether all system query options are dropped (useful for non-GET requests)
303
306
  * @param {boolean} [bSortExpandSelect]
@@ -708,7 +711,7 @@ sap.ui.define([
708
711
  *
709
712
  * @param {string} sMetaPath
710
713
  * The meta path corresponding to the resource path
711
- * @param {object} [mQueryOptions] The query options
714
+ * @param {object} [mQueryOptions] The read-only query options
712
715
  * @param {boolean} [bDropSystemQueryOptions]
713
716
  * Whether all system query options are dropped (useful for non-GET requests)
714
717
  * @param {boolean} [bSortExpandSelect]
@@ -812,7 +815,7 @@ sap.ui.define([
812
815
  *
813
816
  * @param {string} _sMetaPath
814
817
  * The meta path corresponding to the resource path
815
- * @param {object} mQueryOptions The query options
818
+ * @param {object} mQueryOptions The read-only query options
816
819
  * @param {function (string,any)} fnResultHandler
817
820
  * The function to process the converted options getting the name and the value
818
821
  * @param {boolean} [bDropSystemQueryOptions]
@@ -1285,6 +1288,9 @@ sap.ui.define([
1285
1288
  if (oCandidate.$mergeRequests && oRequest.$mergeRequests) {
1286
1289
  oCandidate.$mergeRequests(oRequest.$mergeRequests());
1287
1290
  }
1291
+ oCandidate.$sortSystemQueryOptions
1292
+ ||= oCandidate.$queryOptions.$$sortIfMerged
1293
+ || oRequest.$queryOptions.$$sortIfMerged;
1288
1294
 
1289
1295
  return true;
1290
1296
  }
@@ -1302,10 +1308,12 @@ sap.ui.define([
1302
1308
  var mQueryOptions = oRequest.$queryOptions;
1303
1309
 
1304
1310
  if (mQueryOptions) {
1305
- if (mQueryOptions.$expand && !mQueryOptions.$select.length) {
1311
+ // if there was no $select, don't introduce one
1312
+ if (mQueryOptions.$expand && mQueryOptions.$select?.length === 0) {
1306
1313
  mQueryOptions.$select = Object.keys(mQueryOptions.$expand).sort().slice(0, 1);
1307
1314
  }
1308
- oRequest.url = that.addQueryString(oRequest.url, oRequest.$metaPath, mQueryOptions);
1315
+ oRequest.url = that.addQueryString(oRequest.url, oRequest.$metaPath, mQueryOptions,
1316
+ oRequest.$sortSystemQueryOptions);
1309
1317
  }
1310
1318
  });
1311
1319
  aResultingRequests.iChangeSet = aRequests.iChangeSet;
@@ -1853,10 +1861,12 @@ sap.ui.define([
1853
1861
  * contain $expand
1854
1862
  * @param {any} [vOwner]
1855
1863
  * An additional precondition for the merging of GET requests: the owner must be identical.
1864
+ * This is probably relevant when using parameter <code>fnMergeRequests</code> to ensure both
1865
+ * functions work well together.
1856
1866
  * @param {function(string[]):string[]} [fnMergeRequests]
1857
1867
  * Function which is called during merging of GET or PATCH requests. If a merged request has a
1858
- * function given, this function will be called and its return value is
1859
- * given to the one remaining request's function as a parameter.
1868
+ * function given, this function will be called and its return value is given to the one
1869
+ * remaining request's function as a parameter. See also <code>vOwner</code>.
1860
1870
  * @returns {Promise}
1861
1871
  * A promise on the outcome of the HTTP request; it will be rejected with an error having the
1862
1872
  * property <code>canceled = true</code> instead of sending a request if
@@ -764,7 +764,7 @@ sap.ui.define([
764
764
 
765
765
  /**
766
766
  * Formats a given internal value into a literal suitable for usage in OData V2 URLs. See
767
- * http://www.odata.org/documentation/odata-version-2-0/overview#AbstractTypeSystem.
767
+ * https://www.odata.org/documentation/odata-version-2-0/overview#AbstractTypeSystem.
768
768
  *
769
769
  * @param {any} vValue
770
770
  * The value
@@ -227,7 +227,7 @@ sap.ui.define([
227
227
  *
228
228
  * @extends sap.ui.model.Model
229
229
  * @public
230
- * @version 1.138.0
230
+ * @version 1.140.0
231
231
  */
232
232
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
233
233
 
@@ -19,7 +19,7 @@ sap.ui.define(["sap/ui/core/Lib", 'sap/ui/model/SimpleType', 'sap/ui/model/Forma
19
19
  * @extends sap.ui.model.SimpleType
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.138.0
22
+ * @version 1.140.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]
@@ -34,7 +34,7 @@ sap.ui.define([
34
34
  * @extends sap.ui.model.CompositeType
35
35
  *
36
36
  * @author SAP SE
37
- * @version 1.138.0
37
+ * @version 1.140.0
38
38
  *
39
39
  * @public
40
40
  * @param {object} [oFormatOptions]
@@ -27,7 +27,7 @@ sap.ui.define([
27
27
  * @extends sap.ui.model.SimpleType
28
28
  *
29
29
  * @author SAP SE
30
- * @version 1.138.0
30
+ * @version 1.140.0
31
31
  *
32
32
  * @public
33
33
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.model.CompositeType
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.138.0
28
+ * @version 1.140.0
29
29
  *
30
30
  * @alias sap.ui.model.type.DateInterval
31
31
  * @param {object} [oFormatOptions]
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.138.0
22
+ * @version 1.140.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.138.0
22
+ * @version 1.140.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -25,7 +25,7 @@ sap.ui.define([
25
25
  * @extends sap.ui.model.SimpleType
26
26
  *
27
27
  * @author SAP SE
28
- * @version 1.138.0
28
+ * @version 1.140.0
29
29
  *
30
30
  * @public
31
31
  * @param {object} [oFormatOptions]
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.138.0
29
+ * @version 1.140.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions]