All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
- CDS New OData Adapter compatibility
- Fix action call without return value
- CDS 8 compatibility
- Use base model for CDS build task
- Set
content-length
header correctly for OData V4 request in batch mode
- CI Matrix Test Node 22
- Test with Postgres
- Improve expand/select handling and support
*
notation - Expose CDS OData V2 Adapter singleton instance from CDS plugin at
cds.cov2ap
- Allow to register
before
express routes for CDS OData V2 Adapter router viacds.cov2ap.before
- Option to cache and stream generated EDMX from disk instead of keeping it in memory
- Use new
cds.build.register
API version
- Fix expand and select of navigation properties
- Fix error response for errors during media stream read
- Do not log authorization header in debug traces
- Decode request url for debug traces
- Adopt new http proxy middleware
- Remove
odata-version
header from request - Remove obsolete documentation about
cds.odata.v2proxy.urlpath
as now derived from protocols
- Convert OData V2 date string more relaxed allowing optional backslashes before forward slashes
- Fix definition element cache for prototypes
- Freeze definition element cache to prevent modification and store it as symbol
- Option to disable definition cache via
cacheDefinitions: false
- ESLint interface typings correctly
- Fix build task for projects without MTX sidecar
- Support OData V2 CDS protocol annotation via (
@protocol: [{ kind: 'odata-v2', path: '<path>' }]
) - Expose OData V2 service at specified
odata-v2
protocol path, in addition to default endpoint - Make pipeline stream errors only warnings as root cause is already logged
- Serve OData V2 Adapter routes always after CDS listening (also for non-plugin case)
- Fix build task in case of compilation errors
- Fix build task to also include pre-compiled OData V2 EDMX files in
srv
- Fix build task for Java
- Make data type conversion of values more robust
- Fix bound action call error, where action parameter name also is an entity element name
- Fix
undefined
access for message filtering - Remove header
connection
for propagation viafetch
- Fix definition lookup for suffixed entity names (e.g.
.texts
) - Support message target context relative to draft root
- Support request header
sap-messages: transientOnly"
where state messages with target not starting with/#TRANSIENT
are removed - Log message target context resolution issues as reduced level (
debug
)
- Build task only applicable if MTX sidecar is active
- Use adapter singleton in CDS plugin
- Apply defaults in plugin build
- Drop Node.js 16 support (as out-of-maintenance)
- Replace
node-fetch
by standardfetch
- Support Node.js 20 (as new active)
- Default of
target
changed toauto
- Activate CDS plugin per default (can be disabled with option
plugin: false
) - Activate CDS build to precompile OData V2 metadata per default (can be disabled with option
build: false
) - Start CDS OData V2 adapter as CDS plugin in test setup
- Protect against double instantiation, when loaded via CDS plugin
- Replace deprecated access (CDS 7.5)
- Convert transient message target without warning
- Respect return type for unbound actions/functions for message target resolution
- Convert transient and absolute message targets correctly
- Access prepared EDMX files if existing, otherwise compile like before
- Register build plugin to prepare V2 metadata (enabled via adapter option
build: true
) - Skip conversion for element name only message targets
- Check ModelProviderService before access
- Service annotation
@cov2ap.ignore
to exclude service from OData V2 adapter - Log error with status code 400 as warning (before it was error)
- Replace deprecated
substr
usages
- Support union queries as parameterized views
- Fix pull requests actions for external contributions
- Simplify plugin detection again
- Performance improvements
- Automatically activate plugin, if mentioned explicitly in
cds.plugins
- Move custom server section in README under advanced section, as plugin is the preferred way to bootstrap adapter
- Set CDS OData V2 protocol
- Fix absolute service path starting with target path parts e.g.
/odata
- Fix escaping of backslashes in search phrases
- Switch to
better-sqlite3
via@cap-js/sqlite
- Suppress analytical conversion via entity annotation
@cov2ap.analytics.skipForKey
, if all dimension key elements are requested
- Respect new service endpoints
- Support entity names with special characters
- Remove support for
serve_on_root
. Define path explicitly tov2
to restore previous behavior
- Fix absolute OData V4 paths for
$batch
calls
- Fix
$metadata
request for absolute OData V4 paths
- Fix compatibility for option
middlewares
disabled or featureserve_on_root
enabled
- CDS 7 support
- Default route with CDS < 7 or option
middlewares
disabled or featureserve_on_root
enabled staysv2
- Default route with CDS >= 7 is
/odata/v2
- Fix metadata type for managed composition entities and sub-entities
- Replace deprecated usage of
req.run
withcds.run
- Update of
node-fetch
- Remove soon deprecated
req.getUriInfo
- Fix start of
cds.plugin
- Fix access to
undefined
element during data conversion
- Convert array structures
- Bootstrapping via CDS plugin (
cds.cov2ap.plugin: true
)
- Update
xml2js
dependency to fix security vulnerability
- Transition to open source code
- Bound entity operation result is correctly nested with entity name prefix
- Deprecation of inner source library
- Cache invalidation for Streamlined MTX (extensibility enabled) with CDS 6.6.1
- Use named parameters for mtxs actions to protect against incompatible changes
- Allow status code 304 (not modified) when reading OData V4 metadata (as success)
- Provide subdomain information to logs
- Use correct correlation-id for logging (setup CDS context correctly)
- React to incompatible change of mtxs getEdmx, to provide (internal) model parameter
- Enhance example app to show usage of bound/unbound OData V2 actions in Fiori UI via annotation
- Unicode encode messages header
- Fix special replacement pattern in $filter conversion
- Reject proxy processing of non OData services
- Use stream pipeline for result streaming
- Proxy does not end request to target anymore after writing body
- Document that managed compositions will not work correctly in Fiori Elements V2
- Keep
ID__
parameter as query option for bound action/function on analytical entities - Remove introduced query option
select
for bound action calls on analytical entities again
- Provide
value
section ofID__
aggregation key as query optionselect
to bound action handler - Accept aggregation annotations in lowercase and uppercase writing
- Support
@Aggregation.ReferenceElement
and@Aggregation.Reference
annotations to perform aggregation on different element - Only a single aggregation reference element is supported, specified as array with single element, e.g.
['element']
- Cast aggregation values of
#COUNT_DISTINCT
toInteger
type to be represented as number (not as string), if typed accordingly - Map default aggregation
#COUNT
to virtual property$count
of$apply
- Remove unneeded temporary aggregation
$COUNT
. Use#COUNT
instead.
- Escape entity key value for bound action key parameter mapping
- Support action parameters that overload bound entity key names
- Support action/function on analytical entities via
ID__
aggregation key
- Fix
$metadata
lookup with query options
- Support new CDS integer types
- Fallback target
auto
todefault
target until dynamictarget/port
assignment is available - Prevent loading OData V4
$metadata
when OData V2$metadata
is requested - Fix draft requests re-write for
$filter
- Proxy option to disable
x-forwarded
header processing (processForwardedHeaders: false
)
- Atom format fixes
- Trim spaces for filter function parameter transformations
- Allow passing proxy options as command line env (
camelCase
tosnake_case
, escape_
by doubling)
- Fix logging layers and debug trace activation
- Connect
cds.log
withhttp-proxy-middleware
- Fix data type conversion for single attribute value responses (incl. $value)
- Fix response mapping of parameters for
Parameters
entity - Respect
$format=json
for service root document - Introduce proxy options to specify OData default format (default is
json
) Atom (XML)
format support
- Respect
$select
filter fordeferreds
structure - Fix definition lookup for service entities with scoped name
- Fix definition lookup for unbound service operations (actions, functions) with scoped name
- Improve Kibana logging even more
- Use project specific logger
- Document that option
fileUploadSizeLimit
only applies to uploads viaPOST
usingmultipart/form-data
requests
- Improve Kibana logging
- Improve error and warning logging messages
- Make log level of
Changeset order deviation
configurable viachangesetDeviationLogLevel
. Default is now'info'
.
- Fix media upload via associations/compositions using POST
- Fix duplication of streaming request data for media entity (chunked)
- Fix result structure for parameterized entities entry addressed by key (object or not found)
- Update README on sample apps
- Remove logging library
@sap/logging
. Usecds.log
instead. - Remove obsolete proxy option
disableNetworkLog
- Proxy option
fixDraftRequests
suppresses unsupported draft expand toSiblingEntity
and injectsSiblingEntity: null
- Fix batch handling of parameterized entities
- Check on
cds.mtx.eventEmitter
before access - Restructure README
- Compile CSN for Node.js when loaded from CDS MTX services
- Check on
cds.requires.multitenancy
instead of deprecatedcds.requires.db.multiTenant
(compatible) - Support
$count
with parameterized entities - Make decoding of JWT token body more robust (error log in case of invalid JWT)
- Synchronize parallel loading of CSN and EDMX
- First (alpha) support for CDS Streamlined MTX (no extensibility support yet)
- Move
@types/express
to devDependencies
- CDS 6 compatible version
- Enhance proxy option
target
with modeauto
to handle dynamic target/port assignment (e.g. for unit-tests) - Represent time component of
cds.Date/Edm.DateTime
with second precision (i.e.00:00:00
)
- Add
Type
suffix to fix__metadata.type
for parameterized entities (datajs did skip date type conversion) - Fix parameterized entities navigation links
- Enhance Fiori Elements example apps
- Change README on Approuter compression flag
compressResponseMixedTypeContent
- Fill and process surrogate key
ID__
correctly in case of analytical queries - Add an example Fiori Elements applications showcasing hierarchical
TreeTable
usage - Rework UI application examples (basic, draft and hierarchy apps)
- Don't propagate
host
header to forwarded calls.
- Propagate all headers to forwarded calls.
- Filter out annotation elements in response data starting with
odata.
or including@odata.
. - Elements starting with
@
are excluded as before. - Propagate special headers to forwarded calls (i.e. starting with
dwc
).
- Fix if elements are annotated with
@cds.api.ignore
- Abort file upload when limit is reached
- Remove internal repository reference
- Document that Singletons are not available in OData V2
- Ignore omitted elements annotated with
@cds.api.ignore
- Support validated for absolute context urls via
cds.odata.contextAbsoluteUrl
. - Skip aggregation for measures with aggregation
#NONE
and#NOP
- Support
$count
aggregations for measures with aggregation#COUNT
- Changed OData type mapping for
Edm.Byte
tocds.Integer
- Upgrade
@sap/logging
to fix vulnerability
- Remove peer dependency to prevent workspace failures
- Refactorings to support universal CSN
- Refactorings to support metadata prototype layering
- Include
search
in$apply
aggregations
- Fix for
falsy
values during data type conversion for functions and actions - Add OData V2 links via link providers to HTML index page
- Refactor locale determination from CDS
- Serialize body to string in case of type
object
before calculating content length - Support
AnalyticalContext
annotations in addition to deprecatedAnalytics
annotations
- Stabilization fixes
- Proxy option
calcContentDisposition
to calculatecontent-disposition
header even if already available
- Proxy option
fixDraftRequests
to convert unsupported draft request to a working version (default: false)
- Fix README for combined custom backend bootstrap
- Allow annotation
@odata.type
in lower case format - Allow type prefix
datetime
in addition todatetimeoffset
- Add peer dependency @types/express
- Prevent additional call to fill
content-disposition
, in case header is already provided with stream - Support OData V2
binary
media upload via POST for entities with element of typeBinary
and without@Core.MediaType
annotations - Return server error as response, if OData V4 server does not support media upload without
@Core.MediaType
annotation- e.g.
No payload deserializer available for resource kind 'PRIMITIVE' and mime type 'image/png'
- e.g.
- Unquote action/function parameter of types
cds.UUID
,cds.Binary
,cds.LargeBinary
,cds.Date
,cds.Time
,cds.DateTime
,cds.Timestamp
- Prevent parsing body for HEAD requests against $batch
- Fix single quotes of URL parameters for request body conversion respecting line breaks
- Introduce proxy option
quoteSearch
to control search expression quoting. Default istrue
- Fix bound action call to entity key having association type
- Fix action/function parameter of types date, time, datetime
- Catch and handle unexpected errors during proxy request processing
- Validate request body and content-type in request
- Switch of internal NPM repository (Nexus -> Artifactory)
- Change action/function return type value representation for primitive types to include nesting to conform to OData standard
- Introduce proxy options
returnPrimitiveNested: false
to keep previous action/function return value representation for primitive types - Introduce proxy option
returnCollectionNested
to control collection of entity type nesting into aresults
section. Default istrue
- Fill standardized
x-correlation-id
request header in addition tox-correlationid
for proxy requests
- Add README documentation for annotation
@Core.ContentDisposition.Type
- Change
content-disposition
header default frominline
toattachment
- Proxy option
contentDisposition
to specify default content disposition for media streams (inline, attachment) - Unescape single quotes of action URL parameters for request body conversion
- Fix action/function return type representation for
cds.LargeString
- Improve formatting of README and CHANGELOG
- Adjust repository url
Content-Disposition
header filename is now url encoded- Annotation
@Core.ContentDisposition.Type
to specify content disposition type (e.g. inline, attachment (default), etc.)
- Quote key parts of type
cds.LargeString
for uri generation
- Decode url key values before conversion
- Escape quotes in search string before quoting
- Proxy option
propagateMessageToDetails
to always propagate root error or message to details section - Support for fetching Edmx metadata locally via
cds.mtx.getEdmx
- Support for fetching Edmx metadata remotely via MTX service url
- Convert ContentID for warning messages and error body and propagate to details
- Fix batch boundary parsing from content type with charset definition
- Functions
startswith
andendswith
respect proxy optioncaseInsensitive
- Fix query options not part of action parameters
- Proxy option
caseInsensitive
to transform search function e.g.substringof
to case-insensitive variant
- Add metadata type of inline return type for actions and functions
- Proxy option
messageTargetDefault
to specify default message target, if undefined - Empty proxy option
messageTargetDefault
leaves message target untouched
- Support for verb tunneling, i.e.,
POST
withX-HTTP-Method
header
- Support inline return type for actions and functions
- Default undefined message target to
/#TRANSIENT#
- Return 404 for unknown service name during model compilation
- Enhance logging to contain service name for service lookup from request
- Prevent exception on handling entities without keys
- Prevent unnecessary expensive
isExtended
call per request using metadata cache
- Support annotation
@odata.Type
for non-UUID CDS types - Set header
x-cds-odata-version: v2
to indicate target OData version to CDS runtime - Explain usage of response compression in README
- Change OData V4
continue-on-error
default tofalse
- Proxy option
continueOnError: true
available to activatecontinue-on-error
- Fix content type normalization to preserve charset
- Fix return type determination for external services definitions
- Change action/function return type value representation for complex and primitive types
- Introduce proxy options
returnComplexNested
andreturnPrimitivePlain
to keep previous action/function return value representation
- Convert additional targets of response messages
- Transform leading part of locale to lower-case
- Fix local entity name determination for scoped entities, e.g.
.texts
- Merge headers and body of POST and PUT media entity upload calls
- Handle error case in PUT media entity upload call
- Handle authorization header correctly in media upload
- Final CDS 5 compatibility version
- CDS 5 compatibility (>= 1.6.0 needed for CDS 5)
- Support
content-disposition
header in media entity upload - Introduction of element annotation
@cov2ap.headerDecode
to decode header values
- Fix crash for bound action without return type
- Consider bound action binding parameter for messages targets
- Improve TypeScript typings
- Update
@sap/logging
dependency
- Restore backwards compatibility with CDS 3
- Convert response message targets
- Align determination of locale including sub tags (e.g.
zh-TW
)
- Support action/function array parameter types
- Introduce proxy option
bodyParserLimit
for body parser size limit
- Improve TypeScript typings
- Add TypeScript typings for proxy constructor
- Normalize service root path in service root xml to include trailing slash
- Update minor version
- Fix that file upload error message does not return with
500
status code
- Fix accept header for binary data retrieval to include
application/json
- Respect offset for
Edm.DateTimeOffset
, and default to UTC offset (+0000) - Fix ticks and offset calculation for type
DateTimeOffset
to handle offset as minutes - Update README for custom bootstrap to give
proxy()
priority overcds.serve
(as withcds run
) - Make authorization header parsing more robust
- Provide
__metadata
type information for function/action result - Data format of type
cds.Time (Edm.Time)
is switchable to ISO 8601 with proxy optionisoTime
or entity annotation@cov2ap.isoTime
- Data format of type
cds.Date (Edm.DateTime)
is switchable to ISO 8601 with proxy optionisoDate
or entity annotation@cov2ap.isoDate
- Data format of type
cds.DateTime / Edm.DateTimeOffset
is switchable to ISO 8601 with proxy optionisoDateTime
or entity annotation@cov2ap.isoDateTime
- Data format of type
cds.Timestamp / Edm.DateTimeOffset
is switchable to ISO 8601 with proxy optionisoTimestamp
or entity annotation@cov2ap.isoTimestamp
- Process DateTimeOffset always as UTC information (with
Z
)
- Change accept header to
application/json
, if acceptxml
is requested - Fix single service support bound to root url
- Data format of type
Edm.DateTimeOffset
(cds.DateTime
,cds.Timestamp
) is switchable to ISO 8601 with proxy optionisoDateTimeOffset
or entity annotation@cov2ap.isoDateTimeOffset
- Support boolean header value in media entity
- Prevent escaping of quotes in url for batch requests
- Add
media_src
andcontent-type
in__metadata
for media entities
- Match headers case-insensitive for custom body in media entity
- Parse header string values for non-string types in media entity
- Enable OData V4
continue-on-error
per default - Add proxy option to deactivate
continue-on-error
- Fix host port in response links
- Handle duplication of link tokens
- Support mapping of
__next
annotation - Forward file upload headers to media entity POST call
- Explain annotation
@Core.ContentDisposition.Filename
in README - Update README on OData API flavors
- Fix links for navigation collections and query options
- Support custom body for binary media upload via POST
- Set
Accept
header for$batch
proxy request tomultipart/mixed
- Set missing response header
Content-Transfer-Encoding: binary
- Log warning for change set order violation, instead returning an error response
- Support OData V2
binary
media upload via POST - Support OData V2
multipart/form-data media
upload via POST - Update README on logging layers
- Rewrite batch success status code from
200
to202
- Remove OData V4 header
odata-entityid
- Propagate
Content-ID
in response to HTTP request headers - Remove artificially added
Content-ID
header from batch response - Fix
Content-ID
order check for deviations between request and response
- Fix entity uris with
x-forwarded-path
headers for OData batch calls - Support of
odata-entityid
header rewrite
- Fix entity uris with
x-forwarded-path
headers - Forward
x-request-id
,x-correlationid
for metadata request
- Respect
Content-ID
in HTTP request headers - Update on peer dependencies
- Update README on OData V2 Adapter for CAP Java
- Update README on mission statement
- Update README on option
cds.env.odata.v2proxy.urlpath
- Delta response annotation
@cov2ap.deltaResponse: 'timestamp'
- Prepare
Delta Responses
support in proxy (not yet supported by CDS) - Remove metadata information in request payload deeply
- Update README on CDS modelling restrictions
- Rename proxy option
standalone
tomtxRemote
- Allow proxy option
mtxEndpoint
to be absolute http url - Support for
cds.env
for proxy options under sectioncds.cov2ap
- Update README and JSDoc documentation
- Fix
$filter
function conversion - Fix remote CSN fetch for standalone proxy
- Fix
@sap.aggregation.role
annotation detection - Annotation
@cov2ap.analytics: false
to suppress analytical conversion - Update README documentation
- Add missing
Content-ID
header for batch changeset
- CDS 4 compatibility
- Improve logging layers
- Update README documentation
- Improve JWT tenant processing
- Fix aggregation grouping on filtered elements
- Support
sap:
analytical annotations
- Move annotation
ContentDisposition.Filename
to data element - Improve stability of content disposition
- Fix
base
proxy option (follow-up)
- Replace
pathRewrite
option bytargetPath
option - Fix
base
proxy option - Respect OData annotation
@odata.Type
- Alternative annotation
@Common.ContentDisposition.Filename
- Fix escaping of quote for function parameters
- SAP Fiori Elements V2 sample app
- Fix reserved uri characters (follow-up)
- Fix entity key with (encoded) reserved uri characters
- Service Document in XML format (default)
- Update dependencies
- Disable network log per default
- Update dependencies
- Update README on localization
- Toggle switch for network logging
- Allow HANA
SYSUUID
as UUID
- Align model resolving
- Fix data types conversion for numbers
- Fix data types recognition in functions
- Support response compression
- Prevent unnecessary data serialization for tracing
- Performance optimization for entity key/uri calculation
- General performance optimizations
- Update dependencies
- Make function call with request body more robust
- Fallback severity for detail messages to error
- Keep request body for action call
- Update README on CF deployment
- Fix analytics default value for all OData types
- Fix long running data type conversion for filter elements
- Fix
$filter
in analytics query - Fix count for empty analytics result
- Fix result projection for analytics query
- Fix analytics
null
result values - Only add root error, if no details messages
- Add root error as first detail message
- Error code including
transition
marks transition message
- Fix
$filter
for navigation elements - Fix OData annotations conversion for Java backends
- Add request authorization parsing for logging
- Add additional messages as details
- Fix for metadata transfer-encoding chunked
- Filter
@
attributes
- Fix type conversion for
le
operator
- Fix entity uri path behind app router
- Update dependencies
- Improve
$metadata
logging - Fix
$metadata
call headers
- Fix CDS backwards compatibility
- Fix ETag Support (Concurrency Control)
- Support streaming from URL media
- Adding custom path rewrite
- Custom
server.js
support - Fix for rendering aggregation of integers
- Fix time duration parsing
- Misc fixes and improvements
- General housekeeping
- Moving from
axios
tonode-fetch
- Improve
$value
handling for streaming - Fix stream filename retrieval
- Optimize edmx localization
- Improve logging and tracing handling
- Fix for external services (e.g. Java backend) support
- Re-add
services
configuration for external service mapping - Fix for search phrase
- Support for virtual hosts (e.g. Cloud Connector)
- Fix decode URI for path name
- Fix IEEE754 compatibility for single requests
- Add IEEE754 compatibility option switch
- Enforce IEEE754 compatibility
- Pin
axios
library
- Fix authentication prompt for
$metadata
- Improve trace handling
- Protect
$metadata
call - Fix
$filter
parentheses nesting - Fix
all
model loading from app, srv - Improve
$filter
handling, incl. data type and negative tests
- Remove
services
configuration, as it is obsolete - Fix nested functions in
$filter
- Fix service and CSN model detection
- Allow CSN JSON object as model option
- Raise error, if service not found based on path
- Fix service paths with hyphen
- Fix
cds.Date
,cds.Time
data type mappings
- Increased body size limit
- Fix engine config, to allow Node >= 8
- Map
cds.DateTime
andcds.Timestamp
toEdm.DateTimeOffset
- Update on README documentation
- Minor fixes
__count
is now of type String- Aggregation values are converted according to dynamic type
- Search support
- Fix for converting warning messages
- Filter data type conversions
- Check CDS multitenancy/extensibility (mtx)
- Allow options that are falsy for Javascript
- Looser declaration or peer dependency to be compatible with snapshots
- Fixed compatibility to CDS 3.17.0
- Propagate
x-request-id
,x-correlationid
- Raise error message for not supported aggregation function (e.g.
#FORMULA
) - Fixed entity key calculation for key associations
- Fixed DateTime representation in entity key structure
- Passing through responses in XML (just for errors)
- Data-type mapping on aggregation values works for non-strings
- External Release
- Internal Release