From 21b9a29f93ca508e3ceb57b9fcee0faec0272da7 Mon Sep 17 00:00:00 2001 From: Johannes Vogel <31311694+johannes-vogel@users.noreply.github.com> Date: Tue, 10 Feb 2026 15:56:08 +0100 Subject: [PATCH 001/178] fix: AMS documentation link in cap-users.md (#2367) @BraunMatthias Please double check whether this is the right link. The current link is broken. --------- Co-authored-by: BraunMatthias <59841349+BraunMatthias@users.noreply.github.com> --- guides/security/cap-users.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/security/cap-users.md b/guides/security/cap-users.md index f6d567da81..52d111fd41 100644 --- a/guides/security/cap-users.md +++ b/guides/security/cap-users.md @@ -257,7 +257,7 @@ Refrain from activating user tracing in productive systems. ## Role Assignment with AMS { #roles-assignment-ams } -CAP applications that use the [Identity Authentication Service (IAS)](https://help.sap.com/docs/identity-authentication) for authentication can leverage the [Authorization Management Service (AMS)](https://help.sap.com/docs/cloud-identity-services/authorization-management-service) to provide comprehensive authorization. Similar to IAS, AMS is part of the [SAP Cloud Identity Services (SCI)](https://help.sap.com/docs/cloud-identity-services). +CAP applications that use the [Identity Authentication Service (IAS)](https://help.sap.com/docs/identity-authentication) for authentication can leverage the [Authorization Management Service (AMS)](https://sap.github.io/cloud-identity-developer-guide/Authorization/GettingStarted.html) to provide comprehensive authorization. Similar to IAS, AMS is part of the [SAP Cloud Identity Services (SCI)](https://help.sap.com/docs/cloud-identity-services). Why is AMS required? Unlike tokens issued by XSUAA, IAS tokens only contain static user information and cannot directly provide CAP roles. AMS acts as a central service to define access policies that include CAP roles and additional filter criteria for instance-based authorizations in CAP applications. From 2461b3f6bf65039f6ecfc976da50f81412fb29ec Mon Sep 17 00:00:00 2001 From: ecklie <52252271+ecklie@users.noreply.github.com> Date: Wed, 11 Feb 2026 14:38:25 +0100 Subject: [PATCH 002/178] tenant-specific deployment parameters (#2379) Co-authored-by: Steffen Waldmann --- guides/multitenancy/mtxs.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/guides/multitenancy/mtxs.md b/guides/multitenancy/mtxs.md index 63894855db..ce5efd6c78 100644 --- a/guides/multitenancy/mtxs.md +++ b/guides/multitenancy/mtxs.md @@ -1296,6 +1296,12 @@ The _SaasProvisioningService_ is a façade for the _DeploymentService_ to adapt Requests are implicitly asynchronous when `status_callback` is set. ::: +##### Passing tenant-specific deployment parameters + +Using the `"_"` section of the payload, you can pass deployment parameters for an individual tenant. The syntax is identical with the [static deployment configuration of `cds.xt.DeploymentService`](#deployment-config). + +In most cases, the requests are received from a third party, so the deployment parameters need to be added in [a handler implementation](#adding-custom-lifecycle-event-handlers) for `cds.xt.SaasProvisioningService`. + ##### Example Usage
@@ -1436,7 +1442,12 @@ Content-Type: application/json { "subscribedTenantId": "t1", "subscribedSubdomain": "subdomain1", - "eventType": "CREATE" + "eventType": "CREATE", + "_": { + "hdi": { + ... + } + } } ``` From 5cf619b74f6909a18bde20612add7a20074419b5 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 11 Feb 2026 14:41:22 +0100 Subject: [PATCH 003/178] fixed colors --- cds/assets/cxl/expr.drawio.svg | 817 +----------------- cds/assets/cxl/function.drawio.svg | 317 ++++--- cds/assets/cxl/infix-filter.drawio.svg | 139 +-- cds/assets/cxl/operators.drawio.svg | 613 +------------ cds/assets/cxl/ref.drawio.svg | 188 +--- .../assets/bookshop/cds-compile.drawio.svg | 253 +----- .../assets/concepts/key-concepts.drawio.svg | 2 +- 7 files changed, 196 insertions(+), 2133 deletions(-) diff --git a/cds/assets/cxl/expr.drawio.svg b/cds/assets/cxl/expr.drawio.svg index 6db3767ac2..ec58b9777e 100644 --- a/cds/assets/cxl/expr.drawio.svg +++ b/cds/assets/cxl/expr.drawio.svg @@ -1,813 +1,4 @@ - - - - - - - - - - - - - - - - - -
-
-
- path expression -
-
-
-
- - path expression - -
-
-
- - - - - - - - - - - - - - - - - -
-
-
- literal value -
-
-
-
- - literal value - -
-
-
- - - - - - - - - - - - - - - - - - - -
-
-
- infix operator -
-
-
-
- - infix operator - -
-
-
- - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - -
-
-
- function call -
-
-
-
- - function call - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - ( - -
-
-
-
- - ( - -
-
-
- - - - - - - -
-
-
- - ) - -
-
-
-
- - ) - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - -
-
-
- - , - -
-
-
-
- - , - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - -
-
-
- BETWEEN -
-
-
-
- - BETWEEN - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - -
-
-
- NOT -
-
-
-
- - NOT - -
-
-
- - - - - - - - - - - -
-
-
- AND -
-
-
-
- - AND - -
-
-
- - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - -
-
-
- THEN -
-
-
-
- - THEN - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - -
-
-
- END -
-
-
-
- - END - -
-
-
- - - - - - - - - - - -
-
-
- WHEN -
-
-
-
- - WHEN - -
-
-
- - - - - - - - - - - -
-
-
- CASE -
-
-
-
- - CASE - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- ELSE -
-
-
-
- - ELSE - -
-
-
- - - - - - - - - - - -
-
-
- prefix operator -
-
-
-
- - prefix operator - -
-
-
- - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - -
-
-
- postfix operator -
-
-
-
- - postfix operator - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - -
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file + + + +
path expression
path expression
literal value
literal value
infix operator
infix operator
expr
expr
expr
expr
function call
function call
(
(
)
)
expr
expr
,
,
expr
expr
BETWEEN
BETWEEN
expr
expr
NOT
NOT
AND
AND
expr
expr
expr
expr
THEN
THEN
expr
expr
expr
expr
END
END
WHEN
WHEN
CASE
CASE
expr
expr
ELSE
ELSE
prefix operator
prefix operator
expr
expr
postfix operator
postfix operator
expr
expr
Text is not SVG - cannot display
\ No newline at end of file diff --git a/cds/assets/cxl/function.drawio.svg b/cds/assets/cxl/function.drawio.svg index 00d8cc1ba8..3b02ed0bdc 100644 --- a/cds/assets/cxl/function.drawio.svg +++ b/cds/assets/cxl/function.drawio.svg @@ -1,149 +1,182 @@ - + + - - - - - - - - - - - - - - - - - -
-
-
- - ( - -
-
-
-
- - ( - -
-
-
- - - - - - - -
-
-
- - ) - -
-
-
-
- - ) - -
-
-
- - - - - - - - - - - -
-
-
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + ( + +
+
+
+
+ + ( + +
+
+
+
+ + + + + + + + +
+
+
+ + ) + +
+
+
+
+ + ) + +
+
+
+
+ + + + + + + + + + + + + + +
+
+
+ expr +
+
+
+
+ expr -
-
-
-
- - expr - -
-
-
- - - - - - - -
-
-
- - , - -
-
-
-
- - , - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
+ + + + + + + + + + + + + +
+
+
+ + , + +
+
+
+
+ + , + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ function name +
+
+
+
+ function name -
-
-
-
- - function name - -
+ + +
+
+
diff --git a/cds/assets/cxl/infix-filter.drawio.svg b/cds/assets/cxl/infix-filter.drawio.svg index 0bebdbcdd9..97e1ca4524 100644 --- a/cds/assets/cxl/infix-filter.drawio.svg +++ b/cds/assets/cxl/infix-filter.drawio.svg @@ -1,135 +1,4 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- - [ - -
-
-
-
- - [ - -
-
-
- - - - - - - -
-
-
- - ] - -
-
-
-
- - ] - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - -
-
-
- - - where - - -
-
-
-
- - where - -
-
-
- - - - - - - - -
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file + + + +
[
[
]
]
expr
expr
where
where
Text is not SVG - cannot display
\ No newline at end of file diff --git a/cds/assets/cxl/operators.drawio.svg b/cds/assets/cxl/operators.drawio.svg index 9fd85bb38b..4b7de24ac5 100644 --- a/cds/assets/cxl/operators.drawio.svg +++ b/cds/assets/cxl/operators.drawio.svg @@ -1,609 +1,4 @@ - - - - - - - - - - - - - - - - - - - - -
-
-
- infix operator -
-
-
-
- - infix operator - -
-
-
- - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - -
-
-
- BETWEEN -
-
-
-
- - BETWEEN - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - -
-
-
- NOT -
-
-
-
- - NOT - -
-
-
- - - - - - - - - - - -
-
-
- AND -
-
-
-
- - AND - -
-
-
- - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - -
-
-
- THEN -
-
-
-
- - THEN - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - -
-
-
- END -
-
-
-
- - END - -
-
-
- - - - - - - - - - - -
-
-
- WHEN -
-
-
-
- - WHEN - -
-
-
- - - - - - - - - - - -
-
-
- CASE -
-
-
-
- - CASE - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- ELSE -
-
-
-
- - ELSE - -
-
-
- - - - - - - - - - - -
-
-
- prefix operator -
-
-
-
- - prefix operator - -
-
-
- - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - - - - - - - - -
-
-
- postfix operator -
-
-
-
- - postfix operator - -
-
-
- - - - - - - - - - - -
-
-
- expr -
-
-
-
- - expr - -
-
-
- - - - - - - - -
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file + + + +
infix operator
infix operator
expr
expr
expr
expr
expr
expr
BETWEEN
BETWEEN
expr
expr
NOT
NOT
AND
AND
expr
expr
expr
expr
THEN
THEN
expr
expr
expr
expr
END
END
WHEN
WHEN
CASE
CASE
expr
expr
ELSE
ELSE
prefix operator
prefix operator
expr
expr
postfix operator
postfix operator
expr
expr
Text is not SVG - cannot display
\ No newline at end of file diff --git a/cds/assets/cxl/ref.drawio.svg b/cds/assets/cxl/ref.drawio.svg index bcf926dae6..c67f582c61 100644 --- a/cds/assets/cxl/ref.drawio.svg +++ b/cds/assets/cxl/ref.drawio.svg @@ -1,184 +1,4 @@ - - - - - - - - - - - - - - -
-
-
- leaf element -
-
-
-
- - leaf element - -
-
-
- - - - - - - - - - - - - - - - - - -
-
-
- struct -
-
-
-
- - struct - -
-
-
- - - - - - - - - - - -
-
-
- association -
-
-
-
- - association - -
-
-
- - - - - - - - - - - - - - - -
-
-
- infix filter -
-
-
-
- - infix filter - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - . - -
-
-
-
- - . - -
-
-
-
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file + + + +
leaf element
leaf element
struct
struct
association
association
infix filter
infix filter
.
.
Text is not SVG - cannot display
\ No newline at end of file diff --git a/get-started/assets/bookshop/cds-compile.drawio.svg b/get-started/assets/bookshop/cds-compile.drawio.svg index fc3af27ff0..739d6f5547 100644 --- a/get-started/assets/bookshop/cds-compile.drawio.svg +++ b/get-started/assets/bookshop/cds-compile.drawio.svg @@ -1,249 +1,4 @@ - - - - - - - - - - -
-
-
- CDL -
-
-
-
- - CDL - -
-
-
- - - - - - - -
-
-
- human-friendly -
-
-
-
- - human-fr... - -
-
-
- - - - - - - -
-
-
- CSN -
-
-
-
- - CSN - -
-
-
- - - - - - - -
-
-
- machine-readable -
-
-
-
- - machine-... - -
-
-
- - - - - - - - -
-
-
- compile -
-
-
-
- - compile - -
-
-
- - - - - - - - -
-
-
- --to -
-
-
-
- - --to - -
-
-
- - - - - - - - - -
-
-
- YAML -
-
-
-
- - YAML - -
-
-
- - - - - - - - - -
-
-
- JSON -
-
-
-
- - JSON - -
-
-
- - - - - - - - - -
-
-
- SQL -
-
-
-
- - SQL - -
-
-
- - - - - - - - - - - - - - - - - -
-
-
-

- - ••• - -

-
-
-
-
- - ••• - -
-
-
- - - - -
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file + + + +
CDL
CDL
human-friendly
human-fr...
CSN
CSN
machine-readable
machine-...
compile
compile
--to
--to
YAML
YAML
JSON
JSON
SQL
SQL

•••

•••
Text is not SVG - cannot display
\ No newline at end of file diff --git a/get-started/assets/concepts/key-concepts.drawio.svg b/get-started/assets/concepts/key-concepts.drawio.svg index ecd488741c..915d1b2503 100644 --- a/get-started/assets/concepts/key-concepts.drawio.svg +++ b/get-started/assets/concepts/key-concepts.drawio.svg @@ -1,4 +1,4 @@ -
declare
declare
act as
act as
implemented in
implemented in
Services
Services
Service
Models
Service...
published as 
published as 
consumed by
consumed by
Service
Interfaces
Service...
as views on 
as views on 
Facades
Facades
 are inferred to 
 are inferred to 
Domain
Models
Domain...
Service
Providers
Service...
 read / write 
 read / write 
APIs
APIs
Clients
Clients
declare
declare
declare
declare
Data
Data
declare
declare
Event
Handlers
Event...
through
through
Events
Events
declare
declare
react on
react on
handle
handle
send
send
Requests
Requests
trigger
trigger
Text is not SVG - cannot display
\ No newline at end of file +
declare
declare
act as
act as
implemented in
implemented in
Services
Services
Service
Models
Service...
published as 
published as 
consumed by
consumed by
Service
Interfaces
Service...
as views on 
as views on 
Facades
Facades
 are inferred to 
 are inferred to 
Domain
Models
Domain...
Service
Providers
Service...
 read / write 
 read / write 
APIs
APIs
Clients
Clients
declare
declare
declare
declare
Data
Data
declare
declare
Event
Handlers
Event...
through
through
Events
Events
declare
declare
react on
react on
handle
handle
send
send
Requests
Requests
trigger
trigger
Text is not SVG - cannot display
\ No newline at end of file From d7645ec25d15bd60db036edc4cf5480989d320d2 Mon Sep 17 00:00:00 2001 From: mariayord Date: Wed, 11 Feb 2026 14:41:59 +0100 Subject: [PATCH 004/178] added troubleshooting for 431 (#2373) Fixes: https://github.tools.sap/cap/cdsnode/issues/2588 --------- Co-authored-by: Johannes Vogel <31311694+johannes-vogel@users.noreply.github.com> --- get-started/get-help.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/get-started/get-help.md b/get-started/get-help.md index 81e508f39f..517febd3f4 100644 --- a/get-started/get-help.md +++ b/get-started/get-help.md @@ -166,6 +166,13 @@ Ensure that database transactions are either committed or rolled back. This can If you're using [@sap/hana-client](https://www.npmjs.com/package/@sap/hana-client), verify that the environment variable [`HDB_NODEJS_THREADPOOL_SIZE`](https://help.sap.com/docs/SAP_HANA_CLIENT/f1b440ded6144a54ada97ff95dac7adf/31a8c93a574b4f8fb6a8366d2c758f21.html?version=2.11) is adjusted appropriately. This variable specifies the amount of workers that concurrently execute asynchronous method calls for different connections. +### Why are requests rejected with `431` and not logged? + +| | Explanation | +|--------------|----------------------------------------------------------------------------------------------------------------------| +| _Root Cause_ | `431` occurs when the size of the request headers exceeds the maximum limit configured in the Node.js HTTP server. In this case, the Node.js HTTP server rejects the request during the initial parsing phase before it reaches CAP. Therefore, the request is not logged by the application. | +| _Solution_ | Inspect the request headers and check their size. If large headers are required and cannot be reduced, increase the maximum allowed HTTP header size in Node.js by setting the following environment variable `NODE_OPTIONS="--max-http-header-size=65536"` | + ### Why are requests rejected with `502`? From 8917d9b76930d4e057a9679788148a51ceed61a5 Mon Sep 17 00:00:00 2001 From: ecklie <52252271+ecklie@users.noreply.github.com> Date: Wed, 11 Feb 2026 16:15:10 +0100 Subject: [PATCH 005/178] Hook for internal HANA TMS troubleshooting (#2377) See https://github.tools.sap/cap/docs/pull/2019 Put to the HANA section instead of MTXS? --- get-started/get-help.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/get-started/get-help.md b/get-started/get-help.md index 517febd3f4..33689a3eba 100644 --- a/get-started/get-help.md +++ b/get-started/get-help.md @@ -646,6 +646,8 @@ See [How to configure your App Router](../guides/extensibility/customization#app [Find the documentation on `cds login`](../guides/extensibility/customization#cds-login){.learn-more} +
+ ## BTP ### How do I get an account on the SAP Business Technology Platform? From ced81f811d4e3ee3bea197a7aadb591bf476f4b0 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 12 Feb 2026 13:27:31 +0100 Subject: [PATCH 006/178] remove variants hint --- tools/cds-cli.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/tools/cds-cli.md b/tools/cds-cli.md index 45d0963c7f..0e968484ca 100644 --- a/tools/cds-cli.md +++ b/tools/cds-cli.md @@ -31,8 +31,6 @@ To use `cds` from your command line, install package `@sap/cds-dk` globally: npm i -g @sap/cds-dk ``` - - [[toc]] ## cds version From b9dbd65e28a54c9e6f07f629669a784ca85061bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jeglinsky?= Date: Thu, 12 Feb 2026 16:43:29 +0100 Subject: [PATCH 007/178] Tools/cds build: rework w/o toggling (#2391) --- tools/apis/cds-build.md | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/tools/apis/cds-build.md b/tools/apis/cds-build.md index 79bc91bdda..669b972303 100644 --- a/tools/apis/cds-build.md +++ b/tools/apis/cds-build.md @@ -142,13 +142,10 @@ cds build --for postgres > See also the command line help for further details using `cds build --help`.## Test-Run Built Projects Locally {#test-run} -
- -The artifacts deployed to the various cloud platforms are generated in the `gen/srv/` folder. So, to test the application as it runs on the cloud start your application from the `gen/srv/` folder: - -```sh -cds build # to create the build results, followed by either: +Test the application as it runs on the cloud: +::: code-group +```sh [Node.js] cd gen/srv && npx cds-serve # or: cd gen/srv && npm start @@ -156,14 +153,9 @@ cd gen/srv && npm start npx cds-serve -p gen/srv ``` -
- -
- -Use the regular command to [start a Java application](../../java/getting-started#build-and-run): - -```sh +```sh [Java] mvn spring-boot:run ``` +::: -
\ No newline at end of file +>For Node.js, you need to start the application from the the _gen/srv_ to use the result of `cds build`. Java uses that folder by default. \ No newline at end of file From 5c38f2a6394004b0c8cd7df9ad58eedba75b27ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jeglinsky?= Date: Fri, 13 Feb 2026 08:12:08 +0100 Subject: [PATCH 008/178] Fiori Guide: remove toggle (#2393) Co-authored-by: Christian Georgi --- guides/uis/fiori.md | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/guides/uis/fiori.md b/guides/uis/fiori.md index 9f004cdb37..a9252ee868 100644 --- a/guides/uis/fiori.md +++ b/guides/uis/fiori.md @@ -1,5 +1,5 @@ --- -impl-variants: true + --- # Serving SAP Fiori UIs @@ -18,23 +18,9 @@ For entities exposed via OData V4 there is a _Fiori preview_ link on the index p ::: details Be aware that this is **not meant for production**. -
- -The preview is not meant as a replacement for a proper SAP Fiori elements (UI5) application. -It is only active locally where the [development profile](../../node.js/cds-env#profiles) is enabled. - -To also enable it in cloud deployments, for test or demo purposes maybe, set cds.fiori.preview:true. - -
- -
- The preview is not meant as a replacement for a proper SAP Fiori elements (UI5) application. -It is active by default, but disabled automatically in case the [production profile](../../java/developing-applications/configuring#production-profile) is enabled. - -To also enable it in cloud deployments, for test or demo purposes maybe, set cds.index-page.enabled:true. -
+It's active by default, but disabled automatically in production. To also enable it in cloud deployments, for test or demo purposes maybe, set cds.fiori.preview:true for Node.js apps, or cds.index-page.enabled:true for Java. ::: @@ -65,7 +51,7 @@ The SAP Fiori tools provide advanced support for [adding SAP Fiori apps](https:/ ### Using [`cds add`](../../tools/cds-cli#sample) -Use `cds add sample` to add Fiori sample code to an existing project, or create a new one with `cds init --nodejs --add sample`. +Use `cds add sample` to add Fiori sample code to an existing project, or create a new Node.js project with `cds init --nodejs --add sample`. To create a Java project use `cds init --java --add sample`. ### From [Capire Samples](https://github.com/capire) @@ -812,7 +798,7 @@ You can now start the server with `cds watch` and see the hierarchical tree view ![Fiori UI with hierarchical tree view.](hierarchical-tree-view.png) {style="filter: drop-shadow(0 2px 5px rgba(0,0,0,.40));"} The compiler automatically expands the shortcut annotation `@hierarchy` to the -following `annotate` and `extend` statements. +following `annotate` and `extend` statements. ### Manual Approach From ff5cbd7a872e13354082aac2510b63f45c602bfb Mon Sep 17 00:00:00 2001 From: Johannes Vogt Date: Fri, 13 Feb 2026 08:26:45 +0100 Subject: [PATCH 009/178] fix impl variants (#2371) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I noticed that the impl-variants behavior was not quite consistent... some pages had an `ImplVariantsHint`, but no `impl-variants: true` and another page (the new remote-authentication guide) had an `ImplVariantsHint` without java or node specific sections. => add the hint and metadata where there are java or node specific sections --------- Co-authored-by: Christian Georgi Co-authored-by: René Jeglinsky --- guides/deploy/to-kyma.md | 1 + guides/security/authentication.md | 1 + guides/security/authorization.md | 1 + guides/security/cap-users.md | 1 + guides/security/remote-authentication.md | 1 - guides/services/consuming-services.md | 2 ++ guides/uis/fiori.md | 1 + tools/apis/cds-build.md | 1 + 8 files changed, 8 insertions(+), 1 deletion(-) diff --git a/guides/deploy/to-kyma.md b/guides/deploy/to-kyma.md index 1095796ba5..f083c470d8 100644 --- a/guides/deploy/to-kyma.md +++ b/guides/deploy/to-kyma.md @@ -7,6 +7,7 @@ breadcrumbs: - Deployment - Deploy to Kyma status: released +impl-variants: true # uacp: Used as link target from Help Portal at https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/29c25e504fdb4752b0383d3c407f52a6.html and https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/e4a7559baf9f4e4394302442745edcd9.html --- diff --git a/guides/security/authentication.md b/guides/security/authentication.md index 81063a3d92..93c636413f 100644 --- a/guides/security/authentication.md +++ b/guides/security/authentication.md @@ -4,6 +4,7 @@ label: Authentication synopsis: > This guide explains how to authenticate CAP services. status: released +impl-variants: true --- ', + contentStripped: '\n', + tagClose: '', + tagOpen: '', + contentStripped: '\n', + tagClose: '', + tagOpen: ' + + diff --git a/.vitepress/theme/components/cds-playground/MonacoEditor.vue b/.vitepress/theme/components/cds-playground/MonacoEditor.vue new file mode 100644 index 0000000000..f874e844d7 --- /dev/null +++ b/.vitepress/theme/components/cds-playground/MonacoEditor.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/.vitepress/theme/components/cds-playground/highlighter.js b/.vitepress/theme/components/cds-playground/highlighter.js new file mode 100644 index 0000000000..8f6fe37ad4 --- /dev/null +++ b/.vitepress/theme/components/cds-playground/highlighter.js @@ -0,0 +1,10 @@ +import { createHighlighter } from 'shiki' +import languages from '../../../languages' + +const highlighter = await createHighlighter({ + themes: ['github-dark', 'github-light'], + langs: ['javascript', 'js', 'sql', 'typescript', 'vue', ...languages], + langAlias: Object.fromEntries( languages.map(l => l.aliases?.map(alias => [alias, l.name])) ) +}) + +export default highlighter diff --git a/.vitepress/theme/components/cds-playground/monaco.js b/.vitepress/theme/components/cds-playground/monaco.js new file mode 100644 index 0000000000..ef86401165 --- /dev/null +++ b/.vitepress/theme/components/cds-playground/monaco.js @@ -0,0 +1,32 @@ +import highlighter from './highlighter' +import { shikiToMonaco } from '@shikijs/monaco' + +// no correct top-level await in Safari +async function setupMonaco() { + const [monaco, editorWorker, tsWorker] = await Promise.all([ + import('monaco-editor/esm/vs/editor/editor.api'), + import('monaco-editor/esm/vs/editor/editor.worker?worker'), + import('monaco-editor/esm/vs/language/typescript/ts.worker?worker'), + import('monaco-editor/esm/vs/basic-languages/javascript/javascript.contribution'), + import('monaco-editor/esm/vs/language/typescript/monaco.contribution'), + import('monaco-editor/esm/vs/language/json/monaco.contribution') + ]) + + monaco.languages.register({ id: 'javascript' }) + monaco.languages.register({ id: 'js' }) + monaco.languages.register({ id: 'cds' }) + monaco.languages.register({ id: 'cql' }) + monaco.languages.register({ id: 'typescript' }) + + self.MonacoEnvironment = { + getWorker(_, label) { + if (label === 'typescript' || label === 'javascript') return new tsWorker.default() + return new editorWorker.default() + } + } + + shikiToMonaco(highlighter, monaco) + return monaco +} + +export default setupMonaco(); diff --git a/.vitepress/theme/components/cds-playground/runners.js b/.vitepress/theme/components/cds-playground/runners.js new file mode 100644 index 0000000000..0567e82347 --- /dev/null +++ b/.vitepress/theme/components/cds-playground/runners.js @@ -0,0 +1,101 @@ +function simpleSqlFormat(sql) { + return sql + .replace(/\b(select|from|where|group by|order by|having|limit|offset|join|left join|right join|inner join|outer join)\b/gi, "\n$1") + .replace(/\b(and|or)\b/gi, "\n $1") + .replace(/,\s*/g, ",\n ") + .replace(/\n{2,}/g, "\n") + .trim(); +} + +let sql; +function injectLogger(sqlite) { + const sqlLog = []; + const { prototype } = sqlite().constructor; + const { prepare : original } = prototype; + prototype.prepare = function prepare(sql) { + sqlLog.push(sql); + return original.call(this, sql); + } + + sqlLog.trace = async function trace(cb) { + sqlLog.length = 0; + const result = await cb(); + return {result, trace: [...sqlLog], formatted: sqlLog.map(simpleSqlFormat).join('\n\n-------\n')}; + } + + sql = sqlLog; + return sqlLog; +} + + +async function initialize() { + const cds = (await import('@sap/cds')).default; + const express = (await import('express')).default; + const templates = (await import('virtual:templates')).default; + const sqlite = (await import('better-sqlite3')).default; + + const { bookshop } = templates + const model = Object.fromEntries(bookshop + ?.filter(file => file.path.endsWith('.cds') || file.path.startsWith('@sap/cds')) + ?.map(file => [file.path, file.content]) ?? []) + + const csvs = Object.fromEntries(bookshop + ?.filter(f => f.path.endsWith('.csv')) + ?.map(f => [f.path, f.content]) ?? []) + + window.cds = cds + //======= compile a csn model ======= + const csn = cds.compile(model); + csn.namespace = 'sap.capire.bookshop'; + + //======= start a cds server ======= + await sqlite.initialized // wait for sqlite3-wasm to be ready (part of polyfill) + injectLogger(sqlite); + + cds.db = await cds.connect.to('db'); + await cds.deploy(csn, null, csvs).to(cds.db); + + const app = express(); + await cds.serve('all').from(csn).in(app); + + return cds; +} + +let initialized; +if (!import.meta.env.SSR) { + // runs only in the browser + initialized = initialize(); +} + +const AsyncFunction = async function () {}.constructor; +async function evalJS(code) { + await initialized; + const fn = new AsyncFunction(code); + const { result, formatted } = await sql.trace(fn); + const kind = result? 'json' : 'plaintext' + return [ + { value: result ? typeof result !== 'string' ? JSON.stringify(result, null, 2) : result : "success", kind, name: 'Result' }, + { value: formatted, kind: 'sql', name: 'SQL'} + ]; +} + +async function cdsQL(query) { + const cds = await initialized; + + const { result, formatted } = await sql.trace(() => cds.ql(query)); + return [ + { value: result, kind: 'json', name: 'Result' }, + { value: formatted, kind: 'sql', name: 'SQL'} + ]; +} + +export { + evalJS, + cdsQL, +} + +export const runners = { + js: evalJS, + cql: cdsQL, + cds: cdsQL, +} diff --git a/cds/cxl.md b/cds/cxl.md index afe238478d..fe41f9a421 100644 --- a/cds/cxl.md +++ b/cds/cxl.md @@ -25,8 +25,31 @@ For example, [a calculated element](./cdl#calculated-elements) defined in an ent to the respective calculation in the generated query when the entity is queried. ::: -In the following chapters we illustrate the `CXL` syntax based on simple and more complex examples. + +### Live Code + The language syntax is described using [syntax diagrams](https://en.wikipedia.org/wiki/Syntax_diagram). +Most of the accompanying samples are runnable directly in the browser. +Press the play button to see the result and the corresponding sql: + +```cds live +SELECT from Books { title } +``` + +You can also edit the query, making this your personal playground. + +:::info Application Context +The cds model initialized on this page is a slightly modified version of the [capire/bookshop](https://github.com/capire/bookshop). + +All samples run on a single browser-local `cds` instance, you can access it via the dev tools +or run statements in the following code block: + +```js live +await INSERT.into('Books').entries( + { ID: 2, author_ID: 150, title: 'Eldorado' } +) +``` +::: ### Trying it with `cds repl` @@ -44,12 +67,9 @@ Just create the sample app as described above and start a repl session within th cds repl --run . ``` -:::info All of the example expressions follow the same pattern: -1. A **`CXL`** is shown in the context of a query. -2. The resulting **`SQL`** is shown. +Simply use `cds.ql` to run CXL as part of a CQL query: -:::code-group -```js [CQL] +```js > await cds.ql`SELECT from Books { title }` // [!code focus] [ { title: 'Wuthering Heights' }, @@ -60,10 +80,19 @@ cds repl --run . ] ``` -```sql [SQL] -SELECT title FROM sap_capire_bookshop_Books as Books + There's also a CQL mode: + +```js +> .ql // [!code focus] +cql> select from Books { title } // [!code focus] +[ + { title: 'Wuthering Heights' }, + { title: 'Jane Eyre' }, + { title: 'The Raven' }, + { title: 'Eleonora' }, + { title: 'Catweazle' } +] ``` -::: ## Expressions (`expr`) @@ -118,25 +147,9 @@ This syntax diagram describes the possible expressions: that calculates the total value of all books in stock by multiplying the `price` with the `stock`. - :::code-group - ```js [CQL] - > await cds.ql`SELECT title, total from Books` // [!code focus] - [ - { title: 'Wuthering Heights', total: 133.32 }, - { title: 'Jane Eyre', total: 135.74 }, - { title: 'The Raven', total: 4372.29 }, - { title: 'Eleonora', total: 7770 }, - { title: 'Catweazle', total: 3300 } - ] - ``` - - ```sql [SQL] - SELECT - Books.title, - Books.price * Books.stock as total -- calculated element is resolved - FROM sap_capire_bookshop_Books as Books + ```cds live + SELECT title, total from Books ``` - ::: [Learn more about calculated elements](./cdl.md#calculated-elements){ .learn-more } @@ -223,33 +236,14 @@ This syntax diagram describes the possible expressions: Expressions can be used in various parts of a query, e.g., on the select list, in the where clause, in order by clauses, and more: - :::code-group - ```js [CQL] - > await cds.ql` - SELECT from Books { - title, - stock, - price, - price * stock as total } where price > 10` // [!code focus] - [ - { title: 'Wuthering Heights', stock: 12, price: 11.11, total: 133.32}, - { title: 'Jane Eyre', stock: 11, price: 12.34, total: 135.74 }, - { title: 'The Raven', stock: 333, price: 13.13, total: 4372.29 }, - { title: 'Eleonora', stock: 555, price: 14, total: 7770 }, - { title: 'Catweazle', stock: 22, price: 150, total: 3300 } - ] - ``` - - ```sql [SQL] - SELECT - Books.title, - Books.stock, - Books.price, - Books.price * Books.stock as total - FROM sap_capire_bookshop_Books as Books - WHERE Books.price > 10 + ```cds live + SELECT from Books { + title, + stock, + price, + price * stock as total + } where price > 10 ``` - ::: Compared to the previous example, we now use the expression directly in the query to calculate the total value of all books in stock. @@ -290,22 +284,9 @@ They typically manifest as columns in database tables. The simplest form of a `ref` references a single element: -:::code-group -```js [CQL] {1} -> await cds.ql`SELECT from Books { title }` // [!code focus] -[ - { title: 'Wuthering Heights' }, - { title: 'Jane Eyre' }, - { title: 'The Raven' }, - { title: 'Eleonora' }, - { title: 'Catweazle' } -] -``` - -```sql [SQL] -SELECT title FROM sap_capire_bookshop_Books as Books +```cds live +SELECT from Books { title } ``` -::: In this example, we select the `title` element from the `Books` entity. @@ -314,28 +295,11 @@ In this example, we select the `title` element from the `Books` entity. A path expression navigates to elements of an association's target: -:::code-group -```js [CQL] -> await cds.ql`SELECT from Books { title, author.name as author }` // [!code focus] -[ - { title: 'Wuthering Heights', author: 'Emily Brontë' }, - { title: 'Jane Eyre', author: 'Charlotte Brontë' }, - { title: 'The Raven', author: 'Edgar Allen Poe' }, - { title: 'Eleonora', author: 'Edgar Allen Poe' }, - { title: 'Catweazle', author: 'Richard Carpenter' } -] -``` - -```sql [SQL] -SELECT - title, - author.name AS author -FROM - sap_capire_bookshop_Books AS Books - LEFT JOIN sap_capire_bookshop_Authors AS author -- The table alias for association 'author' - ON author.ID = Books.author_ID; +```cds live +SELECT from Books { title, + author.name as author +} ``` -::: In this example, we select all books together with the name of their author. The association `author` defined in the `Books` entity relates a book to its author. @@ -422,29 +386,10 @@ This is especially useful for to-many relations. For example, to select all authors that have written **at least** one book: -:::code-group -```js [CQL] -> await cds.ql`SELECT from Authors { name } where exists books` // [!code focus] - -[ - { name: 'Emily Brontë' }, - { name: 'Charlotte Brontë' }, - { name: 'Edgar Allen Poe' }, - { name: 'Richard Carpenter' } -] +```cds live +SELECT from Authors { name } where exists books ``` -```sql [SQL] {3-7} -SELECT Authors.name -FROM sap_capire_bookshop_Authors as Authors -WHERE exists ( - SELECT 1 - FROM sap_capire_bookshop_Books as books - WHERE books.author_ID = Authors.ID - ) -``` -::: - [Learn more about the `exists` predicate.](./cql.md#exists-predicate){.learn-more} The `exists` predicate can be further enhanced by [combining it with infix filters](#exists-infix-filter). @@ -475,55 +420,19 @@ This allows you to filter the target of an association based on certain criteria In this example, we want to select all authors with books that have a certain stock amount. To achieve this, we can apply an infix filter to the path segment `books` in the exists predicate: -:::code-group -```js [CQL] -await cds.ql`SELECT from Authors { name } - where exists books[stock > 100]` // [!code focus] -[ { name: 'Edgar Allen Poe' } ] -``` -```sql [SQL] -SELECT - name -FROM sap_capire_bookshop_Authors as Authors -WHERE exists ( - SELECT 1 - FROM sap_capire_bookshop_Books as books - WHERE books.author_ID = Authors.ID - and books.stock > 100 -) +```cds live +SELECT from Authors { name } + where exists books[stock > 100] ``` -::: Exist predicates with infix filters can also be nested. Here we select all authors that have written at least one book in the `Fantasy` genre: -:::code-group -```js [CQL] -> await cds.ql` - SELECT from Authors { name } - where exists books[exists genre[name = 'Fantasy']]` // [!code focus] - -[ { name: 'Richard Carpenter' } ] -``` - -```sql [SQL] -SELECT - name -FROM sap_capire_bookshop_Authors as Authors -WHERE exists ( - SELECT 1 - FROM sap_capire_bookshop_Books as books - WHERE books.author_ID = Authors.ID - and exists ( - SELECT 1 - FROM sap_capire_bookshop_Genres as genre - WHERE genre.ID = books.genre_ID - and genre.name = 'Fantasy' - ) -) +```cds live +SELECT from Authors { name } + where exists books[exists genre[name = 'Fantasy']] ``` -::: ### Applied to `from` Clause @@ -533,76 +442,29 @@ Infix filters can also be applied to [path expressions in the `from` clause](./c For example, we want to get the author names of books with a price greater than 19.99. Intuitively, we can formulate a query using a condition in the `where` clause: -:::code-group -```js [CQL] -> await cds.ql`SELECT from Books { author.name as name } where price > 19.99` // [!code focus] -[ { name: 'Richard Carpenter' } ] +```cds live +SELECT from Books { author.name as name } where price > 19.99 ``` -```sql [SQL] -SELECT author.name as name -FROM sap_capire_bookshop_Books as Books -LEFT JOIN sap_capire_bookshop_Authors as author - ON author.ID = Books.author_ID -WHERE Books.price > ? -``` -::: But we can also move this condition to an infix filter: -:::code-group -```js [CQL] -> await cds.ql`SELECT from Books[price > 19.99] { author.name as name }` // [!code focus] -[ { name: 'Richard Carpenter' } ] +```cds live +SELECT from Books[price > 19.99] { author.name as name } ``` -```sql [SQL] -SELECT author.name as name -FROM sap_capire_bookshop_Books as Books - LEFT JOIN sap_capire_bookshop_Authors as author ON author.ID = Books.author_ID -WHERE Books.price > 19.99 -``` -::: - Now we can further use path navigation to navigate from the filtered books to their authors: -:::code-group -```js [CQL] -> await cds.ql`SELECT from Books[price > 19.99]:author { name }` // [!code focus] -[ { name: 'Richard Carpenter' } ] -``` - -```sql [SQL] -SELECT Authors.name -FROM sap_capire_bookshop_Authors as Authors -WHERE exists ( - SELECT 1 - FROM sap_capire_bookshop_Books as Books - WHERE Books.author_ID = Authors.ID - and Books.price > ? -) +```cds live +SELECT from Books[price > 19.99]:author { name } ``` -::: ::: info Note that the generated SQL is equivalent to querying authors with an [exists predicate](#exists-infix-filter): -:::code-group -```js [CQL] -> await cds.ql`SELECT from Authors { name } where exists books[price > 19.99]` // [!code focus] -[ { name: 'Richard Carpenter' } ] -``` - -```sql [SQL] -SELECT Authors.name -FROM sap_capire_bookshop_Authors as Authors -WHERE exists ( - SELECT 1 - FROM sap_capire_bookshop_Books as Books - WHERE Books.author_ID = Authors.ID - and Books.price > ? -) +```cds live +SELECT from Authors { name } where exists books[price > 19.99] ``` ::: @@ -613,81 +475,29 @@ another more specific association from an existing one. In the `Authors` entity in the `Books.cds` file add a new element `cheapBooks`: -```cds {2} +```cds +entity Authors { books : Association to many Books on books.author = $self; cheapBooks = books[price < 19.99]; // based on `books` association +} ``` Now we can use `cheapBooks` just like any other association. For example, to select the set of authors which have no cheap books: -:::code-group -```js [CQL] -> await cds.ql`SELECT from Authors { name } where not exists cheapBooks` // [!code focus] -[ - { name: 'Richard Carpenter' } -] -``` - -```sql [SQL] -SELECT Authors.name -FROM sap_capire_bookshop_Authors as Authors -WHERE not exists ( - SELECT 1 - FROM sap_capire_bookshop_Books as cheapBooks - WHERE (cheapBooks.author_ID = Authors.ID) - and (cheapBooks.price < 19.99) -- here the infix filter condition is applied - ) +```cds live +SELECT from Authors { name } where not exists cheapBooks ``` -::: [Learn more about association-like calculated elements.](./cdl.md#association-like-calculated-elements){ .learn-more } We can also use `cheapBooks` in nested expands to get all cheap books of each author: -::: code-group -```js [CQL] -> await cds.ql`SELECT from Authors { name, cheapBooks { title, price } }` // [!code focus] -[ - { - name: 'Emily Brontë', - cheapBooks: [ { title: 'Wuthering Heights', price: 11.11 } ] - }, - { - name: 'Charlotte Brontë', - cheapBooks: [ { title: 'Jane Eyre', price: 12.34 } ] - }, - { - name: 'Edgar Allen Poe', - cheapBooks: [ - { title: 'The Raven', price: 13.13 }, - { title: 'Eleonora', price: 14 } - ] - }, - { name: 'Richard Carpenter', cheapBooks: [] } -] +```cds live +SELECT from Authors { name, cheapBooks { title, price } } ``` -```sql [SQL] -SELECT Authors.name, -( - SELECT jsonb_group_array( - jsonb_insert('{}', '$."title"', title, '$."price"', price) - ) as _json_ - FROM ( - SELECT - Books.title, - Books.price - FROM sap_capire_bookshop_Books as Books - WHERE (Authors.ID = Books.author_ID) - and (Books.price < ?) - ) -) as cheapBooks -FROM sap_capire_bookshop_Authors as Authors -``` -::: - ### Between Path Segments @@ -701,47 +511,10 @@ extend Authors with { In this case we want to select all books but the author is only included in the result if their age is below 40: -:::code-group -```js [CQL] -> await cds.ql `SELECT from Books { title, author[age < 40].name as author }` // [!code focus] - -[ - { title: 'Wuthering Heights', author: 'Emily Brontë' }, - { title: 'Jane Eyre', author: 'Charlotte Brontë' }, - { title: 'The Raven', author: null }, - { title: 'Eleonora', author: null }, - { title: 'Catweazle', author: null } -] +```cds live +SELECT from Books { title, author[age < 40].name as author } ``` -```sql [SQL] -SELECT - title, - author.name as author -FROM - sap_capire_bookshop_Books as Books -LEFT JOIN - sap_capire_bookshop_Authors as author -ON - author.ID = Books.author_ID AND floor( - ( - ( - (cast(strftime('%Y', coalesce(author.dateOfDeath,session_context('$now'))) as Integer) - cast(strftime('%Y', author.dateOfBirth) as Integer)) * 12 - ) + ( - cast(strftime('%m', coalesce(author.dateOfDeath,session_context('$now'))) as Integer) - cast(strftime('%m', author.dateOfBirth) as Integer) - ) + ( - ( - case - when (cast(strftime('%Y%m', coalesce(author.dateOfDeath,session_context('$now'))) as Integer) < cast(strftime('%Y%m', author.dateOfBirth) as Integer)) then - (cast(strftime('%d%H%M%S%f0000', coalesce(author.dateOfDeath,session_context('$now'))) as Integer) > cast(strftime('%d%H%M%S%f0000', author.dateOfBirth) as Integer)) - else - (cast(strftime('%d%H%M%S%f0000', coalesce(author.dateOfDeath,session_context('$now'))) as Integer) < cast(strftime('%d%H%M%S%f0000', author.dateOfBirth) as Integer)) * -1 - end - ) - ) - ) / 12) < ? -``` -::: The path expression `author[ age < 40 ].name` navigates along the `author` association of the `Books` entity only if the author's age is below 40. diff --git a/package-lock.json b/package-lock.json index 3b60106312..8242f90574 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,9 +11,12 @@ "devDependencies": { "@cap-js/cds-typer": "^0", "@cap-js/cds-types": "^0", + "@cap-js/sqlite": "^2.1.2", "@mdit/plugin-dl": ">=0.22.2", - "@sap/cds": "^9", + "@sap/cds": "^9.6.2", + "@shikijs/monaco": "^3.21.0", "@shikijs/vitepress-twoslash": "^3", + "@sqlite.org/sqlite-wasm": "3.51.2-build6", "@types/adm-zip": ">=0.5.0", "@types/express": "^4.17.21", "@typescript-eslint/parser": "^8.0.0", @@ -21,10 +24,14 @@ "cspell": "^9.0.0", "eslint": "^9.0.0", "eslint-plugin-vue": "^10.0.0", + "express": "^5", "fflate": "^0.8.2", "markdownlint-cli": ">=0.35.0", "markdownlint-rule-search-replace": "^1.1.1", + "monaco-editor": "^0.55.1", "sass": "^1.62.1", + "vite": "^7.3.1", + "vite-plugin-cds": "^0.1.9", "vitepress": "^1" } }, @@ -368,6 +375,33 @@ } } }, + "node_modules/@cap-js/db-service": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/@cap-js/db-service/-/db-service-2.8.2.tgz", + "integrity": "sha512-5BUWnoRX7LQBEWvEZmq0urEkxWPIIUnV9v2uFYop19W10jtmK6bxKqk+oUGD/7o6C9GNiFcZoLpja7SFohfKOg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "generic-pool": "^3.9.0" + }, + "peerDependencies": { + "@sap/cds": ">=9.4.5" + } + }, + "node_modules/@cap-js/sqlite": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@cap-js/sqlite/-/sqlite-2.1.3.tgz", + "integrity": "sha512-JkIAR8khPEW0jgw440JrtOzsj+TacZmACJsifGnCWpgrC17f2q8r15pzrCnvvCmkLXTqUW1kRg5/B3nLbaO86Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@cap-js/db-service": "^2.8.2", + "better-sqlite3": "^12.0.0" + }, + "peerDependencies": { + "@sap/cds": ">=9" + } + }, "node_modules/@cspell/cspell-bundled-dicts": { "version": "9.7.0", "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.7.0.tgz", @@ -1049,9 +1083,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", "cpu": [ "ppc64" ], @@ -1062,13 +1096,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", "cpu": [ "arm" ], @@ -1079,13 +1113,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", "cpu": [ "arm64" ], @@ -1096,13 +1130,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", "cpu": [ "x64" ], @@ -1113,13 +1147,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", "cpu": [ "arm64" ], @@ -1130,13 +1164,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", "cpu": [ "x64" ], @@ -1147,13 +1181,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", "cpu": [ "arm64" ], @@ -1164,13 +1198,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", "cpu": [ "x64" ], @@ -1181,13 +1215,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", "cpu": [ "arm" ], @@ -1198,13 +1232,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", "cpu": [ "arm64" ], @@ -1215,13 +1249,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", "cpu": [ "ia32" ], @@ -1232,13 +1266,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", "cpu": [ "loong64" ], @@ -1249,13 +1283,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", "cpu": [ "mips64el" ], @@ -1266,13 +1300,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", "cpu": [ "ppc64" ], @@ -1283,13 +1317,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", "cpu": [ "riscv64" ], @@ -1300,13 +1334,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", "cpu": [ "s390x" ], @@ -1317,13 +1351,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", "cpu": [ "x64" ], @@ -1334,13 +1368,30 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", "cpu": [ "x64" ], @@ -1351,13 +1402,30 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", "cpu": [ "x64" ], @@ -1368,13 +1436,30 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", "cpu": [ "x64" ], @@ -1385,13 +1470,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", "cpu": [ "arm64" ], @@ -1402,13 +1487,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", "cpu": [ "ia32" ], @@ -1419,13 +1504,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", "cpu": [ "x64" ], @@ -1436,7 +1521,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -2483,14 +2568,13 @@ } }, "node_modules/@sap/cds-fiori": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sap/cds-fiori/-/cds-fiori-2.1.1.tgz", - "integrity": "sha512-X+4v4LBAT8HIt0zr28/kJNS15nlNlcM97vAMW+agLrmK134nyBiMwUMcp8BMhxlG9B2PykrnAKH56D9O3tfoBg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sap/cds-fiori/-/cds-fiori-2.2.0.tgz", + "integrity": "sha512-NnvpmU40Eez5Q3SkyCCLRuBd1XUjk7N+pbXcIPIkKw4rwvqR2/FbjNveRzc8mcrLcQA3/5b/CXYsafDoozUhng==", "dev": true, "license": "SEE LICENSE IN LICENSE", "peerDependencies": { - "@sap/cds": ">=8", - "express": "^4" + "@sap/cds": ">=8" } }, "node_modules/@shikijs/core": { @@ -2539,6 +2623,18 @@ "@shikijs/types": "3.22.0" } }, + "node_modules/@shikijs/monaco": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/monaco/-/monaco-3.22.0.tgz", + "integrity": "sha512-4Bi/Gr5+ZVGmILq4ksyWtNbylfHxYB0BDMLR76UsaKOkWNJ/1w+c2s7bIjYnBNydyLVRlp28qntqEvB9EaJu3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.22.0", + "@shikijs/types": "3.22.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, "node_modules/@shikijs/themes": { "version": "3.22.0", "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.22.0.tgz", @@ -2676,6 +2772,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@sqlite.org/sqlite-wasm": { + "version": "3.51.2-build6", + "resolved": "https://registry.npmjs.org/@sqlite.org/sqlite-wasm/-/sqlite-wasm-3.51.2-build6.tgz", + "integrity": "sha512-5ibsgipkqcLINZ5qNSp5KfrtL6KwiNVtwBksNO6zhTghhLmEf3/u1sPoAkgH5RzuLpMw7zi50IWgkZ0WhfqpaA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=22" + } + }, "node_modules/@types/adm-zip": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.7.tgz", @@ -2887,6 +2993,14 @@ "@types/node": "*" } }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/@types/unist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", @@ -3063,20 +3177,6 @@ "dev": true, "license": "ISC" }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", - "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, "node_modules/@volar/language-core": { "version": "2.4.27", "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.27.tgz", @@ -3375,14 +3475,14 @@ } }, "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "dev": true, "license": "MIT", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" }, "engines": { "node": ">= 0.6" @@ -3507,13 +3607,6 @@ "dev": true, "license": "Python-2.0" }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true, - "license": "MIT" - }, "node_modules/array-timsort": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", @@ -3528,6 +3621,52 @@ "dev": true, "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/better-sqlite3": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.6.2.tgz", + "integrity": "sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/birpc": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", @@ -3538,49 +3677,44 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, "license": "MIT", "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/boolbase": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", @@ -3597,6 +3731,31 @@ "balanced-match": "^1.0.0" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -3748,6 +3907,13 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "license": "ISC" + }, "node_modules/clear-module": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/clear-module/-/clear-module-4.1.2.tgz", @@ -3829,16 +3995,17 @@ "license": "MIT" }, "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -3862,11 +4029,14 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } }, "node_modules/copy-anything": { "version": "4.0.5", @@ -4143,6 +4313,22 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -4180,24 +4366,12 @@ "node": ">=6" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", - "optional": true, "engines": { "node": ">=8" } @@ -4216,6 +4390,16 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/dompurify": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.7.tgz", + "integrity": "sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==", + "dev": true, + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -4255,6 +4439,16 @@ "node": ">= 0.8" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -4318,9 +4512,9 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4328,32 +4522,35 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" } }, "node_modules/escape-html": { @@ -4634,70 +4831,60 @@ "node": ">= 0.6" } }, - "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "~1.20.3", - "content-disposition": "~0.5.4", - "content-type": "~1.0.4", - "cookie": "~0.7.1", - "cookie-signature": "~1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.3.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "~0.1.12", - "proxy-addr": "~2.0.7", - "qs": "~6.14.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "~0.19.0", - "serve-static": "~1.16.2", - "setprototypeof": "1.2.0", - "statuses": "~2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -4767,42 +4954,35 @@ "node": ">=16.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "license": "MIT" + }, "node_modules/finalhandler": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", - "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "~2.4.1", - "parseurl": "~1.3.3", - "statuses": "~2.0.2", - "unpipe": "~1.0.0" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4882,15 +5062,22 @@ } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -4916,6 +5103,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/generic-pool": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.9.0.tgz", + "integrity": "sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/gensequence": { "version": "8.0.8", "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-8.0.8.tgz", @@ -4978,6 +5175,13 @@ "node": ">= 0.4" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "license": "MIT" + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -5157,18 +5361,43 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -5345,6 +5574,13 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-safe-filename": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.1.tgz", @@ -5706,6 +5942,19 @@ "node": ">=16" } }, + "node_modules/marked": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-14.0.0.tgz", + "integrity": "sha512-uIj4+faQ+MgHgwUW1l2PsPglZLOLOT1uErt06dAPtx2kjteLAkbsd/0FiYg/MGS+i7ZKLb7w2WClxHkzOOuryQ==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -5959,35 +6208,28 @@ "license": "MIT" }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "dev": true, "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromark": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", @@ -6547,23 +6789,10 @@ ], "license": "MIT" }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "dev": true, "license": "MIT", "engines": { @@ -6571,16 +6800,33 @@ } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/minimatch": { @@ -6623,6 +6869,24 @@ "dev": true, "license": "MIT" }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/monaco-editor": { + "version": "0.55.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.55.1.tgz", + "integrity": "sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dompurify": "3.2.7", + "marked": "14.0.0" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6656,6 +6920,13 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "dev": true, + "license": "MIT" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6664,16 +6935,29 @@ "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" } }, - "node_modules/node-addon-api": { + "node_modules/node-abi": { + "version": "3.87.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", + "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", @@ -6727,6 +7011,16 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/oniguruma-parser": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", @@ -6874,11 +7168,15 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", + "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "dev": true, - "license": "MIT" + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/perfect-debounce": { "version": "1.0.0", @@ -6961,6 +7259,34 @@ "url": "https://opencollective.com/preact" } }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6996,6 +7322,17 @@ "node": ">= 0.10" } }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -7017,9 +7354,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -7043,19 +7380,67 @@ } }, "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "dev": true, "license": "MIT", "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", + "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/readdirp": { @@ -7161,6 +7546,23 @@ "fsevents": "~2.3.2" } }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/run-con": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", @@ -7248,61 +7650,50 @@ } }, "node_modules/send": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", - "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "dev": true, "license": "MIT", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "~0.5.2", - "http-errors": "~2.0.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.4.1", - "range-parser": "~1.2.1", - "statuses": "~2.0.2" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/serve-static": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", - "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "dev": true, "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "~0.19.1" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/setprototypeof": { @@ -7428,6 +7819,53 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/smol-toml": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", @@ -7482,6 +7920,16 @@ "node": ">= 0.8" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", @@ -7576,6 +8024,36 @@ "dev": true, "license": "MIT" }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -7627,6 +8105,19 @@ "typescript": ">=4.8.4" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/twoslash": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.6.tgz", @@ -7680,14 +8171,15 @@ } }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "dev": true, "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { "node": ">= 0.6" @@ -7822,16 +8314,6 @@ "dev": true, "license": "MIT" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -7873,21 +8355,24 @@ } }, "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -7896,19 +8381,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -7929,9 +8420,28 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, + "node_modules/vite-plugin-cds": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/vite-plugin-cds/-/vite-plugin-cds-0.1.9.tgz", + "integrity": "sha512-i28tJueb6B/BM+o2tigzSPIq99wQ5o1w+FF+fiVaSwbyrX8dwCo/288TRGwtXwZUVRDMYZHC+wneZDqpCK+wpg==", + "dev": true, + "license": "MIT", + "workspaces": [ + "test/*" + ], + "peerDependencies": { + "@sap/cds": "^9" + } + }, "node_modules/vitepress": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.4.tgz", @@ -7974,40 +8484,431 @@ } } }, - "node_modules/vitepress/node_modules/@shikijs/core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", - "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "node_modules/vitepress/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/engine-javascript": "2.5.0", - "@shikijs/engine-oniguruma": "2.5.0", - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.4" + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vitepress/node_modules/@shikijs/engine-javascript": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", - "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "node_modules/vitepress/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^3.1.0" + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vitepress/node_modules/@shikijs/engine-oniguruma": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", - "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", - "dev": true, - "license": "MIT", - "dependencies": { + "node_modules/vitepress/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vitepress/node_modules/@shikijs/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.5.0.tgz", + "integrity": "sha512-uu/8RExTKtavlpH7XqnVYBrfBkUc20ngXiX9NSrBhOVZYv/7XQRKUyhtkeflY5QsxC0GbJThCerruZfsUaSldg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.4" + } + }, + "node_modules/vitepress/node_modules/@shikijs/engine-javascript": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", + "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "oniguruma-to-es": "^3.1.0" + } + }, + "node_modules/vitepress/node_modules/@shikijs/engine-oniguruma": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.5.0.tgz", + "integrity": "sha512-pGd1wRATzbo/uatrCIILlAdFVKdxImWJGQ5rFiB5VZi2ve5xj3Ax9jny8QvkaV93btQEwR/rSz5ERFpC5mKNIw==", + "dev": true, + "license": "MIT", + "dependencies": { "@shikijs/types": "2.5.0", "@shikijs/vscode-textmate": "^10.0.2" } @@ -8043,6 +8944,59 @@ "@types/hast": "^3.0.4" } }, + "node_modules/vitepress/node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/vitepress/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, "node_modules/vitepress/node_modules/oniguruma-to-es": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", @@ -8072,6 +9026,66 @@ "@types/hast": "^3.0.4" } }, + "node_modules/vitepress/node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "node_modules/vscode-languageserver-textdocument": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", @@ -8169,6 +9183,13 @@ "node": ">=0.10.0" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, "node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", diff --git a/package.json b/package.json index 35b0dc95d2..53f5cf6c72 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,12 @@ "devDependencies": { "@cap-js/cds-typer": "^0", "@cap-js/cds-types": "^0", - "@sap/cds": "^9", + "@cap-js/sqlite": "^2.1.2", + "@mdit/plugin-dl": ">=0.22.2", + "@sap/cds": "^9.6.2", + "@shikijs/monaco": "^3.21.0", "@shikijs/vitepress-twoslash": "^3", + "@sqlite.org/sqlite-wasm": "3.51.2-build6", "@types/adm-zip": ">=0.5.0", "@types/express": "^4.17.21", "@typescript-eslint/parser": "^8.0.0", @@ -28,11 +32,14 @@ "cspell": "^9.0.0", "eslint": "^9.0.0", "eslint-plugin-vue": "^10.0.0", + "express": "^5", "fflate": "^0.8.2", - "@mdit/plugin-dl": ">=0.22.2", "markdownlint-cli": ">=0.35.0", "markdownlint-rule-search-replace": "^1.1.1", + "monaco-editor": "^0.55.1", "sass": "^1.62.1", + "vite": "^7.3.1", + "vite-plugin-cds": "^0.1.9", "vitepress": "^1" } } diff --git a/public/icons/play.svg b/public/icons/play.svg new file mode 100644 index 0000000000..51511a3d6c --- /dev/null +++ b/public/icons/play.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file From c4052e3e37b1bc1b7f4c5737f0198992300e472a Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Thu, 26 Feb 2026 09:58:01 +0100 Subject: [PATCH 032/178] Added npm/mvn install to cloned repos --- get-started/bookshop.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/get-started/bookshop.md b/get-started/bookshop.md index 2156f4a8f4..b97a71973a 100644 --- a/get-started/bookshop.md +++ b/get-started/bookshop.md @@ -37,9 +37,11 @@ cap/bookshop/ ::: code-group ```sh [Node.js] git clone https://github.com/capire/bookshop +npm install ``` ```sh [Java] git clone https://github.com/sap-samples/cloud-cap-samples-java bookshop +mvn install ``` ::: From 01a39f7c31efa1699c91bf099af77fd2e64e3349 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 26 Feb 2026 10:10:54 +0100 Subject: [PATCH 033/178] add redirects --- redirects.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/redirects.md b/redirects.md index 28d2033214..c724d09167 100644 --- a/redirects.md +++ b/redirects.md @@ -24,6 +24,7 @@ - [guides/deploy-to-cloud](guides/deploy/) - [guides/deployment/(.*)](guides/deploy/$1) - [guides/deployment/deploy-to-kyma](guides/deploy/to-kyma) +- [guides/deployment/to-kyma](guides/deploy/to-kyma) - [guides/domain-models](guides/domain/) - [guides/domain-modeling](guides/domain/) - [guides/dps](guides/protocols/cdi) @@ -40,11 +41,13 @@ - [guides/temporal-data](guides/domain/temporal-data) - [guides/using-services](guides/integration/calesi) - [guides/databases-hana](guides/databases/hana) +- [guides/databases-postgres](guides/databases/postgres) - [security](guides/security/) - [security/aspects](guides/security/overview) - [security/data-protection-privacy](guides/security/data-protection) - [security/overview](guides/security/overview) +- [guides/security/aspects](guides/security/overview) - [advanced/asyncapi](guides/protocols/asyncapi) - [advanced/deploy-to-cloud](guides/deploy/) @@ -57,6 +60,8 @@ - [advanced/performance-modeling](guides/databases/performance) - [advanced/publishing-apis/(.*)](guides/protocols/$1) - [advanced/troubleshooting](get-started/get-help) +- [advanced/hybrid-testing](tools/cds-bind) +- [advanced/odata](protocols/odata) ## CDS From 5dc479dc2afa3cf75f23f10bd1d70efd4dc53d7a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Feb 2026 12:48:55 +0000 Subject: [PATCH 034/178] chore(deps): update shiki monorepo to v3.23.0 (#2414) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@shikijs/monaco](https://redirect.github.com/shikijs/shiki) ([source](https://redirect.github.com/shikijs/shiki/tree/HEAD/packages/monaco)) | [`3.22.0` → `3.23.0`](https://renovatebot.com/diffs/npm/@shikijs%2fmonaco/3.22.0/3.23.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@shikijs%2fmonaco/3.23.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@shikijs%2fmonaco/3.22.0/3.23.0?slim=true) | | [@shikijs/vitepress-twoslash](https://redirect.github.com/shikijs/shiki) ([source](https://redirect.github.com/shikijs/shiki/tree/HEAD/packages/vitepress-twoslash)) | [`3.22.0` → `3.23.0`](https://renovatebot.com/diffs/npm/@shikijs%2fvitepress-twoslash/3.22.0/3.23.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@shikijs%2fvitepress-twoslash/3.23.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@shikijs%2fvitepress-twoslash/3.22.0/3.23.0?slim=true) | --- ### Release Notes
shikijs/shiki (@​shikijs/monaco) ### [`v3.23.0`](https://redirect.github.com/shikijs/shiki/releases/tag/v3.23.0) [Compare Source](https://redirect.github.com/shikijs/shiki/compare/v3.22.0...v3.23.0) #####    🚀 Features - Update grammar and themes  -  by [@​antfu](https://redirect.github.com/antfu) [(9b4ca)](https://redirect.github.com/shikijs/shiki/commit/9b4cacac) - **cli**: - Add stdin support and list commands  -  by [@​Divyapahuja31](https://redirect.github.com/Divyapahuja31) and **DIVYA PAHUJA** in [#​1241](https://redirect.github.com/shikijs/shiki/issues/1241) [(213f1)](https://redirect.github.com/shikijs/shiki/commit/213f19bf) - **transformers**: - Add 'leading' position to transformerRenderWhitespace  -  by [@​Divyapahuja31](https://redirect.github.com/Divyapahuja31) and **DIVYA PAHUJA** in [#​1236](https://redirect.github.com/shikijs/shiki/issues/1236) [(49cbb)](https://redirect.github.com/shikijs/shiki/commit/49cbb761) - Add support for \[!code info] notation  -  by [@​Divyapahuja31](https://redirect.github.com/Divyapahuja31) and **DIVYA PAHUJA** in [#​1237](https://redirect.github.com/shikijs/shiki/issues/1237) [(cd2a6)](https://redirect.github.com/shikijs/shiki/commit/cd2a6d94) #####    🐞 Bug Fixes - Add `declare` modifier to top level declarations in `.d.ts`  -  by [@​KazariEX](https://redirect.github.com/KazariEX) in [#​1242](https://redirect.github.com/shikijs/shiki/issues/1242) [(142d5)](https://redirect.github.com/shikijs/shiki/commit/142d55c3) - **cli**: Normalize language/extension casing for CLI inputs  -  by [@​Nandann018-ux](https://redirect.github.com/Nandann018-ux) and [@​antfu](https://redirect.github.com/antfu) in [#​1245](https://redirect.github.com/shikijs/shiki/issues/1245) [(4bea1)](https://redirect.github.com/shikijs/shiki/commit/4bea1a54) #####     [View changes on GitHub](https://redirect.github.com/shikijs/shiki/compare/v3.22.0...v3.23.0)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/capire/docs). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 238 +++++++++++++++++++++++----------------------- 1 file changed, 119 insertions(+), 119 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8242f90574..03d2a43d52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -314,13 +314,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.6.tgz", - "integrity": "sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.6" + "@babel/types": "^7.29.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -330,9 +330,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.6.tgz", - "integrity": "sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, "license": "MIT", "dependencies": { @@ -2578,71 +2578,71 @@ } }, "node_modules/@shikijs/core": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.22.0.tgz", - "integrity": "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.22.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" } }, "node_modules/@shikijs/engine-javascript": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.22.0.tgz", - "integrity": "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", + "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.22.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz", - "integrity": "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.22.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.22.0.tgz", - "integrity": "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.22.0" + "@shikijs/types": "3.23.0" } }, "node_modules/@shikijs/monaco": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/monaco/-/monaco-3.22.0.tgz", - "integrity": "sha512-4Bi/Gr5+ZVGmILq4ksyWtNbylfHxYB0BDMLR76UsaKOkWNJ/1w+c2s7bIjYnBNydyLVRlp28qntqEvB9EaJu3g==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/monaco/-/monaco-3.23.0.tgz", + "integrity": "sha512-OCApTdAGTHMFUXSYwGztW6EnlxXsWNrpnGf+uO+AznE+khC6V1/8QjuJESIcvZUIq9iAp4ZCNYosZKSVj1Hctg==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.22.0", - "@shikijs/types": "3.22.0", + "@shikijs/core": "3.23.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/themes": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.22.0.tgz", - "integrity": "sha512-o+tlOKqsr6FE4+mYJG08tfCFDS+3CG20HbldXeVoyP+cYSUxDhrFf3GPjE60U55iOkkjbpY2uC3It/eeja35/g==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.22.0" + "@shikijs/types": "3.23.0" } }, "node_modules/@shikijs/transformers": { @@ -2718,14 +2718,14 @@ } }, "node_modules/@shikijs/twoslash": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.22.0.tgz", - "integrity": "sha512-GO27UPN+kegOMQvC+4XcLt0Mttyg+n16XKjmoKjdaNZoW+sOJV7FLdv2QKauqUDws6nE3EQPD+TFHEdyyoUBDw==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.23.0.tgz", + "integrity": "sha512-pNaLJWMA3LU7PhT8tm9OQBZ1epy0jmdgeJzntBtr1EVXLbHxGzTj3mnf9vOdcl84l96qnlJXkJ/NGXZYBpXl5g==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.22.0", - "@shikijs/types": "3.22.0", + "@shikijs/core": "3.23.0", + "@shikijs/types": "3.23.0", "twoslash": "^0.3.6" }, "peerDependencies": { @@ -2733,9 +2733,9 @@ } }, "node_modules/@shikijs/types": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz", - "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2744,25 +2744,25 @@ } }, "node_modules/@shikijs/vitepress-twoslash": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-3.22.0.tgz", - "integrity": "sha512-E4W4eUHmRVaWhhJO9Phor7xySwKyxMlgzqAnx3/wC9JWxTUKcsWn4gtd4zGtHF9IsrAq0JVkcGdLSx2YoY784A==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-3.23.0.tgz", + "integrity": "sha512-CnNsKIxxkRxRkL5+m6TNPit563TYfEEqlod8C6N1rfeZvX4xUlRrpoKyoWKmpGSNyjWWeYpMZTUH18YTTOxKfw==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/twoslash": "3.22.0", + "@shikijs/twoslash": "3.23.0", "floating-vue": "^5.2.2", "lz-string": "^1.5.0", "magic-string": "^0.30.21", - "markdown-it": "^14.1.0", - "mdast-util-from-markdown": "^2.0.2", + "markdown-it": "^14.1.1", + "mdast-util-from-markdown": "^2.0.3", "mdast-util-gfm": "^3.1.0", "mdast-util-to-hast": "^13.2.1", "ohash": "^2.0.11", - "shiki": "3.22.0", + "shiki": "3.23.0", "twoslash": "^0.3.6", "twoslash-vue": "^0.3.6", - "vue": "^3.5.27" + "vue": "^3.5.29" } }, "node_modules/@shikijs/vscode-textmate": { @@ -3195,15 +3195,15 @@ "license": "MIT" }, "node_modules/@vue/compiler-core": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.27.tgz", - "integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.29.tgz", + "integrity": "sha512-cuzPhD8fwRHk8IGfmYaR4eEe4cAyJEL66Ove/WZL7yWNL134nqLddSLwNRIsFlnnW1kK+p8Ck3viFnC0chXCXw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/shared": "3.5.27", - "entities": "^7.0.0", + "@babel/parser": "^7.29.0", + "@vue/shared": "3.5.29", + "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } @@ -3222,28 +3222,28 @@ } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz", - "integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.29.tgz", + "integrity": "sha512-n0G5o7R3uBVmVxjTIYcz7ovr8sy7QObFG8OQJ3xGCDNhbG60biP/P5KnyY8NLd81OuT1WJflG7N4KWYHaeeaIg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.27", - "@vue/shared": "3.5.27" + "@vue/compiler-core": "3.5.29", + "@vue/shared": "3.5.29" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz", - "integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.29.tgz", + "integrity": "sha512-oJZhN5XJs35Gzr50E82jg2cYdZQ78wEwvRO6Y63TvLVTc+6xICzJHP1UIecdSPPYIbkautNBanDiWYa64QSFIA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.5", - "@vue/compiler-core": "3.5.27", - "@vue/compiler-dom": "3.5.27", - "@vue/compiler-ssr": "3.5.27", - "@vue/shared": "3.5.27", + "@babel/parser": "^7.29.0", + "@vue/compiler-core": "3.5.29", + "@vue/compiler-dom": "3.5.29", + "@vue/compiler-ssr": "3.5.29", + "@vue/shared": "3.5.29", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", @@ -3251,14 +3251,14 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz", - "integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.29.tgz", + "integrity": "sha512-Y/ARJZE6fpjzL5GH/phJmsFwx3g6t2KmHKHx5q+MLl2kencADKIrhH5MLF6HHpRMmlRAYBRSvv347Mepf1zVNw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.27", - "@vue/shared": "3.5.27" + "@vue/compiler-dom": "3.5.29", + "@vue/shared": "3.5.29" } }, "node_modules/@vue/devtools-api": { @@ -3314,57 +3314,57 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.27.tgz", - "integrity": "sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.29.tgz", + "integrity": "sha512-zcrANcrRdcLtmGZETBxWqIkoQei8HaFpZWx/GHKxx79JZsiZ8j1du0VUJtu4eJjgFvU/iKL5lRXFXksVmI+5DA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/shared": "3.5.27" + "@vue/shared": "3.5.29" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.27.tgz", - "integrity": "sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.29.tgz", + "integrity": "sha512-8DpW2QfdwIWOLqtsNcds4s+QgwSaHSJY/SUe04LptianUQ/0xi6KVsu/pYVh+HO3NTVvVJjIPL2t6GdeKbS4Lg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.27", - "@vue/shared": "3.5.27" + "@vue/reactivity": "3.5.29", + "@vue/shared": "3.5.29" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz", - "integrity": "sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.29.tgz", + "integrity": "sha512-AHvvJEtcY9tw/uk+s/YRLSlxxQnqnAkjqvK25ZiM4CllCZWzElRAoQnCM42m9AHRLNJ6oe2kC5DCgD4AUdlvXg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.27", - "@vue/runtime-core": "3.5.27", - "@vue/shared": "3.5.27", + "@vue/reactivity": "3.5.29", + "@vue/runtime-core": "3.5.29", + "@vue/shared": "3.5.29", "csstype": "^3.2.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.27.tgz", - "integrity": "sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.29.tgz", + "integrity": "sha512-G/1k6WK5MusLlbxSE2YTcqAAezS+VuwHhOvLx2KnQU7G2zCH6KIb+5Wyt6UjMq7a3qPzNEjJXs1hvAxDclQH+g==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.27", - "@vue/shared": "3.5.27" + "@vue/compiler-ssr": "3.5.29", + "@vue/shared": "3.5.29" }, "peerDependencies": { - "vue": "3.5.27" + "vue": "3.5.29" } }, "node_modules/@vue/shared": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.27.tgz", - "integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.29.tgz", + "integrity": "sha512-w7SR0A5zyRByL9XUkCfdLs7t9XOHUyJ67qPGQjOou3p6GvBeBW+AVjUUmlxtZ4PIYaRvE+1LmK44O4uajlZwcg==", "dev": true, "license": "MIT" }, @@ -5788,9 +5788,9 @@ "license": "MIT" }, "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", "dev": true, "license": "MIT", "dependencies": { @@ -5996,9 +5996,9 @@ } }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7727,18 +7727,18 @@ } }, "node_modules/shiki": { - "version": "3.22.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.22.0.tgz", - "integrity": "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", + "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.22.0", - "@shikijs/engine-javascript": "3.22.0", - "@shikijs/engine-oniguruma": "3.22.0", - "@shikijs/langs": "3.22.0", - "@shikijs/themes": "3.22.0", - "@shikijs/types": "3.22.0", + "@shikijs/core": "3.23.0", + "@shikijs/engine-javascript": "3.23.0", + "@shikijs/engine-oniguruma": "3.23.0", + "@shikijs/langs": "3.23.0", + "@shikijs/themes": "3.23.0", + "@shikijs/types": "3.23.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } @@ -9101,17 +9101,17 @@ "license": "MIT" }, "node_modules/vue": { - "version": "3.5.27", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz", - "integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==", + "version": "3.5.29", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.29.tgz", + "integrity": "sha512-BZqN4Ze6mDQVNAni0IHeMJ5mwr8VAJ3MQC9FmprRhcBYENw+wOAAjRj8jfmN6FLl0j96OXbR+CjWhmAmM+QGnA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.27", - "@vue/compiler-sfc": "3.5.27", - "@vue/runtime-dom": "3.5.27", - "@vue/server-renderer": "3.5.27", - "@vue/shared": "3.5.27" + "@vue/compiler-dom": "3.5.29", + "@vue/compiler-sfc": "3.5.29", + "@vue/runtime-dom": "3.5.29", + "@vue/server-renderer": "3.5.29", + "@vue/shared": "3.5.29" }, "peerDependencies": { "typescript": "*" From 75a6a6dc1973b197702eaf70def7741fb7de4d80 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Thu, 26 Feb 2026 15:08:35 +0100 Subject: [PATCH 035/178] Less version changes from renovate, use variables --- .github/renovate.json | 11 +++++++++++ .vitepress/config.js | 3 ++- guides/security/cap-users.md | 6 ++++-- plugins/index.md | 5 +++++ 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/.github/renovate.json b/.github/renovate.json index 141f5b2876..64415f15dd 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -54,5 +54,16 @@ "depNameTemplate": "com.sap.cds:cds4j-api", "datasourceTemplate": "maven", "versioningTemplate": "maven" + }, + { + "customType": "regex", + "fileMatch": [ ".vitepress/config.*" ], + "matchStrings": [ + "cloud_sec_ams\\s*:\\s*'(?.*?)'" + ], + "depNameTemplate": "com.sap.cloud.security.ams.client:cap-ams-support", + "datasourceTemplate": "maven", + "versioningTemplate": "maven" } + ]} diff --git a/.vitepress/config.js b/.vitepress/config.js index 4ea537197f..50fd2dc26a 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -124,7 +124,8 @@ if (!siteURL.pathname.endsWith('/')) siteURL.pathname += '/' config.themeConfig.capire = { versions: { java_services: '4.7.0', - java_cds4j: '4.7.0' + java_cds4j: '4.7.0', + cloud_sec_ams: '3.7.0' }, gotoLinks: [], siteURL diff --git a/guides/security/cap-users.md b/guides/security/cap-users.md index fa34951828..599467b0e7 100644 --- a/guides/security/cap-users.md +++ b/guides/security/cap-users.md @@ -8,6 +8,8 @@ impl-variants: true --- + # CAP Plugins & Enhancements Following is a curated list of plugins that are available for the SAP Cloud Application Programming Model (CAP) which provide integration with SAP BTP services and technologies, or other SAP products. From abd2372b9317ab281e748427684bc64730cf2c00 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:18:29 +0000 Subject: [PATCH 036/178] chore(deps): update dependency com.sap.cloud.security.ams.client:cap-ams-support to v3.8.0 (#2417) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [com.sap.cloud.security.ams.client:cap-ams-support](https://sap.github.io/cloud-identity-developer-guide) ([source](https://redirect.github.com/SAP/cloud-identity-developer-guide)) | `3.7.0` → `3.8.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.sap.cloud.security.ams.client:cap-ams-support/3.8.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.sap.cloud.security.ams.client:cap-ams-support/3.7.0/3.8.0?slim=true) | --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/capire/docs). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .vitepress/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index 50fd2dc26a..6378b839bf 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -125,7 +125,7 @@ config.themeConfig.capire = { versions: { java_services: '4.7.0', java_cds4j: '4.7.0', - cloud_sec_ams: '3.7.0' + cloud_sec_ams: '3.8.0' }, gotoLinks: [], siteURL From 7ae5a07c1c941f707a07dee29c2ecba079d770fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Mann?= <64193442+joergmann@users.noreply.github.com> Date: Fri, 27 Feb 2026 13:59:38 +0100 Subject: [PATCH 037/178] remove(lint): commented out section in tools/lint (#2418) --- tools/cds-lint/index.md | 63 ----------------------------------------- 1 file changed, 63 deletions(-) diff --git a/tools/cds-lint/index.md b/tools/cds-lint/index.md index 412085fc6c..2b69a3366d 100644 --- a/tools/cds-lint/index.md +++ b/tools/cds-lint/index.md @@ -77,69 +77,6 @@ The **CDS Lint** rules are a set of generic rules based on CAP best practices. [See our Rules Reference page to find out more](./rules/){ .learn-more} - - - ### ESLint CLI (optional) {#usage-eslint-cli} To have more control over the linting process, you can also access the CDS ESLint plugin natively via the [ESLint CLI](https://eslint.org/docs/user-guide/command-line-interface). To determine the proper command line options, it can help to refer to output of the equivalent call using the [CDS Lint CLI](#usage-lint-cli) with `DEBUG="lint"`, which shows all of the options and flags applied: From 91cabddcb40f2696dfd5ccaf25838d763900a43f Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Fri, 27 Feb 2026 15:24:04 +0100 Subject: [PATCH 038/178] Adjust `cds version` output to current format --- get-started/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/get-started/index.md b/get-started/index.md index 33a0f71fbd..dbea146d67 100644 --- a/get-started/index.md +++ b/get-started/index.md @@ -136,10 +136,10 @@ Use `cds version` to check your installed versions of _cds-dk_ , as well as your cds version ``` ```zsh - @sap/cds-dk: 9.6.1 /opt/homebrew/lib/node_modules/@sap/cds/dk - npm root -l: ~/cap/bookshop/node_modules - npm root -g: /opt/homebrew/lib/node_modules - Node.js: 24.12.0 /opt/homebrew/bin/node + @sap/cds-dk 9.6.1 /opt/homebrew/lib/node_modules/@sap/cds/dk + npm root -l ~/cap/bookshop/node_modules + npm root -g /opt/homebrew/lib/node_modules + Node.js 24.12.0 /opt/homebrew/bin/node ``` From 12990058d8b2011f8a2968550f8651f32f3e8255 Mon Sep 17 00:00:00 2001 From: ankul <116072312+kulliax@users.noreply.github.com> Date: Fri, 27 Feb 2026 16:23:32 +0100 Subject: [PATCH 039/178] fix deprecated version in hana limitation link (#2415) --- guides/databases/hana.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/databases/hana.md b/guides/databases/hana.md index 5f1cd70cb4..4bda1e0c38 100644 --- a/guides/databases/hana.md +++ b/guides/databases/hana.md @@ -694,7 +694,7 @@ If you need to remove deployed CSV files, also add this entry: ### System Limits -All limitations for the SAP HANA Cloud database can be found in the [SAP Help Portal](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/system-limitations?version=2024_2_QRC). +All limitations for the SAP HANA Cloud database can be found in the [SAP Help Portal](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/system-limitations). ### Native Associations From 7bcc9febae744b0787aa94ee3a7b2c3c9b6fb92f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Mann?= <64193442+joergmann@users.noreply.github.com> Date: Mon, 2 Mar 2026 08:43:32 +0100 Subject: [PATCH 040/178] feat(install): setup for Windows / Linux / WSL (#2392) --- get-started/index.md | 164 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 132 insertions(+), 32 deletions(-) diff --git a/get-started/index.md b/get-started/index.md index dbea146d67..ba200b6bf9 100644 --- a/get-started/index.md +++ b/get-started/index.md @@ -12,71 +12,159 @@ Jumpstart & Grow as You Go... {.subtitle} A most minimalistic setup needs [CAP's _cds-dk_](https://www.npmjs.com/package/@sap/cds-dk) installed, which in turn requires [Node.js](https://nodejs.org). Add optional setups for [Java](https://sapmachine.io), [GitHub](https://github.com), and [Visual Studio Code](https://code.visualstudio.com), as appropriate, and as outlined below. -On macOS (and Linux), we recommend using [Homebrew](https://brew.sh), and run the commands in the subsequent sections in your terminal to get everything set up. +### Preparation -```shell -bash -c "$( curl https://raw.githubusercontent.com/homebrew/install/HEAD/install.sh )" -``` +On macOS, Linux and WSL (Windows Subsystem for Linux), we recommend using [Homebrew](https://brew.sh), and run the commands in the subsequent sections in your terminal to get everything set up. We use multiline console commands to improve usability in Windows PowerShell. PowerShell will ask for confirmation when you paste these commands, adding an extra safety step. -::: details Alternative setup (required on Windows) ... - Instead of using Homebrew – which is not available on Windows –, you can manually download and install the required packages from their respective websites: - - | Package | Install from | Remarks | - |---------|----------------------------------|---------------------------------------------------------| - | Node.js | https://nodejs.org | _required_ | - | Java | https://sapmachine.io | _optional_ | - | Git | https://git-scm.com | _optional_ | - | VS Code | https://code.visualstudio.com | + [recommended extensions](../tools/cds-editors#vscode) | - | SQLite | https://sqlite.org/download.html | _required_ on Windows | - -Then install CAP's _cds-dk_ globally: - - ```shell - npm add -g @sap/cds-dk - ``` +::: code-group +```shell [macOS] +bash -c "$( curl https://raw.githubusercontent.com/homebrew/install/HEAD/install.sh )" +``` +```shell [Linux / WSL] +# install curl (required to get Homebrew) and git (required to run Homebrew) +sudo apt install curl git -y +bash -c "$( curl https://raw.githubusercontent.com/homebrew/install/HEAD/install.sh )" +``` ::: - +### Node.js and _cds-dk_ {.required} +::: code-group +```shell [macOS / Linux / WSL] +brew install node # Node.js LTS +npm i -g @sap/cds-dk # install CAP's cds-dk globally +cds -v # check cds version +``` +```PowerShell [Windows] +winget install --silent OpenJS.NodeJS.LTS -### Node.js and _cds-dk_ {.required} +# Reload PATH from registry to access newly installed tools +$env:PATH = [Environment]::GetEnvironmentVariable("PATH","Machine") ` + + ";" + [Environment]::GetEnvironmentVariable("PATH","User") -```shell -brew install node # Node.js -npm i -g @sap/cds-dk # CAP's cds-dk +npm i -g @sap/cds-dk # install CAP's cds-dk globally +cds -v # check cds version +# done ``` +::: + +### SQLite (Windows) {.required} + +::: code-group +```PowerShell [Windows] +winget install --silent SQLite.SQLite +# Reload PATH from registry to access newly installed tools +$env:PATH = [Environment]::GetEnvironmentVariable("PATH","Machine") ` + + ";" + [Environment]::GetEnvironmentVariable("PATH","User") + +sqlite3 -version +# done +``` +::: ### Java and Maven {.optional} -```shell +::: code-group +```shell [macOS / Linux / WSL] brew install sapmachine-jdk brew install maven +mvn -version # display Maven and Java versions ``` - +```PowerShell [Windows] +winget install --silent SAP.SapMachine.25.JDK + +# Apache Maven is not available using winget so download it directly +$v="3.9.12"; ` +$url="https://dlcdn.apache.org/maven/maven-3/$v/binaries/apache-maven-$v-bin.zip"; ` +$mvnzip="$env:LOCALAPPDATA\maven.zip"; ` +curl $url -o $mvnzip; ` +tar -xf $mvnzip -C "$env:LOCALAPPDATA"; ` +setx PATH "$env:PATH;$env:LOCALAPPDATA\apache-maven-$v\bin"; ` +rm $mvnzip + +# Reload PATH from registry to access newly installed tools +$env:PATH = [Environment]::GetEnvironmentVariable("PATH","Machine") ` + + ";" + [Environment]::GetEnvironmentVariable("PATH","User") + +mvn -version # display Maven and Java versions +# done +``` +::: ### Git and GitHub {.optional} -```shell -brew install git # Git CLI -brew install gh # GitHub CLI +::: code-group +```shell [macOS / Linux / WSL] +brew install git # Git CLI (for completeness, already installed for Homebrew) +brew install gh # GitHub CLI +git -v # display Git cli version +``` +```PowerShell [Windows] +winget install --silent Git.Git +winget install --silent GitHub.cli + +# Reload PATH from registry to access newly installed tools +$env:PATH = [Environment]::GetEnvironmentVariable("PATH","Machine") ` + + ";" + [Environment]::GetEnvironmentVariable("PATH","User") + +git -v # display Git cli version +# done +``` +::: +::: code-group +```shell [macOS] brew install github # GitHub Desktop App ``` +```shell [Linux / WSL] +# Github-Desktop on Homebrew is only supported for macOS +GHD_VERSION="3.3.12" +GHD_HOST="https://github.com/shiftkey/desktop/releases/download" + +curl -L ${GHD_HOST}/release-${GHD_VERSION}-linux1/ +GitHubDesktop-linux-amd64-${GHD_VERSION}-linux1.deb -o github-desktop.deb +sudo apt install ./github-desktop.deb +rm ./github-desktop.deb +``` +```PowerShell [Windows] +winget install --silent GitHub.GitHubDesktop +``` +::: ### Visual Studio Code {.proposed} -```shell -brew install --cask visual-studio-code # VS Code itself +::: code-group +```shell [macOS] +brew install --cask visual-studio-code # VS Code itself +code -v # display VS Code's version +``` +```bash [Linux / WSL] +# VS Code on Homebrew is only supported for macOS +sudo snap install --classic code +code -v # display VS Code's version +``` +```PowerShell [Windows] +winget install --silent Microsoft.VisualStudioCode + +# Reload PATH from registry to access newly installed tools +$env:PATH = [Environment]::GetEnvironmentVariable("PATH","Machine") ` + + ";" + [Environment]::GetEnvironmentVariable("PATH","User") + +code -v # display VS Code's version +# done ``` +::: + +#### Visual Studio Code Proposed Extensions {.proposed} ```shell code --install-extension sapse.vscode-cds # for .cds models code --install-extension mechatroner.rainbow-csv # for .csv files @@ -92,6 +180,18 @@ code --install-extension vscjava.vscode-maven # for Maven > You can of course also use other IDEs or editors of your choice, such as [IntelliJ IDEA](https://www.jetbrains.com/idea/), for which we also provide [support](../tools/cds-editors#intellij). Yet we strongly recommend Visual Studio Code for the best experience with CAP. +::: details Alternative setup ... + + You can also manually download and install the required packages from their respective websites: + + | Package | Install from | Remarks | + |---------|----------------------------------|---------------------------------------------------------| + | Node.js | https://nodejs.org | _required_ | + | Java | https://sapmachine.io | _optional_ | + | Git | https://git-scm.com | _optional_ | + | VS Code | https://code.visualstudio.com | + [recommended extensions](../tools/cds-editors#vscode) | + | SQLite | https://sqlite.org/download.html | _required_ on Windows | +::: ## Command Line Interface From badc1cd426b0279d4469f0b4de8cc0729c621121 Mon Sep 17 00:00:00 2001 From: DJ Adams Date: Mon, 2 Mar 2026 12:31:42 +0000 Subject: [PATCH 041/178] Fix typo in get-help.md (#2423) --- get-started/get-help.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/get-help.md b/get-started/get-help.md index 029ff1794b..6e1b4d26e0 100644 --- a/get-started/get-help.md +++ b/get-started/get-help.md @@ -425,7 +425,7 @@ In case you want a visual interface tool to work with SQLite, you can use [SQLit ### How to get an SAP HANA Cloud instance for SAP BTP? { #get-hana} -To configure this service in the SAP BPT cockpit on trial, refer to the [SAP HANA Cloud Onboarding Guide](https://www.sap.com/documents/2021/09/7476f8c4-f77d-0010-bca6-c68f7e60039b.html). See [SAP HANA Cloud](https://help.sap.com/docs/HANA_CLOUD) documentation or visit the [SAP HANA Cloud community](https://pages.community.sap.com/topics/hana/cloud) for more details. +To configure this service in the SAP BTP cockpit on trial, refer to the [SAP HANA Cloud Onboarding Guide](https://www.sap.com/documents/2021/09/7476f8c4-f77d-0010-bca6-c68f7e60039b.html). See [SAP HANA Cloud](https://help.sap.com/docs/HANA_CLOUD) documentation or visit the [SAP HANA Cloud community](https://pages.community.sap.com/topics/hana/cloud) for more details. ::: warning HANA needs to be restarted on trial accounts On trial, your SAP HANA Cloud instance will be automatically stopped overnight, according to the server region time zone. That means you need to restart your instance every day before you start working with your trial. From 01565ee23d769dd8715aa0db69c4a2c9b38cf65a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 14:07:25 +0100 Subject: [PATCH 042/178] chore(deps): update eslint (#2397) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.55.0` → `8.56.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.55.0/8.56.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.56.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.55.0/8.56.1?slim=true) | | [eslint](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint)) | [`9.39.2` → `9.39.3`](https://renovatebot.com/diffs/npm/eslint/9.39.2/9.39.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/9.39.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/9.39.2/9.39.3?slim=true) | | [eslint-plugin-vue](https://eslint.vuejs.org) ([source](https://redirect.github.com/vuejs/eslint-plugin-vue)) | [`10.7.0` → `10.8.0`](https://renovatebot.com/diffs/npm/eslint-plugin-vue/10.7.0/10.8.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-vue/10.8.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-vue/10.7.0/10.8.0?slim=true) | --- ### Release Notes
typescript-eslint/typescript-eslint (@​typescript-eslint/parser) ### [`v8.56.1`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8561-2026-02-23) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.56.0...v8.56.1) This was a version bump only for parser to align it with other projects, there were no code changes. See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.56.1) for more information. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. ### [`v8.56.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8560-2026-02-16) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.55.0...v8.56.0) ##### 🚀 Features - support ESLint v10 ([#​12057](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12057)) ##### ❤️ Thank You - Brad Zacher [@​bradzacher](https://redirect.github.com/bradzacher) - Joshua Chen See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.56.0) for more information. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
eslint/eslint (eslint) ### [`v9.39.3`](https://redirect.github.com/eslint/eslint/releases/tag/v9.39.3) [Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.39.2...v9.39.3) #### Bug Fixes - [`791bf8d`](https://redirect.github.com/eslint/eslint/commit/791bf8d7e76ce7ab8c88cb8982658823da4eff27) fix: restore TypeScript 4.0 compatibility in types ([#​20504](https://redirect.github.com/eslint/eslint/issues/20504)) (sethamus) #### Chores - [`8594a43`](https://redirect.github.com/eslint/eslint/commit/8594a436c22a0167fe3c2c4109bbdb04e519a014) chore: upgrade [@​eslint/js](https://redirect.github.com/eslint/js)@​9.39.3 ([#​20529](https://redirect.github.com/eslint/eslint/issues/20529)) (Milos Djermanovic) - [`9ceef92`](https://redirect.github.com/eslint/eslint/commit/9ceef92fbd3d1298d9a00483f86897834b88acac) chore: package.json update for [@​eslint/js](https://redirect.github.com/eslint/js) release (Jenkins) - [`af498c6`](https://redirect.github.com/eslint/eslint/commit/af498c63b9ca065223a425a85afabdcc8451e69b) chore: ignore `/docs/v9.x` in link checker ([#​20453](https://redirect.github.com/eslint/eslint/issues/20453)) (Milos Djermanovic)
vuejs/eslint-plugin-vue (eslint-plugin-vue) ### [`v10.8.0`](https://redirect.github.com/vuejs/eslint-plugin-vue/blob/HEAD/CHANGELOG.md#1080) [Compare Source](https://redirect.github.com/vuejs/eslint-plugin-vue/compare/v10.7.0...v10.8.0) ##### Minor Changes - Added [ESLint v10](https://eslint.org/blog/2026/02/eslint-v10.0.0-released/) as an allowed peer dependency (needs [`eslint-parser-vue` v10.3.0](https://redirect.github.com/vuejs/vue-eslint-parser/releases/tag/v10.3.0)) ([#​2962](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/2962)) - Added more `Promise` functions to [`vue/no-async-in-computed-properties`](https://eslint.vuejs.org/rules/no-async-in-computed-properties.html) ([#​3020](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3020)) - Added `ignoreVBindObject` option to [`vue/attributes-order`](https://eslint.vuejs.org/rules/attributes-order.html) ([#​3012](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3012)) - Added `allowEmptyAlias` option to [`vue/valid-v-for`](https://eslint.vuejs.org/rules/valid-v-for.html) ([#​3011](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3011)) - Added new `destructure: "only-when-assigned"` option to [`vue/define-props-destructuring`](https://eslint.vuejs.org/rules/define-props-destructuring.html) and changed default value from `destructure: "always"` to `destructure: "only-when-assigned"` ([#​3009](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3009)) ##### Patch Changes - Fixed [`vue/no-unused-vars`](https://eslint.vuejs.org/rules/no-unused-vars.html) to detect components passed as slot props ([#​3008](https://redirect.github.com/vuejs/eslint-plugin-vue/pull/3008))
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/capire/docs). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 148 +++++++++++++++++++++++++++------------------- 1 file changed, 87 insertions(+), 61 deletions(-) diff --git a/package-lock.json b/package-lock.json index 03d2a43d52..aa5044ebbd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1680,9 +1680,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", - "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", + "version": "9.39.3", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz", + "integrity": "sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw==", "dev": true, "license": "MIT", "engines": { @@ -3016,16 +3016,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/parser": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.55.0.tgz", - "integrity": "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.56.1.tgz", + "integrity": "sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.55.0", - "@typescript-eslint/types": "8.55.0", - "@typescript-eslint/typescript-estree": "8.55.0", - "@typescript-eslint/visitor-keys": "8.55.0", + "@typescript-eslint/scope-manager": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/typescript-estree": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3" }, "engines": { @@ -3036,19 +3036,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.55.0.tgz", - "integrity": "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.56.1.tgz", + "integrity": "sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.55.0", - "@typescript-eslint/types": "^8.55.0", + "@typescript-eslint/tsconfig-utils": "^8.56.1", + "@typescript-eslint/types": "^8.56.1", "debug": "^4.4.3" }, "engines": { @@ -3063,14 +3063,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.55.0.tgz", - "integrity": "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.56.1.tgz", + "integrity": "sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.55.0", - "@typescript-eslint/visitor-keys": "8.55.0" + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3081,9 +3081,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.55.0.tgz", - "integrity": "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.1.tgz", + "integrity": "sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==", "dev": true, "license": "MIT", "engines": { @@ -3098,9 +3098,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.55.0.tgz", - "integrity": "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.56.1.tgz", + "integrity": "sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==", "dev": true, "license": "MIT", "engines": { @@ -3112,18 +3112,18 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.55.0.tgz", - "integrity": "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.1.tgz", + "integrity": "sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.55.0", - "@typescript-eslint/tsconfig-utils": "8.55.0", - "@typescript-eslint/types": "8.55.0", - "@typescript-eslint/visitor-keys": "8.55.0", + "@typescript-eslint/project-service": "8.56.1", + "@typescript-eslint/tsconfig-utils": "8.56.1", + "@typescript-eslint/types": "8.56.1", + "@typescript-eslint/visitor-keys": "8.56.1", "debug": "^4.4.3", - "minimatch": "^9.0.5", + "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" @@ -3140,14 +3140,14 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.55.0.tgz", - "integrity": "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==", + "version": "8.56.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.1.tgz", + "integrity": "sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.55.0", - "eslint-visitor-keys": "^4.2.1" + "@typescript-eslint/types": "8.56.1", + "eslint-visitor-keys": "^5.0.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3157,6 +3157,19 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@typescript/vfs": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.2.tgz", @@ -3722,13 +3735,26 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", + "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/buffer": { @@ -4574,9 +4600,9 @@ } }, "node_modules/eslint": { - "version": "9.39.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", - "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", + "version": "9.39.3", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz", + "integrity": "sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg==", "dev": true, "license": "MIT", "dependencies": { @@ -4586,7 +4612,7 @@ "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.2", + "@eslint/js": "9.39.3", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -4634,9 +4660,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.7.0.tgz", - "integrity": "sha512-r2XFCK4qlo1sxEoAMIoTTX0PZAdla0JJDt1fmYiworZUX67WeEGqm+JbyAg3M+pGiJ5U6Mp5WQbontXWtIW7TA==", + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.8.0.tgz", + "integrity": "sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA==", "dev": true, "license": "MIT", "dependencies": { @@ -4653,7 +4679,7 @@ "peerDependencies": { "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", - "eslint": "^8.57.0 || ^9.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "vue-eslint-parser": "^10.0.0" }, "peerDependenciesMeta": { @@ -4724,9 +4750,9 @@ } }, "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "dependencies": { @@ -6830,16 +6856,16 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" From 94bd9f2be85bbf551e049fcb260cce2b7a43f6b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Mar 2026 20:00:44 +0100 Subject: [PATCH 043/178] chore(deps): update dependency vite-plugin-cds to v0.1.10 (#2421) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [vite-plugin-cds](https://redirect.github.com/Akatuoro/vite-plugin-cds) | [`0.1.9` → `0.1.10`](https://renovatebot.com/diffs/npm/vite-plugin-cds/0.1.9/0.1.10) | ![age](https://developer.mend.io/api/mc/badges/age/npm/vite-plugin-cds/0.1.10?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite-plugin-cds/0.1.9/0.1.10?slim=true) | --- ### Release Notes
Akatuoro/vite-plugin-cds (vite-plugin-cds) ### [`v0.1.10`](https://redirect.github.com/Akatuoro/vite-plugin-cds/releases/tag/v0.1.10) [Compare Source](https://redirect.github.com/Akatuoro/vite-plugin-cds/compare/v0.1.9...v0.1.10) removed `minify: false`, added manual chunks
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/capire/docs). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index aa5044ebbd..e04765025a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8456,9 +8456,9 @@ } }, "node_modules/vite-plugin-cds": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/vite-plugin-cds/-/vite-plugin-cds-0.1.9.tgz", - "integrity": "sha512-i28tJueb6B/BM+o2tigzSPIq99wQ5o1w+FF+fiVaSwbyrX8dwCo/288TRGwtXwZUVRDMYZHC+wneZDqpCK+wpg==", + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/vite-plugin-cds/-/vite-plugin-cds-0.1.10.tgz", + "integrity": "sha512-JXEftjXRTk8xQqSRB/mXobJPbrCE2+QIC+3nZy/UGwGlUiTimOCHTAoVhWXv+VYD/h+5HsTyXCPGE7sv64Tcnw==", "dev": true, "license": "MIT", "workspaces": [ From 21c1042d422299e50478cab548932e9f33003b6c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:37:16 +0100 Subject: [PATCH 044/178] chore(deps): update dependency markdownlint-cli to v0.48.0 (#2425) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [markdownlint-cli](https://redirect.github.com/igorshubovych/markdownlint-cli) | [`0.47.0` → `0.48.0`](https://renovatebot.com/diffs/npm/markdownlint-cli/0.47.0/0.48.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/markdownlint-cli/0.48.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/markdownlint-cli/0.47.0/0.48.0?slim=true) | --- ### Release Notes
igorshubovych/markdownlint-cli (markdownlint-cli) ### [`v0.48.0`](https://redirect.github.com/igorshubovych/markdownlint-cli/compare/v0.47.0...e72a3ca1632f0b11a07d171449fe447a7ff6795e) [Compare Source](https://redirect.github.com/igorshubovych/markdownlint-cli/compare/v0.47.0...v0.48.0)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/capire/docs). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 66 +++++------------------------------------------ 1 file changed, 7 insertions(+), 59 deletions(-) diff --git a/package-lock.json b/package-lock.json index e04765025a..2d76efe7a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1812,29 +1812,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -5867,23 +5844,23 @@ } }, "node_modules/markdownlint-cli": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.47.0.tgz", - "integrity": "sha512-HOcxeKFAdDoldvoYDofd85vI8LgNWy8vmYpCwnlLV46PJcodmGzD7COSSBlhHwsfT4o9KrAStGodImVBus31Bg==", + "version": "0.48.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.48.0.tgz", + "integrity": "sha512-NkZQNu2E0Q5qLEEHwWj674eYISTLD4jMHkBzDobujXd1kv+yCxi8jOaD/rZoQNW1FBBMMGQpuW5So8B51N/e0A==", "dev": true, "license": "MIT", "dependencies": { - "commander": "~14.0.2", + "commander": "~14.0.3", "deep-extend": "~0.6.0", "ignore": "~7.0.5", "js-yaml": "~4.1.1", "jsonc-parser": "~3.3.1", "jsonpointer": "~5.0.1", - "markdown-it": "~14.1.0", + "markdown-it": "~14.1.1", "markdownlint": "~0.40.0", - "minimatch": "~10.1.1", + "minimatch": "~10.2.4", "run-con": "~1.3.2", - "smol-toml": "~1.5.2", + "smol-toml": "~1.6.0", "tinyglobby": "~0.2.15" }, "bin": { @@ -5903,35 +5880,6 @@ "node": ">= 4" } }, - "node_modules/markdownlint-cli/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/markdownlint-cli/node_modules/smol-toml": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.5.2.tgz", - "integrity": "sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 18" - }, - "funding": { - "url": "https://github.com/sponsors/cyyynthia" - } - }, "node_modules/markdownlint-micromark": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.2.tgz", From 265e4739d702a5b6b2dc3ce978c376ba463cac8e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:37:27 +0100 Subject: [PATCH 045/178] chore(deps): update dependency @mdit/plugin-dl to v0.23.1 (#2424) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@mdit/plugin-dl](https://mdit-plugins.github.io/dl.html) ([source](https://redirect.github.com/mdit-plugins/mdit-plugins/tree/HEAD/packages/dl)) | [`0.23.0` → `0.23.1`](https://renovatebot.com/diffs/npm/@mdit%2fplugin-dl/0.23.0/0.23.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@mdit%2fplugin-dl/0.23.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@mdit%2fplugin-dl/0.23.0/0.23.1?slim=true) | --- ### Release Notes
mdit-plugins/mdit-plugins (@​mdit/plugin-dl) ### [`v0.23.1`](https://redirect.github.com/mdit-plugins/mdit-plugins/blob/HEAD/packages/dl/CHANGELOG.md#0231-2026-03-02) [Compare Source](https://redirect.github.com/mdit-plugins/mdit-plugins/compare/@mdit/plugin-dl@0.23.0...@mdit/plugin-dl@0.23.1) **Note:** Version bump only for package [@​mdit/plugin-dl](https://redirect.github.com/mdit/plugin-dl)
--- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/capire/docs). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d76efe7a1..214ce843c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1820,9 +1820,9 @@ "license": "MIT" }, "node_modules/@mdit/plugin-dl": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@mdit/plugin-dl/-/plugin-dl-0.23.0.tgz", - "integrity": "sha512-l4fdMlA/bNPfnCD8cAYFFJV3Qqk7n22C5NaslfDja/ticMx3vErf+mzwS06gDQSHFd00fgyPAFWKYaVw45eGgw==", + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@mdit/plugin-dl/-/plugin-dl-0.23.1.tgz", + "integrity": "sha512-5ldUwO81Fa9zKBMedu143R2IycGsED+BW4f9MljXUxpl/+/fw4cDvNKRDS9VD8XQsXY0+cl46mjSmtFFeCgTaA==", "dev": true, "license": "MIT", "dependencies": { From 00597c0bc16c44862d4874e77dd0cf45aea1f8a9 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 3 Mar 2026 13:13:56 +0100 Subject: [PATCH 046/178] Troubleshooting note on HANA root cert change (#2429) This is to address the hiccups around the root cert change on CF. --- get-started/get-help.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/get-started/get-help.md b/get-started/get-help.md index 6e1b4d26e0..059f8f37bf 100644 --- a/get-started/get-help.md +++ b/get-started/get-help.md @@ -449,6 +449,16 @@ On trial, your SAP HANA Cloud instance will be automatically stopped overnight, | _Root Cause_ | An error like `Version incompatibility for the ... build plugin: "2.0.x" (installed) is incompatible with "2.0.y" (requested)` indicates that your project demands a higher version of SAP HANA than what is available in your org/space on SAP BTP, Cloud Foundry environment. The error might not occur on other landscapes for the same project. | | _Solution_ | Lower the version in file `db/src/.hdiconfig` to the one given in the error message. If you're the owner of the SAP HANA installation, ask for an upgrade of the SAP HANA instance. | +#### Deployment fails - _unable to get local issuer certificate_ {#root-cert-change} ++ _Could not connect to any host... - unable to get local issuer certificate_ ++ MTX sidecar crashes with HTTP error _429 (Too Many Requests)_ + +| | Explanation | +|--------------|--------------------------------| +| _Root Cause_ | A change of SAP's root certificate from _DigiCert Global Root CA_ to _DigiCert TLS RSA4096 Root G5_ leads to deployment failures because older certificates get rejected by too old SAP HANA driver versions and/or older service bindings in SAP HANA Cloud. | +| _Solution_ | For Node.js applications, update the `hdb` driver to the latest version. [See SAP note 3397584](https://me.sap.com/notes/3397584) for details. See the [SAP HANA blog post](https://community.sap.com/t5/technology-blog-posts-by-sap/action-required-update-your-certificate-trust-stores-for-enhanced-sap-hana/ba-p/14332703) for the broader context. | + + #### Deployment fails — _Cannot create certificate store_ {#cannot-create-certificate-store} | | Explanation | From 86379b19fa98271d2f74fabb82829a6253c25ded Mon Sep 17 00:00:00 2001 From: rashmiangadi11 Date: Tue, 3 Mar 2026 17:44:04 +0530 Subject: [PATCH 047/178] Removed external repository support (#2426) --- plugins/index.md | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/index.md b/plugins/index.md index 0b72a1b40f..99c4eff116 100644 --- a/plugins/index.md +++ b/plugins/index.md @@ -227,7 +227,6 @@ Features: - **Automated Malware Scanning for Uploaded Files**: Enhance security by automatically scanning all uploaded files for malware, ensuring the integrity and safety of your data. - **Automatic Fiori Annotations for Upload Controls**: Streamlined user interactions with automatic SAP Fiori annotations that enhance upload controls, providing a more intuitive and seamless user experience. - **Support for SAP Document Management Service-Hosted Cloud Repository**: Leverage the robust capabilities of the SAP Document Management service-hosted cloud repository to store and manage your documents efficiently. -- **Support for Third-Party CMIS-Compliant Repositories**: Integrate with third-party repositories that adhere to the Content Management Interoperability Services (CMIS) standard, offering flexibility and compatibility with various document management systems. - **Intrinsic Multitenancy Handling**: Benefit from built-in multitenancy support, allowing for efficient management of multiple tenants without additional configuration. - **Automated Onboarding and Offboarding of Repositories**: Simplify repository management with automated repository provisioning upon subscription and seamless repository removal upon unsubscription. From cc830a2c12ada1b9d7d9b70a85ccbb4c25d77a4a Mon Sep 17 00:00:00 2001 From: Johannes Vogt Date: Tue, 3 Mar 2026 19:12:43 +0100 Subject: [PATCH 048/178] Fix toggles (#2428) Fixes impl-variant toggle behavior in regards to: - layout shift on load - outline inconsistencies (both node and java headers shown on load) Good page for testing: http://localhost:5173/docs/guides/databases/postgres#deploy Chrome Performance CLS: 0.01 -> 0.00 --------- Co-authored-by: Christian Georgi --- .vitepress/config.js | 3 +- .vitepress/theme/Layout.vue | 7 ++ .../components/implvariants/ImplVariants.vue | 94 +++++++++---------- .vitepress/theme/styles.scss | 10 ++ public/script.js | 4 - 5 files changed, 62 insertions(+), 56 deletions(-) delete mode 100644 public/script.js diff --git a/.vitepress/config.js b/.vitepress/config.js index 6378b839bf..6002e30e0d 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -76,7 +76,8 @@ const config = defineConfig({ ['link', { rel: 'icon', href: base+'favicon.ico' }], ['link', { rel: 'shortcut icon', href: base+'favicon.ico' }], ['link', { rel: 'apple-touch-icon', sizes: '180x180', href: base+'logos/cap.png' }], - ['script', { src: base+'script.js' } ] + // Inline script to restore impl-variant selection immediately (before first paint) + ['script', { id: 'check-impl-variant' }, `{const p=new URLSearchParams(location.search),v=p.get('impl-variant')||localStorage.getItem('impl-variant');if(v)document.documentElement.classList.add(v)}`] ], vite: { diff --git a/.vitepress/theme/Layout.vue b/.vitepress/theme/Layout.vue index d85b1d08bd..68c88e9f21 100644 --- a/.vitepress/theme/Layout.vue +++ b/.vitepress/theme/Layout.vue @@ -1,4 +1,5 @@ @@ -36,12 +36,13 @@ import FloatingVue from 'floating-vue' import yaml from 'yaml' - const { java, keyOnly, filesOnly, showPrivate, label:labelProp, keyDelim } = defineProps<{ + const { value, java, keyOnly, filesOnly, showPrivate, label:labelProp, keyDelim } = defineProps<{ java?: boolean, keyOnly?: boolean, filesOnly?: boolean, showPrivate?: boolean, label?: string, + value?: string, keyDelim?: string }>() @@ -84,7 +85,7 @@ const slots = useSlots() const slotVal = slots.default?.().at(0)?.children?.toString().trim() ?? 'error: provide your_key:value' - const [key, val] = slotVal.split(/\s*[:=]\s*(.*)/) // split on first `:` or `=` + const [key, val = value] = slotVal.split(/\s*[:=]\s*(.*)/) // split on first `:` or `=` const label = labelProp || `${keyOnly ? key: slotVal}` const keyDel = keyDelim ?? '.' @@ -104,13 +105,11 @@ popperVisible.value = true cfgKey.value = key - let value:any = val - if (val === 'true') value = true - else if (val === 'false') value = false - else if (val === 'null') value = null - else if (parseInt(val).toString() === val) value = parseInt(val) - else if (parseFloat(val).toString() === val) value = parseFloat(val) - else if (!val) value = '…' + let value:any = !val ? '...' + : val === 'true' ? true + : val === 'false' ? false + : val === 'null' ? null + : Number(val) || val group.value = 'group-'+key @@ -148,17 +147,17 @@ function toJson(key:string, value:string, delim:string): Record { .v-popper--theme-cfgPopper .v-popper__inner { background-color: var(--vp-code-block-bg) !important; } - code.cfg::after { - content: " ⛭"; - } diff --git a/node.js/cds-facade.md b/node.js/cds-facade.md index 2e53bb9769..0372114874 100644 --- a/node.js/cds-facade.md +++ b/node.js/cds-facade.md @@ -183,27 +183,26 @@ Known values for `cds.cli.command` are `add`, `build`, `compile`, `deploy`, `imp ### cds. entities {.property} -Returns an iterable dictionary of entity definitions in the model. -You can use it as like that: +Convenience shortcut to [`cds.model.entities`](cds-reflect#entities). +Returns an iterable dictionary of entity definitions in the model, which can be used like this: -Access named entities directly: +- Accessing named entities directly: ```js const { Books, Authors } = cds.entities -//> Books and Authors are linked CSN definitions of the entities with those names +//> `Books` and `Authors` are linked CSN definitions of entities ``` -Used as a property it loops through _all_ or entities in the model: +- Iterating _all_ entities in the model: ```js for (let each of cds.entities) -//> each is a linked CSN definition of an entity +//> `each` is a linked CSN definition of an entity ``` -Used as a function, you can loop through entities in a given namespace: +- Iterating entities in a given namespace: ```js for (let each of cds.entities ('sap.capire.bookshop')) -//> each is a linked CSN definition of an entity +//> `each` is a linked CSN definition of an entity ``` -This property in the `cds` facade is actually a convenience shortcut to `cds.model.entities`, which is implemented in [`LinkedCSN:entities`](cds-reflect#entities). ### cds. env {.property} diff --git a/node.js/cds-reflect.md b/node.js/cds-reflect.md index 5e759f4aac..330aa4e0ad 100644 --- a/node.js/cds-reflect.md +++ b/node.js/cds-reflect.md @@ -136,6 +136,9 @@ for (let each of m.entities) console.log (each.name) for (let each of m.entities('my.bookshop')) console.log (each.name) ``` +> [!info] +> Note: In the dictionaries returned by `.entities` there are no entries for [`.texts`](#texts) entities, as these are generated, and hence living in a shadow world. They did show up in former releases, which caused a lot of confusion, and was fixed since cds 9.6. +> They are always accessible via the main entity's [`.texts`](#texts) property, e.g. `Books.texts`. ### each() {#each .method } @@ -387,7 +390,7 @@ Their values are [`LinkedDefinitions`]. ### . texts {.property} -If the entity has *[localized](../guides/uis/localized-data)* elements, this property is a reference to the respective `.texts` entity. If not, this property is undefined +If the entity has *[localized](../guides/uis/localized-data)* elements, this property is a reference to the respective generated `.texts` entity. If not, this property is undefined. {.indent} ### . drafts {.property} diff --git a/node.js/core-services.md b/node.js/core-services.md index 86a6d7ed12..1f35292193 100644 --- a/node.js/core-services.md +++ b/node.js/core-services.md @@ -417,26 +417,22 @@ for (let d of this.entities) //... d is a CSN definition ``` #### Similarity _and_ difference to `cds.entities` -These properties are very similar in nature and behavior to [`cds.entities`](cds-facade#cds-entities), which is a shortcut to `cds.model.entities()` to `cds.model.entities`, which in turn is implemented in [`LinkedCSN:entities`](cds-reflect#entities). However, note this difference: + +These properties are very similar in nature and behavior to [`cds.entities`](cds-facade#cds-entities), which is a shortcut to `cds.model.entities()` to `cds.model.entities`, which in turn is implemented in [`cds.linked.entities`](cds-reflect#entities). However, note this difference: Both of these work with `cds.entities`: ```js -const { 'some.namespace.Books':Books, ... } = cds.entities // works [!code ++] -const { Books, Authors } = cds.entities('some.namespace') // works [!code ++] +const { 'some.namespace.Books':Books, ... } = cds.entities //> works +const { Books, Authors } = cds.entities ('some.namespace') //> works ``` Only the first one works with `srv.entities`: ```js -const { Books, Authors } = srv.entities // works [!code ++] -const { Books, Authors } = srv.entities('some.namespace') // FAILS! [!code --] +const { Books, Authors } = srv.entities //> works +const { Books, Authors } = srv.entities ('some.namespace') //> FAILS! [!code --] ``` - This is because `cds.entities` is sort of a chimera, which can be used both **as a getter** returning all definitions, and **as a function** which takes a namespace to fetch definitions for. In contrast to that, `srv.entities`, `srv.events` and `srv.actions` are **getter only** properties. Reason is that the namespace is already implied by the service's name. - - > [!info] Compatibility to former versions - > In the past the function usage `srv.entities(...)` was also supported accidentially. In case you still use that your code, this still works with cds.features.compat_srv_getters: true, but it is **strongly recommended** to switch to the new syntax without the namespace argument as shown above, which is more intuitive and less error-prone. -> - > **We will remove support for the old syntax in the next major release.** + While [`cds.entities`](cds-facade#cds-entities) is sort of a chimera, which can be used both **as a getter** returning all definitions, and **as a function** which accepts a namespace to fetch definitions for, the latter doesn't make sense in the context of a service, as the namespace is already implied by the service's name. ### srv. init() {.method} From dcd420f862f6a88cc37719ad1fc614205476cdf9 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 24 Apr 2026 09:01:36 +0200 Subject: [PATCH 164/178] copy errors Co-authored-by: Copilot --- node.js/core-services.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/node.js/core-services.md b/node.js/core-services.md index 1f35292193..722851648a 100644 --- a/node.js/core-services.md +++ b/node.js/core-services.md @@ -418,21 +418,21 @@ for (let d of this.entities) //... d is a CSN definition #### Similarity _and_ difference to `cds.entities` -These properties are very similar in nature and behavior to [`cds.entities`](cds-facade#cds-entities), which is a shortcut to `cds.model.entities()` to `cds.model.entities`, which in turn is implemented in [`cds.linked.entities`](cds-reflect#entities). However, note this difference: +These properties are very similar in nature and behavior to [`cds.entities`](cds-facade#cds-entities), which is a sortcut to [`cds.model.entities`](cds-reflect#entities). However, note this difference: -Both of these work with `cds.entities`: +While both of these work with [`cds.entities`](cds-facade#cds-entities): ```js const { 'some.namespace.Books':Books, ... } = cds.entities //> works const { Books, Authors } = cds.entities ('some.namespace') //> works ``` -Only the first one works with `srv.entities`: +Only the first one works with [`srv.entities`](#srv-entities): ```js const { Books, Authors } = srv.entities //> works const { Books, Authors } = srv.entities ('some.namespace') //> FAILS! [!code --] ``` - While [`cds.entities`](cds-facade#cds-entities) is sort of a chimera, which can be used both **as a getter** returning all definitions, and **as a function** which accepts a namespace to fetch definitions for, the latter doesn't make sense in the context of a service, as the namespace is already implied by the service's name. + Reason is that `cds.entities` is sort of a chimera, which can be used both **as a getter** returning _all_ definitions, and **as a function** which accepts a namespace to fetch definitions for. The latter doesn't make sense in the context of a service, as the namespace is already implied by the service's name. ### srv. init() {.method} From f963a265ec7a2b4be924b2ffe29212573aa364ce Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 24 Apr 2026 09:06:15 +0200 Subject: [PATCH 165/178] tweaked --- node.js/core-services.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node.js/core-services.md b/node.js/core-services.md index 722851648a..7b9aea0d3e 100644 --- a/node.js/core-services.md +++ b/node.js/core-services.md @@ -406,7 +406,7 @@ var srv.entities/events/actions : Iterable <{ }> ``` -These properties provide convenient access to the CSN definitions of the *entities*, *events* and *actions* (incl. *functions*) exposed by this service. They return instances of [`LinkedDefinitions`](cds-reflect#linked-definitions) which are iterable dictionaries of CSN definitions, which you can use in all of these ways: +These properties provide convenient access to the CSN definitions of the *entities*, *events* and *actions* (incl. *functions*) exposed by this service. They return instances of [`LinkedDefinitions`](cds-reflect#linked-definitions) which you can use in all of these ways: ```js // Assumed `this` is an instance of cds.Service From 98d7c48f5100154117cdd9a62bfcdef6e56e42f9 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 24 Apr 2026 09:14:18 +0200 Subject: [PATCH 166/178] avoid line breaks Co-authored-by: Copilot --- node.js/core-services.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/node.js/core-services.md b/node.js/core-services.md index 7b9aea0d3e..e294c8ebd1 100644 --- a/node.js/core-services.md +++ b/node.js/core-services.md @@ -518,28 +518,28 @@ class BooksService extends cds.ApplicationService { **Methods `.on`, `.before`, `.after`** refer to corresponding *phases* during request processing: -- **`.on`** handlers actually fulfill requests, for example, by reading/writing data from/to databases -- **`.before`** handlers run before the `.on` handlers, frequently for validating inbound data -- **`.after`** handlers run after the `.on` handlers, frequently to enrich outbound data +- **`.on`** handlers _fulfill_ requests, for example, by reading/writing data from/to databases +- **`.before`** handlers run before the `.on` handlers, e.g., for validating inbound data +- **`.after`** handlers run after the `.on` handlers, e.g., to enrich outbound data **Argument `event`** can be one of: - `'CREATE'`, `'READ'`, `'UPDATE'`, `'UPSERT'`,`'DELETE'` - `'INSERT'`,`'SELECT'` → as aliases for: `'CREATE'`,`'READ'` - `'POST'`,`'GET'`,`'PUT'`,`'PATCH'` → as aliases for: `'CREATE'`,`'READ'`,`'UPDATE'` -- `'each'` → convenience feature to register `.after` `'READ'` handler that runs for each individual result entry -- Any other string name of a custom action or function – for example,, `'submitOrder'` +- `'each'` → shorthand for `.after` `'READ'` handler ran for _each_ result entry +- Any other string name of a custom action or function – for example, `'submitOrder'` - An `array` of the above to register the given handler for multiple events - The string `'*'` to register the given handler for *all* potential events - The string `'error'` to register an error handler for *all* potential events **Argument `entity`** can be one of: -- A `CSN definition` of an entity served by this service → as obtained from [`this.entities`](#entities) -- A `string` matching the name of an entity served by this service → see [draft support](./fiori#draft-support) -- A `path` navigating from a served entity to associated ones → for example, `'Books/author'` -- An `array` of the above to register the given handler for multiple entities / paths -- The string `'*'` to register the given handler for *all* potential entities / paths +- A `CSN definition` of an entity served by this service → i.e., from [`this.entities`](#entities) +- A `string` corresponding to the _name_ of an entity served by this service +- A `path` navigating from a served entity to associated ones → e.g., `'Books/author'` +- An `array` of the above to register a handler for multiple entities / paths +- The string `'*'` to register a handler for *all* potential entities / paths From 5c9c1c9dc0a151f7140353d3dd10aa055b4884e9 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 24 Apr 2026 09:31:11 +0200 Subject: [PATCH 167/178] polished section on event handlers Co-authored-by: Copilot --- node.js/core-services.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/node.js/core-services.md b/node.js/core-services.md index e294c8ebd1..1a679861f6 100644 --- a/node.js/core-services.md +++ b/node.js/core-services.md @@ -524,24 +524,23 @@ class BooksService extends cds.ApplicationService { **Argument `event`** can be one of: -- `'CREATE'`, `'READ'`, `'UPDATE'`, `'UPSERT'`,`'DELETE'` -- `'INSERT'`,`'SELECT'` → as aliases for: `'CREATE'`,`'READ'` -- `'POST'`,`'GET'`,`'PUT'`,`'PATCH'` → as aliases for: `'CREATE'`,`'READ'`,`'UPDATE'` -- `'each'` → shorthand for `.after` `'READ'` handler ran for _each_ result entry -- Any other string name of a custom action or function – for example, `'submitOrder'` -- An `array` of the above to register the given handler for multiple events -- The string `'*'` to register the given handler for *all* potential events -- The string `'error'` to register an error handler for *all* potential events +- String `CREATE`, `READ`, `UPDATE`, `UPSERT`, `DELETE` +- String `SELECT`, `INSERT` → aliases for: `READ` and `CREATE` +- String `GET`, `PUT`, `POST`, `PATCH` → aliases for: `READ`, `CREATE`, `UPDATE` +- String `each` → shorthand for `.after` `READ` handler ran for _each_ result entry +- String `error` to register an error handler for *all* potential events +- A name of a custom action or function – for example, `submitOrder` **Argument `entity`** can be one of: - A `CSN definition` of an entity served by this service → i.e., from [`this.entities`](#entities) - A `string` corresponding to the _name_ of an entity served by this service -- A `path` navigating from a served entity to associated ones → e.g., `'Books/author'` -- An `array` of the above to register a handler for multiple entities / paths -- The string `'*'` to register a handler for *all* potential entities / paths +- A `path` navigating from a served entity to associated ones → e.g., `Books/author` +**Multiple `events` or `entities`** – for both parameters, you can also specify: +- An `array` of the above to register a handler for _multiple_ events or entities +- String `*` to register a handler for _all_ potential events or entities. ::: tip Best Practices From 9b4163dc2498fee9479c1328149222989dbff386 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Fri, 24 Apr 2026 09:56:14 +0200 Subject: [PATCH 168/178] Bump version --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a662cc3222..fb05720f9c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@capire/docs", - "version": "2026.4.0", + "version": "2026.5.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@capire/docs", - "version": "2026.4.0", + "version": "2026.5.0", "license": "SEE LICENSE IN LICENSE", "devDependencies": { "@cap-js/cds-typer": "^0", diff --git a/package.json b/package.json index bbbd64152d..7380c072ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@capire/docs", - "version": "2026.4.0", + "version": "2026.5.0", "description": "Capire on VitePress", "type": "module", "scripts": { From 835d90a81a91352e1eb7fd2e8397ce76f77cf357 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Fri, 24 Apr 2026 10:01:22 +0200 Subject: [PATCH 169/178] Fix link again --- node.js/core-services.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node.js/core-services.md b/node.js/core-services.md index 1a679861f6..fa928b32aa 100644 --- a/node.js/core-services.md +++ b/node.js/core-services.md @@ -406,7 +406,7 @@ var srv.entities/events/actions : Iterable <{ }> ``` -These properties provide convenient access to the CSN definitions of the *entities*, *events* and *actions* (incl. *functions*) exposed by this service. They return instances of [`LinkedDefinitions`](cds-reflect#linked-definitions) which you can use in all of these ways: +These properties provide convenient access to the CSN definitions of the *entities*, *events* and *actions* (incl. *functions*) exposed by this service. They return instances of [`LinkedDefinitions`](cds-reflect#iterable) which you can use in all of these ways: ```js // Assumed `this` is an instance of cds.Service From 960a98759aef92ca00e34e608d6d334fe2c20750 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 24 Apr 2026 10:03:32 +0200 Subject: [PATCH 170/178] fix: .env files allow plain property keys using dots --- .vitepress/theme/components/ConfigInspect.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vitepress/theme/components/ConfigInspect.vue b/.vitepress/theme/components/ConfigInspect.vue index f497a28977..5479d4be05 100644 --- a/.vitepress/theme/components/ConfigInspect.vue +++ b/.vitepress/theme/components/ConfigInspect.vue @@ -126,7 +126,7 @@ let envKey = fqn.replaceAll('_', '__').replaceAll(keyDel, '_') if (/^[a-z_]+$/.test(envKey)) envKey = envKey.toUpperCase() // only uppercase if not camelCase envStr.value = `${envKey}=${jsonVal ? JSON.stringify(jsonVal) : value}` - propStr.value = `${envKey}=${jsonVal ? JSON.stringify(jsonVal) : value}` + propStr.value = `${fqn} = ${jsonVal ? JSON.stringify(jsonVal) : value}` javaAppyml.value = yaml.stringify(pkg) javaEnvStr.value = `-D${propStr.value}` From 5ef8b1c26c842fbfea393cacb5d740aa41ae29b9 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Fri, 24 Apr 2026 10:07:35 +0200 Subject: [PATCH 171/178] Fix `srv-entities` anchor --- node.js/core-services.md | 1 + 1 file changed, 1 insertion(+) diff --git a/node.js/core-services.md b/node.js/core-services.md index fa928b32aa..e0df433435 100644 --- a/node.js/core-services.md +++ b/node.js/core-services.md @@ -399,6 +399,7 @@ var srv.options : { //> from cds.requires config ### . entities {.property alt="The following documentation on actions also applies to entities. "} ### . events {.property alt="The following documentation on actions also applies to events. "} ### . actions {.property} +###### srv-entities ```tsx var srv.entities/events/actions : Iterable <{ From b3347dc4f1d924aeca06e63ff2abcb734b767619 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 24 Apr 2026 10:13:55 +0200 Subject: [PATCH 172/178] Even more polished Co-authored-by: Copilot --- .vitepress/theme/components/ConfigInspect.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.vitepress/theme/components/ConfigInspect.vue b/.vitepress/theme/components/ConfigInspect.vue index 5479d4be05..c54d21571f 100644 --- a/.vitepress/theme/components/ConfigInspect.vue +++ b/.vitepress/theme/components/ConfigInspect.vue @@ -15,12 +15,12 @@
Date: Fri, 24 Apr 2026 13:08:10 +0200 Subject: [PATCH 173/178] fix hana docu link + destination service link (#2536) Fixes the link to the HANA Cloud multitenancy documentation + changed link to destination-service --- guides/multitenancy/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/multitenancy/index.md b/guides/multitenancy/index.md index bd59752d5f..5d0bbb6c14 100644 --- a/guides/multitenancy/index.md +++ b/guides/multitenancy/index.md @@ -817,7 +817,7 @@ The SAP HANA Tenant Management Service (TMS) v2 service provides direct support > - **Not suitable for existing applications** as there is **no migration from Service Manager** available yet. This will be provided as HANA tool later.
> There **won't be support for both Service Manager and TMS v2** together in one application. -[For more information, see the SAP HANA documentation](https://help.sap.com/docs/hana-cloud/sap-hana-cloud-multitenancy-guide-internal/introducing-sap-hana-cloud-multitenancy){.learn-more} +[For more information, see the SAP HANA documentation](https://help.sap.com/docs/hana-cloud/sap-hana-cloud-multitenancy/introducing-sap-hana-cloud-multitenancy){.learn-more} [Find the TMS v2 API on the SAP Business Accelerator Hub](https://api.sap.com/api/TenantAPI/overview){.learn-more} #### Configure MTXS for Tenant Management Service @@ -965,7 +965,7 @@ so clustering the upgrade by database does not work properly. ## SaaS Dependencies {#saas-dependencies} Some of the xsuaa-based services your application consumes need to be registered as _reuse services_ to work in multitenant environments. This holds true for the usage of both the SaaS Registry service and the Subscription Manager Service (SMS). -CAP Java as well as `@sap/cds-mtxs`, each offer an easy way to integrate these dependencies. They support some services out of the box and also provide a simple API for applications. Most notably, you need such dependencies for the following SAP BTP services: [Audit Log](https://discovery-center.cloud.sap/serviceCatalog/audit-log-service), [Event Mesh](https://discovery-center.cloud.sap/serviceCatalog/event-mesh), [Destination](https://discovery-center.cloud.sap/serviceCatalog/destination), [HTML5 Application Repository](https://discovery-center.cloud.sap/serviceCatalog/html5-application-repository-service), and [Cloud Portal](https://discovery-center.cloud.sap/serviceCatalog/cloud-portal-service). +CAP Java as well as `@sap/cds-mtxs`, each offer an easy way to integrate these dependencies. They support some services out of the box and also provide a simple API for applications. Most notably, you need such dependencies for the following SAP BTP services: [Audit Log](https://discovery-center.cloud.sap/serviceCatalog/audit-log-service), [Event Mesh](https://discovery-center.cloud.sap/serviceCatalog/event-mesh), [Destination](https://discovery-center.cloud.sap/serviceCatalog/destination-service), [HTML5 Application Repository](https://discovery-center.cloud.sap/serviceCatalog/html5-application-repository-service), and [Cloud Portal](https://discovery-center.cloud.sap/serviceCatalog/cloud-portal-service). For CAP Java, all these services are supported natively and SaaS dependencies are automatically created if such a service instance is bound to the CAP Java application, that is, the `srv` module. From c59e2c5fe5a33f3b50ddb3e8a3e49eb05384a0f3 Mon Sep 17 00:00:00 2001 From: Johannes Vogel <31311694+johannes-vogel@users.noreply.github.com> Date: Mon, 27 Apr 2026 13:13:36 +0200 Subject: [PATCH 174/178] node.js does not support runtime views yet (#2422) --- cds/cdl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cds/cdl.md b/cds/cdl.md index 83a0ac431d..7ecf16cc83 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -861,7 +861,7 @@ To add or update CDS views without redeploying the database schema, annotate the Runtime views must be simple [projections](#as-projection-on), not using *aggregations*, *join*, *union* or *subqueries* in the *from* clause, but may have a *where* condition if they are only used to read. -In CAP Java, runtime views are enabled by default, in Node.js enable them via cds.features.runtime_views: true. +In CAP Java, runtime views are enabled by default. Node.js does not support it yet. [Learn more about runtime views in CAP Java.](../java/working-with-cql/query-execution#runtimeviews) {.learn-more} From dd8a0983eab0d08c2afb5747027bc2d8301cc4e9 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Mon, 27 Apr 2026 14:21:23 +0200 Subject: [PATCH 175/178] Mac -> macOS, no 'WSL' --- get-started/index.md | 10 +++++----- guides/extensibility/customization.md | 2 +- guides/services/consuming-services.md | 22 +++++++++++----------- java/developing-applications/building.md | 2 +- node.js/authentication.md | 20 ++++++++++---------- node.js/cds-env.md | 2 +- tools/cds-bind.md | 4 ++-- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/get-started/index.md b/get-started/index.md index ca771a3d6f..3ddb17f1ce 100644 --- a/get-started/index.md +++ b/get-started/index.md @@ -18,7 +18,7 @@ On macOS, Linux and WSL (Windows Subsystem for Linux), we recommend using [Homeb ```shell [macOS] bash -c "$( curl https://raw.githubusercontent.com/homebrew/install/HEAD/install.sh )" ``` -```shell [Linux / WSL] +```shell [Linux] # install curl (required to get Homebrew) and git (required to run Homebrew) sudo apt install curl git -y bash -c "$( curl https://raw.githubusercontent.com/homebrew/install/HEAD/install.sh )" @@ -34,7 +34,7 @@ bash -c "$( curl https://raw.githubusercontent.com/homebrew/install/HEAD/install ### Node.js and _cds-dk_ {.required} ::: code-group -```shell [macOS / Linux / WSL] +```shell [macOS/Linux] brew install node # Node.js LTS npm i -g @sap/cds-dk # install CAP's cds-dk globally ``` @@ -59,7 +59,7 @@ sqlite3 -version ### Java and Maven {.optional} ::: code-group -```shell [macOS / Linux / WSL] +```shell [macOS/Linux] brew install sapmachine-jdk brew install maven ``` @@ -92,7 +92,7 @@ brew install git # Git CLI brew install gh # GitHub CLI brew install github # GitHub Desktop App ``` -```shell [Linux / WSL] +```shell [Linux] brew install git # Git CLI brew install gh # GitHub CLI @@ -127,7 +127,7 @@ git -v # display Git cli version ```shell [macOS] brew install --cask visual-studio-code # VS Code itself ``` -```bash [Linux / WSL] +```bash [Linux] # VS Code on Homebrew is only supported for macOS sudo snap install --classic code code -v # display VS Code's version diff --git a/guides/extensibility/customization.md b/guides/extensibility/customization.md index c370614ddc..5eb2f89516 100644 --- a/guides/extensibility/customization.md +++ b/guides/extensibility/customization.md @@ -1039,7 +1039,7 @@ In case something unexpected happens, set the variable `DEBUG=cli` in your shell ::: code-group -```sh [Mac/Linux] +```sh [macOS/Linux] export DEBUG="cli" ``` diff --git a/guides/services/consuming-services.md b/guides/services/consuming-services.md index 654bd2a74a..39872356bf 100644 --- a/guides/services/consuming-services.md +++ b/guides/services/consuming-services.md @@ -103,7 +103,7 @@ The export-import cycle is the way to go for now. It is under investigation to i ::: code-group -```sh [Mac/Linux] +```sh [macOS/Linux] cds compile srv -s OrdersService -2 edmx > OrdersService.edmx ``` @@ -750,7 +750,7 @@ service RiskService { } ``` -#### Extend a Remote by a Local Service +#### Extend a Remote by a Local Service You can augment a projection with a new association, if the required fields for the on condition are present in the remote service. The use of managed associations isn't possible, because this requires to create new fields in the remote service. @@ -864,7 +864,7 @@ Otherwise, you need to select the source item using that `where` block and take [See an example how to handle navigations in Java.](https://github.com/SAP-samples/cloud-cap-risk-management/blob/ext-service-s4hc-suppliers-ui-java/srv/src/main/java/com/sap/cap/riskmanagement/handler/RiskServiceHandler.java){.learn-more .java} ### Limitations and Feature Matrix -#### Required Implementations for Mashups +#### Required Implementations for Mashups You need additional logic, if remote entities are in the game. The following table shows what is required. "Local" is a database entity or a projection on a database entity. @@ -1027,7 +1027,7 @@ cds: ::: [Learn more about configuring destinations for Java.](../../java/cqn-services/remote-services){.learn-more} -#### Use Application Defined Destinations +#### Use Application Defined Destinations If you don't want to use SAP BTP destinations, you can also define destinations, which means the URL, authentication type, and additional configuration properties, in your application configuration or code. @@ -1064,9 +1064,9 @@ This is an example of a destination using basic authentication: } ``` -[Learn more about providing project configuration values.](./../../node.js/cds-env#project-specific-configurations){.learn-more} +[Learn more about providing project configuration values.](./../../node.js/cds-env#project-specific-configurations){.learn-more} -[See all the supported destination properties.](#destination-properties){.learn-more} +[See all the supported destination properties.](#destination-properties){.learn-more} ::: warning Warning: You should not put any sensitive information here! @@ -1133,7 +1133,7 @@ For the _configuration path_, you **must** use the underscore ("`_`") character There is no API to create a destination in Node.js programmatically. However, you can change the properties of a remote service before connecting to it, as shown in the previous example. -##### Configure Application Defined Destinations in Java +##### Configure Application Defined Destinations in Java Destinations are configured in Spring Boot's _application.yaml_ file. @@ -1239,7 +1239,7 @@ cds watch --profile hybrid If you are developing in the Business Application Studio and want to connect to an on-premise system, you will need to do so via Business Application Studio's built-in proxy, for which you need to add configuration in an `.env` file. See [Connecting to External Systems From the Business Application Studio](https://sap.github.io/cloud-sdk/docs/js/guides/bas) for more details. ::: -#### Run a Java Application with a Destination +#### Run a Java Application with a Destination Add a new profile `hybrid` to your _application.yaml_ file that configures the destination for the remote service. ::: code-group @@ -1406,13 +1406,13 @@ cds add xsuaa,destination,connectivity service: xsuaa service-plan: application path: ./xs-security.json - + - name: cpapp-destination type: org.cloudfoundry.managed-service parameters: service: destination service-plan: lite - + # Required for on-premise connectivity only - name: cpapp-connectivity type: org.cloudfoundry.managed-service @@ -1652,7 +1652,7 @@ The Node.js runtime supports `odata` as an alias for `odata-v4` as well. The following properties and authentication types are supported for *[application defined destinations](#use-application-defined-destinations)*: -#### Destination Properties +#### Destination Properties These destination properties are fully supported by both, the Java and the Node.js runtime. ::: tip diff --git a/java/developing-applications/building.md b/java/developing-applications/building.md index 05f5de1966..5916fb860d 100644 --- a/java/developing-applications/building.md +++ b/java/developing-applications/building.md @@ -309,7 +309,7 @@ An example of a CAP application with OData V4 on Cloud Foundry environment: Use the following command line to create a project from scratch with the CDS Maven archetype: ::: code-group -```sh [Mac/Linux] +```sh [macOS/Linux] mvn archetype:generate -DarchetypeArtifactId=cds-services-archetype -DarchetypeGroupId=com.sap.cds -DarchetypeVersion=RELEASE ``` diff --git a/node.js/authentication.md b/node.js/authentication.md index 0ac7f4146b..4b8cc3db00 100644 --- a/node.js/authentication.md +++ b/node.js/authentication.md @@ -361,7 +361,7 @@ Please see [`@sap/xssec` documentation](https://www.npmjs.com/package/@sap/xssec #### XSUAA Fallback -To ease your migration from XSUAA-based to IAS-based authentication, the `ias` strategy automatically supports tokens issued by XSUAA when you provide the necessary credentials at `cds.env.requires.xsuaa.credentials`. +To ease your migration from XSUAA-based to IAS-based authentication, the `ias` strategy automatically supports tokens issued by XSUAA when you provide the necessary credentials at `cds.env.requires.xsuaa.credentials`. For standard bindings, add `xsuaa` to the list of required services as follows: @@ -477,11 +477,11 @@ The following steps assume you've set up the [**Cloud Foundry Command Line Inter If you don't know the API endpoint, refer to [Regions and API Endpoints Available for the Cloud Foundry Environment](https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/350356d1dc314d3199dca15bd2ab9b0e.html#loiof344a57233d34199b2123b9620d0bb41). 2. Go to the project you have created in [Getting started in a Nutshell](../get-started/bookshop). - + #### Configure the Application 1. Configure your app for XSUAA-based authentication if not done yet: - + ```sh cds add xsuaa --for hybrid ``` @@ -602,7 +602,7 @@ The resulting JWT token is sent to the application where it's used to enforce au 3. In your project folder run: ::: code-group - ```sh [Mac/Linux] + ```sh [macOS/Linux] cds bind --exec -- npm start --prefix app/router ``` ```cmd [Windows] @@ -691,7 +691,7 @@ The login fails pointing to the correct OAuth configuration URL that is expected cds add ams npm install ``` - + This command installs `ams` and `ias` plugins, adds the required dependencies to `package.json` and updates `mta.yaml`. Learn more about [**Adding AMS Support**](../guides/security/cap-users#adding-ams-support) and [**Adding IAS**](../guides/security/authentication#adding-ias).{.learn-more} @@ -741,13 +741,13 @@ The login fails pointing to the correct OAuth configuration URL that is expected ``` #### Deploy the Application - + 1. Log in to Cloud Foundry: ```sh cf l -a ``` If you don't know the API endpoint, refer to [Regions and API Endpoints Available for the Cloud Foundry Environment](https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/350356d1dc314d3199dca15bd2ab9b0e.html#loiof344a57233d34199b2123b9620d0bb41). - + 2. Pack and deploy the application: ```sh @@ -757,13 +757,13 @@ The login fails pointing to the correct OAuth configuration URL that is expected #### Assign Policies in the Administrative Console 1. Log in to your Administrative Console for IAS and go to `Applications & Resources`. - + [Learn more about the Administrative Console for IAS.](/@external/guides/security/authentication#ias-admin){.learn-more} 2. Assign policies to IAS users or create custom policies, see [Cloud Deployment](../guides/security/cap-users#ams-deployment). #### Start Hybrid Testing - + 1. Bind your local application to the Identity Service Instance: ```sh @@ -798,7 +798,7 @@ The login fails pointing to the correct OAuth configuration URL that is expected 2. In your project folder run: ::: code-group - ```sh [Mac/Linux] + ```sh [macOS/Linux] cds bind --exec -- npm start --prefix app/router ``` ```cmd [Windows] diff --git a/node.js/cds-env.md b/node.js/cds-env.md index 9595900761..1e1bb3301e 100644 --- a/node.js/cds-env.md +++ b/node.js/cds-env.md @@ -406,7 +406,7 @@ cds run --profile my-custom-profile or ::: code-group -```sh [Mac/Linux] +```sh [macOS/Linux] CDS_ENV=my-custom-profile cds run ``` ```cmd [Windows] diff --git a/tools/cds-bind.md b/tools/cds-bind.md index 3809694a74..a1086df927 100644 --- a/tools/cds-bind.md +++ b/tools/cds-bind.md @@ -289,7 +289,7 @@ With `cds bind` you avoid storing credentials on your hard disk. If you need to For example, you can run the App Router from an `approuter` child directory: ::: code-group -```sh [Mac/Linux] +```sh [macOS/Linux] cds bind --exec -- npm start --prefix approuter ``` ```cmd [Windows] @@ -303,7 +303,7 @@ cds bind --exec '--' npm start --prefix approuter This works by constructing a `VCAP_SERVICES` environment variable. You can output the content of this variable as follows: ::: code-group -```sh [Mac/Linux] +```sh [macOS/Linux] cds bind --exec -- node -e 'console.log(process.env.VCAP_SERVICES)' ``` ```cmd [Windows] From 50103b1ea0397ab4d30e61d86725790e5839b65b Mon Sep 17 00:00:00 2001 From: Matthias Schur <107557548+MattSchur@users.noreply.github.com> Date: Mon, 27 Apr 2026 15:45:47 +0200 Subject: [PATCH 176/178] Vector Embeddings in Java (#2508) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduces new "Vector Functions" section below "Scalar Functions" --------- Co-authored-by: Adrian Görler Co-authored-by: Mahati Shankar <93712176+smahati@users.noreply.github.com> --- java/cds-data.md | 53 +++++------------------- java/working-with-cql/query-api.md | 66 ++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 42 deletions(-) diff --git a/java/cds-data.md b/java/cds-data.md index 4ff869296f..eb2255c774 100644 --- a/java/cds-data.md +++ b/java/cds-data.md @@ -328,58 +328,27 @@ On the database, this data is serialized to [JSON](https://www.json.org/)(1 Map data can be nested and may contain nested maps and lists, which are serialized to JSON objects and arrays, respectively. -## Vector Embeddings { #vector-embeddings } +## Vector Embeddings { #vector-embeddings } -In CDS [vector embeddings](../guides/databases/hana#vector-embeddings) are stored in elements of type `cds.Vector`: +In CDS, [vector embeddings](../guides/databases/hana#vector-embeddings) are stored in elements of type [`Vector`](/@external/cds/types). -```cds -entity Books : cuid { // [!code focus] - title : String(111); - description : LargeString; // [!code focus] - embedding : Vector(1536); // vector space w/ 1536 dimensions // [!code focus] -} // [!code focus] -``` +CAP Java support the vector type on SAP HANA, as well as H2 and SQLite for local testing. On Postgres (beta) support for vectors requires the [pgvector](https://github.com/pgvector/pgvector) extension. -In CAP Java, vector embeddings are represented by the `CdsVector` type, which allows a unified handling of different vector representations such as `float[]` and `String`: +In CAP Java, vectors are represented by the `CdsVector` type, which allows a unified handling of different vector representations such as `float[]` and `String`: ```Java -// Vector embedding of text, for example, from SAP GenAI Hub or via LangChain4j -float[] embedding = embeddingModel.embed(bookDescription).content().vector(); +// Vector embedding of text via SAP Cloud SDK for AI +float[] embedding = embeddingModel.embedding( + new OpenAiEmbeddingRequest(List.of(text))).getEmbeddingVectors().get(0); CdsVector v1 = CdsVector.of(embedding); // float[] format -CdsVector v2 = CdsVector.of("[0.42, 0.73, 0.28, ...]"); // String format -``` - -You can use the functions, `CQL.cosineSimilarity` or `CQL.l2Distance` (Euclidean distance) in queries to compute the similarity or distance of embeddings in the vector space. To use vector embeddings in functions, wrap them using `CQL.vector`: - -```Java -CqnVector v = CQL.vector(embedding); - -CdsResult similarBooks = service.run(Select.from(BOOKS).where(b -> - CQL.cosineSimilarity(b.embedding(), v).gt(0.9)) -); ``` -You can also use parameters for vectors in queries: - -```Java -var similarity = CQL.cosineSimilarity(CQL.get(Books.EMBEDDING), CQL.param(0).type(VECTOR)); - -CqnSelect query = Select.from(BOOKS) - .columns(b -> b.title(), b -> similarity.as("similarity")) - .where(b -> b.ID().ne(bookId).and(similarity.gt(0.9))) - .orderBy(b -> b.get("similarity").desc()); - -Result similarBooks = db.run(query, CdsVector.of(embedding)); -``` - -In CDS QL queries, elements of type `cds.Vector` are not included in select _all_ queries. They must be explicitly added to the select list: - -```Java -CdsVector embedding = service.run(Select.from(BOOKS).byId(101) - .columns(b -> b.embedding())).single(Books.class).getEmbedding(); -``` +::: info +In CDS QL queries, elements of type `Vector` are excluded from the select list by default. +::: +CAP Java supports multiple [vector functions](./working-with-cql/query-api.md#vector-functions) that allow you to compute vector embeddings, similarity, and distance directly in the database. ## Data in CDS Query Language (CQL) diff --git a/java/working-with-cql/query-api.md b/java/working-with-cql/query-api.md index 9765123f27..d43317e4e3 100644 --- a/java/working-with-cql/query-api.md +++ b/java/working-with-cql/query-api.md @@ -1640,6 +1640,72 @@ Scalar functions are values that are calculated from other values. This calculat See [`Concat`](#string-expressions) String Expression + +#### Vector Functions + +Vector functions allow you to compute similarity and distance of [vectors](../cds-data.md#vector-embeddings), as well as [vector embeddings](../../guides/databases/hana.md#vector-embeddings) of text data directly in the database. + +##### Computing Vector Embeddings in SAP HANA + +CAP Java supports the [VECTOR_EMBEDDING](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/vector-embedding-function-vector) function via `CQL.vectorEmbedding` to generate vector embeddings from text data directly in SAP HANA. + +To automatically generate vector embeddings on write in the database, you can define a calculated element [on-write](../../cds/cdl#on-write) using the `vector_embedding` function: + +```cds +extend Incidents with { + @cds.api.ignore + embedding : cds.Vector(768) = vector_embedding( + 'title: ' || title || ', summary: ' || summary, + 'DOCUMENT', 'SAP_GXY.20250407') stored; +} +``` + +In Java queries, use the `CQL.vectorEmbedding` function to compute vector embeddings: + +```java +var userQuery = CQL.val(""" + Have we seen incidents with solar inverters this month, + and how were they resolved? + """); +var v = CQL.vectorEmbedding(userQuery, TextType.QUERY, "SAP_GXY.20250407"); +``` + +On H2 and SQLite, the `vectorEmbedding` function is emulated. You can also use local [ONNX](https://onnx.ai) embedding models, which can be added for local testing via [LangChain4j embeddings](https://github.com/langchain4j/langchain4j/tree/main/embeddings): + +```xml + + dev.langchain4j + langchain4j-embeddings-all-minilm-l6-v2-q + runtime + +``` + +##### Computing Vector Similarity and Distance + +You can use the functions, `CQL.cosineSimilarity`, and `CQL.l2Distance` (Euclidean distance) in queries to compute the similarity and distance of vectors. Distance functions are used in use cases such as finding similar items based on [vector embeddings](../../guides/databases/hana.md#vector-embeddings), for example to improve the response of an LLM to a user query. To use vector embeddings in functions, wrap them using `CQL.vector`: + +```Java +CqnVector vec = CQL.vector(embedding); + +var similarIncidents = db.run(Select.from(INCIDENTS).where(i -> + CQL.cosineSimilarity(i.embedding(), vec).gt(0.75)) +); +``` + +You can also use parameters for vectors in queries: + +```Java +var similarity = CQL.cosineSimilarity( + CQL.get(Incidents.EMBEDDING), CQL.param(0).type(VECTOR)); + +var query = Select.from(INCIDENTS) + .columns(i -> i.title(), i -> similarity.times(100).as("similarity")) + .where(i -> similarity.gt(0.75)) + .orderBy(i -> i.get("similarity").desc()); + +Result similarIncidents = db.run(query, CdsVector.of(embedding)); +``` + #### Case-When-Then Expressions Use a case expression to compute a value based on the evaluation of conditions. The following query converts the stock of Books into a textual representation as 'stockLevel': From 94b216f99fc1815b5ce7ac63d0d832ffebe9cd7c Mon Sep 17 00:00:00 2001 From: Matthias Schur <107557548+MattSchur@users.noreply.github.com> Date: Mon, 27 Apr 2026 16:20:35 +0200 Subject: [PATCH 177/178] Move Vector Embeddings Guide from HANA to Databases (#2507) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Adrian Görler Co-authored-by: Mahati Shankar <93712176+smahati@users.noreply.github.com> --- guides/databases/_menu.md | 1 + guides/databases/hana.md | 80 ------------------- guides/databases/vector-embeddings.md | 109 ++++++++++++++++++++++++++ java/cds-data.md | 2 +- java/working-with-cql/query-api.md | 4 +- 5 files changed, 113 insertions(+), 83 deletions(-) create mode 100644 guides/databases/vector-embeddings.md diff --git a/guides/databases/_menu.md b/guides/databases/_menu.md index ca989779dd..cdbfd2514d 100644 --- a/guides/databases/_menu.md +++ b/guides/databases/_menu.md @@ -10,3 +10,4 @@ ## [ PostgreSQL ](postgres.md) # [ Schema Evolution ](schema-evolution.md) # [ Performance Guide ](performance.md) +# [ Vector Embeddings ](vector-embeddings.md) diff --git a/guides/databases/hana.md b/guides/databases/hana.md index 4bda1e0c38..ac78a36509 100644 --- a/guides/databases/hana.md +++ b/guides/databases/hana.md @@ -261,86 +261,6 @@ See the [Deploying to Cloud](../deploy/index.md) guide for information about how The HANA Service provides dedicated support for native SAP HANA features as follows. -### Vector Embeddings - -Vector embeddings let you add semantic search, recommendations, and generative AI features to your CAP application. Embeddings are numeric arrays that represent the meaning of unstructured data (text, images, etc.), making it possible to compare and search for items that are semantically related to each other or a user query. - -#### Choose an Embedding Model - -Choose an embedding model that fits your use case and data (for example english or multilingual text). The model determines the number of dimensions of the resulting output vector. Check the documentation of the respective embedding model for details. - -Use the [SAP Generative AI Hub](https://community.sap.com/t5/technology-blogs-by-sap/how-sap-s-generative-ai-hub-facilitates-embedded-trustworthy-and-reliable/ba-p/13596153) for unified consumption of embedding models and LLMs across different vendors and open source models. Check for available models on the [SAP AI Launchpad](https://help.sap.com/docs/ai-launchpad/sap-ai-launchpad-user-guide/models-and-scenarios-in-generative-ai-hub-fef463b24bff4f44a33e98bb1e4f3148#models). - -#### Add Embeddings to Your CDS Model -Use the `cds.Vector` type in your CDS model to store embeddings on SAP HANA Cloud. Set the dimension to match your embedding model (for example, 1536 embedding dimensions for OpenAI *text-embedding-3-small*). - - ```cds - entity Books : cuid { - title : String(111); - description : LargeString; - embedding : Vector(1536); // adjust dimensions to embedding model - } - ``` - -#### Generate Embeddings -Use an embedding model to convert your data (for example, book descriptions) into vectors. The [SAP Cloud SDK for AI](https://sap.github.io/ai-sdk/) makes it easy to call SAP AI Core services to generate these embeddings. - -:::details Example using SAP Cloud SDK for AI -```Java -var aiClient = OpenAiClient.forModel(OpenAiModel.TEXT_EMBEDDING_3_SMALL); -var response = aiClient.embedding( - new OpenAiEmbeddingRequest(List.of(book.getDescription()))); -book.setEmbedding(CdsVector.of(response.getEmbeddingVectors().get(0))); -``` -::: - -#### Query for Similarity -At runtime, use SAP HANA's built-in vector functions to search for similar items. For example, find books with embeddings similar to a user question: - -::: code-group -```Java [Java] -// Compute embedding for user question -var request = new OpenAiEmbeddingRequest(List.of("How to use vector embeddings in CAP?")); -CdsVector userQuestion = CdsVector.of( - aiClient.embedding(request).getEmbeddingVectors().get(0)); - -// Compute similarity between user question and book embeddings -var similarity = CQL.cosineSimilarity( // computed on SAP HANA - CQL.get(Books.EMBEDDING), userQuestion); - -// Find Books related to user question ordered by similarity -hana.run(Select.from(BOOKS).limit(10) - .columns(b -> b.ID(), b -> b.title(), b -> similarity.as("similarity")) - .orderBy(b -> b.get("similarity").desc()) -); -``` - -```js [Node.js] -const response = await new AzureOpenAiEmbeddingClient( - 'text-embedding-3-small' -).run({ - input: 'How to use vector embeddings in CAP?' -}); - -const questionEmbedding = response.getEmbedding(); -let similarBooks = await SELECT.from('Books') - .where`cosine_similarity(embedding, to_real_vector(${questionEmbedding})) > 0.9`; -``` -::: - -:::tip Evolve embeddings with your model -Store embeddings when you create or update your data. Regenerate embeddings if you change your embedding model. -::: - -:::tip Use SAP Cloud SDK for AI -Use the [SAP Cloud SDK for AI](https://sap.github.io/ai-sdk/) for unified access to embedding models and large language models (LLMs) from [SAP AI Core](https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/what-is-sap-ai-core). -::: - -Learn more about the [SAP Cloud SDK for AI (Java)](https://sap.github.io/ai-sdk/docs/java/getting-started) or the [SAP Cloud SDK for AI (JavaScript)](https://sap.github.io/ai-sdk/docs/js/getting-started) {.learn-more} - -[Learn more about Vector Embeddings in CAP Java](../../java/cds-data#vector-embeddings) {.learn-more} - - ### Geospatial Functions CDS supports the special syntax for SAP HANA geospatial functions: diff --git a/guides/databases/vector-embeddings.md b/guides/databases/vector-embeddings.md new file mode 100644 index 0000000000..cb4ebe69fa --- /dev/null +++ b/guides/databases/vector-embeddings.md @@ -0,0 +1,109 @@ +--- +label: Vector Embeddings +--- +# Vector Embeddings + +Vector embeddings convert unstructured content (text, images, and so on) into numeric vectors that encode semantics (meaning). Comparing these vectors enables semantic search, recommendations, and enhanced generative AI features in your CAP application. For example retrieving related records, ranking results by relevance, or augmenting prompts for LLMs. + +## Choose an Embedding Model + +Choose an embedding model that fits your use case and data (for example English or multilingual text). The model determines the number of dimensions of the resulting output vector. Check the documentation of the respective embedding model for details. + +Use the [SAP Generative AI Hub](https://www.sap.com/products/artificial-intelligence/generative-ai-hub.html) for unified consumption of embedding models and LLMs across different vendors and open-source models. Check for available models on the [SAP AI Launchpad](https://help.sap.com/docs/ai-launchpad/sap-ai-launchpad-user-guide/models-and-scenarios-in-generative-ai-hub-fef463b24bff4f44a33e98bb1e4f3148#models). + +## Add Embeddings to Your CDS Model +Use the built-in CDL [Vector type](../../cds/types) in your CDS model to store embeddings. Set the vector dimensions to match the embedding model (for example, 768 for *SAP_GXY.20250407*). + +```cds +extend Incidents with { + embedding : Vector(768); +} +``` + +## Generate Embeddings +Use an embedding model to convert your data (for example, incident titles and summaries) into vectors. + +:::warning Evolve embeddings with your model +Store embeddings when you create or update your data. Regenerate embeddings if you change your embedding model. +::: + +### Generate Embeddings on the Database + +To generate vector embeddings on write in SAP HANA, you can use the [vector_embedding](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/vector-embedding-function-vector) function as calculated element [on-write](../../cds/cdl#on-write) with embedding models from [SAP HANA NLP](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-vector-engine-guide/creating-text-embeddings-with-nlp-51eb170d038d4099a9bbb85c08fda888) or a configured remote source from SAP AI Core: + +```cds +extend Incidents with { + @cds.api.ignore + embedding : Vector(768) = vector_embedding( + 'Title: ' || title || ', Summary: ' || summary, + 'DOCUMENT', 'SAP_GXY.20250407' + ) stored; +} +``` + +:::tip Prefer calculated elements for vector embeddings +If the database calculates vector embeddings on write it automatically regenerates the embedding if the input data changes. +::: + +::: info Local Testing with H2 and SQLite +On H2 and SQLite the `CQL.vectorEmbedding` function is emulated to support local testing. +::: + +> [!warning] Java only and +> The `vector_embedding` function is currently in beta and only supported by the CAP Java runtime. + +[Learn more about Vector Embeddings in CAP Java](../../java/cds-data#vector-embeddings) {.learn-more} + +### Generate Embeddings Programmatically + +Alternatively, you can compute vector embeddings in your application layer using the [SAP Cloud SDK for AI](https://sap.github.io/ai-sdk/) to call SAP AI Core services for generating embeddings. + +:::details Example using SAP Cloud SDK for AI +```Java +var aiClient = OpenAiClient.forModel(OpenAiModel.TEXT_EMBEDDING_3_SMALL); +var response = aiClient.embedding( + new OpenAiEmbeddingRequest(List.of(book.getDescription()))); +book.setEmbedding(CdsVector.of(response.getEmbeddingVectors().get(0))); +``` +::: + +:::tip Use SAP Cloud SDK for AI +Use the [SAP Cloud SDK for AI](https://sap.github.io/ai-sdk/) for unified access to embedding models and large language models (LLMs) from [SAP AI Core](https://help.sap.com/docs/sap-ai-core/sap-ai-core-service-guide/what-is-sap-ai-core). +::: + +Learn more about the [SAP Cloud SDK for AI (Java)](https://sap.github.io/ai-sdk/docs/java/getting-started) or the [SAP Cloud SDK for AI (JavaScript)](https://sap.github.io/ai-sdk/docs/js/getting-started) {.learn-more} + +## Query for Similarity +At runtime, use vector functions to search for similar items. In an example Retrieval-Augmented Generation (RAG) scenario, use `CQL.cosineSimilarity` to enhance the context of a user query for the LLM. First, compute the vector embedding of the user query and use it to find related incidents. + +::: code-group +```Java [Java] +// Compute embedding for user question +var query = CQL.val( + "Any incidents with solar inverters this month? How were they resolved?"); +var embedding = CQL.vectorEmbedding(query, TextType.QUERY, "SAP_GXY.20250407"); + +// Compute similarity between user question and incident embeddings +var similarity = CQL.cosineSimilarity(CQL.get(Incidents.EMBEDDING), embedding); + +// Find Incidents related to user question ordered by relevance +Select.from(INCIDENTS) + .columns(i -> similarity.times(100).as("relevance"), + i -> i.ID(), i -> i.title(), i -> i.summary(), i -> i.date()) + .where(i -> similarity.gt(0.75)) + .orderBy(i -> i.get("relevance").desc()); +``` + +```js [Node.js] +const response = await new AzureOpenAiEmbeddingClient( + 'text-embedding-3-small' +).run({ + input: 'Any incidents with solar inverters this month? How were they resolved?' +}); + +const questionEmbedding = response.getEmbedding(); +let similarIncidents = await SELECT.from('Incidents') + .where`cosine_similarity(embedding, to_real_vector(${questionEmbedding})) > 0.75`; +``` +::: + diff --git a/java/cds-data.md b/java/cds-data.md index eb2255c774..3798486b19 100644 --- a/java/cds-data.md +++ b/java/cds-data.md @@ -330,7 +330,7 @@ Map data can be nested and may contain nested maps and lists, which are serializ ## Vector Embeddings { #vector-embeddings } -In CDS, [vector embeddings](../guides/databases/hana#vector-embeddings) are stored in elements of type [`Vector`](/@external/cds/types). +In CDS [vector embeddings](../guides/databases/vector-embeddings) are stored in elements of type `cds.Vector`: CAP Java support the vector type on SAP HANA, as well as H2 and SQLite for local testing. On Postgres (beta) support for vectors requires the [pgvector](https://github.com/pgvector/pgvector) extension. diff --git a/java/working-with-cql/query-api.md b/java/working-with-cql/query-api.md index d43317e4e3..926f2303c6 100644 --- a/java/working-with-cql/query-api.md +++ b/java/working-with-cql/query-api.md @@ -1643,7 +1643,7 @@ Scalar functions are values that are calculated from other values. This calculat #### Vector Functions -Vector functions allow you to compute similarity and distance of [vectors](../cds-data.md#vector-embeddings), as well as [vector embeddings](../../guides/databases/hana.md#vector-embeddings) of text data directly in the database. +Vector functions allow you to compute similarity and distance of [vectors](../cds-data.md#vector-embeddings), as well as [vector embeddings](../../guides/databases/vector-embeddings) of text data directly in the database. ##### Computing Vector Embeddings in SAP HANA @@ -1682,7 +1682,7 @@ On H2 and SQLite, the `vectorEmbedding` function is emulated. You can also use l ##### Computing Vector Similarity and Distance -You can use the functions, `CQL.cosineSimilarity`, and `CQL.l2Distance` (Euclidean distance) in queries to compute the similarity and distance of vectors. Distance functions are used in use cases such as finding similar items based on [vector embeddings](../../guides/databases/hana.md#vector-embeddings), for example to improve the response of an LLM to a user query. To use vector embeddings in functions, wrap them using `CQL.vector`: +You can use the functions, `CQL.cosineSimilarity`, and `CQL.l2Distance` (Euclidean distance) in queries to compute the similarity and distance of vectors. Distance functions are used in use cases such as finding similar items based on [vector embeddings](../../guides/databases/vector-embeddings), for example to improve the response of an LLM to a user query. To use vector embeddings in functions, wrap them using `CQL.vector`: ```Java CqnVector vec = CQL.vector(embedding); From c51c20f470944e2820b6b6b370e37f38dd3abed1 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Mon, 27 Apr 2026 17:01:42 +0200 Subject: [PATCH 178/178] patch version 2026.4.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index fb05720f9c..eb75496e2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@capire/docs", - "version": "2026.5.0", + "version": "2026.4.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@capire/docs", - "version": "2026.5.0", + "version": "2026.4.1", "license": "SEE LICENSE IN LICENSE", "devDependencies": { "@cap-js/cds-typer": "^0", diff --git a/package.json b/package.json index 7380c072ab..a4a5f075f6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@capire/docs", - "version": "2026.5.0", + "version": "2026.4.1", "description": "Capire on VitePress", "type": "module", "scripts": {