@openui5/sap.ui.core 1.140.0 → 1.141.1

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 (304) hide show
  1. package/THIRDPARTY.txt +2 -2
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +1 -1
  4. package/src/jquery.sap.properties.js +1 -1
  5. package/src/jquery.sap.resources.js +1 -1
  6. package/src/jquery.sap.script.js +1 -1
  7. package/src/jquery.sap.storage.js +3 -3
  8. package/src/sap/base/Event.js +1 -1
  9. package/src/sap/base/Eventing.js +1 -1
  10. package/src/sap/base/config.js +1 -1
  11. package/src/sap/base/i18n/Formatting.js +1 -1
  12. package/src/sap/base/i18n/LanguageTag.js +9 -9
  13. package/src/sap/base/i18n/Localization.js +2 -2
  14. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  15. package/src/sap/base/security/encodeURL.js +1 -1
  16. package/src/sap/base/util/resolveReference.js +3 -1
  17. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  18. package/src/sap/base/util/restricted/_castArray.js +1 -1
  19. package/src/sap/base/util/restricted/_compact.js +1 -1
  20. package/src/sap/base/util/restricted/_curry.js +1 -1
  21. package/src/sap/base/util/restricted/_debounce.js +1 -1
  22. package/src/sap/base/util/restricted/_difference.js +1 -1
  23. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  24. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  25. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  27. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  28. package/src/sap/base/util/restricted/_flatten.js +1 -1
  29. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  30. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  31. package/src/sap/base/util/restricted/_intersection.js +1 -1
  32. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  33. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  34. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  35. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  36. package/src/sap/base/util/restricted/_isNil.js +1 -1
  37. package/src/sap/base/util/restricted/_max.js +1 -1
  38. package/src/sap/base/util/restricted/_merge.js +1 -1
  39. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  40. package/src/sap/base/util/restricted/_min.js +1 -1
  41. package/src/sap/base/util/restricted/_omit.js +1 -1
  42. package/src/sap/base/util/restricted/_pick.js +1 -1
  43. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  44. package/src/sap/base/util/restricted/_throttle.js +1 -1
  45. package/src/sap/base/util/restricted/_toArray.js +1 -1
  46. package/src/sap/base/util/restricted/_union.js +1 -1
  47. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  48. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  49. package/src/sap/base/util/restricted/_uniq.js +1 -1
  50. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  51. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  52. package/src/sap/base/util/restricted/_without.js +1 -1
  53. package/src/sap/base/util/restricted/_xor.js +1 -1
  54. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  55. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  56. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  57. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  58. package/src/sap/ui/Device.js +3 -3
  59. package/src/sap/ui/Global.js +3 -3
  60. package/src/sap/ui/base/BindingParser.js +21 -4
  61. package/src/sap/ui/base/DataType.js +1 -1
  62. package/src/sap/ui/base/Event.js +1 -1
  63. package/src/sap/ui/base/EventProvider.js +1 -1
  64. package/src/sap/ui/base/ExpressionParser.js +5 -1
  65. package/src/sap/ui/base/Interface.js +1 -1
  66. package/src/sap/ui/base/ManagedObject.js +1 -1
  67. package/src/sap/ui/base/ManagedObjectMetadata.js +3 -3
  68. package/src/sap/ui/base/Metadata.js +1 -1
  69. package/src/sap/ui/base/Object.js +1 -1
  70. package/src/sap/ui/base/ObjectPool.js +1 -1
  71. package/src/sap/ui/base/SyncPromise.js +3 -2
  72. package/src/sap/ui/core/.library +2 -2
  73. package/src/sap/ui/core/BusyIndicator.js +1 -1
  74. package/src/sap/ui/core/Component.js +1 -1
  75. package/src/sap/ui/core/ComponentContainer.js +2 -2
  76. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  77. package/src/sap/ui/core/ComponentSupport.js +3 -3
  78. package/src/sap/ui/core/Configuration.js +4 -4
  79. package/src/sap/ui/core/Control.js +1 -1
  80. package/src/sap/ui/core/Core.js +2 -2
  81. package/src/sap/ui/core/CustomData.js +1 -1
  82. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  83. package/src/sap/ui/core/Element.js +3 -3
  84. package/src/sap/ui/core/ElementMetadata.js +1 -1
  85. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  86. package/src/sap/ui/core/EventBus.js +1 -1
  87. package/src/sap/ui/core/Fragment.js +1 -1
  88. package/src/sap/ui/core/HTML.js +1 -1
  89. package/src/sap/ui/core/History.js +1 -1
  90. package/src/sap/ui/core/Icon.js +1 -1
  91. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  92. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  93. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  94. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  95. package/src/sap/ui/core/InvisibleText.js +1 -1
  96. package/src/sap/ui/core/Item.js +1 -1
  97. package/src/sap/ui/core/LabelEnablement.js +1 -1
  98. package/src/sap/ui/core/LayoutData.js +1 -1
  99. package/src/sap/ui/core/Lib.js +41 -38
  100. package/src/sap/ui/core/ListItem.js +1 -1
  101. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  102. package/src/sap/ui/core/Locale.js +7 -7
  103. package/src/sap/ui/core/LocaleData.js +7 -4
  104. package/src/sap/ui/core/Manifest.js +1 -1
  105. package/src/sap/ui/core/Message.js +1 -1
  106. package/src/sap/ui/core/RenderManager.js +1 -1
  107. package/src/sap/ui/core/Renderer.js +1 -1
  108. package/src/sap/ui/core/ResizeHandler.js +1 -1
  109. package/src/sap/ui/core/ScrollBar.js +1 -1
  110. package/src/sap/ui/core/SeparatorItem.js +1 -1
  111. package/src/sap/ui/core/Theming.js +22 -18
  112. package/src/sap/ui/core/Title.js +1 -1
  113. package/src/sap/ui/core/TooltipBase.js +1 -1
  114. package/src/sap/ui/core/UIArea.js +1 -1
  115. package/src/sap/ui/core/UIComponent.js +16 -7
  116. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  117. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  118. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  119. package/src/sap/ui/core/XMLComposite.js +1 -1
  120. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  121. package/src/sap/ui/core/_IconRegistry.js +19 -39
  122. package/src/sap/ui/core/date/UI5Date.js +1 -1
  123. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  124. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  125. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  126. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  127. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  128. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  129. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  130. package/src/sap/ui/core/format/NumberFormat.js +1 -1
  131. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  132. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  133. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  134. package/src/sap/ui/core/library.js +3 -3
  135. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  136. package/src/sap/ui/core/message/Message.js +1 -1
  137. package/src/sap/ui/core/message/MessageManager.js +1 -1
  138. package/src/sap/ui/core/message/MessageParser.js +1 -1
  139. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  140. package/src/sap/ui/core/messagebundle_pt.properties +2 -2
  141. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  142. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  143. package/src/sap/ui/core/mvc/JSView.js +1 -1
  144. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  145. package/src/sap/ui/core/mvc/View.js +2 -2
  146. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  147. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  148. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  149. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  150. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  151. package/src/sap/ui/core/routing/History.js +14 -5
  152. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  153. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  154. package/src/sap/ui/core/service/Service.js +1 -1
  155. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  156. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  157. package/src/sap/ui/core/support/Plugin.js +1 -1
  158. package/src/sap/ui/core/support/Support.js +1 -1
  159. package/src/sap/ui/core/support/ViewInfo.css +12 -12
  160. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  161. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  162. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  163. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  164. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  165. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  166. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  167. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  168. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +1 -3
  169. package/src/sap/ui/core/support/trace/E2eTraceLib.js +13 -7
  170. package/src/sap/ui/core/themes/base/BrowserScrollbar.less +0 -28
  171. package/src/sap/ui/core/themes/base/ScrollBar.less +4 -0
  172. package/src/sap/ui/core/themes/base/base.less +66 -17
  173. package/src/sap/ui/core/themes/base/global.less +5 -0
  174. package/src/sap/ui/core/themes/base/skeleton.less +7 -3
  175. package/src/sap/ui/core/themes/sap_hcb/LocalBusyIndicator.less +4 -0
  176. package/src/sap/ui/core/themes/sap_hcb/base_LocalBusyIndicator.less +4 -0
  177. package/src/sap/ui/core/themes/sap_hcb/base_ScrollBar.less +4 -0
  178. package/src/sap/ui/core/theming/Parameters.js +24 -11
  179. package/src/sap/ui/core/theming/ThemeManager.js +4 -3
  180. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  181. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  182. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  183. package/src/sap/ui/core/tmpl/Template.js +1 -1
  184. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  185. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  186. package/src/sap/ui/core/util/DraftEnabledMockServer.js +47 -43
  187. package/src/sap/ui/core/util/Export.js +1 -1
  188. package/src/sap/ui/core/util/ExportCell.js +1 -1
  189. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  190. package/src/sap/ui/core/util/ExportRow.js +1 -1
  191. package/src/sap/ui/core/util/ExportType.js +1 -1
  192. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  193. package/src/sap/ui/core/util/File.js +1 -1
  194. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  195. package/src/sap/ui/core/util/MockServer.js +1 -1
  196. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  197. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  198. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  199. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  200. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  201. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  202. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  203. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  204. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  205. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  206. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  207. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  208. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  209. package/src/sap/ui/debug/ControlTree.js +1 -1
  210. package/src/sap/ui/debug/DebugEnv.js +1 -1
  211. package/src/sap/ui/debug/PropertyList.js +1 -1
  212. package/src/sap/ui/events/F6Navigation.js +11 -3
  213. package/src/sap/ui/model/ClientModel.js +1 -1
  214. package/src/sap/ui/model/CompositeDataState.js +1 -1
  215. package/src/sap/ui/model/CompositeType.js +1 -1
  216. package/src/sap/ui/model/DataState.js +1 -1
  217. package/src/sap/ui/model/MetaModel.js +1 -1
  218. package/src/sap/ui/model/Model.js +1 -1
  219. package/src/sap/ui/model/SelectionModel.js +1 -1
  220. package/src/sap/ui/model/SimpleType.js +1 -1
  221. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  222. package/src/sap/ui/model/Type.js +1 -1
  223. package/src/sap/ui/model/json/JSONModel.js +1 -1
  224. package/src/sap/ui/model/message/MessageModel.js +1 -1
  225. package/src/sap/ui/model/odata/AnnotationHelper.js +1 -1
  226. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  227. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  228. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  229. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  230. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  231. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +25 -73
  232. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  233. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  234. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  235. package/src/sap/ui/model/odata/type/Date.js +1 -1
  236. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  237. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  238. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  239. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  240. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  241. package/src/sap/ui/model/odata/type/Double.js +1 -1
  242. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  243. package/src/sap/ui/model/odata/type/Int.js +1 -1
  244. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  245. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  246. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  247. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  248. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  249. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  250. package/src/sap/ui/model/odata/type/Single.js +1 -1
  251. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  252. package/src/sap/ui/model/odata/type/String.js +1 -1
  253. package/src/sap/ui/model/odata/type/Time.js +1 -1
  254. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  255. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  256. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  257. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  258. package/src/sap/ui/model/odata/v2/ODataModel.js +23 -9
  259. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +3 -11
  260. package/src/sap/ui/model/odata/v4/AnnotationHelper.js +11 -7
  261. package/src/sap/ui/model/odata/v4/Context.js +27 -27
  262. package/src/sap/ui/model/odata/v4/ODataBinding.js +44 -28
  263. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +16 -15
  264. package/src/sap/ui/model/odata/v4/ODataListBinding.js +35 -23
  265. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +47 -34
  266. package/src/sap/ui/model/odata/v4/ODataModel.js +40 -24
  267. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +19 -15
  268. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +3 -3
  269. package/src/sap/ui/model/odata/v4/_AnnotationHelperExpression.js +14 -14
  270. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +57 -17
  271. package/src/sap/ui/model/odata/v4/lib/_Batch.js +10 -7
  272. package/src/sap/ui/model/odata/v4/lib/_Cache.js +57 -65
  273. package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +1 -1
  274. package/src/sap/ui/model/odata/v4/lib/_Helper.js +3 -3
  275. package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +35 -4
  276. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +13 -10
  277. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +2 -2
  278. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  279. package/src/sap/ui/model/type/Boolean.js +1 -1
  280. package/src/sap/ui/model/type/Currency.js +1 -1
  281. package/src/sap/ui/model/type/Date.js +1 -1
  282. package/src/sap/ui/model/type/DateInterval.js +1 -1
  283. package/src/sap/ui/model/type/DateTime.js +1 -1
  284. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  285. package/src/sap/ui/model/type/FileSize.js +1 -1
  286. package/src/sap/ui/model/type/Float.js +1 -1
  287. package/src/sap/ui/model/type/Integer.js +1 -1
  288. package/src/sap/ui/model/type/String.js +1 -1
  289. package/src/sap/ui/model/type/Time.js +1 -1
  290. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  291. package/src/sap/ui/model/type/Unit.js +1 -1
  292. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  293. package/src/sap/ui/performance/XHRInterceptor.js +14 -9
  294. package/src/sap/ui/performance/trace/FESR.js +4 -11
  295. package/src/sap/ui/performance/trace/Passport.js +3 -10
  296. package/src/sap/ui/performance/trace/_InteractionImpl.js +4 -10
  297. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  298. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  299. package/src/sap/ui/test/generic/TestBase.js +1 -1
  300. package/src/sap/ui/test/gherkin/dataTableUtils.js +2 -2
  301. package/src/sap/ui/thirdparty/caja-html-sanitizer.js +8 -2
  302. package/src/sap/ui/util/Storage.js +1 -1
  303. package/src/sap/ui/util/isCrossOriginURL.js +1 -1
  304. package/src/ui5loader.js +1 -1
@@ -204,7 +204,7 @@ sap.ui.define([
204
204
  * @hideconstructor
205
205
  * @public
206
206
  * @since 1.37.0
207
- * @version 1.140.0
207
+ * @version 1.141.1
208
208
  */
209
209
  ODataMetaModel = MetaModel.extend("sap.ui.model.odata.v4.ODataMetaModel", {
210
210
  constructor : constructor
@@ -373,7 +373,8 @@ sap.ui.define([
373
373
 
374
374
  /**
375
375
  * Returns the contexts that result from iterating over the binding's path/context.
376
- * @returns {sap.ui.base.SyncPromise} A promise that is resolved with an array of contexts
376
+ * @returns {sap.ui.base.SyncPromise<sap.ui.model.odata.v4.Context[]>}
377
+ * A promise that is resolved with an array of contexts
377
378
  *
378
379
  * @private
379
380
  */
@@ -786,7 +787,7 @@ sap.ui.define([
786
787
  * A namespace, for example "foo.bar.", of a schema
787
788
  * @param {function} fnLog
788
789
  * The log function
789
- * @returns {object|sap.ui.base.SyncPromise|undefined}
790
+ * @returns {object|sap.ui.base.SyncPromise<void>|undefined}
790
791
  * The schema, or a promise which is resolved without details or rejected with an error, or
791
792
  * <code>undefined</code>.
792
793
  * @throws {Error}
@@ -1085,7 +1086,7 @@ sap.ui.define([
1085
1086
  * @param {sap.ui.model.odata.v4.Context} oContext
1086
1087
  * OData V4 context object for which the canonical path is requested; it must point to an
1087
1088
  * entity
1088
- * @returns {sap.ui.base.SyncPromise}
1089
+ * @returns {sap.ui.base.SyncPromise<string>}
1089
1090
  * A promise which is resolved with the canonical path (for example "/EMPLOYEES('1')") in
1090
1091
  * case of success; it is rejected if the requested metadata cannot be loaded, if the context
1091
1092
  * path does not point to an entity, if the entity is transient, or if required key properties
@@ -1109,7 +1110,7 @@ sap.ui.define([
1109
1110
  /**
1110
1111
  * Requests the metadata.
1111
1112
  *
1112
- * @returns {sap.ui.base.SyncPromise}
1113
+ * @returns {sap.ui.base.SyncPromise<object>}
1113
1114
  * A promise which is resolved with the requested metadata as soon as it is available
1114
1115
  *
1115
1116
  * @private
@@ -1130,7 +1131,7 @@ sap.ui.define([
1130
1131
  * Whether to just read the $metadata document and annotations, but not yet convert them from
1131
1132
  * XML to JSON; this is useful at most once in an early call that precedes all other normal
1132
1133
  * calls and ignored after the first call without this.
1133
- * @returns {sap.ui.base.SyncPromise|null}
1134
+ * @returns {sap.ui.base.SyncPromise<object>|null}
1134
1135
  * A promise which is resolved with the $metadata "JSON" object as soon as the entity
1135
1136
  * container is fully available, or rejected with an error. In case of
1136
1137
  * <code>bPrefetch</code> in an early call, <code>null</code> is returned.
@@ -1183,7 +1184,7 @@ sap.ui.define([
1183
1184
  * (since 1.57.0)
1184
1185
  * @param {object} [mParameters.scope]
1185
1186
  * Optional scope for lookup of aliases for computed annotations (since 1.43.0)
1186
- * @returns {sap.ui.base.SyncPromise}
1187
+ * @returns {sap.ui.base.SyncPromise<object>}
1187
1188
  * A promise which is resolved with the requested metadata object as soon as it is available;
1188
1189
  * it is rejected if the requested metadata cannot be loaded
1189
1190
  *
@@ -1750,16 +1751,15 @@ sap.ui.define([
1750
1751
  * scope (unless inside "annotations [...] targeting an entity set or a singleton") and
1751
1752
  * changing <code>vResult</code>.
1752
1753
  *
1753
- * @param {string} sRelativePath
1754
- * Some relative path (semantically, it is absolute as we start at the global scope,
1755
- * but it does not begin with a slash!)
1754
+ * @param {string} sSomePath
1755
+ * Some absolute or relative path
1756
1756
  * @param {string[]} [vNewLocation]
1757
1757
  * List of segments up to the point where the relative path has been found (in case
1758
1758
  * of indirection)
1759
1759
  * @returns {boolean}
1760
1760
  * Whether to continue after all steps
1761
1761
  */
1762
- function steps(sRelativePath, vNewLocation) {
1762
+ function steps(sSomePath, vNewLocation) {
1763
1763
  var bContinue;
1764
1764
 
1765
1765
  if (vLocation) {
@@ -1770,10 +1770,13 @@ sap.ui.define([
1770
1770
  bInsideAnnotation = false;
1771
1771
  bODataMode = true;
1772
1772
  vResult = mScope;
1773
- if (oEntitySetOrSingleton) {
1773
+ if (sSomePath[0] === "/") {
1774
+ oEntitySetOrSingleton = undefined;
1775
+ sSomePath = sSomePath.slice(1);
1776
+ } else if (oEntitySetOrSingleton) {
1774
1777
  // "14.5.12 Expression edm:Path" within an annotation targeting an entity set or
1775
1778
  // a singleton
1776
- if (!sRelativePath) { // "an empty path resolves to the entity set or singleton"
1779
+ if (!sSomePath) { // "an empty path resolves to the entity set or singleton"
1777
1780
  vResult = oEntitySetOrSingleton;
1778
1781
  oEntitySetOrSingleton = vLocation = undefined;
1779
1782
  return true;
@@ -1782,13 +1785,13 @@ sap.ui.define([
1782
1785
  sSchemaChildName = oEntitySetOrSingleton.$Type;
1783
1786
  oEntitySetOrSingleton = oSchemaChild = undefined;
1784
1787
  }
1785
- bContinue = sRelativePath.split("/").every(step);
1788
+ bContinue = sSomePath.split("/").every(step);
1786
1789
 
1787
1790
  vLocation = undefined;
1788
1791
  return bContinue;
1789
1792
  }
1790
1793
 
1791
- if (!steps(sResolvedPath.slice(1)) && SyncPromise.isThenable(vResult)) {
1794
+ if (!steps(sResolvedPath) && SyncPromise.isThenable(vResult)) {
1792
1795
  // try again after #_getOrFetchSchema's promise has resolved,
1793
1796
  // but avoid endless loop for computed annotations returning a promise!
1794
1797
  vResult = vResult.then(function () {
@@ -1810,7 +1813,7 @@ sap.ui.define([
1810
1813
  * Type-specific format options, since 1.81.0. The boolean format option
1811
1814
  * "parseKeepsEmptyString" applies to {@link sap.ui.model.odata.type.String} only and is
1812
1815
  * ignored for all other types. All other format options are passed "as is".
1813
- * @returns {sap.ui.base.SyncPromise}
1816
+ * @returns {sap.ui.base.SyncPromise<sap.ui.model.odata.type.ODataType>}
1814
1817
  * A promise that gets resolved with the corresponding UI5 type from
1815
1818
  * {@link sap.ui.model.odata.type}; if no specific type can be determined, a warning is logged
1816
1819
  * and {@link sap.ui.model.odata.type.Raw} is used
@@ -1900,7 +1903,7 @@ sap.ui.define([
1900
1903
  * Whether no edit URL is required; must be <code>undefined</code> from APIs for canonical
1901
1904
  * paths (based on {@link #fetchCanonicalPath}). Since 1.133.0, when a boolean value is given,
1902
1905
  * the edit URL is allowed to be adjusted for upsert use cases.
1903
- * @returns {sap.ui.base.SyncPromise}
1906
+ * @returns {sap.ui.base.SyncPromise<object>}
1904
1907
  * A promise that gets resolved with an object having the following properties:
1905
1908
  * <ul>
1906
1909
  * <li> <code>editUrl</code>: The edit URL or undefined if the entity is transient
@@ -2099,7 +2102,7 @@ sap.ui.define([
2099
2102
  * @param {object[]} [aOverloads]
2100
2103
  * The list of operation overloads in case of an operation parameter, must contain exactly one
2101
2104
  * entry (which means that the parameter's binding path exactly matches one overload)
2102
- * @returns {sap.ui.base.SyncPromise}
2105
+ * @returns {sap.ui.base.SyncPromise<object>}
2103
2106
  * A promise that gets resolved with a map containing all "ValueListMapping" annotations in
2104
2107
  * the metadata of the given model by qualifier.
2105
2108
  *
@@ -2219,7 +2222,7 @@ sap.ui.define([
2219
2222
  *
2220
2223
  * @param {string} sPropertyPath
2221
2224
  * An absolute path to an OData property within the OData data model
2222
- * @returns {sap.ui.base.SyncPromise}
2225
+ * @returns {sap.ui.base.SyncPromise<sap.ui.model.odata.v4.ValueListType>}
2223
2226
  * A promise that is resolved with the type of the value list. It is rejected if the property
2224
2227
  * cannot be found in the metadata.
2225
2228
  *
@@ -3125,10 +3128,10 @@ sap.ui.define([
3125
3128
  * </ul>
3126
3129
  * The path must not continue after "@sapui.name".
3127
3130
  *
3128
- * If the current object is a string value, that string value is treated as a relative path and
3129
- * followed step-by-step before the next segment is processed. Except for this, a path must
3130
- * not continue if it comes across a non-object value. Such a string value can be a qualified
3131
- * name (example path "/$EntityContainer/..."), a simple identifier (example path
3131
+ * If the current object is a string value, that string value is treated as an absolute or
3132
+ * relative path and followed step-by-step before the next segment is processed. Except for
3133
+ * this, a path must not continue if it comes across a non-object value. Such a string value can
3134
+ * be a qualified name (example path "/$EntityContainer/..."), a simple identifier (example path
3132
3135
  * "/TEAMS/$NavigationPropertyBinding/TEAM_2_EMPLOYEES/...") including the special name
3133
3136
  * "$ReturnType" (since 1.71.0), or even a path according to "14.5.12 Expression edm:Path" etc.
3134
3137
  * (example path "/TEAMS/@com.sap.vocabularies.UI.v1.LineItem/0/Value/$Path/...".
@@ -3306,7 +3309,7 @@ sap.ui.define([
3306
3309
  * Scope for lookup of aliases for computed annotations (since 1.43.0) as a map from alias to
3307
3310
  * a module (like <code>{AH : AnnotationHelper}</code>) or function (like
3308
3311
  * <code>{format : AnnotationHelper.format}</code>); the alias must not contain a dot.
3309
- * Since 1.120.3 looking up a computed annotation via its global name is <b>deprecated</b>;
3312
+ * Since 1.120.3, looking up a computed annotation via its global name is <b>deprecated</b>;
3310
3313
  * always use this scope instead.
3311
3314
  * @returns {Promise<any>}
3312
3315
  * A promise which is resolved with the requested metadata value as soon as it is available;
@@ -3387,12 +3390,17 @@ sap.ui.define([
3387
3390
  /**
3388
3391
  * Requests the resulting value of the given annotation that contains dynamic expressions. If
3389
3392
  * <code>sMetaPath</code> contains one navigation property more than
3390
- * <code>oContext.getPath()</code>, then that navigation property's "Partner" (if any) is used
3391
- * as a prefix to be ignored in a path expression. This is useful in case of multi input where
3392
- * <code>oContext</code> refers to an entity with a collection-valued navigation property
3393
- * (being edited) and the annotation (ValueListRelevantQualifiers) refers to a structural
3394
- * property of the target type and thus needs to refer <b>back</b> in order to evaluate the
3395
- * entity's current state.
3393
+ * <code>oContext.getPath()</code>, then two cases are handled specially:
3394
+ * <ul>
3395
+ * <li> If that navigation property is single-valued, then it is assumed to be part of the
3396
+ * property binding and is thus *added* as a prefix for path expressions;
3397
+ * <li> otherwise that navigation property's "Partner" (if any) is used as a prefix to be
3398
+ * *ignored* in a path expression. This is useful in case of multi input where
3399
+ * <code>oContext</code> refers to an entity with a collection-valued navigation property
3400
+ * (being edited) and the annotation (ValueListRelevantQualifiers) refers to a structural
3401
+ * property of the target type and thus needs to refer <b>back</b> in order to evaluate the
3402
+ * entity's current state.
3403
+ * </ul>
3396
3404
  *
3397
3405
  * @param {object} vRawValue
3398
3406
  * The raw value of an annotation
@@ -3407,14 +3415,18 @@ sap.ui.define([
3407
3415
  */
3408
3416
  ODataMetaModel.prototype.requestValue4Annotation = function (vRawValue, sMetaPath, oContext) {
3409
3417
  let oOverload;
3418
+ let sPrefix;
3410
3419
  const sContextMetaPath = _Helper.getMetaPath(oContext.getPath());
3411
3420
  const iIndexOfNextSlash = sMetaPath.indexOf("/", sContextMetaPath.length + 1);
3412
3421
  if (iIndexOfNextSlash > 0) { // there's at least one segment more
3413
- const sPartner = this.getObject(sMetaPath.slice(0, iIndexOfNextSlash) + "/$Partner");
3414
- if (sPartner) { // looks like a NavigationProperty with a "Partner"
3422
+ const oNavigationProperty = this.getObject(sMetaPath.slice(0, iIndexOfNextSlash));
3423
+ if (!oNavigationProperty.$isCollection) {
3424
+ // Note: include trailing, but not leading slash
3425
+ sPrefix = sMetaPath.slice(sContextMetaPath.length + 1, iIndexOfNextSlash + 1);
3426
+ } else if (oNavigationProperty.$Partner) {
3415
3427
  oOverload = { // fake overload to determine ignoreAsPrefix
3416
3428
  $IsBound : true,
3417
- $Parameter : [{$Name : sPartner}]
3429
+ $Parameter : [{$Name : oNavigationProperty.$Partner}]
3418
3430
  };
3419
3431
  }
3420
3432
  }
@@ -3422,7 +3434,8 @@ sap.ui.define([
3422
3434
  const oAny = new Any({
3423
3435
  any : AnnotationHelper.value(vRawValue, {
3424
3436
  context : this.createBindingContext(sMetaPath),
3425
- overload : oOverload
3437
+ overload : oOverload,
3438
+ prefix : sPrefix
3426
3439
  }),
3427
3440
  bindingContexts : oContext,
3428
3441
  models : oContext.getModel()
@@ -59,7 +59,9 @@ sap.ui.define([
59
59
  */
60
60
  const bFinal = false;
61
61
 
62
- var sClassName = "sap.ui.model.odata.v4.ODataModel",
62
+ var a401DenyList = ["apply", "compute", "count", "expand", "filter", "format", "id", "index",
63
+ "levels", "orderby", "schemaversion", "search", "select", "skip", "top"],
64
+ sClassName = "sap.ui.model.odata.v4.ODataModel",
63
65
  // system query options allowed within a $expand query option
64
66
  aExpandQueryOptions = ["$count", "$expand", "$filter", "$levels", "$orderby", "$search",
65
67
  "$select"],
@@ -240,7 +242,7 @@ sap.ui.define([
240
242
  * @extends sap.ui.model.Model
241
243
  * @public
242
244
  * @since 1.37.0
243
- * @version 1.140.0
245
+ * @version 1.141.1
244
246
  */
245
247
  ODataModel = Model.extend("sap.ui.model.odata.v4.ODataModel",
246
248
  /** @lends sap.ui.model.odata.v4.ODataModel.prototype */{
@@ -455,7 +457,7 @@ sap.ui.define([
455
457
  * The group ID
456
458
  * @param {boolean} [bCatch]
457
459
  * Whether the returned promise always resolves and never rejects
458
- * @returns {sap.ui.base.SyncPromise}
460
+ * @returns {sap.ui.base.SyncPromise<void>}
459
461
  * A promise on the outcome of the HTTP request resolving with <code>undefined</code>; it is
460
462
  * rejected with an error if the batch request itself fails. Use <code>bCatch</code> to catch
461
463
  * that error and make the promise resolve with <code>undefined</code> instead.
@@ -1240,6 +1242,12 @@ sap.ui.define([
1240
1242
 
1241
1243
  if (mParameters) {
1242
1244
  for (sParameterName in mParameters) {
1245
+ if (a401DenyList.includes(sParameterName.toLowerCase())) {
1246
+ Log.warning("[FUTURE FATAL] Custom query option " + sParameterName
1247
+ + " will not be supported with OData 4.01, see"
1248
+ + " https://sdk.openui5.org/topic/cda632b01c1e4a988ccecab759d19380",
1249
+ undefined, sClassName);
1250
+ }
1243
1251
  if (sParameterName.startsWith("$$")) { // binding-specific parameter
1244
1252
  delete mTransformedOptions[sParameterName];
1245
1253
  } else if (sParameterName[0] === "@") { // OData parameter alias
@@ -1921,7 +1929,7 @@ sap.ui.define([
1921
1929
  * Returns a context with the given path belonging to a matching list binding that has been
1922
1930
  * marked with <code>$$getKeepAliveContext</code> (see {@link #bindList}). If such a matching
1923
1931
  * binding can be found, a context is returned and kept alive (see
1924
- * {@link sap.ui.model.odata.v4.ODataListBinding#getKeepAliveContext}). Since 1.100.0 a
1932
+ * {@link sap.ui.model.odata.v4.ODataListBinding#getKeepAliveContext}). Since 1.100.0, a
1925
1933
  * temporary binding is used if no such binding could be found. If such a binding is created or
1926
1934
  * resolved later, the context and its data are transferred to it, and the temporary binding is
1927
1935
  * destroyed again.
@@ -2248,8 +2256,7 @@ sap.ui.define([
2248
2256
  * @private
2249
2257
  */
2250
2258
  ODataModel.prototype.initializeSecurityToken = function () {
2251
- // a failure is not logged, only the failed request for the service document appears
2252
- this.oRequestor.refreshSecurityToken().catch(function () {});
2259
+ this.oRequestor.refreshSecurityToken(); // never rejects
2253
2260
  };
2254
2261
 
2255
2262
  /**
@@ -2740,7 +2747,7 @@ sap.ui.define([
2740
2747
  * @param {string[]} aAbsolutePaths
2741
2748
  * The absolute paths to request side effects for; each path must not start with the fully
2742
2749
  * qualified container name.
2743
- * @returns {sap.ui.base.SyncPromise|undefined}
2750
+ * @returns {sap.ui.base.SyncPromise<void>|undefined}
2744
2751
  * A promise which is resolved without a defined result, or rejected with an error if loading
2745
2752
  * of side effects fails, or <code>undefined</code> if there is nothing to do
2746
2753
  *
@@ -2867,25 +2874,34 @@ sap.ui.define([
2867
2874
  };
2868
2875
 
2869
2876
  /**
2870
- * Sets the "odata.continue-on-error" preference once for the <b>current</b> batch request
2871
- * associated with the given group ID. This method can be called early on, when that batch queue
2872
- * is still empty, or even synchronously after {@link #submitBatch} - just as long as the $batch
2873
- * request is not already being sent to the server. It needs to be called again for future
2874
- * batch requests with the same group ID.
2877
+ * Sets the "odata.continue-on-error" preference for the <b>current</b> batch request associated
2878
+ * with the given group ID. This method can be called early on, when the batch queue is still
2879
+ * empty, or even synchronously after {@link #submitBatch} - just as long as the $batch request
2880
+ * is not already being sent to the server. It needs to be called again for future batch
2881
+ * requests with the same group ID. It is safe to call it multiple times for the same batch
2882
+ * request.
2883
+ *
2884
+ * <b>Caution:</b> Make sure that no user input is lost due to a side-effects GET being applied
2885
+ * even after a failed PATCH. It's safe to use this method if, for example, only actions are
2886
+ * invoked or when {@link sap.ui.model.odata.v4.Context#setProperty} is used without
2887
+ * <code>bRetry</code> for mass updates.
2875
2888
  *
2876
2889
  * @param {string} sGroupId
2877
- * A valid group ID as specified in {@link sap.ui.model.odata.v4.ODataModel}. Note that
2878
- * '$auto' should be avoided to control exactly which requests are affected by this
2879
- * preference. Using a {@link module:sap/base/util/uid UID} may be one way to achieve this,
2880
- * but take care to replace dashes with underscores.
2881
- * @throws {Error}
2882
- * If the given group ID is not a valid group ID or has
2883
- * {@link sap.ui.model.odata.v4.SubmitMode.Direct} or if multiple requests that apply the
2884
- * preference "handling=strict" already exist in the same change set of the batch request
2890
+ * A valid group ID as specified in {@link sap.ui.model.odata.v4.ODataModel}. Avoid '$auto' to
2891
+ * control which requests are affected by this preference. Using a
2892
+ * {@link module:sap/base/util/uid UID} may be one way to achieve this, but take care to
2893
+ * replace hyphens with underscores:
2894
+ * <code>"$auto." + uid().replaceAll("-", "_")</code>
2895
+ * @throws {Error} If
2896
+ * <ul>
2897
+ * <li> the given group ID is not a valid group ID,
2898
+ * <li> the given group ID has {@link sap.ui.model.odata.v4.SubmitMode.Direct},
2899
+ * <li> multiple requests that apply the preference "handling=strict" already exist in the
2900
+ * same change set of the batch request.
2901
+ * </ul>
2885
2902
  *
2886
- * @private
2887
- * @since 1.134.0
2888
- * @ui5-restricted sap.fe
2903
+ * @public
2904
+ * @since 1.141.0
2889
2905
  */
2890
2906
  ODataModel.prototype.setContinueOnError = function (sGroupId) {
2891
2907
  this.checkBatchGroupId(sGroupId);
@@ -3079,7 +3095,7 @@ sap.ui.define([
3079
3095
  *
3080
3096
  * @param {sap.ui.model.odata.v4.ODataBinding} oBinding
3081
3097
  * The binding that possibly needs the cache of a temporary keep-alive binding
3082
- * @returns {sap.ui.base.SyncPromise}
3098
+ * @returns {sap.ui.base.SyncPromise<void>}
3083
3099
  * A promise which is resolved without a defined result when that cache is available
3084
3100
  *
3085
3101
  * @private
@@ -430,7 +430,7 @@ sap.ui.define([
430
430
  * Checks dependent bindings for updates or refreshes the binding if the resource path of its
431
431
  * parent context changed.
432
432
  *
433
- * @returns {sap.ui.base.SyncPromise}
433
+ * @returns {sap.ui.base.SyncPromise<void>}
434
434
  * A promise which is resolved without a defined result when the check is finished, or
435
435
  * rejected in case of an error
436
436
  * @throws {Error}
@@ -472,7 +472,7 @@ sap.ui.define([
472
472
  *
473
473
  * @param {sap.ui.model.odata.v4.lib._GroupLock} oUpdateGroupLock
474
474
  * The group ID to be used for the POST request
475
- * @param {string|sap.ui.base.SyncPromise} vCreatePath
475
+ * @param {string|sap.ui.base.SyncPromise<string>} vCreatePath
476
476
  * The path for the POST request or a SyncPromise that resolves with that path
477
477
  * @param {string} sCollectionPath
478
478
  * The absolute path to the collection in the cache where to create the entity
@@ -488,7 +488,7 @@ sap.ui.define([
488
488
  * fails
489
489
  * @param {function} fnSubmitCallback
490
490
  * A function which is called just before a POST request for the create is sent
491
- * @returns {sap.ui.base.SyncPromise}
491
+ * @returns {sap.ui.base.SyncPromise<object>}
492
492
  * A promise which is resolved with the created entity when the POST request has been
493
493
  * successfully sent and the entity has been marked as non-transient
494
494
  *
@@ -614,7 +614,7 @@ sap.ui.define([
614
614
  * @param {function} fnUndelete
615
615
  * A function to undelete the context (and poss. the context the deletion was delegated to)
616
616
  * when the deletion failed or has been canceled
617
- * @returns {sap.ui.base.SyncPromise}
617
+ * @returns {sap.ui.base.SyncPromise<void>}
618
618
  * A promise which is resolved without a result in case of success, or rejected with an
619
619
  * instance of <code>Error</code> in case of failure.
620
620
  * @throws {Error}
@@ -645,7 +645,7 @@ sap.ui.define([
645
645
  * A function which is called immediately when an entity has been deleted from the cache, or
646
646
  * when it was re-inserted; the index of the entity and an offset (-1 for deletion, 1 for
647
647
  * re-insertion) are passed as parameter
648
- * @returns {sap.ui.base.SyncPromise}
648
+ * @returns {sap.ui.base.SyncPromise<void>}
649
649
  * A promise which is resolved without a result in case of success, or rejected with an
650
650
  * instance of <code>Error</code> in case of failure; returns <code>undefined</code> if the
651
651
  * cache promise for this binding is not yet fulfilled
@@ -717,7 +717,7 @@ sap.ui.define([
717
717
  * The new value which must be primitive
718
718
  * @param {sap.ui.model.odata.v4.lib._GroupLock} [oGroupLock]
719
719
  * A lock for the group ID to be used for the PATCH request; without a lock, no PATCH is sent
720
- * @returns {sap.ui.base.SyncPromise|undefined}
720
+ * @returns {sap.ui.base.SyncPromise<void>|undefined}
721
721
  * <code>undefined</code> for the general case which is handled generically by the caller
722
722
  * {@link sap.ui.model.odata.v4.Context#doSetProperty} or a <code>SyncPromise</code> for the
723
723
  * exceptional case
@@ -756,11 +756,11 @@ sap.ui.define([
756
756
  * <code>sChildPath</code> accordingly.
757
757
  * @param {string} sChildPath
758
758
  * The child binding's binding path relative to <code>oContext</code>
759
- * @param {object|sap.ui.base.SyncPromise} [vChildQueryOptions={}]
759
+ * @param {object|sap.ui.base.SyncPromise<object>} [vChildQueryOptions={}]
760
760
  * The child binding's (aggregated) query options (if any) or a promise resolving with them
761
761
  * @param {boolean} [bIsProperty]
762
762
  * Whether the child is a property binding
763
- * @returns {sap.ui.base.SyncPromise}
763
+ * @returns {sap.ui.base.SyncPromise<string|undefined>}
764
764
  * A promise resolved with the reduced path for the child binding if the child binding can use
765
765
  * this binding's or an ancestor binding's cache; resolved with <code>undefined</code>
766
766
  * otherwise.
@@ -789,9 +789,10 @@ sap.ui.define([
789
789
  /*
790
790
  * Fetches the property that is reached by the calculated meta path and (if necessary) its
791
791
  * type.
792
- * @returns {sap.ui.base.SyncPromise} A promise that is either resolved with the property
793
- * or, in case of an action advertisement with the entity. If no property can be reached
794
- * by the calculated meta path the promise is resolved with undefined.
792
+ * @returns {sap.ui.base.SyncPromise<object|undefined>}
793
+ * A promise that is either resolved with the property or, in case of an action
794
+ * advertisement with the entity. If no property can be reached by the calculated meta
795
+ * path the promise is resolved with undefined.
795
796
  */
796
797
  function fetchPropertyAndType() {
797
798
  if (bIsAdvertisement) {
@@ -891,7 +892,10 @@ sap.ui.define([
891
892
  }
892
893
 
893
894
  if (oProperty?.["@$ui5.$count"]
894
- && oContext !== oContext.getBinding().getHeaderContext?.()) {
895
+ && oContext !== oContext.getBinding().getHeaderContext?.()
896
+ // avoid new $count handling in case of "manual" $expand
897
+ // Note: sChildPath.slice(0, -7) is the navigation property name
898
+ && !mLocalQueryOptions.$expand?.[sChildPath.slice(0, -7)]) {
895
899
  mCountQueryOptions = {
896
900
  $expand : {
897
901
  [sChildPath.slice(0, -7)] : {$count : true, $top : 0}
@@ -1318,7 +1322,7 @@ sap.ui.define([
1318
1322
  /**
1319
1323
  * Recursively refreshes all dependent list bindings that have no own cache.
1320
1324
  *
1321
- * @returns {sap.ui.base.SyncPromise}
1325
+ * @returns {sap.ui.base.SyncPromise<void>}
1322
1326
  * A promise resolving when all dependent list bindings without own cache are refreshed; it is
1323
1327
  * rejected when the refresh fails; the promise is resolved immediately on a suspended binding
1324
1328
  * @throws {Error}
@@ -1363,7 +1367,7 @@ sap.ui.define([
1363
1367
  * @param {sap.ui.model.odata.v4.Context} [oContext]
1364
1368
  * The context for which to request side effects; if this parameter is missing or if it is the
1365
1369
  * header context of a list binding, the whole binding is affected
1366
- * @returns {sap.ui.base.SyncPromise}
1370
+ * @returns {sap.ui.base.SyncPromise<void>}
1367
1371
  * A promise which is resolved without a defined result, or rejected with an error if loading
1368
1372
  * of side effects fails
1369
1373
  * @throws {Error}
@@ -1509,7 +1513,7 @@ sap.ui.define([
1509
1513
  * was not supported and threw an error. Since 1.97.0, pending changes are ignored if they
1510
1514
  * relate to a {@link sap.ui.model.odata.v4.Context#isKeepAlive kept-alive} context of this
1511
1515
  * binding. Since 1.98.0, {@link sap.ui.model.odata.v4.Context#isTransient transient} contexts
1512
- * of a {@link #getRootBinding root binding} do not count as pending changes. Since 1.108.0
1516
+ * of a {@link #getRootBinding root binding} do not count as pending changes. Since 1.108.0,
1513
1517
  * {@link sap.ui.model.odata.v4.Context#delete deleted} contexts do not count as pending
1514
1518
  * changes.
1515
1519
  *
@@ -42,7 +42,7 @@ sap.ui.define([
42
42
  * @mixes sap.ui.model.odata.v4.ODataBinding
43
43
  * @public
44
44
  * @since 1.37.0
45
- * @version 1.140.0
45
+ * @version 1.141.1
46
46
  * @borrows sap.ui.model.odata.v4.ODataBinding#getGroupId as #getGroupId
47
47
  * @borrows sap.ui.model.odata.v4.ODataBinding#getRootBinding as #getRootBinding
48
48
  * @borrows sap.ui.model.odata.v4.ODataBinding#getUpdateGroupId as #getUpdateGroupId
@@ -245,7 +245,7 @@ sap.ui.define([
245
245
  * bubbled up to the model
246
246
  * @param {any} [vValue]
247
247
  * The new value obtained from the cache, see {@link #onChange}
248
- * @returns {sap.ui.base.SyncPromise}
248
+ * @returns {sap.ui.base.SyncPromise<void>}
249
249
  * A promise which is resolved without a defined result when the check is finished, or
250
250
  * rejected in case of an error. If the cache is no longer the active cache when the response
251
251
  * arrives, that response is ignored almost silently (that is, with a canceled error) and the
@@ -745,7 +745,7 @@ sap.ui.define([
745
745
  * be updated on the server, an error is logged to the console and added to the message manager
746
746
  * as a technical message. Unless preconditions fail synchronously, a
747
747
  * {@link sap.ui.model.odata.v4.ODataModel#event:propertyChange 'propertyChange'} event is
748
- * fired and provides a promise on the outcome of the asynchronous operation. Since 1.122.0
748
+ * fired and provides a promise on the outcome of the asynchronous operation. Since 1.122.0,
749
749
  * this method allows updates to the client-side annotation "@$ui5.context.isSelected". Note:
750
750
  * Changing the value of a client-side annotation never initiates a PATCH request, no matter
751
751
  * which <code>sGroupId</code> is given. Thus, it cannot be reverted via {@link #resetChanges}.
@@ -122,7 +122,7 @@ sap.ui.define([
122
122
  *
123
123
  * @param {object} oPathValue
124
124
  * @param {string} sMessage
125
- * @returns {sap.ui.base.SyncPromise}
125
+ * @returns {sap.ui.base.SyncPromise<void>}
126
126
  */
127
127
  function asyncError(oPathValue, sMessage) {
128
128
  return SyncPromise.resolve().then(function () {
@@ -171,7 +171,7 @@ sap.ui.define([
171
171
  * path and value information pointing to the apply (see Expression object)
172
172
  * @param {object} oParameters
173
173
  * path and value information pointing to the parameter array (see Expression object)
174
- * @returns {sap.ui.base.SyncPromise}
174
+ * @returns {sap.ui.base.SyncPromise<object>}
175
175
  * a sync promise which resolves with the result object or is rejected with an error
176
176
  */
177
177
  apply : function (oPathValue, oParameters) {
@@ -194,7 +194,7 @@ sap.ui.define([
194
194
  *
195
195
  * @param {object} oPathValue
196
196
  * path and value information pointing to the array (see Expression object)
197
- * @returns {sap.ui.base.SyncPromise}
197
+ * @returns {sap.ui.base.SyncPromise<object>}
198
198
  * a sync promise which resolves with the result object or is rejected with an error
199
199
  */
200
200
  collection : function (oPathValue) {
@@ -225,7 +225,7 @@ sap.ui.define([
225
225
  *
226
226
  * @param {object} oPathValue
227
227
  * path and value information pointing to the parameter array (see Expression object)
228
- * @returns {sap.ui.base.SyncPromise}
228
+ * @returns {sap.ui.base.SyncPromise<object>}
229
229
  * a sync promise which resolves with the result object or is rejected with an error
230
230
  */
231
231
  concat : function (oPathValue) {
@@ -280,7 +280,7 @@ sap.ui.define([
280
280
  * @param {boolean} [bInCollection]
281
281
  * Whether "14.5.6 Expression edm:If" appears as a direct child of
282
282
  * "14.5.5 Expression edm:Collection" and thus needs no third child element ("else")
283
- * @returns {sap.ui.base.SyncPromise}
283
+ * @returns {sap.ui.base.SyncPromise<object>}
284
284
  * a sync promise which resolves with the result object or is rejected with an error
285
285
  */
286
286
  conditional : function (oPathValue, bInCollection) {
@@ -379,7 +379,7 @@ sap.ui.define([
379
379
  * @param {boolean} [bInCollection]
380
380
  * Whether the current expression appears as a direct child of
381
381
  * "14.5.5 Expression edm:Collection"
382
- * @returns {sap.ui.base.SyncPromise}
382
+ * @returns {sap.ui.base.SyncPromise<object>}
383
383
  * a sync promise which resolves with the result object or is rejected with an error
384
384
  */
385
385
  expression : function (oPathValue, bInCollection) {
@@ -491,7 +491,7 @@ sap.ui.define([
491
491
  * the type of the property referenced by <code>oPathValue.path</code>
492
492
  * @param {object} mConstraints
493
493
  * the type constraints for the property referenced by <code>oPathValue.path</code>
494
- * @returns {sap.ui.base.SyncPromise|undefined}
494
+ * @returns {sap.ui.base.SyncPromise<object>|undefined}
495
495
  * a sync promise which resolves with a result object for the currency or unit, or is
496
496
  * rejected with an error; <code>undefined</code> if there are no unit and currency
497
497
  * annotations for the property referenced by <code>oPathValue.path</code>
@@ -555,7 +555,7 @@ sap.ui.define([
555
555
  * use this value instead of <code>oPathValue.value</code>!
556
556
  * @param {object} mConstraints
557
557
  * the type constraints for the property referenced by <code>oPathValue.path</code>
558
- * @returns {sap.ui.base.SyncPromise|undefined}
558
+ * @returns {sap.ui.base.SyncPromise<object>|undefined}
559
559
  * a sync promise which resolves with a result object for the date/time with timezone, or
560
560
  * is rejected with an error; <code>undefined</code> if there is no timezone annotation
561
561
  * for the property referenced by <code>oPathValue.path</code>
@@ -593,7 +593,7 @@ sap.ui.define([
593
593
  *
594
594
  * @param {object} oPathValue
595
595
  * path and value information pointing to the parameter array (see Expression object)
596
- * @returns {sap.ui.base.SyncPromise}
596
+ * @returns {sap.ui.base.SyncPromise<object>}
597
597
  * a sync promise which resolves with the result object or is rejected with an error
598
598
  */
599
599
  fillUriTemplate : function (oPathValue) {
@@ -703,7 +703,7 @@ sap.ui.define([
703
703
  *
704
704
  * @param {object} oPathValue
705
705
  * path and value information pointing to the parameter (see Expression object)
706
- * @returns {sap.ui.base.SyncPromise}
706
+ * @returns {sap.ui.base.SyncPromise<object>}
707
707
  * a sync promise which resolves with the result object or is rejected with an error
708
708
  */
709
709
  not : function (oPathValue) {
@@ -728,7 +728,7 @@ sap.ui.define([
728
728
  * path and value information pointing to the parameter array (see Expression object)
729
729
  * @param {string} sType
730
730
  * the operator as text (like "And" or "Or")
731
- * @returns {sap.ui.base.SyncPromise}
731
+ * @returns {sap.ui.base.SyncPromise<object>}
732
732
  * a sync promise which resolves with the result object or is rejected with an error
733
733
  */
734
734
  operator : function (oPathValue, sType) {
@@ -796,7 +796,7 @@ sap.ui.define([
796
796
  * the parameter index
797
797
  * @param {string} [sEdmType]
798
798
  * the expected EDM type or <code>undefined</code> if any type is allowed
799
- * @returns {sap.ui.base.SyncPromise}
799
+ * @returns {sap.ui.base.SyncPromise<object>}
800
800
  * a sync promise which resolves with the result object or is rejected with an error
801
801
  */
802
802
  parameter : function (oPathValue, iIndex, sEdmType) {
@@ -828,7 +828,7 @@ sap.ui.define([
828
828
  *
829
829
  * @param {object} oPathValue
830
830
  * model, path and value information pointing to the path (see Expression object)
831
- * @returns {sap.ui.base.SyncPromise}
831
+ * @returns {sap.ui.base.SyncPromise<object>}
832
832
  * a sync promise which resolves with the result object or is rejected with an error
833
833
  */
834
834
  path : function (oPathValue) {
@@ -896,7 +896,7 @@ sap.ui.define([
896
896
  *
897
897
  * @param {object} oPathValue
898
898
  * path and value information pointing to the parameter array (see Expression object)
899
- * @returns {sap.ui.base.SyncPromise}
899
+ * @returns {sap.ui.base.SyncPromise<object>}
900
900
  * a sync promise which resolves with the result object or is rejected with an error
901
901
  */
902
902
  uriEncode : function (oPathValue) {