@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,1220 +0,0 @@
1
- 'use strict'
2
-
3
- const commons = require('../../odata-commons')
4
- const validateThat = commons.validator.ParameterValidator.validateThat
5
- const ValueValidator = commons.validator.ValueValidator
6
- const contentTypes = commons.format.ContentTypeInfo.ContentTypes
7
- const JsonContentTypeInfo = commons.format.JsonContentTypeInfo
8
- const ExpandItem = commons.uri.ExpandItem
9
- const QueryOptions = commons.uri.UriInfo.QueryOptions
10
- const ResourceKind = commons.uri.UriResource.ResourceKind
11
- const JsonAnnotations = commons.format.JsonFormat.Annotations
12
- const MetaProperties = commons.format.JsonFormat.MetaProperties
13
- const Annotations = commons.format.JsonFormat.Annotations
14
- const EdmTypeKind = commons.edm.EdmType.TypeKind
15
- const EdmPrimitiveTypeKind = commons.edm.EdmPrimitiveTypeKind
16
- const UriHelper = require('../utils/UriHelper')
17
- const NextLinkSerializer = require('./NextLinkSerializer')
18
- const SerializationError = require('../errors/SerializationError')
19
-
20
- /**
21
- * JSON serializer for OData resources such as entity, entity collection, complex property, etc.
22
- *
23
- * More information about the usage of the serializer as well as some examples can be found
24
- * in the JSDoc for the corresponding methods.
25
- */
26
- class ResourceJsonSerializer {
27
- /**
28
- * @param {PrimitiveValueEncoder} primitiveValueEncoder the encoder for primitive values
29
- * @param {JsonContentTypeInfo} formatParams JSON serializing options
30
- */
31
- constructor (primitiveValueEncoder, formatParams = new JsonContentTypeInfo()) {
32
- validateThat('primitiveValueEncoder', primitiveValueEncoder)
33
- .truthy()
34
- .instanceOf(Object)
35
- validateThat('formatParams', formatParams)
36
- .truthy()
37
- .instanceOf(Object)
38
-
39
- this._valueValidator = new ValueValidator()
40
- this._encoder = primitiveValueEncoder.setJsonFormatParameters(formatParams)
41
- }
42
-
43
- /**
44
- * Serializes entity to OData JSON string.
45
- * The entity data must be represented as a plain object with property-value pairs.
46
- * The names and the number of the properties must correspond to the ones in the entity type.
47
- * Property names must be specified as strings.
48
- * Property values must correspond to the EDM types of the corresponding entity type properties.
49
- * Value for a complex property must be specified as an object.
50
- * Value for a collection property must be specified as an array.
51
- * @param {EdmEntityType|EdmEntitySet|EdmSingleton} entityTypeOrSet type or entity set or singleton of the entity
52
- * @param {Object} data entity data
53
- * @param {SelectItem[]} selectItems select items from $select
54
- * @param {ExpandItem[]} expandItems expand items from $expand
55
- * @param {boolean} eTagRequired true if an ETag is required
56
- * @param {string} odataPath the path from the OData service root
57
- * @returns {string} entity, serialized in OData JSON format
58
- */
59
- serializeEntity (entityTypeOrSet, data, selectItems, expandItems, eTagRequired, odataPath) {
60
- validateThat('entityTypeOrSet', entityTypeOrSet)
61
- .truthy()
62
- .instanceOf(Object)
63
- validateThat('data', data)
64
- .truthy()
65
- .typeOf('object')
66
-
67
- try {
68
- let serializedAnnotations = this._serializeAnnotations(
69
- [MetaProperties.CONTEXT],
70
- data.value,
71
- MetaProperties.CONTEXT,
72
- MetaProperties.METADATA_ETAG
73
- )
74
-
75
- const selectedPaths = this._getSelectedPaths(selectItems, expandItems)
76
- const serializedEntity = this._serializeEntity(
77
- entityTypeOrSet,
78
- data.value,
79
- selectedPaths,
80
- expandItems,
81
- eTagRequired,
82
- true,
83
- odataPath
84
- )
85
-
86
- return JSON.stringify(Object.assign(serializedAnnotations, serializedEntity))
87
- } catch (error) {
88
- throw this._createError('An error occurred during serialization of the entity.', error)
89
- }
90
- }
91
-
92
- /**
93
- * Serializes entity collection to OData JSON string.
94
- * @param {EdmEntityType|EdmEntitySet} entityTypeOrSet - entity type or set for the entities in the collection
95
- * @param {Array} data - entity collection data, represented by an array of objects. The structure of the objects
96
- * in the array must correspond to the one, required by the serializeEntity() method.
97
- * @param {SelectItem[]} selectItems - select items from $select
98
- * @param {ExpandItem[]} expandItems - expand items from $expand
99
- * @param {boolean} eTagRequired true if an ETag is required
100
- * @param {string} odataPath the path from the OData service root
101
- * @returns {string} entity collection, serialized in OData JSON format
102
- */
103
- serializeEntityCollection (entityTypeOrSet, data, selectItems, expandItems, eTagRequired, odataPath) {
104
- validateThat('entityTypeOrSet', entityTypeOrSet)
105
- .truthy()
106
- .instanceOf(Object)
107
- validateThat('data', data)
108
- .truthy()
109
- .typeOf('object')
110
- validateThat('data.value', data.value)
111
- .truthy()
112
- .array()
113
-
114
- try {
115
- const selectedPaths = this._getSelectedPaths(selectItems, expandItems)
116
-
117
- let serializedEntityCollection = Object.assign(
118
- this._serializeAnnotations(
119
- [MetaProperties.CONTEXT],
120
- data,
121
- MetaProperties.CONTEXT,
122
- MetaProperties.METADATA_ETAG,
123
- MetaProperties.COUNT
124
- ),
125
- this._serializeOperationAdvertisement(data)
126
- )
127
-
128
- serializedEntityCollection.value = this._serializeCollectionEntities(
129
- entityTypeOrSet,
130
- data.value,
131
- selectedPaths,
132
- expandItems,
133
- eTagRequired,
134
- entityTypeOrSet.isReduced === undefined,
135
- odataPath
136
- )
137
- serializedEntityCollection = Object.assign(
138
- serializedEntityCollection,
139
- this._serializeAnnotations([], data, MetaProperties.NEXT_LINK)
140
- )
141
-
142
- return JSON.stringify(serializedEntityCollection)
143
- } catch (error) {
144
- throw this._createError('An error occurred during serialization of the entity collection.', error)
145
- }
146
- }
147
-
148
- /**
149
- * Serialize a primitive-type value to an OData JSON string.
150
- * @param {(EdmProperty|EdmReturnType)} propertyOrReturnType EDM property or EDM return type
151
- * @param {?(Object|string|number|boolean)} data the value
152
- * @param {boolean} eTagRequired true if an ETag is required
153
- * @returns {string} serialized representation in OData JSON format
154
- */
155
- serializePrimitive (propertyOrReturnType, data, eTagRequired) {
156
- validateThat('propertyOrReturnType', propertyOrReturnType)
157
- .truthy()
158
- .instanceOf(Object)
159
- validateThat('data', data).truthy()
160
-
161
- try {
162
- let serializedAnnotations = this._serializeAnnotations(
163
- [MetaProperties.CONTEXT],
164
- data,
165
- MetaProperties.CONTEXT,
166
- MetaProperties.METADATA_ETAG
167
- )
168
- if (eTagRequired) {
169
- serializedAnnotations = Object.assign(
170
- serializedAnnotations,
171
- this._serializeAnnotations([MetaProperties.ETAG], data, MetaProperties.ETAG)
172
- )
173
- }
174
-
175
- serializedAnnotations.value =
176
- data.value === null || data.value === undefined
177
- ? this._serializeNullValue(propertyOrReturnType)
178
- : this._encoder.encodeJson(data.value, propertyOrReturnType)
179
-
180
- return JSON.stringify(serializedAnnotations)
181
- } catch (error) {
182
- throw this._createError('An error occurred during serialization of the primitive value.', error)
183
- }
184
- }
185
-
186
- /**
187
- * Serialize a primitive-type collection value to an OData JSON string.
188
- * @param {(EdmProperty|EdmReturnType)} propertyOrReturnType EDM property or EDM return type
189
- * @param {?Array} data the collection value as Array
190
- * @param {boolean} eTagRequired true if an ETag is required
191
- * @returns {string} serialized representation in OData JSON format
192
- */
193
- serializePrimitiveCollection (propertyOrReturnType, data, eTagRequired) {
194
- validateThat('propertyOrReturnType', propertyOrReturnType)
195
- .truthy()
196
- .instanceOf(Object)
197
- validateThat('data', data)
198
- .truthy()
199
- .typeOf('object')
200
-
201
- try {
202
- let result = this._serializeAnnotations(
203
- [MetaProperties.CONTEXT],
204
- data,
205
- MetaProperties.CONTEXT,
206
- MetaProperties.METADATA_ETAG,
207
- MetaProperties.COUNT
208
- )
209
- if (eTagRequired) {
210
- result = Object.assign(result, this._serializeAnnotations([MetaProperties.ETAG], data, MetaProperties.ETAG))
211
- }
212
-
213
- result.value = []
214
- if (data.value !== null && data.value !== undefined) {
215
- validateThat('data.value', data.value).array()
216
- result.value = data.value.map(valueItem => {
217
- if (valueItem === undefined) throw new SerializationError('Missing primitive value')
218
- return valueItem === null
219
- ? this._serializeNullValue(propertyOrReturnType)
220
- : this._encoder.encodeJson(valueItem, propertyOrReturnType)
221
- })
222
- }
223
- return JSON.stringify(Object.assign(result, this._serializeAnnotations([], data, MetaProperties.NEXT_LINK)))
224
- } catch (error) {
225
- throw this._createError('An error occurred during serialization of the primitive collection value.', error)
226
- }
227
- }
228
-
229
- /**
230
- * Serialize a complex-type value to an OData JSON string.
231
- * @param {(EdmProperty|EdmReturnType)} propertyOrReturnType EDM property or EDM return type
232
- * @param {?Object} data the value
233
- * @param {SelectItem[]} selectItems select items from $select
234
- * @param {ExpandItem[]} expandItems expand items from $expand
235
- * @param {boolean} eTagRequired true if an ETag is required
236
- * @param {string} odataPath the path from the OData service root
237
- * @param {UriResource[]} complexPropertyPath final path segments with complex properties plus the one before
238
- * @returns {string} serialized representation in OData JSON format
239
- */
240
- serializeComplex (
241
- propertyOrReturnType,
242
- data,
243
- selectItems,
244
- expandItems,
245
- eTagRequired,
246
- odataPath,
247
- complexPropertyPath
248
- ) {
249
- validateThat('propertyOrReturnType', propertyOrReturnType)
250
- .truthy()
251
- .instanceOf(Object)
252
- validateThat('data', data).truthy()
253
-
254
- const value = data.value
255
-
256
- try {
257
- let result = this._serializeAnnotations(
258
- [MetaProperties.CONTEXT],
259
- value || data,
260
- MetaProperties.CONTEXT,
261
- MetaProperties.METADATA_ETAG
262
- )
263
- if (eTagRequired) {
264
- result = Object.assign(
265
- result,
266
- this._serializeAnnotations([MetaProperties.ETAG], value || data, MetaProperties.ETAG)
267
- )
268
- }
269
-
270
- if (value === null || value === undefined) {
271
- this._serializeNullValue(propertyOrReturnType)
272
- } else {
273
- const type = propertyOrReturnType.getType()
274
- const entitySetOrSingleton =
275
- complexPropertyPath[0].getEntitySet() ||
276
- complexPropertyPath[0].getSingleton() ||
277
- complexPropertyPath[0].getTarget()
278
- const complexPath = complexPropertyPath.slice(1).map(segment => segment.getPathSegmentIdentifier())
279
- const newExpandItems = expandItems.map(item => {
280
- let newItem = new ExpandItem().setPathSegments(item.getPathSegments()).setAll(item.isAll())
281
- for (const option of Object.values(QueryOptions)) newItem.setOption(option, item.getOption(option))
282
- newItem.setOption('_complexPath', complexPath)
283
- return newItem
284
- })
285
- Object.assign(
286
- result,
287
- this._serializeStructuralProperties(
288
- type,
289
- entitySetOrSingleton,
290
- value,
291
- odataPath,
292
- this._getSelectedPaths(selectItems, expandItems),
293
- newExpandItems,
294
- true
295
- ),
296
- this._serializeNavigationProperties(type, entitySetOrSingleton, value, odataPath, newExpandItems, true)
297
- )
298
- }
299
- return JSON.stringify(result)
300
- } catch (error) {
301
- throw this._createError('An error occurred during serialization of the complex value.', error)
302
- }
303
- }
304
-
305
- /**
306
- * Serialize a complex-type collection value to an OData JSON string.
307
- * @param {(EdmProperty|EdmReturnType)} propertyOrReturnType EDM property or EDM return type
308
- * @param {?Array} data the collection value as Array
309
- * @param {SelectItem[]} selectItems select items from $select
310
- * @param {ExpandItem[]} expandItems expand items from $expand
311
- * @param {boolean} eTagRequired true if an ETag is required
312
- * @param {string} odataPath the path from the OData service root
313
- * @param {UriResource[]} complexPropertyPath final path segments with complex properties plus the one before
314
- * @returns {string} serialized representation in OData JSON format
315
- */
316
- serializeComplexCollection (
317
- propertyOrReturnType,
318
- data,
319
- selectItems,
320
- expandItems,
321
- eTagRequired,
322
- odataPath,
323
- complexPropertyPath
324
- ) {
325
- validateThat('propertyOrReturnType', propertyOrReturnType)
326
- .truthy()
327
- .instanceOf(Object)
328
- validateThat('data', data).truthy()
329
-
330
- const value = data.value
331
-
332
- try {
333
- let result = this._serializeAnnotations(
334
- [MetaProperties.CONTEXT],
335
- data,
336
- MetaProperties.CONTEXT,
337
- MetaProperties.METADATA_ETAG,
338
- MetaProperties.COUNT
339
- )
340
- if (eTagRequired) {
341
- result = Object.assign(
342
- result,
343
- this._serializeAnnotations([MetaProperties.ETAG], value || data, MetaProperties.ETAG)
344
- )
345
- }
346
-
347
- result.value = []
348
- if (value !== null && value !== undefined) {
349
- validateThat('data.value', value).array()
350
- const type = propertyOrReturnType.getType()
351
- const entitySetOrSingleton =
352
- complexPropertyPath[0].getEntitySet() ||
353
- complexPropertyPath[0].getSingleton() ||
354
- complexPropertyPath[0].getTarget()
355
- const complexPath = complexPropertyPath.slice(1).map(segment => segment.getPathSegmentIdentifier())
356
- const selectedPaths = this._getSelectedPaths(selectItems, expandItems)
357
- const newExpandItems = expandItems.map(item => {
358
- let newItem = new ExpandItem().setPathSegments(item.getPathSegments()).setAll(item.isAll())
359
- for (const option of Object.values(QueryOptions)) newItem.setOption(option, item.getOption(option))
360
- newItem.setOption('_complexPath', complexPath)
361
- return newItem
362
- })
363
- result.value = value.map(valueItem => {
364
- if (valueItem === undefined) throw new SerializationError('Missing complex value')
365
- return valueItem === null
366
- ? this._serializeNullValue(propertyOrReturnType)
367
- : Object.assign(
368
- {},
369
- this._serializeStructuralProperties(
370
- type,
371
- entitySetOrSingleton,
372
- valueItem,
373
- odataPath,
374
- selectedPaths,
375
- newExpandItems,
376
- true
377
- ),
378
- this._serializeNavigationProperties(
379
- type,
380
- entitySetOrSingleton,
381
- valueItem,
382
- odataPath,
383
- newExpandItems,
384
- true
385
- )
386
- )
387
- })
388
- }
389
- return JSON.stringify(Object.assign(result, this._serializeAnnotations([], data, MetaProperties.NEXT_LINK)))
390
- } catch (error) {
391
- throw this._createError('An error occurred during serialization of the complex collection value.', error)
392
- }
393
- }
394
-
395
- /**
396
- * Serializes entity collection references.
397
- * @param {UriResource[]} pathSegments path segments of the URI of the entity
398
- * @param {?Array} data the collection value as Array
399
- * @returns {string} serialized representation in OData JSON format
400
- */
401
- serializeReferenceCollection (pathSegments, data) {
402
- validateThat('pathSegments', pathSegments).array()
403
- validateThat('data', data)
404
- .truthy()
405
- .typeOf('object')
406
-
407
- try {
408
- return JSON.stringify(
409
- Object.assign(
410
- this._serializeAnnotations(
411
- [MetaProperties.CONTEXT],
412
- data,
413
- MetaProperties.CONTEXT,
414
- MetaProperties.METADATA_ETAG,
415
- MetaProperties.COUNT
416
- ),
417
- { value: data.value.map(entity => this._serializeEntityReference(pathSegments, entity)) },
418
- this._serializeAnnotations([], data, MetaProperties.NEXT_LINK)
419
- )
420
- )
421
- } catch (error) {
422
- throw this._createError('An error occurred during serialization of the reference collection.', error)
423
- }
424
- }
425
-
426
- /**
427
- * Serializes entity reference.
428
- * @param {UriResource[]} pathSegments path segments of the URI of the entity
429
- * @param {Object} data - the collection value as Array
430
- * @returns {string} serialized representation in OData JSON format
431
- */
432
- serializeReference (pathSegments, data) {
433
- validateThat('pathSegments', pathSegments).array()
434
- validateThat('data', data)
435
- .truthy()
436
- .typeOf('object')
437
-
438
- try {
439
- return JSON.stringify(
440
- Object.assign(
441
- this._serializeAnnotations(
442
- [MetaProperties.CONTEXT],
443
- data.value || data,
444
- MetaProperties.CONTEXT,
445
- MetaProperties.METADATA_ETAG
446
- ),
447
- this._serializeEntityReference(pathSegments, data.value)
448
- )
449
- )
450
- } catch (error) {
451
- throw this._createError('An error occurred during serialization of the reference.', error)
452
- }
453
- }
454
-
455
- /**
456
- * Serializes entity reference.
457
- * @param {UriResource[]} pathSegments path segments of the URI of the entity
458
- * @param {Object} entity the entity the reference will be serialized for
459
- * @returns {Object} serialized entity reference with correct annotations
460
- * @private
461
- */
462
- _serializeEntityReference (pathSegments, entity) {
463
- // Retrieve the entity type from the segment before the last segment (the last segment is $ref).
464
- const entityType = pathSegments[pathSegments.length - 2].getEdmType()
465
- return {
466
- [JsonAnnotations.ID]: UriHelper.buildCanonicalUrl(
467
- pathSegments,
468
- UriHelper.buildEntityKeys(entityType, entity, this._encoder)
469
- )
470
- }
471
- }
472
-
473
- /**
474
- * Serializes entity collections.
475
- * @param {EdmEntityType|EdmEntitySet} entityTypeOrSet - entity type for the entities
476
- * @param {Array} entities - entities, which have to be serialized
477
- * @param {Array.<string[]>} selectedPaths - selected properties' paths from $select
478
- * @param {ExpandItem[]} expandItems - expand items from $expand
479
- * @param {boolean} eTagRequired true if an ETag is required
480
- * @param {boolean} isKeyRequired whether all key properties have to be serialized
481
- * @param {string} odataPath the path from the OData service root
482
- * @returns {Array} objects representing the serialized entities
483
- * @private
484
- */
485
- _serializeCollectionEntities (
486
- entityTypeOrSet,
487
- entities,
488
- selectedPaths,
489
- expandItems,
490
- eTagRequired,
491
- isKeyRequired,
492
- odataPath
493
- ) {
494
- const entityType = entityTypeOrSet.getEntityType ? entityTypeOrSet.getEntityType() : entityTypeOrSet
495
- return entities.map((currentEntity, index) => {
496
- try {
497
- return this._serializeEntity(
498
- entityTypeOrSet,
499
- currentEntity,
500
- selectedPaths,
501
- expandItems,
502
- eTagRequired,
503
- isKeyRequired,
504
- entityType.isReduced
505
- ? '' // The OData path is only used for next links which cannot appear for transient entities.
506
- : odataPath + UriHelper.buildKeyString(UriHelper.buildEntityKeys(entityType, currentEntity, this._encoder))
507
- )
508
- } catch (error) {
509
- throw new SerializationError(
510
- this._getErrorMsgForCollectionEntity(currentEntity, entityType.getKeyPropertyRefs().keys(), index),
511
- error
512
- )
513
- }
514
- })
515
- }
516
-
517
- /**
518
- * Serializes entity to OData JSON string.
519
- * The entity data must be represented as a plain object with property-value pairs.
520
- * The names and the number of the properties must correspond to the ones in the entity type.
521
- * Property names must be specified as strings.
522
- * Property values must correspond to the EDM types of the corresponding entity-type properties.
523
- * @param {EdmEntitySet|EdmSingleton|EdmEntityType} entityTypeOrSet entity set or singleton or type of the entity
524
- * @param {Object} data entity data
525
- * @param {Array.<string[]>} selectedPaths selected properties' paths from $select
526
- * @param {ExpandItem[]} expandItems expand items from $expand
527
- * @param {boolean} eTagRequired true, if an ETag is required
528
- * @param {boolean} isKeyRequired whether all key properties have to be serialized
529
- * @param {string} odataPath the path from the OData service root
530
- * @returns {Object} plain object, representing the serialized entity
531
- * @private
532
- */
533
- _serializeEntity (entityTypeOrSet, data, selectedPaths, expandItems, eTagRequired, isKeyRequired, odataPath) {
534
- const entityType = entityTypeOrSet.getEntityType ? entityTypeOrSet.getEntityType() : entityTypeOrSet
535
- const entitySet = entityTypeOrSet.getEntityType ? entityTypeOrSet : null
536
-
537
- const serializedStructProps = this._serializeStructuralProperties(
538
- entityType,
539
- entitySet,
540
- data,
541
- odataPath,
542
- selectedPaths,
543
- expandItems,
544
- isKeyRequired
545
- )
546
- const serializedNavProps = this._serializeNavigationProperties(
547
- entityType,
548
- entitySet,
549
- data,
550
- odataPath,
551
- expandItems,
552
- isKeyRequired
553
- )
554
-
555
- // An entity is considered transient if its entity type has been created just for this request,
556
- // for example from $apply, and if either some properties have been aggregated away
557
- // or not all of its base type's properties have been serialized.
558
- let isTransient = false
559
- if (entityType.isReduced) {
560
- let type = entityType
561
- while (type.isReduced) type = type.getBaseType()
562
- isTransient =
563
- entityType.isReduced() ||
564
- Array.from(type.getProperties().keys()).some(name => serializedStructProps[name] === undefined)
565
- }
566
-
567
- let serializedAnnotations =
568
- (eTagRequired || (entitySet && entitySet.isConcurrent())) && !isTransient
569
- ? this._serializeAnnotations([MetaProperties.ETAG], data, MetaProperties.ETAG)
570
- : {}
571
- // Add annotation '"@odata.id": null' for a transient entity.
572
- if (isTransient) serializedAnnotations[JsonAnnotations.ID] = null
573
-
574
- return Object.assign(
575
- serializedAnnotations,
576
- this._serializeOperationAdvertisement(data),
577
- serializedStructProps,
578
- serializedNavProps
579
- )
580
- }
581
-
582
- /**
583
- * Serializes entity annotations.
584
- * @param {string[]} requiredAnnotations required annotations
585
- * @param {Object} sourceData the data
586
- * @param {string[]} metaProperties meta properties to consider
587
- * @returns {Object} object containing the serialized annotations
588
- * @private
589
- */
590
- _serializeAnnotations (requiredAnnotations, sourceData, ...metaProperties) {
591
- let result = {}
592
- if (sourceData) {
593
- for (const metaProperty of metaProperties) {
594
- if (requiredAnnotations.includes(metaProperty)) this._assertAnnotationExist(metaProperty, sourceData)
595
- const annotation = MetaProperties.getAnnotation(metaProperty)
596
- result[annotation] = this._validateAnnotationValue(annotation, sourceData[metaProperty])
597
- }
598
- }
599
- return result
600
- }
601
-
602
- /**
603
- * Asserts that an annotation exists.
604
- * @param {string} annotation the annotation name
605
- * @param {Object} sourceData The data object on which the annotation should exist
606
- * @returns {boolean} True if annotation exists
607
- * @private
608
- */
609
- _assertAnnotationExist (annotation, sourceData) {
610
- if (sourceData && sourceData[annotation] !== undefined) return true
611
- throw new SerializationError(`Missing Annotation '${annotation}' in ${JSON.stringify(sourceData)}`)
612
- }
613
-
614
- /**
615
- * Validates and converts an OData annotation value.
616
- * Validates and returns the validated/converted value if it is for a supported OData annotation.
617
- * A value for an unsupported OData annotation will result in an error.
618
- * If the annotation is not an OData-defined annotation the value is returned 'as is'.
619
- *
620
- * @param {string} annotation The annotation
621
- * @param {*} value The value of the annotation
622
- * @returns {*} The value of the annotation or the converted one if it is an OData annotation
623
- * @throws {SerializationError} In case there is an error with converting the annotation value
624
- * @private
625
- */
626
- _validateAnnotationValue (annotation, value) {
627
- if (value === undefined) return value
628
- if (annotation === Annotations.COUNT) {
629
- // @odata.count
630
- try {
631
- const countValue = this._encoder.encodeJson(value, { getType: () => EdmPrimitiveTypeKind.Int64 })
632
- if (countValue >= 0) return countValue
633
- throw new SerializationError('The value of ' + MetaProperties.COUNT + ' must be a non-negative number')
634
- } catch (error) {
635
- throw new SerializationError(`An error occurred during serialization of '${annotation}' annotation.`, error)
636
- }
637
- } else if (
638
- annotation === Annotations.ETAG ||
639
- annotation === Annotations.METADATA_ETAG ||
640
- annotation === Annotations.MEDIA_ETAG
641
- ) {
642
- // @odata.etag or @odata.metadataEtag or @odata.mediaEtag
643
- try {
644
- this._valueValidator.validateEtagValue(value)
645
- return `W/"${value}"`
646
- } catch (error) {
647
- throw new SerializationError(`An error occurred during serialization of '${annotation}' annotation.`, error)
648
- }
649
- } else if (
650
- annotation === Annotations.CONTEXT ||
651
- annotation === Annotations.NEXT_LINK ||
652
- annotation === Annotations.MEDIA_CONTENT_TYPE ||
653
- annotation === Annotations.MEDIA_EDIT_LINK ||
654
- annotation === Annotations.MEDIA_READ_LINK
655
- ) {
656
- if (typeof value === 'string') return value
657
- throw new SerializationError(`The annotation '${annotation}' has the wrong value '${value}'.`)
658
- } else if (annotation.startsWith('@odata.')) {
659
- throw new SerializationError(`Unsupported OData annotation '${annotation}'`)
660
- } else {
661
- // TODO: Validate and convert foreign annotations.
662
- return value
663
- }
664
- }
665
-
666
- /**
667
- * Get selected paths from select items plus paths from expanded navigation properties in complex properties.
668
- * @param {SelectItem[]} selectItems select items from $select
669
- * @param {ExpandItem[]} expandItems expand items
670
- * @returns {Array.<string[]>} selected properties' paths from $select
671
- * @private
672
- */
673
- _getSelectedPaths (selectItems, expandItems) {
674
- return selectItems && selectItems.length > 0 && !selectItems.some(item => item.isAll())
675
- ? selectItems
676
- .map(item => item.getPathSegments().map(segment => segment.getPathSegmentIdentifier()))
677
- .concat(
678
- expandItems
679
- ? expandItems
680
- .filter(item => item.getPathSegments().length && !item.getPathSegments()[0].getNavigationProperty())
681
- .map(item =>
682
- item
683
- .getPathSegments()
684
- .map(segment => segment.getPathSegmentIdentifier())
685
- // Append a dummy path element to avoid selecting all properties from a complex property
686
- // only needed for expand.
687
- .concat('*')
688
- )
689
- : []
690
- )
691
- : []
692
- }
693
-
694
- /**
695
- * Reduce selected paths to those paths following a specified complex-property name.
696
- * @param {Array.<string[]>} paths - selected properties' paths
697
- * @param {string} name - property name
698
- * @returns {Array.<string[]>} properties' paths following the specified complex-property name
699
- * @private
700
- */
701
- _reduceSelectedPaths (paths, name) {
702
- // If the complex property is selected without following sub-components,
703
- // return an empty paths array to signal that all sub-components are selected.
704
- if (paths.some(path => path[0] === name && path.length === 1)) return []
705
- // Return all paths starting with the name of the complex property, but not including its name itself.
706
- return paths.filter(path => path[0] === name && path.length > 1).map(path => path.slice(1))
707
- }
708
-
709
- /**
710
- * Reduce expand items to those with paths following a specified complex-property name and those with isAll().
711
- * @param {ExpandItem[]} expandItems expand items
712
- * @param {string} name complex-property name
713
- * @returns {ExpandItem[]} expand items following the specified complex-property name
714
- * @private
715
- */
716
- _reduceExpandItems (expandItems, name) {
717
- return (
718
- expandItems &&
719
- // Only expand items with isAll() and no path segments
720
- // or with paths starting with the complex-property name are interesting.
721
- expandItems
722
- .filter(
723
- item =>
724
- (item.isAll() && !item.getPathSegments().length) ||
725
- (item.getPathSegments().length > (item.isAll() ? 0 : 1) &&
726
- item.getPathSegments()[0].getPathSegmentIdentifier() === name)
727
- )
728
- // Remove the name of the complex property from the paths and remember it in pseudo options.
729
- .map(item => {
730
- let newItem = new ExpandItem().setPathSegments(item.getPathSegments().slice(1)).setAll(item.isAll())
731
- for (const option of Object.values(QueryOptions)) newItem.setOption(option, item.getOption(option))
732
- newItem.setOption('_complexPath', (item.getOption('_complexPath') || []).concat(name))
733
- return newItem
734
- })
735
- )
736
- }
737
-
738
- /**
739
- * Serializes structural properties of a structured type.
740
- * @param {EdmEntityType|EdmComplexType} type EDM type for the specified data
741
- * @param {?(EdmEntitySet|EdmSingleton)} entitySetOrSingleton EDM entityset or singleton for the specified data
742
- * @param {Object} data structure data, represented as a plain object with property-value pairs
743
- * @param {string} odataPath the path from the OData service root
744
- * @param {Array.<string[]>} selectedPaths selected properties' paths from $select
745
- * @param {ExpandItem[]} expandItems expand items from $expand
746
- * @param {boolean} isKeyRequired whether all key properties have to be serialized
747
- * @param {Object} entityData the data of the entity this structure is part of
748
- * @returns {Object} JSON object containing the serialized structural properties of the entity
749
- * @private
750
- */
751
- _serializeStructuralProperties (
752
- type,
753
- entitySetOrSingleton,
754
- data,
755
- odataPath,
756
- selectedPaths,
757
- expandItems,
758
- isKeyRequired
759
- ) {
760
- validateThat('data', data)
761
- .truthy()
762
- .typeOf('object')
763
- if (Array.isArray(data)) {
764
- throw new SerializationError('Value of a structured property must be an object, not an Array')
765
- }
766
-
767
- let serializedStructuralProps = this._getAssertAdditionalProperties(data, type, selectedPaths)
768
-
769
- for (const [propertyName, property] of type.getProperties()) {
770
- if (
771
- selectedPaths.length === 0 ||
772
- selectedPaths.find(path => path[0] === propertyName) ||
773
- (isKeyRequired && type.getKind() === EdmTypeKind.ENTITY && type.getKeyPropertyRef(propertyName))
774
- ) {
775
- let propertyType = property.getType()
776
- if (propertyType.getKind() === EdmTypeKind.DEFINITION) propertyType = propertyType.getUnderlyingType()
777
- // "The values for stream properties do not appear in the entity payload."
778
- // Exception for OASIS issue 1177: "Streams that are annotated as the application/json media type
779
- // (or one of its subtypes, optionally with format parameters) through @mediaContentType instance
780
- // annotation are represented as native JSON in JSON requests and responses"
781
- if (propertyType === EdmPrimitiveTypeKind.Stream) {
782
- const mediaType = data[propertyName + MetaProperties.MEDIA_CONTENT_TYPE]
783
- if (!mediaType || !mediaType.startsWith(contentTypes.JSON)) continue
784
- }
785
- const isComplex = propertyType.getKind() === EdmTypeKind.COMPLEX
786
- const propertyValue = data[propertyName]
787
- // Don't serialize optional property if the value is absent.
788
- if (
789
- (propertyValue === null || propertyValue === undefined) &&
790
- type.getOptionalProperty &&
791
- type.getOptionalProperty(propertyName)
792
- ) {
793
- continue
794
- }
795
- // Add the type annotation to a dynamic property.
796
- if (
797
- !isComplex &&
798
- ![EdmPrimitiveTypeKind.Boolean, EdmPrimitiveTypeKind.Double, EdmPrimitiveTypeKind.String].includes(
799
- propertyType
800
- ) &&
801
- property.constructor.name !== 'EdmProperty'
802
- ) {
803
- serializedStructuralProps[propertyName + JsonAnnotations.TYPE] =
804
- '#' + propertyType.getFullQualifiedName().name
805
- }
806
- // Serialize the value and write it to the result structure.
807
- const paths = isComplex ? this._reduceSelectedPaths(selectedPaths, propertyName) : []
808
- const reducedExpandItems = isComplex ? this._reduceExpandItems(expandItems, propertyName) : []
809
- serializedStructuralProps[propertyName] = this._serializeProperty(
810
- property,
811
- entitySetOrSingleton,
812
- propertyValue,
813
- odataPath + '/' + encodeURIComponent(propertyName),
814
- paths,
815
- reducedExpandItems,
816
- isKeyRequired
817
- )
818
- }
819
- }
820
- return serializedStructuralProps
821
- }
822
-
823
- /**
824
- * Serialize navigation properties.
825
- * @param {EdmEntityType|EdmComplexType} type - EDM type for the specified data
826
- * @param {?(EdmEntitySet|EdmSingleton)} entitySetOrSingleton - EDM entityset or singleton for the specified data
827
- * @param {Object} data the data
828
- * @param {string} odataPath the path from the OData service root
829
- * @param {ExpandItem[]} expandItems - expand items from $expand
830
- * @param {boolean} isKeyRequired whether all key properties have to be serialized
831
- * @returns {Object} the serialized navigation properties
832
- * @private
833
- */
834
- _serializeNavigationProperties (
835
- type,
836
- entitySetOrSingleton,
837
- data,
838
- odataPath,
839
- expandItems,
840
- isKeyRequired
841
- ) {
842
- let serializedNavProps = {}
843
- if (!expandItems || expandItems.length === 0) return serializedNavProps
844
-
845
- validateThat('data', data)
846
- .truthy()
847
- .typeOf('object')
848
-
849
- const allExpandItem = expandItems.find(item => item.isAll() && !item.getPathSegments().length)
850
-
851
- for (const [navPropertyName, navProperty] of type.getNavigationProperties()) {
852
- const expandItem =
853
- allExpandItem ||
854
- expandItems.find(
855
- expItem =>
856
- expItem.getPathSegments()[0].getNavigationProperty() &&
857
- expItem
858
- .getPathSegments()[0]
859
- .getNavigationProperty()
860
- .getName() === navPropertyName
861
- )
862
-
863
- if (expandItem) {
864
- const expandedEntityType = navProperty.getEntityType()
865
- // Get the related entity set or singleton.
866
- // We could be in a complex property, so we have to take the path from the source entity set
867
- // into account, which has been stored in a pseudo option by the method _reduceExpandItems(...).
868
- const targetPath = (expandItem.getOption('_complexPath') || []).concat(navPropertyName)
869
- const expandedEntitySet = entitySetOrSingleton
870
- ? entitySetOrSingleton.getRelatedBindingTarget(targetPath.join('/'))
871
- : null
872
- const navPropertyValue = data[navPropertyName]
873
- const optionsExpandItems = expandItem.getOption(QueryOptions.EXPAND)
874
- const optionsSelectedPaths = this._getSelectedPaths(
875
- expandItem.getOption(QueryOptions.SELECT),
876
- optionsExpandItems
877
- )
878
- const expandItemPathSegments = expandItem.getPathSegments()
879
- const isOnlyCount =
880
- expandItemPathSegments.length > 0 &&
881
- expandItemPathSegments[expandItemPathSegments.length - 1].getKind() === ResourceKind.COUNT
882
-
883
- if (isOnlyCount || expandItem.getOption(QueryOptions.COUNT)) {
884
- this._assertAnnotationExist(navPropertyName + MetaProperties.COUNT, data)
885
- serializedNavProps[navPropertyName + Annotations.COUNT] = this._validateAnnotationValue(
886
- Annotations.COUNT,
887
- data[navPropertyName + MetaProperties.COUNT]
888
- )
889
- }
890
-
891
- if (isOnlyCount) {
892
- // The count has already been added above.
893
- } else if (navPropertyValue === null || navPropertyValue === undefined) {
894
- serializedNavProps[navPropertyName] = navProperty.isCollection() ? [] : this._serializeNullValue(navProperty)
895
- } else if (Array.isArray(navPropertyValue) && navProperty.isCollection()) {
896
- serializedNavProps[navPropertyName] = this._serializeCollectionEntities(
897
- expandedEntitySet || expandedEntityType,
898
- navPropertyValue,
899
- optionsSelectedPaths,
900
- optionsExpandItems,
901
- undefined, // eTagRequired is determined from expandedEntitySet
902
- isKeyRequired,
903
- odataPath + '/' + encodeURIComponent(navPropertyName)
904
- )
905
- } else if (!Array.isArray(navPropertyValue) && !navProperty.isCollection()) {
906
- serializedNavProps[navPropertyName] = this._serializeEntity(
907
- expandedEntitySet || expandedEntityType,
908
- navPropertyValue,
909
- optionsSelectedPaths,
910
- optionsExpandItems,
911
- undefined, // eTagRequired is determined from expandedEntitySet
912
- isKeyRequired,
913
- odataPath + '/' + encodeURIComponent(navPropertyName)
914
- )
915
- } else {
916
- throw new SerializationError(
917
- 'The provided data does not fit the type of the navigation property: ' + navPropertyName
918
- )
919
- }
920
-
921
- const skiptoken = data[navPropertyName + MetaProperties.NEXT_LINK]
922
- if (skiptoken) {
923
- if (isOnlyCount || !navProperty.isCollection() || !serializedNavProps[navPropertyName].length) {
924
- throw new SerializationError('Next links are only supported for collections of entities or of references.')
925
- }
926
- serializedNavProps[navPropertyName + Annotations.NEXT_LINK] = new NextLinkSerializer(
927
- this._encoder
928
- ).serializeExpandNextLink(odataPath + '/' + encodeURIComponent(navPropertyName), expandItem, skiptoken)
929
- }
930
- }
931
- }
932
- return serializedNavProps
933
- }
934
-
935
- /**
936
- * Checks whether the entity contains properties that belong neither to the structural nor to the navigation
937
- * properties of the specified type. Returns any additional annotations.
938
- *
939
- * @param {Object} data - entity data, represented as a plain object with property-value pairs.
940
- * @param {EdmEntityType|EdmComplexType} type - EDM type for the specified entity data
941
- * @param {Array.<string[]>} selectedPaths - selected properties' paths from $select
942
- * @returns {Object} an object with all additional properties found
943
- * @throws {SerializationError} if there is any unexpected property
944
- * @private
945
- */
946
- _getAssertAdditionalProperties (data, type, selectedPaths) {
947
- let extraProperties = {}
948
-
949
- for (const entityProp in data) {
950
- const [identifier, star, annotation] = this._getPropertyNameAndAnnotation(entityProp)
951
-
952
- if (identifier && !type.getProperty(identifier)) {
953
- if (identifier === 'DraftAdministrativeData_DraftUUID') continue
954
- throw new SerializationError(
955
- "The entity contains data for '" +
956
- entityProp +
957
- "' which does not belong " +
958
- "to the structural or navigation properties of the type '" +
959
- type.getName() +
960
- "'."
961
- )
962
- }
963
-
964
- if (annotation && !type.getNavigationProperty(identifier)) {
965
- let newPropertyName = entityProp
966
- if (star) newPropertyName = newPropertyName.replace('*', '')
967
- if (newPropertyName.startsWith('@odata.')) continue
968
- if (
969
- !identifier ||
970
- selectedPaths.length === 0 ||
971
- selectedPaths.find(path => path[0] === identifier) ||
972
- (type.getKind() === EdmTypeKind.ENTITY && type.getKeyPropertyRef(identifier))
973
- ) {
974
- extraProperties[newPropertyName] = this._validateAnnotationValue(annotation, data[entityProp])
975
- }
976
- }
977
- }
978
-
979
- return extraProperties
980
- }
981
-
982
- /**
983
- * Serializes EDM property.
984
- * @param {EdmProperty} property - EDM property, which has to be serialized
985
- * @param {?(EdmEntitySet|EdmSingleton)} entitySetOrSingleton EDM entityset or singleton the property is part of
986
- * @param {Array|Object|Buffer|stream.Readable|string|number|boolean|null|undefined} propertyValue property value
987
- * @param {string} odataPath the path from the OData service root
988
- * @param {Array.<string[]>} selectedPaths - selected properties' paths from $select
989
- * @param {ExpandItem[]} expandItems - expand items from $expand
990
- * @param {boolean} isKeyRequired whether all key properties have to be serialized
991
- * @returns {Array|Object|stream.Readable|string|number|boolean|null} serialized property value
992
- * @private
993
- */
994
- _serializeProperty (
995
- property,
996
- entitySetOrSingleton,
997
- propertyValue,
998
- odataPath,
999
- selectedPaths,
1000
- expandItems,
1001
- isKeyRequired
1002
- ) {
1003
- if (propertyValue === null || propertyValue === undefined) {
1004
- return property.isCollection() ? [] : this._serializeNullValue(property)
1005
- }
1006
- if (property.isCollection() && !Array.isArray(propertyValue)) {
1007
- throw new SerializationError(`Value of collection property '${property.getName()}' must be an array`)
1008
- }
1009
- try {
1010
- return property.isCollection()
1011
- ? propertyValue.map(value =>
1012
- this._serializePropertyValue(
1013
- property,
1014
- entitySetOrSingleton,
1015
- value,
1016
- odataPath,
1017
- selectedPaths,
1018
- expandItems,
1019
- isKeyRequired
1020
- )
1021
- )
1022
- : this._serializePropertyValue(
1023
- property,
1024
- entitySetOrSingleton,
1025
- propertyValue,
1026
- odataPath,
1027
- selectedPaths,
1028
- expandItems,
1029
- isKeyRequired
1030
- )
1031
- } catch (error) {
1032
- throw new SerializationError(`Serialization of the '${property.getName()}' property failed.`, error)
1033
- }
1034
- }
1035
-
1036
- /**
1037
- * Serializes null value for the EDM (navigation) property or EDM return type.
1038
- * @param {(EdmProperty|EdmNavigationProperty|EdmReturnType)} propertyOrReturnType EDM primitive or navigation property or EDM return type
1039
- * @returns {null} null value, if nullable
1040
- * @throws {SerializationError} if the property is not nullable
1041
- * @private
1042
- */
1043
- _serializeNullValue (propertyOrReturnType) {
1044
- const nullable = propertyOrReturnType.isNullable()
1045
- if (nullable === undefined || nullable) return null
1046
- const name = propertyOrReturnType.getName()
1047
- if (name === 'IsActiveEntity' || name === 'HasActiveEntity' || name === 'HasDraftEntity') return
1048
- throw new SerializationError(
1049
- 'Not nullable value ' +
1050
- (propertyOrReturnType.getName ? "for '" + propertyOrReturnType.getName() + "' " : '') +
1051
- 'must not be null'
1052
- )
1053
- }
1054
-
1055
- /**
1056
- * Serializes a single value of an EDM property.
1057
- * @param {EdmProperty} property - EDM property for which the value has to be serialized
1058
- * @param {?(EdmEntitySet|EdmSingleton)} entitySetOrSingleton EDM entityset or singleton the property is part of
1059
- * @param {Object|Buffer|stream.Readable|string|number|boolean|null} propertyValue property value to be serialized
1060
- * @param {string} odataPath the path from the OData service root
1061
- * @param {Array.<string[]>} selectedPaths - selected properties' paths from $select
1062
- * @param {ExpandItem[]} expandItems - expand items from $expand
1063
- * @param {boolean} isKeyRequired whether all key properties have to be serialized
1064
- * @returns {Object|stream.Readable|string|number|boolean|null} serialized property value
1065
- * @private
1066
- */
1067
- _serializePropertyValue (
1068
- property,
1069
- entitySetOrSingleton,
1070
- propertyValue,
1071
- odataPath,
1072
- selectedPaths,
1073
- expandItems,
1074
- isKeyRequired
1075
- ) {
1076
- // This is used to serialize null elements inside a collection.
1077
- if (propertyValue === undefined) {
1078
- throw new SerializationError("Missing value for property '" + property.getName() + "'")
1079
- }
1080
- if (propertyValue === null) return this._serializeNullValue(property)
1081
-
1082
- const propertyType = property.getType()
1083
- switch (propertyType.getKind()) {
1084
- case EdmTypeKind.PRIMITIVE:
1085
- case EdmTypeKind.ENUM:
1086
- if (propertyType === EdmPrimitiveTypeKind.Stream) return propertyValue
1087
- return this._encoder.encodeJson(propertyValue, property)
1088
- case EdmTypeKind.DEFINITION:
1089
- if (propertyType.getUnderlyingType() === EdmPrimitiveTypeKind.Stream) return propertyValue
1090
- return this._encoder.encodeJson(propertyValue, property)
1091
- case EdmTypeKind.COMPLEX:
1092
- return Object.assign(
1093
- this._serializeStructuralProperties(
1094
- propertyType,
1095
- entitySetOrSingleton,
1096
- propertyValue,
1097
- odataPath,
1098
- selectedPaths,
1099
- expandItems,
1100
- isKeyRequired
1101
- ),
1102
- this._serializeNavigationProperties(
1103
- propertyType,
1104
- entitySetOrSingleton,
1105
- propertyValue,
1106
- odataPath,
1107
- expandItems,
1108
- isKeyRequired
1109
- )
1110
- )
1111
- default:
1112
- throw new SerializationError(
1113
- 'Serialization of properties of ' + propertyType.getKind() + ' type kind is not supported'
1114
- )
1115
- }
1116
- }
1117
-
1118
- /**
1119
- * Returns all advertised operations in the passed data as object.
1120
- * @param {Object} data entity data
1121
- * @returns {Object} object with every operation advertisement from the passed data
1122
- * @private
1123
- */
1124
- _serializeOperationAdvertisement (data) {
1125
- let operationAdvertisements = {}
1126
- // TODO: validate anything? Namespace? Is the operation actually bound to the EntitySet?
1127
- for (const propertyName in data) {
1128
- if (propertyName.startsWith('#')) operationAdvertisements[propertyName] = {} // Only odata.metadata=minimal
1129
- }
1130
- return operationAdvertisements
1131
- }
1132
-
1133
- /**
1134
- * Returns error message, which will be used for the error, thrown during the serialization of an entity in scope of
1135
- * the entity collection.
1136
- *
1137
- * @param {Object} entity - entity data
1138
- * @param {string[]} keyNames - names of all the key properties of the entity's entity type
1139
- * @param {number} entityIndex - index of the entity in the entity collection
1140
- * @returns {string} error message
1141
- * @private
1142
- */
1143
- _getErrorMsgForCollectionEntity (entity, keyNames, entityIndex) {
1144
- const keyValues = this._getEntityKeyValues(entity, keyNames)
1145
-
1146
- // if key/value pairs can be determined, return the error message containing key(s) info
1147
- if (keyValues) {
1148
- return 'An error occurred during serialization of the entity with the following key(s): ' + keyValues
1149
- }
1150
-
1151
- // if key/value pairs cannot be determined, return the error message, containing the index of the entity in the
1152
- // entity collection
1153
- return `An error occurred during serialization of the entity at index #${entityIndex} in the entity collection`
1154
- }
1155
-
1156
- /**
1157
- * Returns string, containing values for the key properties in the specified entity.
1158
- * @param {Object} entity - entity data
1159
- * @param {string[]} keyNames - names of the key properties in the entity's entity type
1160
- * @returns {?string} string in the format <key_property_name1>: <value1>, <key_property_name2>: <value2>
1161
- * or null if one of the key values is undefined
1162
- * @private
1163
- */
1164
- _getEntityKeyValues (entity, keyNames) {
1165
- let keyValues = []
1166
-
1167
- for (const keyName of keyNames) {
1168
- const keyValue = entity[keyName]
1169
- // return null to indicate that key values cannot be determined
1170
- if (keyValue === null || keyValue === undefined) return null
1171
- keyValues.push(keyName + ': ' + keyValue)
1172
- }
1173
-
1174
- return keyValues.join(', ')
1175
- }
1176
-
1177
- /**
1178
- * Creates an error with a generic message that is extended in special circumstances.
1179
- * @param {string} genericMessage the generic error message
1180
- * @param {Error} error the error
1181
- * @returns {SerializationError} the error with the (potentially extended) generic error message
1182
- * @private
1183
- */
1184
- _createError (genericMessage, error) {
1185
- let text = genericMessage
1186
- let err = error
1187
- while (err) {
1188
- if (err.message.includes('IEEE754Compatible')) {
1189
- text += ' Consider requesting JSON content type with parameter IEEE754Compatible=true.'
1190
- break
1191
- }
1192
- err = typeof err.getRootCause === 'function' ? err.getRootCause() : undefined
1193
- }
1194
- return new SerializationError(text, error)
1195
- }
1196
-
1197
- /**
1198
- * Returns the property name and the annotation name for a name.
1199
- * If the name starts with an '@' like '@odata.etag' the property name is empty
1200
- * and '@odata.etag' is the annotation.
1201
- * If the name is 'Property@any.annotation' then the property name would be 'Property'
1202
- * and the annotation would be '@any.annotation'.
1203
- * The information about an optional star character in names like 'Property*@annotation' is also returned.
1204
- * @param {string} name the name
1205
- * @returns {Array.<string|boolean|null>} an array with propertyName (string), star (boolean), annotation (?string)
1206
- */
1207
- _getPropertyNameAndAnnotation (name) {
1208
- if (!name.includes('*') && !name.includes('@') && !name.includes('#')) return [name]
1209
- let index = name.indexOf('*')
1210
- const star = index >= 0
1211
- if (index === -1) index = name.indexOf('@')
1212
- if (index === -1) index = name.indexOf('#')
1213
- const propertyName = name.substring(0, index)
1214
- if (star && index < name.length) index++
1215
- const annotation = name[index] === '@' ? name.substring(index) : null
1216
- return [propertyName, star, annotation]
1217
- }
1218
- }
1219
-
1220
- module.exports = ResourceJsonSerializer