@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.
- package/CHANGELOG.md +121 -680
- package/LICENSE +15 -21
- package/README.md +1 -1
- package/_i18n/i18n_sl.properties +3 -3
- package/_i18n/messages.properties +1 -1
- package/app/index.js +1 -1
- package/bin/serve.js +17 -19
- package/eslint.config.mjs +7 -1
- package/lib/compile/etc/_localized.js +3 -24
- package/lib/compile/etc/yaml.js +6 -15
- package/lib/compile/for/odata.js +2 -2
- package/lib/compile/load.js +15 -4
- package/lib/compile/minify.js +1 -0
- package/lib/compile/to/edm-files.js +4 -33
- package/lib/compile/to/hdbtabledata.js +16 -3
- package/lib/compile/to/sql.js +1 -2
- package/lib/core/linked-csn.js +7 -8
- package/lib/dbs/cds-deploy.js +4 -3
- package/lib/env/cds-env.js +9 -9
- package/lib/env/cds-requires.js +23 -50
- package/lib/env/defaults.js +15 -44
- package/lib/env/schemas/cds-package.js +1 -1
- package/lib/i18n/index.js +1 -0
- package/lib/i18n/locale.js +41 -0
- package/lib/index.js +25 -15
- package/lib/log/cds-error.js +13 -3
- package/lib/log/cds-log.js +43 -18
- package/lib/log/format/aspects/als.js +2 -15
- package/lib/plugins.js +11 -11
- package/lib/ql/CREATE.js +1 -1
- package/lib/ql/DELETE.js +1 -1
- package/lib/ql/DROP.js +1 -1
- package/lib/ql/INSERT.js +9 -18
- package/lib/ql/SELECT.js +12 -19
- package/lib/ql/UPDATE.js +1 -1
- package/lib/ql/UPSERT.js +1 -0
- package/lib/ql/Whereable.js +7 -6
- package/lib/ql/cds-ql.js +0 -12
- package/lib/ql/cds.ql-Query.js +28 -68
- package/lib/ql/cds.ql-infer.js +97 -108
- package/lib/ql/resolve.js +1 -3
- package/lib/req/context.js +5 -4
- package/lib/req/request.js +46 -42
- package/lib/req/response.js +5 -9
- package/lib/req/spawn.js +38 -0
- package/lib/req/validate.js +9 -8
- package/lib/srv/bindings.js +2 -1
- package/lib/srv/cds-connect.js +5 -2
- package/lib/srv/cds-serve.js +0 -2
- package/lib/srv/cds.Service.js +146 -86
- package/lib/srv/middlewares/auth/ias-auth.js +99 -88
- package/lib/srv/middlewares/auth/jwt-auth.js +44 -57
- package/lib/srv/middlewares/cds-context.js +1 -1
- package/lib/srv/middlewares/ctx-model.js +1 -1
- package/lib/srv/middlewares/errors.js +34 -42
- package/lib/srv/protocols/hcql.js +35 -25
- package/lib/srv/protocols/index.js +0 -9
- package/lib/srv/protocols/odata-v4.js +1 -6
- package/lib/srv/srv-dispatch.js +29 -31
- package/lib/srv/srv-handlers.js +14 -46
- package/lib/srv/srv-methods.js +15 -37
- package/lib/srv/srv-tx.js +19 -25
- package/lib/test/cds-test.js +4 -263
- package/lib/utils/cds-utils.js +18 -2
- package/lib/utils/tar.js +6 -8
- package/lib/utils/unit.js +19 -0
- package/libx/_runtime/.eslintrc +1 -1
- package/libx/_runtime/cds-services/util/assert.js +2 -72
- package/libx/_runtime/cds.js +13 -6
- package/libx/_runtime/common/Service.js +33 -75
- package/libx/_runtime/common/aspects/any.js +0 -38
- package/libx/_runtime/common/constants/events.js +5 -13
- package/libx/_runtime/common/generic/auth/autoexpose.js +10 -24
- package/libx/_runtime/common/generic/auth/capabilities.js +23 -20
- package/libx/_runtime/common/generic/auth/expand.js +3 -3
- package/libx/_runtime/common/generic/auth/index.js +3 -3
- package/libx/_runtime/common/generic/auth/insertOnly.js +3 -3
- package/libx/_runtime/common/generic/auth/readOnly.js +4 -4
- package/libx/_runtime/common/generic/auth/requires.js +4 -4
- package/libx/_runtime/common/generic/auth/restrict.js +12 -29
- package/libx/_runtime/common/generic/auth/service.js +3 -3
- package/libx/_runtime/common/generic/auth/utils.js +2 -12
- package/libx/_runtime/common/generic/crud.js +22 -53
- package/libx/_runtime/common/generic/etag.js +18 -31
- package/libx/_runtime/common/generic/input.js +51 -123
- package/libx/_runtime/common/generic/paging.js +4 -4
- package/libx/_runtime/common/generic/sorting.js +8 -19
- package/libx/_runtime/common/generic/stream-only.js +26 -0
- package/libx/_runtime/common/generic/stream.js +16 -48
- package/libx/_runtime/common/generic/temporal.js +15 -7
- package/libx/_runtime/common/utils/binary.js +1 -26
- package/libx/_runtime/common/utils/compareJson.js +1 -2
- package/libx/_runtime/common/utils/cqn.js +15 -14
- package/libx/_runtime/common/utils/differ.js +121 -44
- package/libx/_runtime/common/utils/keys.js +4 -5
- package/libx/_runtime/common/utils/normalizeTimestamp.js +10 -1
- package/libx/_runtime/common/utils/postProcess.js +2 -2
- package/libx/_runtime/common/utils/propagateForeignKeys.js +21 -36
- package/libx/_runtime/common/utils/resolveView.js +105 -141
- package/libx/_runtime/common/utils/rewriteAsterisks.js +45 -12
- package/libx/_runtime/common/utils/streamProp.js +3 -9
- package/libx/_runtime/common/utils/waitingTime.js +13 -1
- package/libx/_runtime/fiori/lean-draft.js +174 -196
- package/libx/_runtime/messaging/common-utils/connections.js +1 -1
- package/libx/_runtime/messaging/enterprise-messaging-utils/EMManagement.js +1 -0
- package/libx/_runtime/messaging/enterprise-messaging-utils/registerEndpoints.js +3 -3
- package/libx/_runtime/messaging/enterprise-messaging.js +2 -2
- package/libx/_runtime/messaging/file-based.js +2 -4
- package/libx/_runtime/messaging/redis-messaging.js +1 -1
- package/libx/_runtime/messaging/service.js +5 -19
- package/libx/_runtime/remote/Service.js +20 -33
- package/libx/_runtime/remote/utils/client.js +7 -25
- package/libx/_runtime/remote/utils/cloudSdkProvider.js +8 -13
- package/libx/_runtime/remote/utils/data.js +3 -34
- package/libx/_runtime/types/api.js +0 -8
- package/libx/_runtime/ucl/Service.js +1 -9
- package/libx/common/utils/path.js +2 -3
- package/libx/common/utils/streaming.js +2 -1
- package/libx/http/HttpRequest.js +13 -0
- package/libx/{odata/middleware → http}/body-parser.js +7 -5
- package/libx/http/location.js +41 -0
- package/libx/http/put.js +36 -0
- package/libx/odata/ODataAdapter.js +25 -59
- package/libx/odata/index.js +10 -23
- package/libx/odata/middleware/batch.js +29 -20
- package/libx/odata/middleware/create.js +6 -13
- package/libx/odata/middleware/delete.js +0 -4
- package/libx/odata/middleware/error.js +83 -27
- package/libx/odata/middleware/metadata.js +14 -25
- package/libx/odata/middleware/operation.js +10 -26
- package/libx/odata/middleware/read.js +10 -18
- package/libx/odata/middleware/stream.js +14 -34
- package/libx/odata/middleware/update.js +17 -26
- package/libx/odata/parse/afterburner.js +20 -16
- package/libx/odata/parse/cqn2odata.js +3 -1
- package/libx/odata/parse/grammar.peggy +221 -114
- package/libx/odata/parse/parser.js +1 -1
- package/libx/odata/utils/index.js +10 -38
- package/libx/odata/utils/metadata.js +10 -8
- package/libx/odata/utils/normalizeTimeData.js +5 -8
- package/libx/odata/utils/readAfterWrite.js +1 -1
- package/libx/{outbox/OutboxRunner.js → queue/TaskRunner.js} +17 -22
- package/libx/queue/index.js +531 -0
- package/libx/rest/RestAdapter.js +43 -82
- package/libx/rest/middleware/create.js +35 -33
- package/libx/rest/middleware/delete.js +9 -7
- package/libx/rest/middleware/error.js +11 -18
- package/libx/rest/middleware/operation.js +44 -137
- package/libx/rest/middleware/parse.js +114 -130
- package/libx/rest/middleware/read.js +23 -21
- package/libx/rest/middleware/update.js +20 -32
- package/libx/rest/middleware/upsert.js +31 -0
- package/libx/rest/pre-processing.js +8 -18
- package/package.json +6 -7
- package/srv/outbox.cds +1 -0
- package/bin/test.js +0 -125
- package/lib/env/plugins.js +0 -18
- package/lib/req/cds-context.js +0 -52
- package/lib/req/locale.js +0 -35
- package/lib/srv/cds.ServiceClient.js +0 -96
- package/lib/srv/cds.ServiceProvider.js +0 -20
- package/lib/srv/protocols/okra.js +0 -22
- package/lib/test/axios.js +0 -63
- package/lib/test/data.js +0 -52
- package/lib/test/expect.js +0 -343
- package/lib/test/reporter.js +0 -176
- package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +0 -275
- package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +0 -217
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js +0 -101
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +0 -79
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/debug.js +0 -6
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/delete.js +0 -60
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/error.js +0 -161
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/language.js +0 -7
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/metadata.js +0 -59
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/read.js +0 -602
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/request.js +0 -64
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +0 -238
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/ExpressionToCQN.js +0 -327
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/applyToCQN.js +0 -243
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/boundToCQN.js +0 -43
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/createToCQN.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/deleteToCQN.js +0 -36
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/expandToCQN.js +0 -250
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/index.js +0 -81
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/orderByToCQN.js +0 -51
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/readToCQN.js +0 -389
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/searchToCQN.js +0 -43
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/selectToCQN.js +0 -35
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/updateToCQN.js +0 -38
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/utils.js +0 -217
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/FeatureSupport.js +0 -70
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/FullQualifiedName.js +0 -94
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAction.js +0 -139
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlActionImport.js +0 -82
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAliasInfo.js +0 -44
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAnnotation.js +0 -104
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAnnotations.js +0 -71
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlComplexType.js +0 -133
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntityContainer.js +0 -142
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntityContainerInfo.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntitySet.js +0 -107
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntityType.js +0 -177
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEnumMember.js +0 -61
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEnumType.js +0 -105
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlFunction.js +0 -149
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlFunctionImport.js +0 -105
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlInclude.js +0 -68
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlIncludeAnnotation.js +0 -71
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlJsonProvider.js +0 -1365
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlNavigationProperty.js +0 -190
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlNavigationPropertyBinding.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlOnDelete.js +0 -70
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlParameter.js +0 -227
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlProperty.js +0 -250
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlPropertyRef.js +0 -49
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlProvider.js +0 -190
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlReference.js +0 -97
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlReferentialConstraint.js +0 -60
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlReturnType.js +0 -216
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlSchema.js +0 -328
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlSingleton.js +0 -84
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlTerm.js +0 -320
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlTypeDefinition.js +0 -193
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlAnnotationExpression.js +0 -73
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlAnnotationPathExpression.js +0 -33
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlApplyExpression.js +0 -105
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlArithmeticExpression.js +0 -72
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlBinaryExpression.js +0 -110
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlCastExpression.js +0 -188
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlCollectionExpression.js +0 -48
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlConstantExpression.js +0 -116
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlIfExpression.js +0 -62
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlIsOfExpression.js +0 -200
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlLabeledElementExpression.js +0 -42
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlLabeledElementReferenceExpression.js +0 -31
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlModelElementPathExpression.js +0 -29
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNavigationPropertyPathExpression.js +0 -31
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNegationExpression.js +0 -27
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNotExpression.js +0 -31
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNullExpression.js +0 -18
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlPathExpression.js +0 -32
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlPropertyPathExpression.js +0 -32
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlPropertyValueExpression.js +0 -55
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlRecordExpression.js +0 -54
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlUnknownExpression.js +0 -44
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlUrlRefExpression.js +0 -31
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmBindingTarget.js +0 -163
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmFaceted.js +0 -136
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmOperation.js +0 -205
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmOperationImport.js +0 -126
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmStructuredType.js +0 -275
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/Edm.js +0 -775
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmAction.js +0 -15
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmActionImport.js +0 -39
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmAnnotation.js +0 -106
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmAnnotations.js +0 -57
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmComplexType.js +0 -48
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityContainer.js +0 -455
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntitySet.js +0 -43
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityType.js +0 -119
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEnumMember.js +0 -69
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEnumType.js +0 -117
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmFunction.js +0 -39
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmFunctionImport.js +0 -59
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmInclude.js +0 -65
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmIncludeAnnotation.js +0 -48
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmKeyPropertyRef.js +0 -79
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmNavigationProperty.js +0 -182
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmNavigationPropertyBinding.js +0 -46
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmOnDelete.js +0 -44
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmParameter.js +0 -22
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmPrimitiveType.js +0 -31
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmPrimitiveTypeKind.js +0 -70
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmProperty.js +0 -39
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmProvider.js +0 -399
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmReference.js +0 -88
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmReferentialConstraint.js +0 -71
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmReturnType.js +0 -14
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmSchema.js +0 -355
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmSingleton.js +0 -15
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmTerm.js +0 -75
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmType.js +0 -95
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmTypeDefinition.js +0 -121
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmTypeFactory.js +0 -28
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmVocabularyTermType.js +0 -41
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/KeyFactory.js +0 -67
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/Target.js +0 -56
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/TransientStructuredType.js +0 -244
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/AnnotationExpressionFactory.js +0 -130
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmAnnotationExpression.js +0 -28
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmAnnotationPathExpression.js +0 -42
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmApplyExpression.js +0 -85
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmArithmeticExpression.js +0 -92
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmBinaryExpression.js +0 -96
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmCastExpression.js +0 -129
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmCollectionExpression.js +0 -52
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmConstantExpression.js +0 -83
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmIfExpression.js +0 -103
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmIsOfExpression.js +0 -125
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmLabeledElementExpression.js +0 -83
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmLabeledElementReferenceExpression.js +0 -41
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmModelElementPathExpression.js +0 -35
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNavigationPropertyPathExpression.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNegationExpression.js +0 -70
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNotExpression.js +0 -75
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNullExpression.js +0 -50
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmPathExpression.js +0 -38
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmPropertyPathExpression.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmPropertyValueExpression.js +0 -72
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmRecordExpression.js +0 -100
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmUnknownExpression.js +0 -72
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmUrlRefExpression.js +0 -73
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/AbstractError.js +0 -82
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/IllegalArgumentError.js +0 -58
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/IllegalCallError.js +0 -21
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/NotImplementedError.js +0 -19
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/UriQueryOptionSemanticError.js +0 -49
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/UriSemanticError.js +0 -48
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/UriSyntaxError.js +0 -65
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/ContentTypeInfo.js +0 -105
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/JsonContentTypeInfo.js +0 -83
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/JsonFormat.js +0 -141
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/RepresentationKind.js +0 -251
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpHeader.js +0 -42
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpHeaderReader.js +0 -318
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpMethod.js +0 -25
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpStatusCode.js +0 -52
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/Preferences.js +0 -32
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/index.js +0 -69
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/logging/LoggerFacade.js +0 -183
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/AliasExpression.js +0 -47
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ApplyParser.js +0 -946
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/BinaryExpression.js +0 -124
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ExpandItem.js +0 -76
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ExpandParser.js +0 -384
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/Expression.js +0 -46
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ExpressionParser.js +0 -1988
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/FilterParser.js +0 -34
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/FunctionParameterParser.js +0 -106
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/KeyPredicateParser.js +0 -155
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/KeyValueParser.js +0 -213
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/LiteralExpression.js +0 -43
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/MemberExpression.js +0 -44
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/MethodExpression.js +0 -146
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/OrderByItem.js +0 -53
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/OrderByParser.js +0 -69
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ResourcePathParser.js +0 -848
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/SearchParser.js +0 -127
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/SelectItem.js +0 -80
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/SelectParser.js +0 -294
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/TypeLiteralExpression.js +0 -28
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UnaryExpression.js +0 -64
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriHelper.js +0 -65
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriInfo.js +0 -165
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriParameter.js +0 -107
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriParser.js +0 -350
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriResource.js +0 -602
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriTokenizer.js +0 -1156
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/AggregateExpression.js +0 -164
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/AggregateTransformation.js +0 -38
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/BottomTopTransformation.js +0 -93
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ComputeExpression.js +0 -52
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ComputeTransformation.js +0 -38
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ConcatTransformation.js +0 -38
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/CustomFunctionTransformation.js +0 -59
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ExpandTransformation.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/FilterTransformation.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/GroupByItem.js +0 -71
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/GroupByTransformation.js +0 -58
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/IdentityTransformation.js +0 -17
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/OrderByTransformation.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/SearchTransformation.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/SkipTransformation.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/TopTransformation.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/Transformation.js +0 -53
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/info.md +0 -116
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueDecoder.js +0 -667
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueEncoder.js +0 -349
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/ValueConverter.js +0 -545
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ParameterValidator.js +0 -124
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ValueValidator.js +0 -743
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/ServiceFactory.js +0 -234
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchContext.js +0 -351
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchErrorInfo.js +0 -61
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchExitHandler.js +0 -239
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchProcessor.js +0 -281
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchValidator.js +0 -133
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchedRequestExecutor.js +0 -92
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ComponentManager.js +0 -63
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/Context.js +0 -96
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/Dispatcher.js +0 -147
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataRequest.js +0 -458
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataRequestInBatch.js +0 -147
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataResponse.js +0 -314
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataResponseInBatch.js +0 -83
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/PlainHttpRequest.js +0 -175
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/PlainHttpResponse.js +0 -106
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/RequestContract.js +0 -111
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseContract.js +0 -111
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseHeaderSetter.js +0 -240
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/Service.js +0 -417
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ServiceResolutions.js +0 -24
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ApplicationHttpReader.js +0 -157
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/BatchJsonDeserializer.js +0 -171
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/BatchRequestListBuilder.js +0 -196
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/Cache.js +0 -154
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ContentDeserializer.js +0 -222
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/DataReader.js +0 -220
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/DeserializerFactory.js +0 -240
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/HeaderReader.js +0 -133
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/LineReader.js +0 -61
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/MultipartReader.js +0 -419
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/PartReader.js +0 -99
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/Reader.js +0 -52
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ResourceJsonDeserializer.js +0 -673
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/ApplicationError.js +0 -108
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/BadRequestError.js +0 -21
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/ConflictError.js +0 -11
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/DeserializationError.js +0 -19
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/InternalServerError.js +0 -20
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/MethodNotAllowedError.js +0 -17
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/NotAcceptableError.js +0 -21
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/NotFoundError.js +0 -33
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/PreconditionFailedError.js +0 -11
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/PreconditionRequiredError.js +0 -11
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/SerializationError.js +0 -19
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/UnauthorizedError.js +0 -17
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/AcceptTypeInfo.js +0 -86
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/CharsetInfo.js +0 -76
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/FormatDescription.js +0 -43
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/FormatManager.js +0 -91
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/RequestContentNegotiator.js +0 -62
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/ResponseContentNegotiator.js +0 -321
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/handler/BatchHandler.js +0 -36
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/handler/MetadataHandler.js +0 -21
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/handler/ServiceHandler.js +0 -25
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/CustomPreference.js +0 -31
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HeaderInfo.js +0 -79
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HttpHeader.js +0 -59
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HttpHeaderReader.js +0 -452
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HttpStatusCode.js +0 -117
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/Preferences.js +0 -222
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/PreferencesApplied.js +0 -199
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/index.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/Command.js +0 -31
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/CommandExecutor.js +0 -94
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/CommandFactory.js +0 -203
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ConditionalRequestControlCommand.js +0 -52
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ConditionalRequestPreValidationCommand.js +0 -59
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ContentNegotiatorCommand.js +0 -70
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugContentNegotiatorCommand.js +0 -59
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugDeserializingCommand.js +0 -44
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugSerializingCommand.js +0 -51
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DeserializingCommand.js +0 -69
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DispatcherCommand.js +0 -95
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ErrorContentNegotiatorCommand.js +0 -44
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ErrorSerializingCommand.js +0 -51
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/EventListenerCommand.js +0 -59
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/LocaleNegotiatorCommand.js +0 -56
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/OdataVersionValidationCommand.js +0 -41
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/OperationValidationCommand.js +0 -34
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ParsePreferHeaderCommand.js +0 -47
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/PresetResponseHeadersCommand.js +0 -47
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/QueryOptionsParserCommand.js +0 -43
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/QueryOptionsValidationCommand.js +0 -62
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/RequestContentValidationCommand.js +0 -51
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SendResponseCommand.js +0 -37
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SerializingCommand.js +0 -159
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetResponseHeadersCommand.js +0 -90
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetStatuscodeCommand.js +0 -51
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/UriParserCommand.js +0 -47
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/logging/DebugLogger.js +0 -97
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ApplicationHttpWriter.js +0 -65
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/BatchJsonSerializer.js +0 -46
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/BatchMultipartSerializer.js +0 -113
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ContextURLFactory.js +0 -405
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/DebugHtmlSerializer.js +0 -302
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/DebugJsonSerializer.js +0 -515
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorJsonSerializer.js +0 -47
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorSerializer.js +0 -39
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorXmlSerializer.js +0 -98
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ExpressionTreeImage.js +0 -404
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/MetadataXmlSerializer.js +0 -1416
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/MultipartWriter.js +0 -202
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/NextLinkSerializer.js +0 -330
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ResourceJsonSerializer.js +0 -1220
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/SerializerFactory.js +0 -484
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ServiceJsonSerializer.js +0 -89
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/TrustedResourceJsonSerializer.js +0 -612
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/debugview.html +0 -157
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/BufferedWriter.js +0 -59
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/ExpandHelper.js +0 -96
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/MetadataCache.js +0 -136
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/PerformanceMonitor.js +0 -221
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/UriHelper.js +0 -157
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/ConditionalRequestValidator.js +0 -79
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/OperationValidator.js +0 -199
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/RequestValidator.js +0 -392
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/VersionValidator.js +0 -62
- package/libx/_runtime/cds-services/adapter/odata-v4/to.js +0 -51
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/data.js +0 -331
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/handlerUtils.js +0 -159
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/metaInfo.js +0 -404
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/oDataConfiguration.js +0 -55
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/omitValues.js +0 -86
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/readAfterWrite.js +0 -107
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/request.js +0 -64
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/result.js +0 -385
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/stream.js +0 -12
- package/libx/_runtime/cds-services/util/errors.js +0 -15
- package/libx/_runtime/common/aspects/relation.js +0 -40
- package/libx/_runtime/common/composition/data.js +0 -370
- package/libx/_runtime/common/composition/delete.js +0 -313
- package/libx/_runtime/common/composition/index.js +0 -22
- package/libx/_runtime/common/composition/insert.js +0 -108
- package/libx/_runtime/common/composition/tree.js +0 -275
- package/libx/_runtime/common/composition/update.js +0 -354
- package/libx/_runtime/common/composition/utils.js +0 -95
- package/libx/_runtime/common/error/constants.js +0 -20
- package/libx/_runtime/common/error/entry.js +0 -36
- package/libx/_runtime/common/error/frontend.js +0 -199
- package/libx/_runtime/common/error/index.js +0 -12
- package/libx/_runtime/common/error/log.js +0 -35
- package/libx/_runtime/common/error/standardError.js +0 -11
- package/libx/_runtime/common/error/utils.js +0 -18
- package/libx/_runtime/common/generic/auth/constants.js +0 -17
- package/libx/_runtime/common/generic/put.js +0 -85
- package/libx/_runtime/common/utils/columns.js +0 -177
- package/libx/_runtime/common/utils/compareJsonOLD.js +0 -280
- package/libx/_runtime/common/utils/cqn2cqn4sql.js +0 -1039
- package/libx/_runtime/common/utils/data.js +0 -16
- package/libx/_runtime/common/utils/dollar.js +0 -27
- package/libx/_runtime/common/utils/generateOnCond.js +0 -127
- package/libx/_runtime/common/utils/onlyKeysRemain.js +0 -10
- package/libx/_runtime/common/utils/path.js +0 -20
- package/libx/_runtime/common/utils/quotingStyles.js +0 -29
- package/libx/_runtime/common/utils/restrictions.js +0 -67
- package/libx/_runtime/common/utils/search2cqn4sql.js +0 -37
- package/libx/_runtime/common/utils/searchToLike.js +0 -56
- package/libx/_runtime/common/utils/stream.js +0 -103
- package/libx/_runtime/common/utils/ucsn.js +0 -119
- package/libx/_runtime/common/utils/union.js +0 -31
- package/libx/_runtime/common/utils/unionCqnTemplate.js +0 -174
- package/libx/_runtime/db/Service.js +0 -93
- package/libx/_runtime/db/data-conversion/post-processing.js +0 -175
- package/libx/_runtime/db/expand/expand-v2.js +0 -147
- package/libx/_runtime/db/expand/expandCQNToJoin.js +0 -1775
- package/libx/_runtime/db/expand/index.js +0 -13
- package/libx/_runtime/db/expand/rawToExpanded.js +0 -250
- package/libx/_runtime/db/generic/create.js +0 -30
- package/libx/_runtime/db/generic/delete.js +0 -18
- package/libx/_runtime/db/generic/index.js +0 -25
- package/libx/_runtime/db/generic/input.js +0 -227
- package/libx/_runtime/db/generic/read.js +0 -16
- package/libx/_runtime/db/generic/rewrite.js +0 -68
- package/libx/_runtime/db/generic/structured.js +0 -92
- package/libx/_runtime/db/generic/update.js +0 -97
- package/libx/_runtime/db/generic/virtual.js +0 -83
- package/libx/_runtime/db/query/delete.js +0 -39
- package/libx/_runtime/db/query/index.js +0 -13
- package/libx/_runtime/db/query/insert.js +0 -21
- package/libx/_runtime/db/query/read.js +0 -97
- package/libx/_runtime/db/query/run.js +0 -30
- package/libx/_runtime/db/query/update.js +0 -94
- package/libx/_runtime/db/result/InsertResult.js +0 -87
- package/libx/_runtime/db/sql-builder/BaseBuilder.js +0 -65
- package/libx/_runtime/db/sql-builder/CreateBuilder.js +0 -212
- package/libx/_runtime/db/sql-builder/DeleteBuilder.js +0 -87
- package/libx/_runtime/db/sql-builder/DropBuilder.js +0 -63
- package/libx/_runtime/db/sql-builder/ExpressionBuilder.js +0 -345
- package/libx/_runtime/db/sql-builder/FunctionBuilder.js +0 -232
- package/libx/_runtime/db/sql-builder/InsertBuilder.js +0 -494
- package/libx/_runtime/db/sql-builder/ReferenceBuilder.js +0 -135
- package/libx/_runtime/db/sql-builder/SelectBuilder.js +0 -482
- package/libx/_runtime/db/sql-builder/UpdateBuilder.js +0 -207
- package/libx/_runtime/db/sql-builder/UpsertBuilder.js +0 -25
- package/libx/_runtime/db/sql-builder/annotations.js +0 -50
- package/libx/_runtime/db/sql-builder/arrayed.js +0 -4
- package/libx/_runtime/db/sql-builder/dataTypes.js +0 -59
- package/libx/_runtime/db/sql-builder/dollar.js +0 -37
- package/libx/_runtime/db/sql-builder/index.js +0 -28
- package/libx/_runtime/db/sql-builder/sqlFactory.js +0 -104
- package/libx/_runtime/db/utils/coloredTxCommands.js +0 -7
- package/libx/_runtime/db/utils/columns.js +0 -41
- package/libx/_runtime/db/utils/deep.js +0 -71
- package/libx/_runtime/db/utils/generateAliases.js +0 -160
- package/libx/_runtime/db/utils/localized.js +0 -77
- package/libx/_runtime/db/utils/normalizeTimeData.js +0 -98
- package/libx/_runtime/db/utils/stream.js +0 -41
- package/libx/_runtime/hana/Service.js +0 -173
- package/libx/_runtime/hana/conversion.js +0 -73
- package/libx/_runtime/hana/customBuilder/CustomCreateBuilder.js +0 -11
- package/libx/_runtime/hana/customBuilder/CustomDeleteBuilder.js +0 -17
- package/libx/_runtime/hana/customBuilder/CustomDropBuilder.js +0 -12
- package/libx/_runtime/hana/customBuilder/CustomExpressionBuilder.js +0 -23
- package/libx/_runtime/hana/customBuilder/CustomFunctionBuilder.js +0 -34
- package/libx/_runtime/hana/customBuilder/CustomReferenceBuilder.js +0 -38
- package/libx/_runtime/hana/customBuilder/CustomSelectBuilder.js +0 -90
- package/libx/_runtime/hana/customBuilder/index.js +0 -11
- package/libx/_runtime/hana/driver.js +0 -205
- package/libx/_runtime/hana/dynatrace.js +0 -130
- package/libx/_runtime/hana/execute.js +0 -429
- package/libx/_runtime/hana/localized.js +0 -39
- package/libx/_runtime/hana/pool.js +0 -186
- package/libx/_runtime/hana/search.js +0 -20
- package/libx/_runtime/hana/search2Contains.js +0 -106
- package/libx/_runtime/hana/search2cqn4sql.js +0 -98
- package/libx/_runtime/hana/streaming.js +0 -248
- package/libx/_runtime/messaging/Outbox.js +0 -15
- package/libx/_runtime/sqlite/Service.js +0 -153
- package/libx/_runtime/sqlite/conversion.js +0 -47
- package/libx/_runtime/sqlite/convertAssocToOneManaged.js +0 -60
- package/libx/_runtime/sqlite/convertDraftAdminPathExpression.js +0 -74
- package/libx/_runtime/sqlite/customBuilder/CustomExpressionBuilder.js +0 -24
- package/libx/_runtime/sqlite/customBuilder/CustomFunctionBuilder.js +0 -102
- package/libx/_runtime/sqlite/customBuilder/CustomSelectBuilder.js +0 -16
- package/libx/_runtime/sqlite/customBuilder/CustomUpsertBuilder.js +0 -47
- package/libx/_runtime/sqlite/customBuilder/index.js +0 -49
- package/libx/_runtime/sqlite/execute.js +0 -345
- package/libx/_runtime/sqlite/localized.js +0 -49
- 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
|