@sap/cds 8.9.4 → 9.0.3

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 (622) hide show
  1. package/CHANGELOG.md +121 -680
  2. package/LICENSE +15 -21
  3. package/README.md +1 -1
  4. package/_i18n/i18n_sl.properties +3 -3
  5. package/_i18n/messages.properties +1 -1
  6. package/app/index.js +1 -1
  7. package/bin/serve.js +17 -19
  8. package/eslint.config.mjs +7 -1
  9. package/lib/compile/etc/_localized.js +3 -24
  10. package/lib/compile/etc/yaml.js +6 -15
  11. package/lib/compile/for/odata.js +2 -2
  12. package/lib/compile/load.js +15 -4
  13. package/lib/compile/minify.js +1 -0
  14. package/lib/compile/to/edm-files.js +4 -33
  15. package/lib/compile/to/hdbtabledata.js +16 -3
  16. package/lib/compile/to/sql.js +1 -2
  17. package/lib/core/linked-csn.js +7 -8
  18. package/lib/dbs/cds-deploy.js +4 -3
  19. package/lib/env/cds-env.js +9 -9
  20. package/lib/env/cds-requires.js +23 -50
  21. package/lib/env/defaults.js +15 -44
  22. package/lib/env/schemas/cds-package.js +1 -1
  23. package/lib/i18n/index.js +1 -0
  24. package/lib/i18n/locale.js +41 -0
  25. package/lib/index.js +25 -15
  26. package/lib/log/cds-error.js +13 -3
  27. package/lib/log/cds-log.js +43 -18
  28. package/lib/log/format/aspects/als.js +2 -15
  29. package/lib/plugins.js +11 -11
  30. package/lib/ql/CREATE.js +1 -1
  31. package/lib/ql/DELETE.js +1 -1
  32. package/lib/ql/DROP.js +1 -1
  33. package/lib/ql/INSERT.js +9 -18
  34. package/lib/ql/SELECT.js +12 -19
  35. package/lib/ql/UPDATE.js +1 -1
  36. package/lib/ql/UPSERT.js +1 -0
  37. package/lib/ql/Whereable.js +7 -6
  38. package/lib/ql/cds-ql.js +0 -12
  39. package/lib/ql/cds.ql-Query.js +28 -68
  40. package/lib/ql/cds.ql-infer.js +97 -108
  41. package/lib/ql/resolve.js +1 -3
  42. package/lib/req/context.js +5 -4
  43. package/lib/req/request.js +46 -42
  44. package/lib/req/response.js +5 -9
  45. package/lib/req/spawn.js +38 -0
  46. package/lib/req/validate.js +9 -8
  47. package/lib/srv/bindings.js +2 -1
  48. package/lib/srv/cds-connect.js +5 -2
  49. package/lib/srv/cds-serve.js +0 -2
  50. package/lib/srv/cds.Service.js +146 -86
  51. package/lib/srv/middlewares/auth/ias-auth.js +99 -88
  52. package/lib/srv/middlewares/auth/jwt-auth.js +44 -57
  53. package/lib/srv/middlewares/cds-context.js +1 -1
  54. package/lib/srv/middlewares/ctx-model.js +1 -1
  55. package/lib/srv/middlewares/errors.js +34 -42
  56. package/lib/srv/protocols/hcql.js +35 -25
  57. package/lib/srv/protocols/index.js +0 -9
  58. package/lib/srv/protocols/odata-v4.js +1 -6
  59. package/lib/srv/srv-dispatch.js +29 -31
  60. package/lib/srv/srv-handlers.js +14 -46
  61. package/lib/srv/srv-methods.js +15 -37
  62. package/lib/srv/srv-tx.js +19 -25
  63. package/lib/test/cds-test.js +4 -263
  64. package/lib/utils/cds-utils.js +18 -2
  65. package/lib/utils/tar.js +6 -8
  66. package/lib/utils/unit.js +19 -0
  67. package/libx/_runtime/.eslintrc +1 -1
  68. package/libx/_runtime/cds-services/util/assert.js +2 -72
  69. package/libx/_runtime/cds.js +13 -6
  70. package/libx/_runtime/common/Service.js +33 -75
  71. package/libx/_runtime/common/aspects/any.js +0 -38
  72. package/libx/_runtime/common/constants/events.js +5 -13
  73. package/libx/_runtime/common/generic/auth/autoexpose.js +10 -24
  74. package/libx/_runtime/common/generic/auth/capabilities.js +23 -20
  75. package/libx/_runtime/common/generic/auth/expand.js +3 -3
  76. package/libx/_runtime/common/generic/auth/index.js +3 -3
  77. package/libx/_runtime/common/generic/auth/insertOnly.js +3 -3
  78. package/libx/_runtime/common/generic/auth/readOnly.js +4 -4
  79. package/libx/_runtime/common/generic/auth/requires.js +4 -4
  80. package/libx/_runtime/common/generic/auth/restrict.js +12 -29
  81. package/libx/_runtime/common/generic/auth/service.js +3 -3
  82. package/libx/_runtime/common/generic/auth/utils.js +2 -12
  83. package/libx/_runtime/common/generic/crud.js +22 -53
  84. package/libx/_runtime/common/generic/etag.js +18 -31
  85. package/libx/_runtime/common/generic/input.js +51 -123
  86. package/libx/_runtime/common/generic/paging.js +4 -4
  87. package/libx/_runtime/common/generic/sorting.js +8 -19
  88. package/libx/_runtime/common/generic/stream-only.js +26 -0
  89. package/libx/_runtime/common/generic/stream.js +16 -48
  90. package/libx/_runtime/common/generic/temporal.js +15 -7
  91. package/libx/_runtime/common/utils/binary.js +1 -26
  92. package/libx/_runtime/common/utils/compareJson.js +1 -2
  93. package/libx/_runtime/common/utils/cqn.js +15 -14
  94. package/libx/_runtime/common/utils/differ.js +121 -44
  95. package/libx/_runtime/common/utils/keys.js +4 -5
  96. package/libx/_runtime/common/utils/normalizeTimestamp.js +10 -1
  97. package/libx/_runtime/common/utils/postProcess.js +2 -2
  98. package/libx/_runtime/common/utils/propagateForeignKeys.js +21 -36
  99. package/libx/_runtime/common/utils/resolveView.js +105 -141
  100. package/libx/_runtime/common/utils/rewriteAsterisks.js +45 -12
  101. package/libx/_runtime/common/utils/streamProp.js +3 -9
  102. package/libx/_runtime/common/utils/waitingTime.js +13 -1
  103. package/libx/_runtime/fiori/lean-draft.js +174 -196
  104. package/libx/_runtime/messaging/common-utils/connections.js +1 -1
  105. package/libx/_runtime/messaging/enterprise-messaging-utils/EMManagement.js +1 -0
  106. package/libx/_runtime/messaging/enterprise-messaging-utils/registerEndpoints.js +3 -3
  107. package/libx/_runtime/messaging/enterprise-messaging.js +2 -2
  108. package/libx/_runtime/messaging/file-based.js +2 -4
  109. package/libx/_runtime/messaging/redis-messaging.js +1 -1
  110. package/libx/_runtime/messaging/service.js +5 -19
  111. package/libx/_runtime/remote/Service.js +20 -33
  112. package/libx/_runtime/remote/utils/client.js +7 -25
  113. package/libx/_runtime/remote/utils/cloudSdkProvider.js +8 -13
  114. package/libx/_runtime/remote/utils/data.js +3 -34
  115. package/libx/_runtime/types/api.js +0 -8
  116. package/libx/_runtime/ucl/Service.js +1 -9
  117. package/libx/common/utils/path.js +2 -3
  118. package/libx/common/utils/streaming.js +2 -1
  119. package/libx/http/HttpRequest.js +13 -0
  120. package/libx/{odata/middleware → http}/body-parser.js +7 -5
  121. package/libx/http/location.js +41 -0
  122. package/libx/http/put.js +36 -0
  123. package/libx/odata/ODataAdapter.js +25 -59
  124. package/libx/odata/index.js +10 -23
  125. package/libx/odata/middleware/batch.js +29 -20
  126. package/libx/odata/middleware/create.js +6 -13
  127. package/libx/odata/middleware/delete.js +0 -4
  128. package/libx/odata/middleware/error.js +83 -27
  129. package/libx/odata/middleware/metadata.js +14 -25
  130. package/libx/odata/middleware/operation.js +10 -26
  131. package/libx/odata/middleware/read.js +10 -18
  132. package/libx/odata/middleware/stream.js +14 -34
  133. package/libx/odata/middleware/update.js +17 -26
  134. package/libx/odata/parse/afterburner.js +20 -16
  135. package/libx/odata/parse/cqn2odata.js +3 -1
  136. package/libx/odata/parse/grammar.peggy +221 -114
  137. package/libx/odata/parse/parser.js +1 -1
  138. package/libx/odata/utils/index.js +10 -38
  139. package/libx/odata/utils/metadata.js +10 -8
  140. package/libx/odata/utils/normalizeTimeData.js +5 -8
  141. package/libx/odata/utils/readAfterWrite.js +1 -1
  142. package/libx/{outbox/OutboxRunner.js → queue/TaskRunner.js} +17 -22
  143. package/libx/queue/index.js +531 -0
  144. package/libx/rest/RestAdapter.js +43 -82
  145. package/libx/rest/middleware/create.js +35 -33
  146. package/libx/rest/middleware/delete.js +9 -7
  147. package/libx/rest/middleware/error.js +11 -18
  148. package/libx/rest/middleware/operation.js +44 -137
  149. package/libx/rest/middleware/parse.js +114 -130
  150. package/libx/rest/middleware/read.js +23 -21
  151. package/libx/rest/middleware/update.js +20 -32
  152. package/libx/rest/middleware/upsert.js +31 -0
  153. package/libx/rest/pre-processing.js +8 -18
  154. package/package.json +6 -7
  155. package/srv/outbox.cds +1 -0
  156. package/bin/test.js +0 -125
  157. package/lib/env/plugins.js +0 -18
  158. package/lib/req/cds-context.js +0 -52
  159. package/lib/req/locale.js +0 -35
  160. package/lib/srv/cds.ServiceClient.js +0 -96
  161. package/lib/srv/cds.ServiceProvider.js +0 -20
  162. package/lib/srv/protocols/okra.js +0 -22
  163. package/lib/test/axios.js +0 -63
  164. package/lib/test/data.js +0 -52
  165. package/lib/test/expect.js +0 -343
  166. package/lib/test/reporter.js +0 -176
  167. package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +0 -275
  168. package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +0 -217
  169. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js +0 -101
  170. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +0 -79
  171. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/debug.js +0 -6
  172. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/delete.js +0 -60
  173. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/error.js +0 -161
  174. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/language.js +0 -7
  175. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/metadata.js +0 -59
  176. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/read.js +0 -602
  177. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/request.js +0 -64
  178. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +0 -238
  179. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/ExpressionToCQN.js +0 -327
  180. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/applyToCQN.js +0 -243
  181. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/boundToCQN.js +0 -43
  182. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/createToCQN.js +0 -37
  183. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/deleteToCQN.js +0 -36
  184. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/expandToCQN.js +0 -250
  185. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/index.js +0 -81
  186. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/orderByToCQN.js +0 -51
  187. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/readToCQN.js +0 -389
  188. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/searchToCQN.js +0 -43
  189. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/selectToCQN.js +0 -35
  190. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/updateToCQN.js +0 -38
  191. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/utils.js +0 -217
  192. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/FeatureSupport.js +0 -70
  193. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/FullQualifiedName.js +0 -94
  194. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAction.js +0 -139
  195. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlActionImport.js +0 -82
  196. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAliasInfo.js +0 -44
  197. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAnnotation.js +0 -104
  198. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAnnotations.js +0 -71
  199. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlComplexType.js +0 -133
  200. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntityContainer.js +0 -142
  201. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntityContainerInfo.js +0 -37
  202. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntitySet.js +0 -107
  203. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntityType.js +0 -177
  204. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEnumMember.js +0 -61
  205. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEnumType.js +0 -105
  206. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlFunction.js +0 -149
  207. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlFunctionImport.js +0 -105
  208. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlInclude.js +0 -68
  209. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlIncludeAnnotation.js +0 -71
  210. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlJsonProvider.js +0 -1365
  211. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlNavigationProperty.js +0 -190
  212. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlNavigationPropertyBinding.js +0 -37
  213. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlOnDelete.js +0 -70
  214. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlParameter.js +0 -227
  215. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlProperty.js +0 -250
  216. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlPropertyRef.js +0 -49
  217. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlProvider.js +0 -190
  218. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlReference.js +0 -97
  219. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlReferentialConstraint.js +0 -60
  220. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlReturnType.js +0 -216
  221. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlSchema.js +0 -328
  222. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlSingleton.js +0 -84
  223. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlTerm.js +0 -320
  224. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlTypeDefinition.js +0 -193
  225. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlAnnotationExpression.js +0 -73
  226. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlAnnotationPathExpression.js +0 -33
  227. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlApplyExpression.js +0 -105
  228. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlArithmeticExpression.js +0 -72
  229. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlBinaryExpression.js +0 -110
  230. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlCastExpression.js +0 -188
  231. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlCollectionExpression.js +0 -48
  232. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlConstantExpression.js +0 -116
  233. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlIfExpression.js +0 -62
  234. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlIsOfExpression.js +0 -200
  235. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlLabeledElementExpression.js +0 -42
  236. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlLabeledElementReferenceExpression.js +0 -31
  237. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlModelElementPathExpression.js +0 -29
  238. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNavigationPropertyPathExpression.js +0 -31
  239. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNegationExpression.js +0 -27
  240. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNotExpression.js +0 -31
  241. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNullExpression.js +0 -18
  242. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlPathExpression.js +0 -32
  243. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlPropertyPathExpression.js +0 -32
  244. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlPropertyValueExpression.js +0 -55
  245. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlRecordExpression.js +0 -54
  246. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlUnknownExpression.js +0 -44
  247. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlUrlRefExpression.js +0 -31
  248. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmBindingTarget.js +0 -163
  249. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmFaceted.js +0 -136
  250. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmOperation.js +0 -205
  251. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmOperationImport.js +0 -126
  252. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmStructuredType.js +0 -275
  253. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/Edm.js +0 -775
  254. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmAction.js +0 -15
  255. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmActionImport.js +0 -39
  256. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmAnnotation.js +0 -106
  257. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmAnnotations.js +0 -57
  258. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmComplexType.js +0 -48
  259. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityContainer.js +0 -455
  260. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntitySet.js +0 -43
  261. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityType.js +0 -119
  262. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEnumMember.js +0 -69
  263. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEnumType.js +0 -117
  264. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmFunction.js +0 -39
  265. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmFunctionImport.js +0 -59
  266. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmInclude.js +0 -65
  267. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmIncludeAnnotation.js +0 -48
  268. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmKeyPropertyRef.js +0 -79
  269. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmNavigationProperty.js +0 -182
  270. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmNavigationPropertyBinding.js +0 -46
  271. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmOnDelete.js +0 -44
  272. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmParameter.js +0 -22
  273. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmPrimitiveType.js +0 -31
  274. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmPrimitiveTypeKind.js +0 -70
  275. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmProperty.js +0 -39
  276. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmProvider.js +0 -399
  277. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmReference.js +0 -88
  278. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmReferentialConstraint.js +0 -71
  279. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmReturnType.js +0 -14
  280. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmSchema.js +0 -355
  281. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmSingleton.js +0 -15
  282. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmTerm.js +0 -75
  283. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmType.js +0 -95
  284. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmTypeDefinition.js +0 -121
  285. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmTypeFactory.js +0 -28
  286. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmVocabularyTermType.js +0 -41
  287. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/KeyFactory.js +0 -67
  288. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/Target.js +0 -56
  289. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/TransientStructuredType.js +0 -244
  290. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/AnnotationExpressionFactory.js +0 -130
  291. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmAnnotationExpression.js +0 -28
  292. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmAnnotationPathExpression.js +0 -42
  293. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmApplyExpression.js +0 -85
  294. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmArithmeticExpression.js +0 -92
  295. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmBinaryExpression.js +0 -96
  296. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmCastExpression.js +0 -129
  297. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmCollectionExpression.js +0 -52
  298. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmConstantExpression.js +0 -83
  299. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmIfExpression.js +0 -103
  300. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmIsOfExpression.js +0 -125
  301. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmLabeledElementExpression.js +0 -83
  302. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmLabeledElementReferenceExpression.js +0 -41
  303. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmModelElementPathExpression.js +0 -35
  304. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNavigationPropertyPathExpression.js +0 -37
  305. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNegationExpression.js +0 -70
  306. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNotExpression.js +0 -75
  307. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNullExpression.js +0 -50
  308. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmPathExpression.js +0 -38
  309. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmPropertyPathExpression.js +0 -37
  310. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmPropertyValueExpression.js +0 -72
  311. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmRecordExpression.js +0 -100
  312. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmUnknownExpression.js +0 -72
  313. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmUrlRefExpression.js +0 -73
  314. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/AbstractError.js +0 -82
  315. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/IllegalArgumentError.js +0 -58
  316. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/IllegalCallError.js +0 -21
  317. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/NotImplementedError.js +0 -19
  318. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/UriQueryOptionSemanticError.js +0 -49
  319. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/UriSemanticError.js +0 -48
  320. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/UriSyntaxError.js +0 -65
  321. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/ContentTypeInfo.js +0 -105
  322. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/JsonContentTypeInfo.js +0 -83
  323. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/JsonFormat.js +0 -141
  324. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/RepresentationKind.js +0 -251
  325. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpHeader.js +0 -42
  326. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpHeaderReader.js +0 -318
  327. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpMethod.js +0 -25
  328. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpStatusCode.js +0 -52
  329. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/Preferences.js +0 -32
  330. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/index.js +0 -69
  331. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/logging/LoggerFacade.js +0 -183
  332. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/AliasExpression.js +0 -47
  333. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ApplyParser.js +0 -946
  334. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/BinaryExpression.js +0 -124
  335. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ExpandItem.js +0 -76
  336. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ExpandParser.js +0 -384
  337. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/Expression.js +0 -46
  338. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ExpressionParser.js +0 -1988
  339. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/FilterParser.js +0 -34
  340. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/FunctionParameterParser.js +0 -106
  341. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/KeyPredicateParser.js +0 -155
  342. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/KeyValueParser.js +0 -213
  343. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/LiteralExpression.js +0 -43
  344. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/MemberExpression.js +0 -44
  345. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/MethodExpression.js +0 -146
  346. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/OrderByItem.js +0 -53
  347. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/OrderByParser.js +0 -69
  348. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ResourcePathParser.js +0 -848
  349. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/SearchParser.js +0 -127
  350. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/SelectItem.js +0 -80
  351. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/SelectParser.js +0 -294
  352. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/TypeLiteralExpression.js +0 -28
  353. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UnaryExpression.js +0 -64
  354. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriHelper.js +0 -65
  355. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriInfo.js +0 -165
  356. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriParameter.js +0 -107
  357. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriParser.js +0 -350
  358. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriResource.js +0 -602
  359. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriTokenizer.js +0 -1156
  360. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/AggregateExpression.js +0 -164
  361. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/AggregateTransformation.js +0 -38
  362. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/BottomTopTransformation.js +0 -93
  363. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ComputeExpression.js +0 -52
  364. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ComputeTransformation.js +0 -38
  365. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ConcatTransformation.js +0 -38
  366. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/CustomFunctionTransformation.js +0 -59
  367. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ExpandTransformation.js +0 -37
  368. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/FilterTransformation.js +0 -37
  369. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/GroupByItem.js +0 -71
  370. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/GroupByTransformation.js +0 -58
  371. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/IdentityTransformation.js +0 -17
  372. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/OrderByTransformation.js +0 -37
  373. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/SearchTransformation.js +0 -37
  374. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/SkipTransformation.js +0 -37
  375. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/TopTransformation.js +0 -37
  376. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/Transformation.js +0 -53
  377. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/info.md +0 -116
  378. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueDecoder.js +0 -667
  379. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueEncoder.js +0 -349
  380. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/ValueConverter.js +0 -545
  381. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ParameterValidator.js +0 -124
  382. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ValueValidator.js +0 -743
  383. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/ServiceFactory.js +0 -234
  384. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchContext.js +0 -351
  385. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchErrorInfo.js +0 -61
  386. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchExitHandler.js +0 -239
  387. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchProcessor.js +0 -281
  388. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchValidator.js +0 -133
  389. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchedRequestExecutor.js +0 -92
  390. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ComponentManager.js +0 -63
  391. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/Context.js +0 -96
  392. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/Dispatcher.js +0 -147
  393. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataRequest.js +0 -458
  394. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataRequestInBatch.js +0 -147
  395. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataResponse.js +0 -314
  396. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataResponseInBatch.js +0 -83
  397. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/PlainHttpRequest.js +0 -175
  398. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/PlainHttpResponse.js +0 -106
  399. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/RequestContract.js +0 -111
  400. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseContract.js +0 -111
  401. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseHeaderSetter.js +0 -240
  402. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/Service.js +0 -417
  403. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ServiceResolutions.js +0 -24
  404. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ApplicationHttpReader.js +0 -157
  405. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/BatchJsonDeserializer.js +0 -171
  406. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/BatchRequestListBuilder.js +0 -196
  407. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/Cache.js +0 -154
  408. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ContentDeserializer.js +0 -222
  409. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/DataReader.js +0 -220
  410. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/DeserializerFactory.js +0 -240
  411. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/HeaderReader.js +0 -133
  412. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/LineReader.js +0 -61
  413. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/MultipartReader.js +0 -419
  414. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/PartReader.js +0 -99
  415. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/Reader.js +0 -52
  416. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ResourceJsonDeserializer.js +0 -673
  417. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/ApplicationError.js +0 -108
  418. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/BadRequestError.js +0 -21
  419. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/ConflictError.js +0 -11
  420. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/DeserializationError.js +0 -19
  421. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/InternalServerError.js +0 -20
  422. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/MethodNotAllowedError.js +0 -17
  423. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/NotAcceptableError.js +0 -21
  424. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/NotFoundError.js +0 -33
  425. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/PreconditionFailedError.js +0 -11
  426. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/PreconditionRequiredError.js +0 -11
  427. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/SerializationError.js +0 -19
  428. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/UnauthorizedError.js +0 -17
  429. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/AcceptTypeInfo.js +0 -86
  430. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/CharsetInfo.js +0 -76
  431. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/FormatDescription.js +0 -43
  432. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/FormatManager.js +0 -91
  433. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/RequestContentNegotiator.js +0 -62
  434. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/ResponseContentNegotiator.js +0 -321
  435. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/handler/BatchHandler.js +0 -36
  436. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/handler/MetadataHandler.js +0 -21
  437. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/handler/ServiceHandler.js +0 -25
  438. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/CustomPreference.js +0 -31
  439. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HeaderInfo.js +0 -79
  440. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HttpHeader.js +0 -59
  441. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HttpHeaderReader.js +0 -452
  442. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HttpStatusCode.js +0 -117
  443. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/Preferences.js +0 -222
  444. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/PreferencesApplied.js +0 -199
  445. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/index.js +0 -37
  446. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/Command.js +0 -31
  447. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/CommandExecutor.js +0 -94
  448. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/CommandFactory.js +0 -203
  449. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ConditionalRequestControlCommand.js +0 -52
  450. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ConditionalRequestPreValidationCommand.js +0 -59
  451. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ContentNegotiatorCommand.js +0 -70
  452. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugContentNegotiatorCommand.js +0 -59
  453. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugDeserializingCommand.js +0 -44
  454. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugSerializingCommand.js +0 -51
  455. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DeserializingCommand.js +0 -69
  456. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DispatcherCommand.js +0 -95
  457. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ErrorContentNegotiatorCommand.js +0 -44
  458. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ErrorSerializingCommand.js +0 -51
  459. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/EventListenerCommand.js +0 -59
  460. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/LocaleNegotiatorCommand.js +0 -56
  461. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/OdataVersionValidationCommand.js +0 -41
  462. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/OperationValidationCommand.js +0 -34
  463. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ParsePreferHeaderCommand.js +0 -47
  464. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/PresetResponseHeadersCommand.js +0 -47
  465. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/QueryOptionsParserCommand.js +0 -43
  466. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/QueryOptionsValidationCommand.js +0 -62
  467. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/RequestContentValidationCommand.js +0 -51
  468. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SendResponseCommand.js +0 -37
  469. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SerializingCommand.js +0 -159
  470. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetResponseHeadersCommand.js +0 -90
  471. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetStatuscodeCommand.js +0 -51
  472. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/UriParserCommand.js +0 -47
  473. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/logging/DebugLogger.js +0 -97
  474. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ApplicationHttpWriter.js +0 -65
  475. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/BatchJsonSerializer.js +0 -46
  476. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/BatchMultipartSerializer.js +0 -113
  477. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ContextURLFactory.js +0 -405
  478. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/DebugHtmlSerializer.js +0 -302
  479. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/DebugJsonSerializer.js +0 -515
  480. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorJsonSerializer.js +0 -47
  481. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorSerializer.js +0 -39
  482. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorXmlSerializer.js +0 -98
  483. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ExpressionTreeImage.js +0 -404
  484. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/MetadataXmlSerializer.js +0 -1416
  485. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/MultipartWriter.js +0 -202
  486. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/NextLinkSerializer.js +0 -330
  487. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ResourceJsonSerializer.js +0 -1220
  488. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/SerializerFactory.js +0 -484
  489. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ServiceJsonSerializer.js +0 -89
  490. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/TrustedResourceJsonSerializer.js +0 -612
  491. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/debugview.html +0 -157
  492. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/BufferedWriter.js +0 -59
  493. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/ExpandHelper.js +0 -96
  494. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/MetadataCache.js +0 -136
  495. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/PerformanceMonitor.js +0 -221
  496. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/UriHelper.js +0 -157
  497. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/ConditionalRequestValidator.js +0 -79
  498. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/OperationValidator.js +0 -199
  499. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/RequestValidator.js +0 -392
  500. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/VersionValidator.js +0 -62
  501. package/libx/_runtime/cds-services/adapter/odata-v4/to.js +0 -51
  502. package/libx/_runtime/cds-services/adapter/odata-v4/utils/data.js +0 -331
  503. package/libx/_runtime/cds-services/adapter/odata-v4/utils/handlerUtils.js +0 -159
  504. package/libx/_runtime/cds-services/adapter/odata-v4/utils/metaInfo.js +0 -404
  505. package/libx/_runtime/cds-services/adapter/odata-v4/utils/oDataConfiguration.js +0 -55
  506. package/libx/_runtime/cds-services/adapter/odata-v4/utils/omitValues.js +0 -86
  507. package/libx/_runtime/cds-services/adapter/odata-v4/utils/readAfterWrite.js +0 -107
  508. package/libx/_runtime/cds-services/adapter/odata-v4/utils/request.js +0 -64
  509. package/libx/_runtime/cds-services/adapter/odata-v4/utils/result.js +0 -385
  510. package/libx/_runtime/cds-services/adapter/odata-v4/utils/stream.js +0 -12
  511. package/libx/_runtime/cds-services/util/errors.js +0 -15
  512. package/libx/_runtime/common/aspects/relation.js +0 -40
  513. package/libx/_runtime/common/composition/data.js +0 -370
  514. package/libx/_runtime/common/composition/delete.js +0 -313
  515. package/libx/_runtime/common/composition/index.js +0 -22
  516. package/libx/_runtime/common/composition/insert.js +0 -108
  517. package/libx/_runtime/common/composition/tree.js +0 -275
  518. package/libx/_runtime/common/composition/update.js +0 -354
  519. package/libx/_runtime/common/composition/utils.js +0 -95
  520. package/libx/_runtime/common/error/constants.js +0 -20
  521. package/libx/_runtime/common/error/entry.js +0 -36
  522. package/libx/_runtime/common/error/frontend.js +0 -199
  523. package/libx/_runtime/common/error/index.js +0 -12
  524. package/libx/_runtime/common/error/log.js +0 -35
  525. package/libx/_runtime/common/error/standardError.js +0 -11
  526. package/libx/_runtime/common/error/utils.js +0 -18
  527. package/libx/_runtime/common/generic/auth/constants.js +0 -17
  528. package/libx/_runtime/common/generic/put.js +0 -85
  529. package/libx/_runtime/common/utils/columns.js +0 -177
  530. package/libx/_runtime/common/utils/compareJsonOLD.js +0 -280
  531. package/libx/_runtime/common/utils/cqn2cqn4sql.js +0 -1039
  532. package/libx/_runtime/common/utils/data.js +0 -16
  533. package/libx/_runtime/common/utils/dollar.js +0 -27
  534. package/libx/_runtime/common/utils/generateOnCond.js +0 -127
  535. package/libx/_runtime/common/utils/onlyKeysRemain.js +0 -10
  536. package/libx/_runtime/common/utils/path.js +0 -20
  537. package/libx/_runtime/common/utils/quotingStyles.js +0 -29
  538. package/libx/_runtime/common/utils/restrictions.js +0 -67
  539. package/libx/_runtime/common/utils/search2cqn4sql.js +0 -37
  540. package/libx/_runtime/common/utils/searchToLike.js +0 -56
  541. package/libx/_runtime/common/utils/stream.js +0 -103
  542. package/libx/_runtime/common/utils/ucsn.js +0 -119
  543. package/libx/_runtime/common/utils/union.js +0 -31
  544. package/libx/_runtime/common/utils/unionCqnTemplate.js +0 -174
  545. package/libx/_runtime/db/Service.js +0 -93
  546. package/libx/_runtime/db/data-conversion/post-processing.js +0 -175
  547. package/libx/_runtime/db/expand/expand-v2.js +0 -147
  548. package/libx/_runtime/db/expand/expandCQNToJoin.js +0 -1775
  549. package/libx/_runtime/db/expand/index.js +0 -13
  550. package/libx/_runtime/db/expand/rawToExpanded.js +0 -250
  551. package/libx/_runtime/db/generic/create.js +0 -30
  552. package/libx/_runtime/db/generic/delete.js +0 -18
  553. package/libx/_runtime/db/generic/index.js +0 -25
  554. package/libx/_runtime/db/generic/input.js +0 -227
  555. package/libx/_runtime/db/generic/read.js +0 -16
  556. package/libx/_runtime/db/generic/rewrite.js +0 -68
  557. package/libx/_runtime/db/generic/structured.js +0 -92
  558. package/libx/_runtime/db/generic/update.js +0 -97
  559. package/libx/_runtime/db/generic/virtual.js +0 -83
  560. package/libx/_runtime/db/query/delete.js +0 -39
  561. package/libx/_runtime/db/query/index.js +0 -13
  562. package/libx/_runtime/db/query/insert.js +0 -21
  563. package/libx/_runtime/db/query/read.js +0 -97
  564. package/libx/_runtime/db/query/run.js +0 -30
  565. package/libx/_runtime/db/query/update.js +0 -94
  566. package/libx/_runtime/db/result/InsertResult.js +0 -87
  567. package/libx/_runtime/db/sql-builder/BaseBuilder.js +0 -65
  568. package/libx/_runtime/db/sql-builder/CreateBuilder.js +0 -212
  569. package/libx/_runtime/db/sql-builder/DeleteBuilder.js +0 -87
  570. package/libx/_runtime/db/sql-builder/DropBuilder.js +0 -63
  571. package/libx/_runtime/db/sql-builder/ExpressionBuilder.js +0 -345
  572. package/libx/_runtime/db/sql-builder/FunctionBuilder.js +0 -232
  573. package/libx/_runtime/db/sql-builder/InsertBuilder.js +0 -494
  574. package/libx/_runtime/db/sql-builder/ReferenceBuilder.js +0 -135
  575. package/libx/_runtime/db/sql-builder/SelectBuilder.js +0 -482
  576. package/libx/_runtime/db/sql-builder/UpdateBuilder.js +0 -207
  577. package/libx/_runtime/db/sql-builder/UpsertBuilder.js +0 -25
  578. package/libx/_runtime/db/sql-builder/annotations.js +0 -50
  579. package/libx/_runtime/db/sql-builder/arrayed.js +0 -4
  580. package/libx/_runtime/db/sql-builder/dataTypes.js +0 -59
  581. package/libx/_runtime/db/sql-builder/dollar.js +0 -37
  582. package/libx/_runtime/db/sql-builder/index.js +0 -28
  583. package/libx/_runtime/db/sql-builder/sqlFactory.js +0 -104
  584. package/libx/_runtime/db/utils/coloredTxCommands.js +0 -7
  585. package/libx/_runtime/db/utils/columns.js +0 -41
  586. package/libx/_runtime/db/utils/deep.js +0 -71
  587. package/libx/_runtime/db/utils/generateAliases.js +0 -160
  588. package/libx/_runtime/db/utils/localized.js +0 -77
  589. package/libx/_runtime/db/utils/normalizeTimeData.js +0 -98
  590. package/libx/_runtime/db/utils/stream.js +0 -41
  591. package/libx/_runtime/hana/Service.js +0 -173
  592. package/libx/_runtime/hana/conversion.js +0 -73
  593. package/libx/_runtime/hana/customBuilder/CustomCreateBuilder.js +0 -11
  594. package/libx/_runtime/hana/customBuilder/CustomDeleteBuilder.js +0 -17
  595. package/libx/_runtime/hana/customBuilder/CustomDropBuilder.js +0 -12
  596. package/libx/_runtime/hana/customBuilder/CustomExpressionBuilder.js +0 -23
  597. package/libx/_runtime/hana/customBuilder/CustomFunctionBuilder.js +0 -34
  598. package/libx/_runtime/hana/customBuilder/CustomReferenceBuilder.js +0 -38
  599. package/libx/_runtime/hana/customBuilder/CustomSelectBuilder.js +0 -90
  600. package/libx/_runtime/hana/customBuilder/index.js +0 -11
  601. package/libx/_runtime/hana/driver.js +0 -205
  602. package/libx/_runtime/hana/dynatrace.js +0 -130
  603. package/libx/_runtime/hana/execute.js +0 -429
  604. package/libx/_runtime/hana/localized.js +0 -39
  605. package/libx/_runtime/hana/pool.js +0 -186
  606. package/libx/_runtime/hana/search.js +0 -20
  607. package/libx/_runtime/hana/search2Contains.js +0 -106
  608. package/libx/_runtime/hana/search2cqn4sql.js +0 -98
  609. package/libx/_runtime/hana/streaming.js +0 -248
  610. package/libx/_runtime/messaging/Outbox.js +0 -15
  611. package/libx/_runtime/sqlite/Service.js +0 -153
  612. package/libx/_runtime/sqlite/conversion.js +0 -47
  613. package/libx/_runtime/sqlite/convertAssocToOneManaged.js +0 -60
  614. package/libx/_runtime/sqlite/convertDraftAdminPathExpression.js +0 -74
  615. package/libx/_runtime/sqlite/customBuilder/CustomExpressionBuilder.js +0 -24
  616. package/libx/_runtime/sqlite/customBuilder/CustomFunctionBuilder.js +0 -102
  617. package/libx/_runtime/sqlite/customBuilder/CustomSelectBuilder.js +0 -16
  618. package/libx/_runtime/sqlite/customBuilder/CustomUpsertBuilder.js +0 -47
  619. package/libx/_runtime/sqlite/customBuilder/index.js +0 -49
  620. package/libx/_runtime/sqlite/execute.js +0 -345
  621. package/libx/_runtime/sqlite/localized.js +0 -49
  622. package/libx/outbox/index.js +0 -307
@@ -1,946 +0,0 @@
1
- 'use strict'
2
-
3
- const ExpandParser = require('./ExpandParser')
4
- const ExpressionParser = require('./ExpressionParser')
5
- const FilterParser = require('./FilterParser')
6
- const OrderByParser = require('./OrderByParser')
7
- const SearchParser = require('./SearchParser')
8
- const TokenKind = require('./UriTokenizer').TokenKind
9
- const EdmPrimitiveTypeKind = require('../edm/EdmPrimitiveTypeKind')
10
- const EdmTypeKind = require('../edm/EdmType').TypeKind
11
- const TransientStructuredType = require('../edm/TransientStructuredType')
12
- const FullQualifiedName = require('../FullQualifiedName')
13
- const UriResource = require('./UriResource')
14
- const ResourceKind = UriResource.ResourceKind
15
- const QueryOption = require('./UriInfo').QueryOptions
16
- const UriSyntaxError = require('../errors/UriSyntaxError')
17
- const UriSemanticError = require('../errors/UriSemanticError')
18
- const UriQueryOptionSemanticError = require('../errors/UriQueryOptionSemanticError')
19
- const FeatureSupport = require('../FeatureSupport')
20
-
21
- const AggregateTransformation = require('./apply/AggregateTransformation')
22
- const AggregateExpression = require('./apply/AggregateExpression')
23
- const BottomTopTransformation = require('./apply/BottomTopTransformation')
24
- const ComputeTransformation = require('./apply/ComputeTransformation')
25
- const ComputeExpression = require('./apply/ComputeExpression')
26
- const ConcatTransformation = require('./apply/ConcatTransformation')
27
- const CustomFunctionTransformation = require('./apply/CustomFunctionTransformation')
28
- const ExpandTransformation = require('./apply/ExpandTransformation')
29
- const FilterTransformation = require('./apply/FilterTransformation')
30
- const GroupByTransformation = require('./apply/GroupByTransformation')
31
- const GroupByItem = require('./apply/GroupByItem')
32
- const IdentityTransformation = require('./apply/IdentityTransformation')
33
- const OrderByTransformation = require('./apply/OrderByTransformation')
34
- const SearchTransformation = require('./apply/SearchTransformation')
35
- const SkipTransformation = require('./apply/SkipTransformation')
36
- const TopTransformation = require('./apply/TopTransformation')
37
- const ExpandItem = require('./ExpandItem')
38
- const MemberExpression = require('./MemberExpression')
39
-
40
- class ApplyParser {
41
- /**
42
- * Create an apply parser.
43
- * @param {Edm} edm entity data model
44
- */
45
- constructor (edm) {
46
- this._edm = edm
47
- this._expressionParser = new ExpressionParser(edm)
48
- }
49
-
50
- /**
51
- * Parse a string into an array of transformations and adapt the referenced type to the resulting structure.
52
- * @param {UriTokenizer} tokenizer tokenizer containing the string to be parsed
53
- * @param {?TransientStructuredType} referencedType type that the apply option references
54
- * @param {?(string[])} crossjoinEntitySetNames entityset names in case of a $crossjoin request
55
- * @param {?Object} aliases alias definitions
56
- * @returns {Transformation[]} the transformations
57
- * @throws {UriSyntaxError}
58
- * @throws {UriQueryOptionSemanticError}
59
- */
60
- parse (tokenizer, referencedType, crossjoinEntitySetNames, aliases) {
61
- this._tokenizer = tokenizer
62
- this._crossjoinEntitySetNames = crossjoinEntitySetNames
63
- this._aliases = aliases
64
-
65
- return this._parseApply(referencedType)
66
- }
67
-
68
- /**
69
- * Parse an apply option.
70
- * @param {?TransientStructuredType} referencedType type that the apply option references
71
- * @returns {Transformation[]} the parsed transformations
72
- * @throws {UriSyntaxError}
73
- * @throws {UriQueryOptionSemanticError}
74
- * @private
75
- */
76
- _parseApply (referencedType) {
77
- let apply = []
78
- do {
79
- apply.push(this._parseTrafo(referencedType))
80
- } while (this._tokenizer.next(TokenKind.SLASH))
81
- return apply
82
- }
83
-
84
- /**
85
- * Parse a transformation.
86
- * @param {?TransientStructuredType} referencedType type that the transformation references
87
- * @returns {Transformation} the parsed transformation
88
- * @throws {UriSyntaxError}
89
- * @throws {UriQueryOptionSemanticError}
90
- * @private
91
- */
92
- _parseTrafo (referencedType) {
93
- if (this._tokenizer.next(TokenKind.AggregateTrafo)) {
94
- return this._parseAggregateTrafo(referencedType)
95
- } else if (this._tokenizer.next(TokenKind.IDENTITY)) {
96
- return new IdentityTransformation()
97
- } else if (this._tokenizer.next(TokenKind.ComputeTrafo)) {
98
- return this._parseComputeTrafo(referencedType)
99
- } else if (this._tokenizer.next(TokenKind.ConcatMethod)) {
100
- return this._parseConcatTrafo(referencedType)
101
- } else if (this._tokenizer.next(TokenKind.ExpandTrafo)) {
102
- return new ExpandTransformation().setExpand(this._parseExpandTrafo(referencedType))
103
- } else if (this._tokenizer.next(TokenKind.FilterTrafo)) {
104
- const filter = new FilterParser(this._edm).parse(
105
- this._tokenizer,
106
- referencedType,
107
- this._crossjoinEntitySetNames,
108
- this._aliases
109
- )
110
- this._tokenizer.requireNext(TokenKind.CLOSE)
111
- return new FilterTransformation().setFilter(filter)
112
- } else if (this._tokenizer.next(TokenKind.GroupByTrafo)) {
113
- return this._parseGroupByTrafo(referencedType)
114
- } else if (this._tokenizer.next(TokenKind.OrderByTrafo)) {
115
- const orderBy = new OrderByParser(this._edm).parse(
116
- this._tokenizer,
117
- referencedType,
118
- this._crossjoinEntitySetNames,
119
- this._aliases
120
- )
121
- this._tokenizer.requireNext(TokenKind.CLOSE)
122
- return new OrderByTransformation().setOrderBy(orderBy)
123
- } else if (this._tokenizer.next(TokenKind.SearchTrafo)) {
124
- const search = new SearchParser().parse(this._tokenizer)
125
- this._tokenizer.requireNext(TokenKind.CLOSE)
126
- return new SearchTransformation().setSearch(search)
127
- } else if (this._tokenizer.next(TokenKind.SkipTrafo)) {
128
- this._tokenizer.requireNext(TokenKind.UnsignedIntegerValue)
129
- const skip = Number.parseInt(this._tokenizer.getText(), 10)
130
- this._tokenizer.requireNext(TokenKind.CLOSE)
131
- if (!Number.isSafeInteger(skip)) {
132
- throw new UriSyntaxError(UriSyntaxError.Message.OPTION_NON_NEGATIVE_INTEGER, 'skip')
133
- }
134
- return new SkipTransformation().setSkip(skip)
135
- } else if (this._tokenizer.next(TokenKind.TopTrafo)) {
136
- this._tokenizer.requireNext(TokenKind.UnsignedIntegerValue)
137
- const top = Number.parseInt(this._tokenizer.getText(), 10)
138
- this._tokenizer.requireNext(TokenKind.CLOSE)
139
- if (!Number.isSafeInteger(top)) {
140
- throw new UriSyntaxError(UriSyntaxError.Message.OPTION_NON_NEGATIVE_INTEGER, 'top')
141
- }
142
- return new TopTransformation().setTop(top)
143
- } else if (this._tokenizer.next(TokenKind.QualifiedName)) {
144
- return this._parseCustomFunction(referencedType)
145
- } else {
146
- // eslint-disable-line no-else-return
147
- return this._parseBottomTop(referencedType)
148
- }
149
- }
150
-
151
- /**
152
- * Parse an aggregate transformation.
153
- * @param {?TransientStructuredType} referencedType type that the transformation references
154
- * @returns {AggregateTransformation} the parsed transformation
155
- * @throws {UriSyntaxError}
156
- * @throws {UriQueryOptionSemanticError}
157
- * @private
158
- */
159
- _parseAggregateTrafo (referencedType) {
160
- let aggregate = new AggregateTransformation()
161
- let properties = new Map()
162
- do {
163
- let type = new TransientStructuredType(referencedType)
164
- aggregate.addExpression(this._parseAggregateExpr(type))
165
- for (const [name, property] of type.getProperties()) {
166
- if (property === referencedType.getProperty(name)) continue
167
- if (properties.has(name)) {
168
- throw new UriQueryOptionSemanticError(UriQueryOptionSemanticError.Message.IS_PROPERTY, name)
169
- }
170
- properties.set(name, property)
171
- }
172
- } while (this._tokenizer.next(TokenKind.COMMA))
173
- this._tokenizer.requireNext(TokenKind.CLOSE)
174
-
175
- for (const [name, val] of referencedType.getProperties()) {
176
- if (!referencedType.isProtected(name)) {
177
- referencedType.addIgnoredProperty(val)
178
- }
179
- }
180
-
181
- referencedType.deleteProperties()
182
- for (const property of properties.values()) referencedType.addProperty(property)
183
- return aggregate
184
- }
185
-
186
- /**
187
- * Parse an aggregate expression.
188
- * @param {?TransientStructuredType} referencedType type that the expression references
189
- * @returns {AggregateExpression} the parsed expression
190
- * @throws {UriSyntaxError}
191
- * @throws {UriQueryOptionSemanticError}
192
- * @private
193
- */
194
- _parseAggregateExpr (referencedType) {
195
- this._tokenizer.saveState()
196
- let aggregateExpression
197
- let error
198
-
199
- // First try is checking for a common expression.
200
- try {
201
- aggregateExpression = new AggregateExpression()
202
- const expression = this._expressionParser.parse(
203
- this._tokenizer,
204
- referencedType,
205
- this._crossjoinEntitySetNames,
206
- this._aliases
207
- )
208
- aggregateExpression.setExpression(expression)
209
- const customMethods = referencedType.getCustomAggregationMethods()
210
- this._parseAggregateWith(aggregateExpression, customMethods)
211
- switch (aggregateExpression.getStandardMethod()) {
212
- case null:
213
- if (aggregateExpression.getCustomMethod() === null) {
214
- throw new UriSyntaxError(
215
- UriSyntaxError.Message.WRONG_AGGREGATE_EXPRESSION_SYNTAX,
216
- this._tokenizer.getPosition()
217
- )
218
- }
219
- break
220
- case AggregateExpression.StandardMethod.MIN:
221
- case AggregateExpression.StandardMethod.MAX:
222
- this._expressionParser.checkNoCollection(expression)
223
- if (
224
- expression.getType().getKind() !== EdmTypeKind.PRIMITIVE &&
225
- expression.getType().getKind() !== EdmTypeKind.ENUM &&
226
- expression.getType().getKind() !== EdmTypeKind.DEFINITION
227
- ) {
228
- throw new UriQueryOptionSemanticError(
229
- UriQueryOptionSemanticError.Message.ONLY_FOR_PRIMITIVE_TYPES,
230
- 'aggregate'
231
- )
232
- }
233
- break
234
- case AggregateExpression.StandardMethod.SUM:
235
- case AggregateExpression.StandardMethod.AVERAGE:
236
- this._expressionParser.checkNumericType(expression)
237
- break
238
- default:
239
- }
240
- const alias = this._parseAsAlias(referencedType, true)
241
- aggregateExpression.setAlias(alias)
242
- referencedType.addProperty(
243
- this._createDynamicAggregationProperty(
244
- alias,
245
- aggregateExpression.getStandardMethod(),
246
- aggregateExpression.getCustomMethod()
247
- ? customMethods.get(aggregateExpression.getCustomMethod().toString())
248
- : expression.getType()
249
- )
250
- )
251
- this._parseAggregateFrom(aggregateExpression, referencedType)
252
- return aggregateExpression
253
- } catch (err) {
254
- error = err
255
- }
256
-
257
- // No legitimate continuation of a common expression has been found.
258
- // Second try is checking for a (potentially empty) path prefix and the things that could follow it.
259
- this._tokenizer.returnToSavedState()
260
- aggregateExpression = new AggregateExpression()
261
-
262
- const pathSegments = this._parsePathPrefix(referencedType)
263
- const identifierLeft = pathSegments && pathSegments.length && !pathSegments[pathSegments.length - 1].getKind()
264
- let type = referencedType
265
- if (identifierLeft && pathSegments.length > 1) type = pathSegments[pathSegments.length - 2].getEdmType()
266
- if (!identifierLeft && pathSegments.length) type = pathSegments[pathSegments.length - 1].getEdmType()
267
- const slashLeft = this._tokenizer.getText() === '/'
268
-
269
- // A custom aggregate (an OData identifier) is defined in the
270
- // CustomAggregate EDM annotation (in namespace Org.OData.Aggregation.V1)
271
- // of the structured type or of the entity container.
272
- // Instead of looking into annotations, we expect the custom aggregate
273
- // to be declared in the service configuration.
274
- // Its name could be a property name, too, and the specification says
275
- // "the name refers to the custom aggregate within an aggregate expression
276
- // without a with clause, and to the property in all other cases."
277
- if (
278
- identifierLeft &&
279
- type.getCustomAggregates().has(this._tokenizer.getText()) &&
280
- !this._tokenizer.next(TokenKind.WithOperator)
281
- ) {
282
- const customAggregate = this._tokenizer.getText()
283
- const customAggregateType = type.getCustomAggregates().get(customAggregate)
284
- const property = this._createDynamicProperty(customAggregate, customAggregateType)
285
- pathSegments[pathSegments.length - 1].setKind(ResourceKind.PRIMITIVE_PROPERTY).setProperty(property)
286
- aggregateExpression.setPathSegments(pathSegments)
287
- const alias = this._parseAsAlias(referencedType, false)
288
- if (alias) {
289
- aggregateExpression.setAlias(alias)
290
- referencedType.addProperty(this._createDynamicProperty(alias, customAggregateType))
291
- } else if (type.addProperty) type.addProperty(property) // TODO: Add property to related types.
292
-
293
- this._parseAggregateFrom(aggregateExpression, referencedType)
294
- } else if (
295
- !identifierLeft &&
296
- !slashLeft &&
297
- type.getKind() === EdmTypeKind.ENTITY &&
298
- this._tokenizer.next(TokenKind.OPEN)
299
- ) {
300
- if (!pathSegments.length) {
301
- throw new UriSyntaxError(
302
- UriSyntaxError.Message.WRONG_AGGREGATE_EXPRESSION_SYNTAX,
303
- this._tokenizer.getPosition()
304
- )
305
- }
306
- aggregateExpression.setPathSegments(pathSegments)
307
- let inlineType = new TransientStructuredType(type)
308
- aggregateExpression.setInlineAggregateExpression(this._parseAggregateExpr(inlineType))
309
- this._tokenizer.requireNext(TokenKind.CLOSE)
310
- } else if (!identifierLeft && (slashLeft || !pathSegments.length) && this._tokenizer.next(TokenKind.COUNT)) {
311
- pathSegments.push(new UriResource().setKind(ResourceKind.COUNT))
312
- aggregateExpression.setPathSegments(pathSegments)
313
- const alias = this._parseAsAlias(referencedType, true)
314
- aggregateExpression.setAlias(alias)
315
- referencedType.addProperty(
316
- this._createDynamicProperty(
317
- alias,
318
- // The OData standard mandates Edm.Decimal (with no decimals), although counts are always integer.
319
- EdmPrimitiveTypeKind.Decimal,
320
- null,
321
- 0
322
- )
323
- )
324
- } else {
325
- // If there is still no success, we throw the error from the first try,
326
- // assuming it to be the case the user intended.
327
- throw error
328
- }
329
- return aggregateExpression
330
- }
331
-
332
- /**
333
- * Parse the "with" part of an aggregate expression.
334
- * @param {AggregateExpression} aggregateExpression the aggregate expression
335
- * @param {Map.<string, EdmPrimitiveType|EdmTypeDefinition>} customAggregationMethods the defined custom aggregation methods
336
- * @throws {UriSyntaxError}
337
- * @private
338
- */
339
- _parseAggregateWith (aggregateExpression, customAggregationMethods) {
340
- if (this._tokenizer.next(TokenKind.WithOperator)) {
341
- if (this._tokenizer.next(TokenKind.QualifiedName)) {
342
- const customMethod = this._tokenizer.getText()
343
- // A custom aggregation method is announced in the CustomAggregationMethods
344
- // EDM annotation (in namespace Org.OData.Aggregation.V1) of the structured type
345
- // or of the entity container.
346
- // Instead of looking into annotations, we expect the custom aggregation methods
347
- // to be declared in the service configuration.
348
- if (customAggregationMethods.has(customMethod)) {
349
- aggregateExpression.setCustomMethod(FullQualifiedName.createFromNameSpaceAndName(customMethod))
350
- } else {
351
- throw new UriQueryOptionSemanticError(
352
- UriQueryOptionSemanticError.Message.CUSTOM_AGGREGATION_METHOD_NOT_FOUND,
353
- customMethod
354
- )
355
- }
356
- } else if (this._tokenizer.next(TokenKind.SUM)) {
357
- aggregateExpression.setStandardMethod(AggregateExpression.StandardMethod.SUM)
358
- } else if (this._tokenizer.next(TokenKind.MIN)) {
359
- aggregateExpression.setStandardMethod(AggregateExpression.StandardMethod.MIN)
360
- } else if (this._tokenizer.next(TokenKind.MAX)) {
361
- aggregateExpression.setStandardMethod(AggregateExpression.StandardMethod.MAX)
362
- } else if (this._tokenizer.next(TokenKind.AVERAGE)) {
363
- aggregateExpression.setStandardMethod(AggregateExpression.StandardMethod.AVERAGE)
364
- } else if (this._tokenizer.next(TokenKind.COUNTDISTINCT)) {
365
- aggregateExpression.setStandardMethod(AggregateExpression.StandardMethod.COUNT_DISTINCT)
366
- } else {
367
- throw new UriSyntaxError(UriSyntaxError.Message.WRONG_WITH_SYNTAX, this._tokenizer.getPosition())
368
- }
369
- }
370
- }
371
-
372
- /**
373
- * Parse the alias part of an aggregate expression.
374
- * @param {?(TransientStructuredType|EdmEntityType|EdmComplexType)} referencedType type that the expression references
375
- * @param {boolean} isRequired whether the alias is required
376
- * @returns {?string} the alias name
377
- * @throws {UriSyntaxError}
378
- * @throws {UriQueryOptionSemanticError}
379
- * @private
380
- */
381
- _parseAsAlias (referencedType, isRequired) {
382
- if (this._tokenizer.next(TokenKind.AsOperator)) {
383
- this._tokenizer.requireNext(TokenKind.ODataIdentifier)
384
- const name = this._tokenizer.getText()
385
- if (referencedType.getProperty(name)) {
386
- throw new UriQueryOptionSemanticError(UriQueryOptionSemanticError.Message.IS_PROPERTY, name)
387
- }
388
- return name
389
- } else if (isRequired) {
390
- throw new UriSyntaxError(UriSyntaxError.Message.ALIAS_EXPECTED, this._tokenizer.getPosition())
391
- }
392
- return null
393
- }
394
-
395
- /**
396
- * Parse the "from" part of an aggregate expression.
397
- * @param {AggregateExpression} aggregateExpression the aggregate expression
398
- * @param {?(TransientStructuredType|EdmEntityType|EdmComplexType)} referencedType type that the expression references
399
- * @throws {UriSyntaxError}
400
- * @throws {UriQueryOptionSemanticError}
401
- * @private
402
- */
403
- _parseAggregateFrom (aggregateExpression, referencedType) {
404
- while (this._tokenizer.next(TokenKind.FromOperator)) {
405
- const expression = new MemberExpression(this._parseGroupingProperty(referencedType), referencedType)
406
- let from = new AggregateExpression().setExpression(expression)
407
- this._parseAggregateWith(from, referencedType.getCustomAggregationMethods())
408
- if (
409
- from.getStandardMethod() === AggregateExpression.StandardMethod.SUM ||
410
- from.getStandardMethod() === AggregateExpression.StandardMethod.AVERAGE
411
- ) {
412
- this._expressionParser.checkNumericType(expression)
413
- }
414
- aggregateExpression.addFrom(from)
415
- }
416
- }
417
-
418
- /**
419
- * Create a dynamic structural property.
420
- * @param {string} name the name of the property
421
- * @param {?EdmPrimitiveType} type the type of the property
422
- * @param {?number} [precision] the precision facet of the property
423
- * @param {?(number|string)} [scale] the scale facet of the property
424
- * @returns {Object} the dynamic property as look-alike of EdmProperty
425
- * @private
426
- */
427
- _createDynamicProperty (name, type, precision, scale) {
428
- return {
429
- getName: () => name,
430
- getType: () => type,
431
- isCollection: () => false,
432
- isNullable: () => true,
433
- getMaxLength: () => null,
434
- getPrecision: () => (precision === undefined ? null : precision),
435
- getScale: () => (scale === undefined ? 'variable' : scale),
436
- getSrid: () => 'variable',
437
- isUnicode: () => true,
438
- getDefaultValue: () => null,
439
- isPrimitive: () => true,
440
- getAnnotations: () => []
441
- }
442
- }
443
-
444
- /**
445
- * Create a dynamic aggregation property and set its type according to the result type of the aggregation method.
446
- * @param {string} name the name of the property
447
- * @param {?AggregateExpression.StandardMethod} method the aggregation method
448
- * @param {EdmPrimitiveType} type type the method acts on
449
- * @returns {Object} the dynamic property as look-alike of EdmProperty
450
- * @private
451
- */
452
- _createDynamicAggregationProperty (name, method, type) {
453
- const resultType =
454
- method === AggregateExpression.StandardMethod.COUNT_DISTINCT ||
455
- method === AggregateExpression.StandardMethod.SUM ||
456
- method === AggregateExpression.StandardMethod.AVERAGE
457
- ? EdmPrimitiveTypeKind.Decimal
458
- : type
459
- const precision =
460
- resultType === EdmPrimitiveTypeKind.DateTimeOffset ||
461
- resultType === EdmPrimitiveTypeKind.Duration ||
462
- resultType === EdmPrimitiveTypeKind.TimeOfDay
463
- ? 12
464
- : null
465
- const scale = method === AggregateExpression.StandardMethod.COUNT_DISTINCT ? 0 : 'variable'
466
- return this._createDynamicProperty(name, resultType, precision, scale)
467
- }
468
-
469
- /**
470
- * Parse a compute transformation.
471
- * @param {?TransientStructuredType} referencedType type that the transformation references
472
- * @returns {ComputeTransformation} the parsed transformation
473
- * @throws {UriSyntaxError}
474
- * @throws {UriQueryOptionSemanticError}
475
- * @private
476
- */
477
- _parseComputeTrafo (referencedType) {
478
- let compute = new ComputeTransformation()
479
- do {
480
- const expression = this._expressionParser.parse(
481
- this._tokenizer,
482
- referencedType,
483
- this._crossjoinEntitySetNames,
484
- this._aliases
485
- )
486
- this._expressionParser.checkNoCollection(expression)
487
- const expressionTypeKind = expression.getType().getKind()
488
- if (
489
- expressionTypeKind !== EdmTypeKind.PRIMITIVE &&
490
- expressionTypeKind !== EdmTypeKind.ENUM &&
491
- expressionTypeKind !== EdmTypeKind.DEFINITION
492
- ) {
493
- throw new UriQueryOptionSemanticError(UriQueryOptionSemanticError.Message.ONLY_FOR_PRIMITIVE_TYPES, 'compute')
494
- }
495
- const alias = this._parseAsAlias(referencedType, true)
496
- referencedType.addProperty(this._createDynamicProperty(alias, expression.getType()))
497
- compute.addExpression(new ComputeExpression().setExpression(expression).setAlias(alias))
498
- } while (this._tokenizer.next(TokenKind.COMMA))
499
- this._tokenizer.requireNext(TokenKind.CLOSE)
500
- return compute
501
- }
502
-
503
- /**
504
- * Parse a concat transformation.
505
- * @param {?TransientEdmStructuredType} referencedType type that the transformation references
506
- * @returns {ConcatTransformation} the parsed transformation
507
- * @throws {UriSyntaxError}
508
- * @throws {UriQueryOptionSemanticError}
509
- * @private
510
- */
511
- _parseConcatTrafo (referencedType) {
512
- let concat = new ConcatTransformation()
513
-
514
- // Each sub-transformation could aggregate properties away,
515
- // so it has to start with the original referenced type to avoid
516
- // unintended consequences for subsequent sub-transformations.
517
- // Each sub-transformation adds its properties to the resulting properties.
518
- let types = []
519
- do {
520
- let type = new TransientStructuredType(referencedType)
521
- concat.addSequence(this._parseApply(type))
522
- types.push(type)
523
- } while (this._tokenizer.next(TokenKind.COMMA))
524
- if (concat.getSequences().length < 2) this._tokenizer.requireNext(TokenKind.COMMA) // for the error message
525
- this._tokenizer.requireNext(TokenKind.CLOSE)
526
-
527
- let properties = new Map()
528
- for (const type of types) {
529
- for (const [name, property] of type.getProperties()) {
530
- if (properties.has(name)) {
531
- if (this._expressionParser.isCompatible(properties.get(name).getType(), property.getType())) {
532
- continue
533
- }
534
- if (!this._expressionParser.isCompatible(property.getType(), properties.get(name).getType())) {
535
- throw new UriQueryOptionSemanticError(
536
- UriSemanticError.Message.INCOMPATIBLE_TYPE,
537
- property.getType().getFullQualifiedName(),
538
- properties
539
- .get(name)
540
- .getType()
541
- .getFullQualifiedName()
542
- )
543
- }
544
- }
545
- properties.set(name, property)
546
- }
547
- }
548
- for (const [name, property] of properties) {
549
- referencedType.addProperty(property, types.some(type => !type.getProperty(name)))
550
- }
551
- referencedType.deleteProperties()
552
-
553
- return concat
554
- }
555
-
556
- /**
557
- * Parse an expand transformation.
558
- * @param {?TransientStructuredType} referencedType type that the transformation references
559
- * @returns {ExpandItem} the parsed expand item
560
- * @throws {UriSyntaxError}
561
- * @throws {UriQueryOptionSemanticError}
562
- * @private
563
- */
564
- _parseExpandTrafo (referencedType) {
565
- let item = new ExpandItem()
566
- const pathSegments = new ExpandParser(this._edm).parseExpandPath(
567
- this._tokenizer,
568
- referencedType,
569
- this._crossjoinEntitySetNames
570
- )
571
- if (!pathSegments.length) {
572
- throw new UriSyntaxError(
573
- UriSyntaxError.Message.EXPAND_NO_VALID_PATH,
574
- this._tokenizer.getParseString(),
575
- this._tokenizer.getPosition()
576
- )
577
- }
578
- item.setPathSegments(pathSegments)
579
- const type = pathSegments[pathSegments.length - 1].getEdmType()
580
- if (this._tokenizer.next(TokenKind.COMMA)) {
581
- if (this._tokenizer.next(TokenKind.FilterTrafo)) {
582
- item.setOption(
583
- QueryOption.FILTER,
584
- new FilterParser(this._edm).parse(this._tokenizer, type, this._crossjoinEntitySetNames, this._aliases)
585
- )
586
- this._tokenizer.requireNext(TokenKind.CLOSE)
587
- } else {
588
- this._tokenizer.requireNext(TokenKind.ExpandTrafo)
589
- item.setOption(QueryOption.EXPAND, [this._parseExpandTrafo(type)])
590
- }
591
- }
592
- while (this._tokenizer.next(TokenKind.COMMA)) {
593
- this._tokenizer.requireNext(TokenKind.ExpandTrafo)
594
- let nestedExpands = item.getOption(QueryOption.EXPAND) || []
595
- nestedExpands.push(this._parseExpandTrafo(type))
596
- item.setOption(QueryOption.EXPAND, nestedExpands)
597
- }
598
- this._tokenizer.requireNext(TokenKind.CLOSE)
599
- return item
600
- }
601
-
602
- /**
603
- * Parse a group-by transformation.
604
- * @param {?TransientStructuredType} referencedType type that the transformation references
605
- * @returns {GroupByTransformation} the parsed transformation
606
- * @throws {UriSyntaxError}
607
- * @throws {UriQueryOptionSemanticError}
608
- * @private
609
- */
610
- _parseGroupByTrafo (referencedType) {
611
- let groupBy = new GroupByTransformation()
612
- this._parseGroupByList(groupBy, referencedType)
613
- if (this._tokenizer.next(TokenKind.COMMA)) {
614
- groupBy.setTransformations(this._parseApply(referencedType))
615
- }
616
- for (const [name, val] of referencedType.getProperties()) {
617
- if (!referencedType.isProtected(name)) {
618
- referencedType.addIgnoredProperty(val)
619
- }
620
- }
621
- for (const [name, val] of referencedType.getNavigationProperties()) {
622
- if (!referencedType.isProtected(name)) {
623
- referencedType.addIgnoredNavigationProperty(val)
624
- }
625
- }
626
- this._tokenizer.requireNext(TokenKind.CLOSE)
627
- referencedType.deleteProperties()
628
- referencedType.unprotectProperties()
629
- return groupBy
630
- }
631
-
632
- /**
633
- * Parse the list of groups.
634
- * @param {GroupByItem} groupBy the current group-by item
635
- * @param {?(TransientStructuredType|EdmEntityType|EdmComplexType)} referencedType type that the group-by references
636
- * @private
637
- */
638
- _parseGroupByList (groupBy, referencedType) {
639
- this._tokenizer.requireNext(TokenKind.OPEN)
640
- do {
641
- groupBy.addGroupByItem(this._parseGroupByElement(referencedType))
642
- } while (this._tokenizer.next(TokenKind.COMMA))
643
- this._tokenizer.requireNext(TokenKind.CLOSE)
644
- }
645
-
646
- /**
647
- * Parse the group-by element.
648
- * @param {?(TransientStructuredType|EdmEntityType|EdmComplexType)} referencedType type that the group-by references
649
- * @returns {GroupByItem} the group-by item object
650
- * @private
651
- */
652
- _parseGroupByElement (referencedType) {
653
- return this._tokenizer.next(TokenKind.RollUpSpec)
654
- ? this._parseRollUpSpec(referencedType)
655
- : new GroupByItem().setPathSegments(this._parseGroupingProperty(referencedType))
656
- }
657
-
658
- /**
659
- * Parse the rollup.
660
- * @param {?(TransientStructuredType|EdmEntityType|EdmComplexType)} referencedType type that the rollup references
661
- * @returns {GroupByItem} the rollup
662
- * @private
663
- */
664
- _parseRollUpSpec (referencedType) {
665
- let item = new GroupByItem()
666
- if (this._tokenizer.next(TokenKind.ALL)) {
667
- item.setIsRollupAll()
668
- } else {
669
- item.addRollupItem(new GroupByItem().setPathSegments(this._parseGroupingProperty(referencedType)))
670
- }
671
- this._tokenizer.requireNext(TokenKind.COMMA)
672
- do {
673
- item.addRollupItem(new GroupByItem().setPathSegments(this._parseGroupingProperty(referencedType)))
674
- } while (this._tokenizer.next(TokenKind.COMMA))
675
- this._tokenizer.requireNext(TokenKind.CLOSE)
676
- return item
677
- }
678
-
679
- /**
680
- * Parse the path to the grouping property.
681
- * @param {?(TransientStructuredType|EdmEntityType|EdmComplexType)} referencedType type that the path references
682
- * @returns {UriResource[]} path segments
683
- * @private
684
- */
685
- _parseGroupingProperty (referencedType) {
686
- let pathSegments = this._parsePathPrefix(referencedType)
687
- const leftOver =
688
- (pathSegments.length && !pathSegments[pathSegments.length - 1].getKind()) || this._tokenizer.getText() === '/'
689
- if (pathSegments.length && !pathSegments[pathSegments.length - 1].getKind()) pathSegments.pop()
690
- if (this._tokenizer.getText() === '/') this._tokenizer.requireNext(TokenKind.ODataIdentifier)
691
- if (leftOver) {
692
- const type = pathSegments.length ? pathSegments[pathSegments.length - 1].getEdmType() : referencedType
693
- const property = type.getProperty(this._tokenizer.getText())
694
- if (!property) {
695
- throw new UriQueryOptionSemanticError(
696
- UriSemanticError.Message.PROPERTY_NOT_FOUND,
697
- this._tokenizer.getText(),
698
- type.getFullQualifiedName()
699
- )
700
- }
701
- pathSegments.push(this._createPropertyResource(property))
702
- }
703
- if (!pathSegments.length) this._tokenizer.requireNext(TokenKind.ODataIdentifier) // for the error message
704
- if (pathSegments[pathSegments.length - 1]?.isCollection()) {
705
- throw new UriQueryOptionSemanticError(UriQueryOptionSemanticError.Message.COLLECTION)
706
- }
707
- // TODO: Generalize to more than one segment and to other than structural properties.
708
- if (pathSegments.length === 1 && pathSegments[0].getProperty()) {
709
- referencedType.protectProperty(pathSegments[0].getProperty().getName())
710
- }
711
- return pathSegments
712
- }
713
-
714
- /**
715
- * Parse the path prefix and a following OData identifier as one path, deviating from the ABNF.
716
- * @param {?(TransientStructuredType|EdmEntityType|EdmComplexType)} referencedType type that the path references
717
- * @returns {UriResource[]} path segments
718
- * @private
719
- */
720
- _parsePathPrefix (referencedType) {
721
- let pathSegments = []
722
- let type = referencedType
723
- if (this._tokenizer.next(TokenKind.QualifiedName)) {
724
- const typeCast = this._parseTypeCast(type)
725
- pathSegments.push(new UriResource().setKind(ResourceKind.TYPE_CAST).setTypeCast(typeCast))
726
- this._tokenizer.requireNext(TokenKind.SLASH)
727
- type = typeCast
728
- }
729
- let hasSlash
730
- do {
731
- hasSlash = false
732
- if (this._tokenizer.next(TokenKind.ODataIdentifier)) {
733
- const property = type.getProperty(this._tokenizer.getText())
734
- if (property && (property.getEntityType || property.getType().getKind() === EdmTypeKind.COMPLEX)) {
735
- pathSegments.push(this._createPropertyResource(property))
736
- type = property.getType ? property.getType() : property.getEntityType()
737
- if (this._tokenizer.next(TokenKind.SLASH)) {
738
- hasSlash = true
739
- if (this._tokenizer.next(TokenKind.QualifiedName)) {
740
- type = this._parseTypeCast(type)
741
- pathSegments.push(new UriResource().setKind(ResourceKind.TYPE_CAST).setTypeCast(type))
742
- hasSlash = false
743
- }
744
- }
745
- } else {
746
- pathSegments.push(new UriResource())
747
- break
748
- }
749
- } else {
750
- break
751
- }
752
- } while (hasSlash || this._tokenizer.next(TokenKind.SLASH))
753
- return pathSegments
754
- }
755
-
756
- /**
757
- * Parse type cast.
758
- * @param {?(TransientStructuredType|EdmEntityType|EdmComplexType)} referencedType type that the type cast references
759
- * @returns {?(EdmEntityType|EdmComplexType)} the type of the cast
760
- * @private
761
- */
762
- _parseTypeCast (referencedType) {
763
- const qualifiedName = this._tokenizer.getText()
764
- const fqn = FullQualifiedName.createFromNameSpaceAndName(qualifiedName)
765
- const compareType =
766
- referencedType instanceof TransientStructuredType ? referencedType.getBaseType() : referencedType
767
- const isEntityType = compareType.getKind() === EdmTypeKind.ENTITY
768
- const type = isEntityType ? this._edm.getEntityType(fqn) : this._edm.getComplexType(fqn)
769
- if (!type) {
770
- throw new UriQueryOptionSemanticError(
771
- isEntityType
772
- ? UriSemanticError.Message.ENTITY_TYPE_NOT_FOUND
773
- : UriQueryOptionSemanticError.Message.COMPLEX_TYPE_NOT_FOUND,
774
- qualifiedName
775
- )
776
- }
777
- if (!type.compatibleTo(compareType)) {
778
- throw new UriQueryOptionSemanticError(
779
- UriSemanticError.Message.INCOMPATIBLE_TYPE,
780
- qualifiedName,
781
- referencedType.getFullQualifiedName()
782
- )
783
- }
784
-
785
- // Type casts are explicitly not supported (although the parser can parse them).
786
- FeatureSupport.failUnsupported(FeatureSupport.features.TypeCast, qualifiedName, this._tokenizer.getPosition())
787
- return type
788
- }
789
-
790
- /**
791
- * Create a property-resource segment.
792
- * @param {EdmProperty|EdmNavigationProperty} property the structural or navigation property
793
- * @returns {UriResource} the property resource segment
794
- * @private
795
- */
796
- _createPropertyResource (property) {
797
- const isCollection = property.isCollection()
798
- const isNavigation = property.getEntityType !== undefined
799
- let kind
800
- if (isNavigation) {
801
- kind = isCollection ? ResourceKind.NAVIGATION_TO_MANY : ResourceKind.NAVIGATION_TO_ONE
802
- } else if (property.getType().getKind() === EdmTypeKind.COMPLEX) {
803
- kind = isCollection ? ResourceKind.COMPLEX_COLLECTION_PROPERTY : ResourceKind.COMPLEX_PROPERTY
804
- } else {
805
- kind = isCollection ? ResourceKind.PRIMITIVE_COLLECTION_PROPERTY : ResourceKind.PRIMITIVE_PROPERTY
806
- }
807
- return new UriResource()
808
- .setProperty(isNavigation ? null : property)
809
- .setNavigationProperty(isNavigation ? property : null)
810
- .setIsCollection(isCollection)
811
- .setKind(kind)
812
- }
813
-
814
- /**
815
- * Parse a custom-function transformation.
816
- * @param {?TransientStructuredType} referencedType type that the transformation references
817
- * @returns {CustomFunctionTransformation} the parsed transformation
818
- * @throws {UriSyntaxError}
819
- * @throws {UriQueryOptionSemanticError}
820
- * @private
821
- */
822
- _parseCustomFunction (referencedType) {
823
- const fullQualifiedName = FullQualifiedName.createFromNameSpaceAndName(this._tokenizer.getText())
824
- const bindingParameterType = referencedType.getBaseType()
825
-
826
- let visitedParameters = new Map()
827
- let names = []
828
- this._tokenizer.requireNext(TokenKind.OPEN)
829
- if (!this._tokenizer.next(TokenKind.CLOSE)) {
830
- do {
831
- this._tokenizer.requireNext(TokenKind.ODataIdentifier)
832
- const name = this._tokenizer.getText()
833
- if (visitedParameters.has(name)) {
834
- throw new UriQueryOptionSemanticError(UriQueryOptionSemanticError.Message.DUPLICATE_PARAMETER, name)
835
- }
836
- this._tokenizer.requireNext(TokenKind.EQ)
837
- const expression = this._expressionParser.parse(
838
- this._tokenizer,
839
- referencedType,
840
- this._crossjoinEntitySets,
841
- this._aliases
842
- )
843
- visitedParameters.set(name, expression)
844
- names.push(name)
845
- } while (this._tokenizer.next(TokenKind.COMMA))
846
- this._tokenizer.requireNext(TokenKind.CLOSE)
847
- }
848
-
849
- const func = this._edm.getBoundFunction(fullQualifiedName, bindingParameterType.getFullQualifiedName(), true, names)
850
- if (!func) {
851
- throw new UriQueryOptionSemanticError(
852
- UriSemanticError.Message.FUNCTION_NOT_FOUND,
853
- fullQualifiedName.toString(),
854
- names.join(', ')
855
- )
856
- }
857
-
858
- // The parameters can only be validated after determining which of the overloaded functions we have.
859
- const parameters = this._expressionParser.getValidatedParameters(func, visitedParameters)
860
-
861
- // The binding parameter and the return type must be of type complex or entity collection.
862
- const bindingParameter = func
863
- .getParameters()
864
- .values()
865
- .next().value
866
- const returnType = func.getReturnType()
867
- if (
868
- (bindingParameter.getType().getKind() !== EdmTypeKind.ENTITY &&
869
- bindingParameter.getType().getKind() !== EdmTypeKind.COMPLEX) ||
870
- !bindingParameter.isCollection() ||
871
- (returnType.getType().getKind() !== EdmTypeKind.ENTITY &&
872
- returnType.getType().getKind() !== EdmTypeKind.COMPLEX) ||
873
- !returnType.isCollection()
874
- ) {
875
- throw new UriQueryOptionSemanticError(
876
- UriQueryOptionSemanticError.Message.FUNCTION_MUST_USE_COLLECTIONS,
877
- fullQualifiedName.toString()
878
- )
879
- }
880
-
881
- // TODO: What if the referenced type has been changed by previous transformations?
882
-
883
- // Set referenced type to result type of the function.
884
- referencedType.deleteProperties()
885
- for (const property of returnType
886
- .getType()
887
- .getProperties()
888
- .values()) {
889
- referencedType.addProperty(property)
890
- }
891
-
892
- return new CustomFunctionTransformation().setFunction(func).setParameters(parameters)
893
- }
894
-
895
- /**
896
- * Parse a partial-aggregation transformation.
897
- * @param {?(TransientStructuredType|EdmEntityType|EdmComplexType)} referencedType type that the transformation references
898
- * @returns {BottomTopTransformation} the parsed transformation
899
- * @throws {UriSyntaxError}
900
- * @throws {UriQueryOptionSemanticError}
901
- * @private
902
- */
903
- _parseBottomTop (referencedType) {
904
- let bottomTop = new BottomTopTransformation()
905
-
906
- if (this._tokenizer.next(TokenKind.BottomCountTrafo)) {
907
- bottomTop.setMethod(BottomTopTransformation.Method.BOTTOM_COUNT)
908
- } else if (this._tokenizer.next(TokenKind.BottomPercentTrafo)) {
909
- bottomTop.setMethod(BottomTopTransformation.Method.BOTTOM_PERCENT)
910
- } else if (this._tokenizer.next(TokenKind.BottomSumTrafo)) {
911
- bottomTop.setMethod(BottomTopTransformation.Method.BOTTOM_SUM)
912
- } else if (this._tokenizer.next(TokenKind.TopCountTrafo)) {
913
- bottomTop.setMethod(BottomTopTransformation.Method.TOP_COUNT)
914
- } else if (this._tokenizer.next(TokenKind.TopPercentTrafo)) {
915
- bottomTop.setMethod(BottomTopTransformation.Method.TOP_PERCENT)
916
- } else if (this._tokenizer.next(TokenKind.TopSumTrafo)) {
917
- bottomTop.setMethod(BottomTopTransformation.Method.TOP_SUM)
918
- } else {
919
- throw new UriSyntaxError(UriSyntaxError.Message.WRONG_OPTION_VALUE, QueryOption.APPLY)
920
- }
921
-
922
- const number = this._expressionParser.parse(
923
- this._tokenizer,
924
- referencedType,
925
- this._crossjoinEntitySetNames,
926
- this._aliases
927
- )
928
- this._expressionParser.checkIntegerType(number)
929
- bottomTop.setNumber(number)
930
- this._tokenizer.requireNext(TokenKind.COMMA)
931
-
932
- const value = this._expressionParser.parse(
933
- this._tokenizer,
934
- referencedType,
935
- this._crossjoinEntitySetNames,
936
- this._aliases
937
- )
938
- this._expressionParser.checkNumericType(value)
939
- bottomTop.setValue(value)
940
-
941
- this._tokenizer.requireNext(TokenKind.CLOSE)
942
- return bottomTop
943
- }
944
- }
945
-
946
- module.exports = ApplyParser