From 90abd4a0a1dbf4cd82d4164c37c575c6afe38817 Mon Sep 17 00:00:00 2001 From: Patrice Bender Date: Mon, 27 Oct 2025 14:26:14 +0100 Subject: [PATCH 001/439] chore: remove node.js only marker for most standard functions (#2169) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit most of the standard database functions are also supported by the java runtime. Hence this section needed to be updated. Date / Aggregation / SAP HANA functions are still a todo for Java. Once the BLIs are implemented, we can also unlock those sections for Java. --------- Co-authored-by: Adrian Görler --- guides/databases.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/guides/databases.md b/guides/databases.md index 06f943fc58..784069076a 100644 --- a/guides/databases.md +++ b/guides/databases.md @@ -921,12 +921,12 @@ Instead, they protect the integrity of your data in the database layer against p ## Standard Database Functions -A specified set of standard functions - inspired by [OData](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_StringandCollectionFunctions) and [SAP HANA](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/alphabetical-list-of-functions?locale=en-US) - is supported in a **database-agnostic**, hence portable way, and translated to the best-possible native SQL functions or polyfills during runtime (currently only Node.js) and for your CDL files. +A specified set of standard functions - inspired by [OData](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_StringandCollectionFunctions) and [SAP HANA](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/alphabetical-list-of-functions?locale=en-US) - is supported in a **database-agnostic**, hence portable way. The functions are translated to the best-possible database-specific SQL expressions at runtime and also during compilation of your CDL files. ### OData standard functions -The `@sap/cds-compiler` and all CAP Node.js database services come with out of the box support for common OData functions. +The `@sap/cds-compiler` and the database services come with out of the box support for common OData functions. ::: warning Case Sensitivity The OData function mappings are case-sensitive and must be written as in the list below. @@ -1021,6 +1021,8 @@ For example, `startsWith` instead of `startswith` will be passed as-is to the da If you provide more than one argument, the `round` function may behave differently depending on the database. ::: +
+ #### Date and Time Functions - `year(x)`, `month(x)`, `day(x)`, `hour(x)`, `minute(x)`, `second(x)` @@ -1038,11 +1040,14 @@ For example, `startsWith` instead of `startswith` will be passed as-is to the da - `mindatetime()` Returns the earliest possible point in time: `'0001-01-01T00:00:00.000Z'`. +
+ #### Aggregate Functions - `min(x)`, `max(x)`, `sum(x)`, `average(x)`, `count(x)`, `countdistinct(x)` Standard aggregate functions used to calculate minimum, maximum, sum, average, count, and distinct count of values. +
### SAP HANA Functions @@ -1066,7 +1071,7 @@ For the SAP HANA functions, both usages are allowed: all-lowercase as given abov ### Special Runtime Functions -In addition to the OData and SAP HANA standard functions, the **CAP runtimes** provides special functions that are only available for runtime queries: +In addition to the OData and SAP HANA standard functions, the **CAP runtime** provides special functions that are only available for runtime queries: - `search(x, y)` Checks whether `y` is contained in any element of `x` (fuzzy matching may apply). @@ -1079,6 +1084,8 @@ In addition to the OData and SAP HANA standard functions, the **CAP runtimes** p - `now()` Returns the current timestamp. +
+ ## Using Native Features { #native-db-functions} In general, the CDS 2 SQL compiler doesn't 'understand' SQL functions but translates them to SQL generically as long as they follow the standard call syntax of `function(param1, param2)`. This allows you to use native database functions inside your CDS models. @@ -1191,4 +1198,4 @@ Once you have 2 non-HANA local databases, you need to have 2 distinct database c -CAP samples demonstrate this in [@capire/bookstore](https://github.com/capire/bookstore/tree/main/db). \ No newline at end of file +CAP samples demonstrate this in [@capire/bookstore](https://github.com/capire/bookstore/tree/main/db). From 965492ff8c6620e8ed7e783e93d7255d404d3327 Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Mon, 27 Oct 2025 14:27:57 +0100 Subject: [PATCH 002/439] Simplify multitenancy guide (#2173) - `with-mtx` profile config is added on `cds add multitenancy` by default. - Removed `oauth-configuration` snippet: was hardcoded to a specific region (bad practice!) and we add a more generic one in `cds add xsuaa/ias`. - `cds add kyma` is a convenient shortcut for `cds add helm,containerize`. - Removed the "Behind the Scenes" section as it's overly hard-wired to XSUAA + Service Manager. It wasn't adding a lot of value imo. --- guides/deployment/to-cf.md | 2 -- guides/multitenancy/index.md | 37 ++++-------------------------------- 2 files changed, 4 insertions(+), 35 deletions(-) diff --git a/guides/deployment/to-cf.md b/guides/deployment/to-cf.md index a343e5b052..0257f2b7e1 100644 --- a/guides/deployment/to-cf.md +++ b/guides/deployment/to-cf.md @@ -216,8 +216,6 @@ To enable multitenancy for production, run the following command: cds add multitenancy ``` -[Learn more about MTX services.](../multitenancy/#behind-the-scenes){.learn-more} -
::: tip You're set! diff --git a/guides/multitenancy/index.md b/guides/multitenancy/index.md index e303290108..ab4b624109 100644 --- a/guides/multitenancy/index.md +++ b/guides/multitenancy/index.md @@ -79,6 +79,9 @@ cds add multitenancy "requires": { "[production]": { "multitenancy": true + }, + "[with-mtx]": { + "multitenancy": true } } } @@ -721,25 +724,11 @@ cds add mta ``` ```sh [Kyma] -cds add helm,containerize +cds add kyma ``` ::: -::: details Add xsuaa redirect for trial / extension landscapes -Add the following snippet to your _xs-security.json_ and adapt it to the landscape you're deploying to: - -```json - "oauth2-configuration": { - "redirect-uris": ["https://*.cfapps.us10-001.hana.ondemand.com/**"] - } -``` - -::: - -[Learn more about configured BTP services for SaaS applications.](#behind-the-scenes){.learn-more} - - ::: code-group ```sh [Cloud Foundry] @@ -1275,24 +1264,6 @@ The main task for the MTX sidecar is to serve `subscribe` and `upgrade` requests The CAP services runtime requests models from the sidecar only when you apply tenant-specific extensions. For Node.js projects, you have the option to run the MTX services embedded in the main app, instead of in a sidecar. - -### Behind the Scenes { #behind-the-scenes} - -With adding the MTX services, your project configuration is adapted at all relevant places. - -Configuration and dependencies are added to your _package.json_ and an _xs-security.json_ containing MTX-specific scopes and roles is created. {.node} - -Configuration and dependencies are added to your _.cdsrc.json_ and an _xs-security.json_ containing MTX-specific scopes and roles is created. {.java} - -For the MTA deployment service dependencies are added to the _mta.yaml_ file. Each SaaS application will have bindings to at least three SAP BTP service instances. - -| Service | Description | -| ------------------------------------------------------------ | ------------------------------------------------------------ | -| [Service Manager](https://help.sap.com/docs/SERVICEMANAGEMENT/09cc82baadc542a688176dce601398de/4e19b11211fe4ca2a266d3fdd4a72188.html) (`service-manager`) | CAP uses this service for creating a new SAP HANA Deployment Infrastructure (HDI) container for each tenant and for retrieving tenant-specific database connections. | -| [SaaS Provisioning Service](https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/3971151ba22e4faa9b245943feecea54.html) (`saas-registry`) | To make a SaaS application available for subscription to SaaS consumer tenants, the application provider must register the application in the SAP BTP Cloud Foundry environment through the SaaS Provisioning Service. | -| [User Account and Authentication Service](https://help.sap.com/docs/CP_AUTHORIZ_TRUST_MNG) (`xsuaa`) | Binding information contains the OAuth client ID and client credentials. The XSUAA service can be used to validate the JSON Web Token (JWT) from requests and to retrieve the tenant context from the JWT.| - - 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 a688484952..12d18b990d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7549,9 +7549,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.93.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.2.tgz", - "integrity": "sha512-t+YPtOQHpGW1QWsh1CHQ5cPIr9lbbGZLZnbihP/D/qZj/yuV68m8qarcV17nvkOX81BCrvzAlq2klCQFZghyTg==", + "version": "1.93.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.3.tgz", + "integrity": "sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==", "dev": true, "license": "MIT", "peer": true, From 0a7b6ee7d65e85bdcdf19464932cffda8c1058e1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 31 Oct 2025 16:56:55 +0100 Subject: [PATCH 007/439] chore(deps): update dependency @types/express to v4.17.25 (#2176) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@types/express](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/express) ([source](https://redirect.github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/express)) | [`4.17.24` -> `4.17.25`](https://renovatebot.com/diffs/npm/@types%2fexpress/4.17.24/4.17.25) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2fexpress/4.17.25?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2fexpress/4.17.24/4.17.25?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### 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 | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 12d18b990d..54ecbedcbc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2714,9 +2714,9 @@ "license": "MIT" }, "node_modules/@types/express": { - "version": "4.17.24", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.24.tgz", - "integrity": "sha512-Mbrt4SRlXSTWryOnHAh2d4UQ/E7n9lZyGSi6KgX+4hkuL9soYbLOVXVhnk/ODp12YsGc95f4pOvqywJ6kngUwg==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "dev": true, "license": "MIT", "peer": true, @@ -2724,7 +2724,7 @@ "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { From 3c1235f1bdf93382fafefda7cd02a4a111e57988 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 31 Oct 2025 16:57:35 +0100 Subject: [PATCH 008/439] chore: Update CLI texts (#2179) Updates the output of cds CLI texts to the latest version. Co-authored-by: chgeo <7470719+chgeo@users.noreply.github.com> --- tools/assets/help/cds-version-md.out.md | 12 ++++++------ tools/assets/help/cds-version.out.md | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/tools/assets/help/cds-version-md.out.md b/tools/assets/help/cds-version-md.out.md index d472cf5402..d7b7b53f51 100644 --- a/tools/assets/help/cds-version-md.out.md +++ b/tools/assets/help/cds-version-md.out.md @@ -4,15 +4,15 @@ | your-project | https://github.com/<your/repo> | | ---------------------- | --------------------------------------- | -| @sap/cds | 9.4.3 | +| @sap/cds | 9.4.4 | | @sap/cds-dk | -- missing -- | -| @sap/cds-compiler | 6.4.2 | -| @sap/cds-dk (global) | 9.4.1 | +| @sap/cds-compiler | 6.4.6 | +| @sap/cds-dk (global) | 9.4.2 | | @sap/cds-fiori | 2.1.0 | -| @sap/cds-mtxs | 3.3.1 | +| @sap/cds-mtxs | 3.4.2 | | @cap-js/asyncapi | 1.0.3 | -| @cap-js/db-service | 2.5.1 | +| @cap-js/db-service | 2.6.0 | | @cap-js/openapi | 1.2.3 | -| @cap-js/sqlite | 2.0.3 | +| @cap-js/sqlite | 2.0.4 | | Node.js | v22.20.0 | diff --git a/tools/assets/help/cds-version.out.md b/tools/assets/help/cds-version.out.md index 1c407d30dd..51d6e28215 100644 --- a/tools/assets/help/cds-version.out.md +++ b/tools/assets/help/cds-version.out.md @@ -2,15 +2,15 @@
 > cds version
 
-@sap/cds: 9.4.3
+@sap/cds: 9.4.4
 @sap/cds-dk: undefined
-@sap/cds-compiler: 6.4.2
-@sap/cds-dk (global): 9.4.1
+@sap/cds-compiler: 6.4.6
+@sap/cds-dk (global): 9.4.2
 @sap/cds-fiori: 2.1.0
-@sap/cds-mtxs: 3.3.1
+@sap/cds-mtxs: 3.4.2
 @cap-js/asyncapi: 1.0.3
-@cap-js/db-service: 2.5.1
+@cap-js/db-service: 2.6.0
 @cap-js/openapi: 1.2.3
-@cap-js/sqlite: 2.0.3
+@cap-js/sqlite: 2.0.4
 Node.js: v22.20.0
 
From 63ff0ae5a5071bae97f3e85c84cd8c065bd5453e Mon Sep 17 00:00:00 2001 From: Evgeny Andreev Date: Tue, 4 Nov 2025 12:09:08 +0100 Subject: [PATCH 009/439] Document Tree Views (#2005) --- advanced/fiori.md | 106 +++++++++++++++++++++++++++++++++++++++++++--- menu.md | 2 +- 2 files changed, 102 insertions(+), 6 deletions(-) diff --git a/advanced/fiori.md b/advanced/fiori.md index 1b1b2d27be..dde6e4c7ab 100644 --- a/advanced/fiori.md +++ b/advanced/fiori.md @@ -1,5 +1,4 @@ --- -shorty: Fiori UIs synopsis: > CAP provides out-of-the-box support for SAP Fiori elements front ends. permalink: advanced/fiori @@ -9,7 +8,7 @@ impl-variants: true uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/e4a7559baf9f4e4394302442745edcd9.html --- -# Serving Fiori UIs +# Serving SAP Fiori UIs {{ $frontmatter.synopsis }} @@ -23,13 +22,13 @@ This guide explains how to add one or more SAP Fiori elements apps to a CAP proj ## SAP Fiori Preview -For entities exposed via OData V4 there is a _Fiori preview_ link on the index page. It dynamically serves an SAP Fiori Elements list page that allows you to quickly see the effect of annotation changes without having to create a UI application first. +For entities exposed via OData V4 there is a _Fiori preview_ link on the index page. It dynamically serves an SAP Fiori elements list page that allows you to quickly see the effect of annotation changes without having to create a UI application first. ::: details Be aware that this is **not meant for production**.
-The preview not meant as a replacement for a proper SAP Fiori Elements (UI5) application. +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. @@ -38,7 +37,7 @@ To also enable it in cloud deployments, for test or demo purposes maybe, set -The preview not meant as a replacement for a proper SAP Fiori Elements (UI5) application. +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. @@ -744,4 +743,101 @@ Cache Control feature is currently supported on the Java runtime only.
+## Hierarchical Tree Views + +Recursive hierarchies are parent-child hierarchies, where each entity references its parent and through that defines the hierarchical structure. A common example is a company organization structure or HR reporting, where each employee entity references another employee as a direct report or manager. + +Database support for a generic hierarchy implementation by CAP runtimes: + +| Runtime\DB | SAP HANA | H2 | PostgreSQL | SQLite | +|-------------|----------|----|------------|--------| +| CAP Java | ✓ | ✓ | ✓ | | +| CAP Node.js | ✓ | |✓ |✓ | + + +### Example +Let's assume we have the following domain model and its projection in a service: + +::: code-group +```cds [schema.cds] +namespace my.bookshop; + +entity Genres { //... + parent : Association to Genres; +} +``` +::: + +::: code-group +```cds [AdminService.cds] +service AdminService { + entity Genres as projection on my.bookshop.Genres; +} +``` +::: + + +Annotate/extend the entity in the service as follows: + +```cds +// declare a hierarchy with the qualifier "GenresHierarchy" +annotate AdminService.Genres with @Aggregation.RecursiveHierarchy #GenresHierarchy : { + NodeProperty : ID, // identifies a node, usually the key + ParentNavigationProperty : parent // navigates to a node's parent +}; + +extend AdminService.Genres with @( + // The computed properties expected by Fiori to be present in hierarchy entities + Hierarchy.RecursiveHierarchy #GenresHierarchy : { + LimitedDescendantCount : LimitedDescendantCount, + DistanceFromRoot : DistanceFromRoot, + DrillState : DrillState, + LimitedRank : LimitedRank + }, + // Disallow filtering on these properties from Fiori UIs + Capabilities.FilterRestrictions.NonFilterableProperties: [ + 'LimitedDescendantCount', 'DistanceFromRoot', 'DrillState', 'LimitedRank' + ], + // Disallow sorting on these properties from Fiori UIs + Capabilities.SortRestrictions.NonSortableProperties : [ + 'LimitedDescendantCount', 'DistanceFromRoot', 'DrillState', 'LimitedRank' + ], +) columns { // Ensure we can query these columns from the database + null as LimitedDescendantCount : Int16, + null as DistanceFromRoot : Int16, + null as DrillState : String, + null as LimitedRank : Int16 +}; +``` + +> Note: When naming the hierarchy qualifier, use the following pattern:
+> `Hierarchy` + +Configure the TreeTable in UI5's _manifest.json_ file: + +```jsonc + "sap.ui5": { ... + "routing": { ... + "targets": { ... + "GenresList": { ... + "options": { + "settings": { ... + "controlConfiguration": { + "@com.sap.vocabularies.UI.v1.LineItem": { + "tableSettings": { + "hierarchyQualifier": "GenresHierarchy", // [!code focus] + "type": "TreeTable" // [!code focus] + } + } + } + } + } + }, + }, + }, +``` + +> Note: use the `hierarchyQualifier` declared earlier +
+ diff --git a/menu.md b/menu.md index 56e3f7a37a..959b213a55 100644 --- a/menu.md +++ b/menu.md @@ -55,7 +55,7 @@ ### [AsyncAPI](advanced/publishing-apis/asyncapi) ## [Serving UIs](advanced/fiori) - ### [Fiori UIs](advanced/fiori) + ### [SAP Fiori UIs](advanced/fiori) ## [Databases](guides/databases) From 9168a8fdd9ea9f1cc7b633957b8c754c1248ddd9 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 4 Nov 2025 14:00:34 +0100 Subject: [PATCH 010/439] add ai review action --- .github/workflows/ai-review.yml | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/ai-review.yml diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml new file mode 100644 index 0000000000..2325344eb7 --- /dev/null +++ b/.github/workflows/ai-review.yml @@ -0,0 +1,34 @@ +name: AI Review + +on: + pull_request: + branches: [main] + merge_group: + +concurrency: + group: pr-sap-${{ github.workflow }}-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + ai-review: + name: AI Review + if: ${{ contains(github.event.pull_request.labels.*.name, 'AI Review') }} + runs-on: [self-hosted, solinas] + steps: + - uses: SAP/ai-assisted-github-actions/pr-review@v3 + with: + aicore-service-key: ${{ secrets.AICORE_SERVICE_KEY }} + model: gpt-5 + model-parameters: '{"temperature": 0.1}' + prompt: | + - As an AI bot reviewing documentation pull requests on GitHub, please focus on the following areas to ensure high-quality and effective documentation: + - Check for spelling errors in English and provide corrections. + - Identify and correct grammatical errors and incorrect punctuation. + - Provide suggestions for improving the clarity and conciseness of the text to make it more understandable. + - Consider the guidelines that can be found in .github/workflows/assets/editor.md and apply them. + - Ensure that the tone is appropriate for technical documentation, maintaining a professional and informative style. + - Verify that the structure of the document is logical and that headings and subheadings are used effectively. + - Check for consistency in terminology and style throughout the document. From 65502a22304b8c23c7073835daf5b49b66c2c185 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 4 Nov 2025 15:08:24 +0100 Subject: [PATCH 011/439] update runner --- .github/workflows/ai-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index 2325344eb7..adae0ca418 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -16,7 +16,7 @@ jobs: ai-review: name: AI Review if: ${{ contains(github.event.pull_request.labels.*.name, 'AI Review') }} - runs-on: [self-hosted, solinas] + runs-on: ubuntu-latest steps: - uses: SAP/ai-assisted-github-actions/pr-review@v3 with: From b8741581c547d103d257e8ae359b732f8ceb8df2 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 4 Nov 2025 15:17:03 +0100 Subject: [PATCH 012/439] switch model --- .github/workflows/ai-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index adae0ca418..186831cad3 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -21,7 +21,7 @@ jobs: - uses: SAP/ai-assisted-github-actions/pr-review@v3 with: aicore-service-key: ${{ secrets.AICORE_SERVICE_KEY }} - model: gpt-5 + model: anthropic--claude-4-sonnet model-parameters: '{"temperature": 0.1}' prompt: | - As an AI bot reviewing documentation pull requests on GitHub, please focus on the following areas to ensure high-quality and effective documentation: From 18c92c1ab8167f482dbc0927494da16ad07279a4 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 4 Nov 2025 15:35:14 +0100 Subject: [PATCH 013/439] allow writing to pull requests --- .github/workflows/ai-review.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index 186831cad3..1a66629d64 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -11,6 +11,7 @@ concurrency: permissions: contents: read + pull-request: write jobs: ai-review: From c8363f63dc9574d85c8ee3d630ff8744a062162b Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 4 Nov 2025 15:45:54 +0100 Subject: [PATCH 014/439] move write permission into job --- .github/workflows/ai-review.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index 1a66629d64..4c7bae2c99 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -11,13 +11,14 @@ concurrency: permissions: contents: read - pull-request: write jobs: ai-review: name: AI Review if: ${{ contains(github.event.pull_request.labels.*.name, 'AI Review') }} runs-on: ubuntu-latest + permissions: + pull-request: write steps: - uses: SAP/ai-assisted-github-actions/pr-review@v3 with: From 573035929ecb0ee377ef7f7776bcabee3fc31aa5 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 4 Nov 2025 15:47:40 +0100 Subject: [PATCH 015/439] another try with contents: write --- .github/workflows/ai-review.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index 4c7bae2c99..ffe001da63 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -10,15 +10,13 @@ concurrency: cancel-in-progress: true permissions: - contents: read + contents: write jobs: ai-review: name: AI Review if: ${{ contains(github.event.pull_request.labels.*.name, 'AI Review') }} runs-on: ubuntu-latest - permissions: - pull-request: write steps: - uses: SAP/ai-assisted-github-actions/pr-review@v3 with: From 588639c93f0a998d3a8b99135c3810588d76187d Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 4 Nov 2025 16:01:59 +0100 Subject: [PATCH 016/439] move permission in job completely --- .github/workflows/ai-review.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index ffe001da63..f090441316 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -9,14 +9,14 @@ concurrency: group: pr-sap-${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true -permissions: - contents: write - jobs: ai-review: name: AI Review if: ${{ contains(github.event.pull_request.labels.*.name, 'AI Review') }} runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write steps: - uses: SAP/ai-assisted-github-actions/pr-review@v3 with: From 8194b47d240f84a29bd1acfb33899a6dca490af1 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Wed, 5 Nov 2025 09:02:04 +0100 Subject: [PATCH 017/439] add guidelines for ai editor --- .github/workflows/assets/editor.md | 83 ++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 .github/workflows/assets/editor.md diff --git a/.github/workflows/assets/editor.md b/.github/workflows/assets/editor.md new file mode 100644 index 0000000000..3c49a0a655 --- /dev/null +++ b/.github/workflows/assets/editor.md @@ -0,0 +1,83 @@ +--- +description: Reviews code for quality and best practices +temperature: 0.1 +prompt: Do a detailed edit as outlined in the following. +--- + +# Detailed Edit +## ROLE +You are a helpful editor for a technical writer. Your task is to review and improve the text while ensuring that it adheres to a structured set of writing rules. All categories are of equal priority—no rule should be prioritized over another. + +## TASK +Perform a structured review of the text, checking compliance with the following rules: + + +1. Guidelines +For this repository you should consider the following guideline: + +To have a consistent look and feel throughout capire, use the following semantic when formatting your text. + +| Format | Semantic | +|---|---| +| _Italic_ | Indicates new terms, URLs, email addresses, filenames, and file extensions, and UI Elements.| +|`Constant width` | Used for program listings, as well as within paragraphs to refer to program elements such as variable or function names, databases, data types, environment variables, statements, and keywords.| + +It boils down to very basic considerations: + +- Everything that is code or related to code, which includes configuration, is at `Constant width` +- Everything else, that is neither code nor configuration, is _Italic_ +- Everything that is important and should be highlighted is **Bold** +- Keywords and all other things you want to highlight, can be formatted as `Constant width` but it should be used wisely. + +There are a couple of aspects that are easy to consider when writing w/o digging too deep into guidelines for technical communication at SAP. + +- Use active voice instead of passive voice + + Example: Add the parameter `xyz` to ... ✅ | The parameter `xyz` is added to ... ❌ +- Be friendly and conversational, put yourself in the users shoes. + + This includes using contractions (don't instead of do not) or the use of please in rare cases. Write as if you'd explain sth to a friend. +- Use simple language. + + This sound easier than it is, but if you can put it in simpler words, it gets automatically clearer and more helpful. + +- Avoid emoticons and emojis. +- Do NOT remove TODO markers at all. +- Do NOT remove tip, warning or danger notes indicated by `... tip` or similar constructs. + +- Use present and avoid future tense! + +The documentation should follow the here described style guidance so that it keeps a consistent external and internal appearance: + +| Topic | Write | Don't Write | +|----------------------------------|----------------------------------|--------------------------------------------------------------------------------| +| Single quotes | isn't, or don't | isn’t, or don’t | +| The other single quote: ‘ | ' | ‘ | +| In-text, in-line, single quoting | \`assets\` (showing as `assets`) | \`\`assets\`\`, or \`\`\`assets\`\`\` (showing as ``assets``, or ```assets```) | +| JavaScript code snippets | \`\`\`js | \`\`\`javascript | +| Three dots | ... (good: 3 1-dot characters) | … (bad: 1 3-dot characters) | +| Long dash | --- (good: 3 single dashes) | —, —, – (bad: long-dash character, \— or \–) | + +| Terminology | Don't Write | +|-------------------------------------------------------------------------|-------------------------------| +| for example | e.g. 1 | +| GitHub | Github, github 2 | +| that is | i.e. 1 | +| Java | JAVA, java 2 | +| micro service | micro-service, microservice | +| modeling | modelling | +| multitarget | multi-target, multi target | +| multitenancy | multi-tenancy, multi tenancy | +| multitenant | multi-tenant, multi tenant | +| Node.js | node.js 2 | +| SAP BTP | SAP CP, CP | +| SAP HANA | HANA, Hana, hana 2 | +| SAP Software-as-a-Service Provisioning service | saas registry 2 | +| SQLite | SqLite, sqlite 2 | +| versus | vs. 1 | +| XSUAA | xsuaa 2 | + +1 Avoid latin abbreviations.
+2 Use the not recommended spelling only if you're clearly referring to some technical entity or process. + +To improve readability and translatability, avoid using modal verbs in your content. \ No newline at end of file From d47af0ea209ff3b9c34b7df4cbab18b700bd0e95 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Wed, 5 Nov 2025 10:00:42 +0100 Subject: [PATCH 018/439] improve prompt --- .github/workflows/ai-review.yml | 2 ++ .github/workflows/assets/editor.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index f090441316..1f0dd47037 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -32,3 +32,5 @@ jobs: - Ensure that the tone is appropriate for technical documentation, maintaining a professional and informative style. - Verify that the structure of the document is logical and that headings and subheadings are used effectively. - Check for consistency in terminology and style throughout the document. + - Use active voice instead of passive voice + - Use present tense and **avoid future tense**! diff --git a/.github/workflows/assets/editor.md b/.github/workflows/assets/editor.md index 3c49a0a655..635cc73b5a 100644 --- a/.github/workflows/assets/editor.md +++ b/.github/workflows/assets/editor.md @@ -41,11 +41,11 @@ There are a couple of aspects that are easy to consider when writing w/o digging This sound easier than it is, but if you can put it in simpler words, it gets automatically clearer and more helpful. +- Use present tense and **avoid future tense**! - Avoid emoticons and emojis. - Do NOT remove TODO markers at all. - Do NOT remove tip, warning or danger notes indicated by `... tip` or similar constructs. -- Use present and avoid future tense! The documentation should follow the here described style guidance so that it keeps a consistent external and internal appearance: From cf9379ff808616f99c3dc3576b244b5c273734e1 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Wed, 5 Nov 2025 12:15:41 +0100 Subject: [PATCH 019/439] restriction for suggestions --- .github/workflows/ai-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index 1f0dd47037..b0a77b3823 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -27,7 +27,7 @@ jobs: - As an AI bot reviewing documentation pull requests on GitHub, please focus on the following areas to ensure high-quality and effective documentation: - Check for spelling errors in English and provide corrections. - Identify and correct grammatical errors and incorrect punctuation. - - Provide suggestions for improving the clarity and conciseness of the text to make it more understandable. + - Provide suggestions for improving the clarity and conciseness of the text to make it more understandable. Restrict yourself to the 5 most important findings and create suggestions for them. - Consider the guidelines that can be found in .github/workflows/assets/editor.md and apply them. - Ensure that the tone is appropriate for technical documentation, maintaining a professional and informative style. - Verify that the structure of the document is logical and that headings and subheadings are used effectively. From 80342d8bb4d88a93faf7e8c7b8ec0891a2daf39e Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Wed, 5 Nov 2025 12:46:01 +0100 Subject: [PATCH 020/439] use us english --- .github/workflows/ai-review.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index b0a77b3823..6b22c4ff66 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -25,7 +25,8 @@ jobs: model-parameters: '{"temperature": 0.1}' prompt: | - As an AI bot reviewing documentation pull requests on GitHub, please focus on the following areas to ensure high-quality and effective documentation: - - Check for spelling errors in English and provide corrections. + - Use U.S. English spelling and punctuation. + - Check for spelling errors and provide corrections. - Identify and correct grammatical errors and incorrect punctuation. - Provide suggestions for improving the clarity and conciseness of the text to make it more understandable. Restrict yourself to the 5 most important findings and create suggestions for them. - Consider the guidelines that can be found in .github/workflows/assets/editor.md and apply them. From 5749749bdc45d8ac7d85926d16032c849e633896 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 14:56:02 +0100 Subject: [PATCH 021/439] chore: Update CLI texts (#2187) Updates the output of cds CLI texts to the latest version. Co-authored-by: chgeo <7470719+chgeo@users.noreply.github.com> --- tools/assets/help/cds-help.out.md | 4 ++-- tools/assets/help/cds-version-md.out.md | 8 ++++---- tools/assets/help/cds-version.out.md | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/tools/assets/help/cds-help.out.md b/tools/assets/help/cds-help.out.md index e7f753c2cb..805966d96d 100644 --- a/tools/assets/help/cds-help.out.md +++ b/tools/assets/help/cds-help.out.md @@ -30,10 +30,10 @@ | logout logout from extensible multitenant SaaS app | pull pull base model of extensible SaaS app | push push extension to extensible SaaS app - t | lint run linter for env or model checks + | lint run linter for env or model checks v | version get detailed version information | completion add/remove cli completion for cds commands - ? | help get detailed usage information + h | help get detailed usage information Learn more about each command using: cds help <command> or diff --git a/tools/assets/help/cds-version-md.out.md b/tools/assets/help/cds-version-md.out.md index d7b7b53f51..ee81e18db7 100644 --- a/tools/assets/help/cds-version-md.out.md +++ b/tools/assets/help/cds-version-md.out.md @@ -7,12 +7,12 @@ | @sap/cds | 9.4.4 | | @sap/cds-dk | -- missing -- | | @sap/cds-compiler | 6.4.6 | -| @sap/cds-dk (global) | 9.4.2 | -| @sap/cds-fiori | 2.1.0 | -| @sap/cds-mtxs | 3.4.2 | +| @sap/cds-dk (global) | 9.4.3 | +| @sap/cds-fiori | 2.1.1 | +| @sap/cds-mtxs | 3.4.3 | | @cap-js/asyncapi | 1.0.3 | | @cap-js/db-service | 2.6.0 | | @cap-js/openapi | 1.2.3 | | @cap-js/sqlite | 2.0.4 | -| Node.js | v22.20.0 | +| Node.js | v22.21.1 | diff --git a/tools/assets/help/cds-version.out.md b/tools/assets/help/cds-version.out.md index 51d6e28215..565c175459 100644 --- a/tools/assets/help/cds-version.out.md +++ b/tools/assets/help/cds-version.out.md @@ -5,12 +5,12 @@ @sap/cds: 9.4.4 @sap/cds-dk: undefined @sap/cds-compiler: 6.4.6 -@sap/cds-dk (global): 9.4.2 -@sap/cds-fiori: 2.1.0 -@sap/cds-mtxs: 3.4.2 +@sap/cds-dk (global): 9.4.3 +@sap/cds-fiori: 2.1.1 +@sap/cds-mtxs: 3.4.3 @cap-js/asyncapi: 1.0.3 @cap-js/db-service: 2.6.0 @cap-js/openapi: 1.2.3 @cap-js/sqlite: 2.0.4 -Node.js: v22.20.0 +Node.js: v22.21.1 From a73bfafe97ef0f6ae8fe2931aeec53e1c937565e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 11:16:01 +0100 Subject: [PATCH 022/439] chore(deps): update dependency cspell to v9.3.0 (#2189) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`9.2.2` -> `9.3.0`](https://renovatebot.com/diffs/npm/cspell/9.2.2/9.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/9.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.2.2/9.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
streetsidesoftware/cspell (cspell) ### [`v9.3.0`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#v930-2025-11-05) [Compare Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v9.2.2...v9.3.0) ##### Features
feat: Support loading `.ts` and `.mts` config files. (#​7961) ##### feat: Support loading `.ts` and `.mts` config files. ([#​7961](https://redirect.github.com/streetsidesoftware/cspell/pull/7961)) This PR add support to read TypeScript cspell config files. Note: TypeScript config files will fail to load when NodeJS version is less than `v22.18.0`. See: [Node.js — Running TypeScript Natively](https://nodejs.org/en/learn/typescript/run-natively) ***
##### Dictionary Updates
fix: Workflow Bot -- Update Dictionaries (main) (#​7950) ##### fix: Workflow Bot -- Update Dictionaries (main) ([#​7950](https://redirect.github.com/streetsidesoftware/cspell/pull/7950))
--- ### 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 | 312 +++++++++++++++++++++++----------------------- 1 file changed, 156 insertions(+), 156 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54ecbedcbc..07ea9199cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -371,30 +371,30 @@ } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.2.2.tgz", - "integrity": "sha512-W3FKgb89DwMuQEVWz0dPH9uZqC8w+ylpbtmXuevflw3SLtGPyllMvf/1T6tcqIkg3KEWoRYFxjpJWyoOjJkZGw==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.3.0.tgz", + "integrity": "sha512-rf5SAdg1EmgCBIo/zFEAIjydlO+VtVLR6oUVeD4rIE7zIPrPdJb0OMUGsxfOH7uePyhcfIxPYTjneQla0e5Ljw==", "dev": true, "license": "MIT", "dependencies": { "@cspell/dict-ada": "^4.1.1", "@cspell/dict-al": "^1.1.1", "@cspell/dict-aws": "^4.0.15", - "@cspell/dict-bash": "^4.2.1", - "@cspell/dict-companies": "^3.2.6", - "@cspell/dict-cpp": "^6.0.12", + "@cspell/dict-bash": "^4.2.2", + "@cspell/dict-companies": "^3.2.7", + "@cspell/dict-cpp": "^6.0.14", "@cspell/dict-cryptocurrencies": "^5.0.5", "@cspell/dict-csharp": "^4.0.7", "@cspell/dict-css": "^4.0.18", "@cspell/dict-dart": "^2.3.1", - "@cspell/dict-data-science": "^2.0.10", + "@cspell/dict-data-science": "^2.0.11", "@cspell/dict-django": "^4.1.5", "@cspell/dict-docker": "^1.1.16", "@cspell/dict-dotnet": "^5.0.10", "@cspell/dict-elixir": "^4.0.8", - "@cspell/dict-en_us": "^4.4.20", - "@cspell/dict-en-common-misspellings": "^2.1.6", - "@cspell/dict-en-gb-mit": "^3.1.10", + "@cspell/dict-en_us": "^4.4.24", + "@cspell/dict-en-common-misspellings": "^2.1.8", + "@cspell/dict-en-gb-mit": "^3.1.14", "@cspell/dict-filetypes": "^3.0.14", "@cspell/dict-flutter": "^1.1.1", "@cspell/dict-fonts": "^4.0.5", @@ -402,7 +402,7 @@ "@cspell/dict-fullstack": "^3.2.7", "@cspell/dict-gaming-terms": "^1.1.2", "@cspell/dict-git": "^3.0.7", - "@cspell/dict-golang": "^6.0.23", + "@cspell/dict-golang": "^6.0.24", "@cspell/dict-google": "^1.0.9", "@cspell/dict-haskell": "^4.0.6", "@cspell/dict-html": "^4.0.12", @@ -418,17 +418,17 @@ "@cspell/dict-markdown": "^2.0.12", "@cspell/dict-monkeyc": "^1.0.11", "@cspell/dict-node": "^5.0.8", - "@cspell/dict-npm": "^5.2.18", - "@cspell/dict-php": "^4.0.15", + "@cspell/dict-npm": "^5.2.20", + "@cspell/dict-php": "^4.1.0", "@cspell/dict-powershell": "^5.0.15", "@cspell/dict-public-licenses": "^2.0.15", - "@cspell/dict-python": "^4.2.20", + "@cspell/dict-python": "^4.2.21", "@cspell/dict-r": "^2.1.1", "@cspell/dict-ruby": "^5.0.9", "@cspell/dict-rust": "^4.0.12", "@cspell/dict-scala": "^5.0.8", - "@cspell/dict-shell": "^1.1.1", - "@cspell/dict-software-terms": "^5.1.9", + "@cspell/dict-shell": "^1.1.2", + "@cspell/dict-software-terms": "^5.1.11", "@cspell/dict-sql": "^2.2.1", "@cspell/dict-svelte": "^1.0.7", "@cspell/dict-swift": "^2.0.6", @@ -441,22 +441,22 @@ } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.2.2.tgz", - "integrity": "sha512-7nTqnnRCyQB+bTmIuBR4aRwV5JHymckmz1snCF+ItjDSvlc3qzjxldG8ao5zm34h+b/8YCvdMU9B92eHBt803w==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.3.0.tgz", + "integrity": "sha512-bvpLNS73/SN3969ksipVSYDdMYsxYZqeBDkcA2yKJZ9eHRY/tHUbjTTIvyvlCLODzUiop2RFGrvDPcjyam/FoQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "9.2.2" + "@cspell/cspell-types": "9.3.0" }, "engines": { "node": ">=20" } }, "node_modules/@cspell/cspell-pipe": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.2.2.tgz", - "integrity": "sha512-YOdbp1uoKMkYy92qxMjoOxcqcR6LEVDus+72C4X9L8eJ2b+CBO3VaVqU16Y7OQGjYMnukYgB6eyTh8YFo9uBRw==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.3.0.tgz", + "integrity": "sha512-LEl2TYvXnGk/D+Vjq5DBsNQuLsmn3/2QV9dxteK5e323pJRcpEosq76elzsYpVLuB3s1hp2pFQhppWk69Gx2CQ==", "dev": true, "license": "MIT", "engines": { @@ -464,9 +464,9 @@ } }, "node_modules/@cspell/cspell-resolver": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.2.2.tgz", - "integrity": "sha512-5tST2xoU8xbXihr1bdQ6pfcScQ3PkFpKKhFGClVfqS0yf/CKYURqzJlRDVjrFZsl+PT6tw/Jdt0E9Wwp1X1Qgw==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.3.0.tgz", + "integrity": "sha512-AOIC6xV2XuEWKy/K/CUBHQ7caavDnjb2zflP25j7fGMWpS/GIGKLPjgGQUHFbgNSSy9UY2ZGV7MVCsnD7moW5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -477,9 +477,9 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.2.2.tgz", - "integrity": "sha512-AxJuw/YPJkz1Ali5mA+OW9y4JiJzb2U7H4pGYq0nRB/mWwI/xtFjuWVkI+BhwrA2P6hHdifu0JdxSLqW4IYpPQ==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.3.0.tgz", + "integrity": "sha512-e9ZfG1VJ/kbzh2LBW/TJImEWcEUuBMYSDnIYbQCsclKAWyF3g8eLGxoX7xDbZ82USo4IU2tqYmrDvPcUD8CHxg==", "dev": true, "license": "MIT", "engines": { @@ -487,9 +487,9 @@ } }, "node_modules/@cspell/cspell-types": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.2.2.tgz", - "integrity": "sha512-/1dRFQ3sEY9Yo+f3w0A8MFJ0BOapQc1uFjlMF19c3uoD/e4PpNLpL1qXY4FeLWKDk1D9VT8SL93J+lIwEi5bvg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.3.0.tgz", + "integrity": "sha512-WN3R4nqQ7BEgS8UEoPIwNBRuSFT/8GImqXmlx7EHmzBAhevWjF3IDF+OEtokRJ95qik6a4xqJJTJgi624UxDFg==", "dev": true, "license": "MIT", "engines": { @@ -518,26 +518,26 @@ "license": "MIT" }, "node_modules/@cspell/dict-bash": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.1.tgz", - "integrity": "sha512-SBnzfAyEAZLI9KFS7DUG6Xc1vDFuLllY3jz0WHvmxe8/4xV3ufFE3fGxalTikc1VVeZgZmxYiABw4iGxVldYEg==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-bash/-/dict-bash-4.2.2.tgz", + "integrity": "sha512-kyWbwtX3TsCf5l49gGQIZkRLaB/P8g73GDRm41Zu8Mv51kjl2H7Au0TsEvHv7jzcsRLS6aUYaZv6Zsvk1fOz+Q==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/dict-shell": "1.1.1" + "@cspell/dict-shell": "1.1.2" } }, "node_modules/@cspell/dict-companies": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.6.tgz", - "integrity": "sha512-cVWBk4DSUOthCsgOsoB+5L5F1Wk8lWGHnw5de75YCKSjOEV8/6kskwwDrPTIHkoGVzpIzIIQ/OdXhYwa2G+16A==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.7.tgz", + "integrity": "sha512-fEyr3LmpFKTaD0LcRhB4lfW1AmULYBqzg4gWAV0dQCv06l+TsA+JQ+3pZJbUcoaZirtgsgT3dL3RUjmGPhUH0A==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-cpp": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.12.tgz", - "integrity": "sha512-N4NsCTttVpMqQEYbf0VQwCj6np+pJESov0WieCN7R/0aByz4+MXEiDieWWisaiVi8LbKzs1mEj4ZTw5K/6O2UQ==", + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-cpp/-/dict-cpp-6.0.14.tgz", + "integrity": "sha512-dkmpSwvVfVdtoZ4mW/CK2Ep1v8mJlp6uiKpMNbSMOdJl4kq28nQS4vKNIX3B2bJa0Ha5iHHu+1mNjiLeO3g7Xg==", "dev": true, "license": "MIT" }, @@ -571,9 +571,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-data-science": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.10.tgz", - "integrity": "sha512-vZSsz7845ugW6mY65966Ki2bMS/ZnAZoTVvpuXQ07a2rYxJhUC+6WuBMD80hFLlKwjC5T/5Llv4F/VlB00swpw==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.11.tgz", + "integrity": "sha512-Dt+83nVCcF+dQyvFSaZjCKt1H5KbsVJFtH2X7VUfmIzQu8xCnV1fUmkhBzGJ+NiFs99Oy9JA6I9EjeqExzXk7g==", "dev": true, "license": "MIT" }, @@ -606,23 +606,23 @@ "license": "MIT" }, "node_modules/@cspell/dict-en_us": { - "version": "4.4.20", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.20.tgz", - "integrity": "sha512-acAlX967bkrLwRhSJ8KGBCBUITMOe8+smwsShjei431vTB6tU5ZID6XDxR9hH/kDxfdiRTXAE8vkT3WJAHnc1Q==", + "version": "4.4.24", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.24.tgz", + "integrity": "sha512-JE+/H2YicHJTneRmgH4GSI21rS+1yGZVl1jfOQgl8iHLC+yTTMtCvueNDMK94CgJACzYAoCsQB70MqiFJJfjLQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.6.tgz", - "integrity": "sha512-xV9yryOqZizbSqxRS7kSVRrxVEyWHUqwdY56IuT7eAWGyTCJNmitXzXa4p+AnEbhL+AB2WLynGVSbNoUC3ceFA==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.8.tgz", + "integrity": "sha512-vDsjRFPQGuAADAiitf82z9Mz3DcqKZi6V5hPAEIFkLLKjFVBcjUsSq59SfL59ElIFb76MtBO0BLifdEbBj+DoQ==", "dev": true, "license": "CC BY-SA 4.0" }, "node_modules/@cspell/dict-en-gb-mit": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.10.tgz", - "integrity": "sha512-oFandL5N4B55wmOd0hOAoyaiUZBkClQ1FPCkcAY/HMuq6zeCQE/oEK9lLGDmnzLGgWnTT7wd0KOSYUPTxWQaNQ==", + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.14.tgz", + "integrity": "sha512-b+vEerlHP6rnNf30tmTJb7JZnOq4WAslYUvexOz/L3gDna9YJN3bAnwRJ3At3bdcOcMG7PTv3Pi+C73IR22lNg==", "dev": true, "license": "MIT" }, @@ -676,9 +676,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-golang": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.23.tgz", - "integrity": "sha512-oXqUh/9dDwcmVlfUF5bn3fYFqbUzC46lXFQmi5emB0vYsyQXdNWsqi6/yH3uE7bdRE21nP7Yo0mR1jjFNyLamg==", + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.24.tgz", + "integrity": "sha512-rY7PlC3MsHozmjrZWi0HQPUl0BVCV0+mwK0rnMT7pOIXqOe4tWCYMULDIsEk4F0gbIxb5badd2dkCPDYjLnDgA==", "dev": true, "license": "MIT" }, @@ -796,16 +796,16 @@ "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.18", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.18.tgz", - "integrity": "sha512-uJV1T7y9ifFysO22XmxjU7y95c+02lfCZHNsTYHw2KOL6tLjc3XK/i0xt9iGLkPpcxwNJSCdu13UpjXZGqce/Q==", + "version": "5.2.20", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.20.tgz", + "integrity": "sha512-tJRv1qEdW3f8fxK/D2huoqkSvM6ogz55hAt9RTdB7tZy57wio9Tkj+xfi2DIeOlmf6e94c6pNPZIC/o5rclMhw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-php": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.0.15.tgz", - "integrity": "sha512-iepGB2gtToMWSTvybesn4/lUp4LwXcEm0s8vasJLP76WWVkq1zYjmeS+WAIzNgsuURyZ/9mGqhS0CWMuo74ODw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-php/-/dict-php-4.1.0.tgz", + "integrity": "sha512-dTDeabyOj7eFvn2Q4Za3uVXM2+SzeFMqX8ly2P0XTo4AzbCmI2hulFD/QIADwWmwiRrInbbf8cxwFHNIYrXl4w==", "dev": true, "license": "MIT" }, @@ -824,13 +824,13 @@ "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.20", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.20.tgz", - "integrity": "sha512-c1wbfb3MDMSY4UTNdGnA18NkrcX6cMlYER0HSpGYh2jLK43gS1QL3j2B49qgnRYfcLUp4xgeA05vzCQsjGbwuQ==", + "version": "4.2.21", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.21.tgz", + "integrity": "sha512-M9OgwXWhpZqEZqKU2psB2DFsT8q5SwEahkQeIpNIRWIErjwG7I9yYhhfvPz6s5gMCMhhb3hqcPJTnmdgqGrQyg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/dict-data-science": "^2.0.10" + "@cspell/dict-data-science": "^2.0.11" } }, "node_modules/@cspell/dict-r": { @@ -862,16 +862,16 @@ "license": "MIT" }, "node_modules/@cspell/dict-shell": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.1.1.tgz", - "integrity": "sha512-T37oYxE7OV1x/1D4/13Y8JZGa1QgDCXV7AVt3HLXjn0Fe3TaNDvf5sU0fGnXKmBPqFFrHdpD3uutAQb1dlp15g==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-shell/-/dict-shell-1.1.2.tgz", + "integrity": "sha512-WqOUvnwcHK1X61wAfwyXq04cn7KYyskg90j4lLg3sGGKMW9Sq13hs91pqrjC44Q+lQLgCobrTkMDw9Wyl9nRFA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "5.1.9", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.9.tgz", - "integrity": "sha512-lpiSpS1iTF2n8barqVkPmhe5qXs5291IqcDUPr5ttFRxPMZ7pgrMUdvcdNUdkajymjDOyWfUNhdYXW7JndThZw==", + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.11.tgz", + "integrity": "sha512-xwARdlp6o81BK7uNl4qR5CmLBXuc9xWyEeEwzeAw/8SkBdYheVQO6F1Fey2iqMRDT9LAb5Znbg83pJVpLjgBjg==", "dev": true, "license": "MIT" }, @@ -919,13 +919,13 @@ "license": "MIT" }, "node_modules/@cspell/dynamic-import": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.2.2.tgz", - "integrity": "sha512-RHQLp0iYcWuK0MGiUBA6dgEOCdI29kZTiBRVcJM/Pzvhvs8j9pzBTkMesZAJ7XOSFz2kU+skRMBsFd774dmYTA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.3.0.tgz", + "integrity": "sha512-c+coQC+bM1PuHX/Blg1mp2ODPZmMnWzXrZwX/JKpnY0uxcAjUrcmGjdjsV1/S/7ph9OJHvZL5KITCRBgFD1Kqg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.2.2", + "@cspell/url": "9.3.0", "import-meta-resolve": "^4.2.0" }, "engines": { @@ -933,9 +933,9 @@ } }, "node_modules/@cspell/filetypes": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.2.2.tgz", - "integrity": "sha512-oM+cqipbZ4PNxQcKP9sKOeRKBG+oM3NKO3To1FyxYxvnUG7DukW2yH6BS0/GUY7qK+oSftuq5d6DXEAl9wzbEQ==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.3.0.tgz", + "integrity": "sha512-pH413zKkMd5lh40HyLNgYfTacIryxsHDhxWShyxS7M+8W9MPl+tmzIHlSEvEVcKUUe3Qpowxo6b6Xkg7taRp/A==", "dev": true, "license": "MIT", "engines": { @@ -943,9 +943,9 @@ } }, "node_modules/@cspell/strong-weak-map": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.2.2.tgz", - "integrity": "sha512-Z7rd7NwHaoH/d/Ds97Rv042WS9PgpVdqgO2X0ehYZmgj2E0LIq2MTkIJMheUrSn37D0PW/suroKh6hN15pJtpQ==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.3.0.tgz", + "integrity": "sha512-s8/QwCPWvWRXZsAzUbWzv/cgL0xjo7p+5QveThFmD3vODX3IlrC+MfnLpEWQAyTQ7CqB5bRuBVAR2cU9gpzZTA==", "dev": true, "license": "MIT", "engines": { @@ -953,9 +953,9 @@ } }, "node_modules/@cspell/url": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.2.2.tgz", - "integrity": "sha512-gvLprhrArvLP/rnC8b766dA80EXwBbzXqb9tNDRk1esQV7d3uS1Ftk1970MRlAfLg1pG6V+3C4UrB6WOB/rMCQ==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.3.0.tgz", + "integrity": "sha512-EY4Niv1apHP9RN1mMRP/AHm6xr14fhK+PXnytang6SVwX+tbAEYwwlnFjoEDO6ygPsqs5BBiQ4N7TiSlfmXfmw==", "dev": true, "license": "MIT", "engines": { @@ -3798,9 +3798,9 @@ } }, "node_modules/commander": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.1.tgz", - "integrity": "sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", + "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", "dev": true, "license": "MIT", "engines": { @@ -3908,26 +3908,26 @@ } }, "node_modules/cspell": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.2.2.tgz", - "integrity": "sha512-D9jxXlYWIxUw4IjicxrmK83n5BzuQVZaIhsDsfRiH7iP4F71gDtKR9b+UgmXevvseN7OH4LkdyaPKzjNliGAbg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.3.0.tgz", + "integrity": "sha512-YyXjOS3MAF6d0XggxHZtkyde6Yf0VgXkrFvR8C6jfxcnY0SJrJDKLiOppmm4ol+oWlvt1Dir1neGJW13xN+dUg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "9.2.2", - "@cspell/cspell-pipe": "9.2.2", - "@cspell/cspell-types": "9.2.2", - "@cspell/dynamic-import": "9.2.2", - "@cspell/url": "9.2.2", + "@cspell/cspell-json-reporter": "9.3.0", + "@cspell/cspell-pipe": "9.3.0", + "@cspell/cspell-types": "9.3.0", + "@cspell/dynamic-import": "9.3.0", + "@cspell/url": "9.3.0", "chalk": "^5.6.2", "chalk-template": "^1.1.2", - "commander": "^14.0.1", - "cspell-config-lib": "9.2.2", - "cspell-dictionary": "9.2.2", - "cspell-gitignore": "9.2.2", - "cspell-glob": "9.2.2", - "cspell-io": "9.2.2", - "cspell-lib": "9.2.2", + "commander": "^14.0.2", + "cspell-config-lib": "9.3.0", + "cspell-dictionary": "9.3.0", + "cspell-gitignore": "9.3.0", + "cspell-glob": "9.3.0", + "cspell-io": "9.3.0", + "cspell-lib": "9.3.0", "fast-json-stable-stringify": "^2.1.0", "flatted": "^3.3.3", "semver": "^7.7.3", @@ -3945,13 +3945,13 @@ } }, "node_modules/cspell-config-lib": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.2.2.tgz", - "integrity": "sha512-Fp3jdFxb5gxcQP146TfNVmDqXKfm3xmcEUr1K829DmAFwhc7s+/pCRjhBPoGfQt6U7ugpxjkSx2gGKSbLhp7Mg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.3.0.tgz", + "integrity": "sha512-YyKMBwRIo8Sh3D9roHWWpW9KnQCkeWOoPJkcLEA3q+UldspkqpjQ8A8bUvigLgVg4dBQosiEUdda3MUZT79Lyg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "9.2.2", + "@cspell/cspell-types": "9.3.0", "comment-json": "^4.4.1", "smol-toml": "^1.4.2", "yaml": "^2.8.1" @@ -3961,15 +3961,15 @@ } }, "node_modules/cspell-dictionary": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.2.2.tgz", - "integrity": "sha512-lnoCFoCAaiFJi+Hz22t+tdTj76jyTA76EYFKhmf/dbj5UO6kVy8by08uFfUbbMaC9Oi09YHnI62P/e+LBx1v8Q==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.3.0.tgz", + "integrity": "sha512-+gS59D0ly/UfTDsjKavWCDTSukmQ3HO0Xy+t4+pwgkVOa8kXzhERoXxT0V3v71TJS+kFRHfsWeGekfaVB4n2ng==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "9.2.2", - "@cspell/cspell-types": "9.2.2", - "cspell-trie-lib": "9.2.2", + "@cspell/cspell-pipe": "9.3.0", + "@cspell/cspell-types": "9.3.0", + "cspell-trie-lib": "9.3.0", "fast-equals": "^5.3.2" }, "engines": { @@ -3977,15 +3977,15 @@ } }, "node_modules/cspell-gitignore": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.2.2.tgz", - "integrity": "sha512-Idx3IVKTpnGoyRlkj8F/lSWtWiJpqLhXmZglTzfGWxzbik8E0aQmSyT3blbNWhZL/K1JqlTjbSiAICVMoWTkhA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.3.0.tgz", + "integrity": "sha512-AdI8WLKGNtTni1P+fbepDBh6u7Mv22diwtqMQoasDPeafArmQHpTp9gc8FgNnQO9tQASB7ZMjIOnLFNvmML+nw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.2.2", - "cspell-glob": "9.2.2", - "cspell-io": "9.2.2" + "@cspell/url": "9.3.0", + "cspell-glob": "9.3.0", + "cspell-io": "9.3.0" }, "bin": { "cspell-gitignore": "bin.mjs" @@ -3995,13 +3995,13 @@ } }, "node_modules/cspell-glob": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.2.2.tgz", - "integrity": "sha512-6mhUk4iLu5YzY9PE86ZyAjNFjM7TD8Oh4btJ7ZV+edzJjdVjFugXWyefPXCGNfuvpaJqpuoLDwMvNHJxUmLwbg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.3.0.tgz", + "integrity": "sha512-Mp1T4Y3utyIB5dgQk+XksdmS97il8TfFI9byMUR6Mprml/I+QglXj38bHX/++DeApfFHr+5y5DgqxmRn3/wnKA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.2.2", + "@cspell/url": "9.3.0", "picomatch": "^4.0.3" }, "engines": { @@ -4009,14 +4009,14 @@ } }, "node_modules/cspell-grammar": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.2.2.tgz", - "integrity": "sha512-m0aozo5gjZYL5Vm3/9D0/yLZJTsVJAP8VeRVljN4u5T7w+WY+LsnvKSZhnkOvsT3kCJDhcKEkMVkCo8d/7EcAQ==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.3.0.tgz", + "integrity": "sha512-X6VrCto78Xm72st+3YZ13qk5jw5sS9QOcS4x3KO41T90YoOMXbMsSH7HPaNrhqaa1rtEKk43kFQp33OLPvsI3Q==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "9.2.2", - "@cspell/cspell-types": "9.2.2" + "@cspell/cspell-pipe": "9.3.0", + "@cspell/cspell-types": "9.3.0" }, "bin": { "cspell-grammar": "bin.mjs" @@ -4026,41 +4026,41 @@ } }, "node_modules/cspell-io": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.2.2.tgz", - "integrity": "sha512-Rpky4woeB6/1VUCk7DtRm94A6c5XRbhcj5dUZh851EpZ0ItEz3S9+MhkX8g1sTVkDg6Hln1pu+Nbm9dFIpGkGA==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.3.0.tgz", + "integrity": "sha512-39Gp7asqdsrLvZ9L3BUXYX5wE6gAuvxeklguB4hjz+7i7Jhz02CcjFXDd1VhIA6tJ4hRTHWtgqaoaFv6qQF/vg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "9.2.2", - "@cspell/url": "9.2.2" + "@cspell/cspell-service-bus": "9.3.0", + "@cspell/url": "9.3.0" }, "engines": { "node": ">=20" } }, "node_modules/cspell-lib": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.2.2.tgz", - "integrity": "sha512-ksy+5vCSZz7ECUDlLA8ZGNEcWmnzl5bMe4IEPHAMaPFY3iWNsG7dXBrae1dj/b/3HqVqOdXPdwjnGAyZciissg==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.3.0.tgz", + "integrity": "sha512-MM71PponJHWn/tt93hYBSvBVeyivjWjaiROfQ4UlUGw7TIwysAyywH3XNYUnydaHcbjWTk7W12JbEVa8sQaBIQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-bundled-dicts": "9.2.2", - "@cspell/cspell-pipe": "9.2.2", - "@cspell/cspell-resolver": "9.2.2", - "@cspell/cspell-types": "9.2.2", - "@cspell/dynamic-import": "9.2.2", - "@cspell/filetypes": "9.2.2", - "@cspell/strong-weak-map": "9.2.2", - "@cspell/url": "9.2.2", + "@cspell/cspell-bundled-dicts": "9.3.0", + "@cspell/cspell-pipe": "9.3.0", + "@cspell/cspell-resolver": "9.3.0", + "@cspell/cspell-types": "9.3.0", + "@cspell/dynamic-import": "9.3.0", + "@cspell/filetypes": "9.3.0", + "@cspell/strong-weak-map": "9.3.0", + "@cspell/url": "9.3.0", "clear-module": "^4.1.2", - "cspell-config-lib": "9.2.2", - "cspell-dictionary": "9.2.2", - "cspell-glob": "9.2.2", - "cspell-grammar": "9.2.2", - "cspell-io": "9.2.2", - "cspell-trie-lib": "9.2.2", + "cspell-config-lib": "9.3.0", + "cspell-dictionary": "9.3.0", + "cspell-glob": "9.3.0", + "cspell-grammar": "9.3.0", + "cspell-io": "9.3.0", + "cspell-trie-lib": "9.3.0", "env-paths": "^3.0.0", "gensequence": "^7.0.0", "import-fresh": "^3.3.1", @@ -4074,14 +4074,14 @@ } }, "node_modules/cspell-trie-lib": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.2.2.tgz", - "integrity": "sha512-84L0Or6xkfnDMmxx2BtuaqsM4LOVCgnG4ZzMMgwQJU+9nSOAHs0ULNWQTHLbsCF+FFG/siILpUkIc3z+UxjGFw==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.3.0.tgz", + "integrity": "sha512-/hLujE3Gp36hhgJChvp6C3uJdBo5hGOqtyal6HjNmn+K27GXRrrn1L+5RoKaDMgFao9Ks5ccca9NtjQTw1EcoA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "9.2.2", - "@cspell/cspell-types": "9.2.2", + "@cspell/cspell-pipe": "9.3.0", + "@cspell/cspell-types": "9.3.0", "gensequence": "^7.0.0" }, "engines": { From 9b81e2acc85c6b56096c69555047c0f2c7cf5b28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Nov 2025 11:16:20 +0100 Subject: [PATCH 023/439] chore(deps): update eslint (#2185) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.46.2` -> `8.46.3`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.46.2/8.46.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.46.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.46.2/8.46.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [eslint](https://eslint.org) ([source](https://redirect.github.com/eslint/eslint)) | [`9.38.0` -> `9.39.1`](https://renovatebot.com/diffs/npm/eslint/9.38.0/9.39.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/9.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/9.38.0/9.39.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
typescript-eslint/typescript-eslint (@​typescript-eslint/parser) ### [`v8.46.3`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8463-2025-11-03) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.46.2...v8.46.3) This was a version bump only for parser to align it with other projects, there were no code changes. 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.1`](https://redirect.github.com/eslint/eslint/compare/v9.39.0...e2772811a8595d161870835ff04822b25a2cdf45) [Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.39.0...v9.39.1) ### [`v9.39.0`](https://redirect.github.com/eslint/eslint/compare/v9.38.0...ac3a60dffc29d8d4d5031621bc062e77f891532a) [Compare Source](https://redirect.github.com/eslint/eslint/compare/v9.38.0...v9.39.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. 👻 **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 | 110 +++++++++++++++++++++++----------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07ea9199cb..8fb60894b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1486,22 +1486,22 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.1.tgz", - "integrity": "sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.16.0" + "@eslint/core": "^0.17.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/core": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.16.0.tgz", - "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1560,9 +1560,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.38.0.tgz", - "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", "peer": true, @@ -1584,13 +1584,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz", - "integrity": "sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/core": "^0.16.0", + "@eslint/core": "^0.17.0", "levn": "^0.4.1" }, "engines": { @@ -2882,17 +2882,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/parser": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.2.tgz", - "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", + "version": "8.46.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.3.tgz", + "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.46.2", - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/typescript-estree": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2", + "@typescript-eslint/scope-manager": "8.46.3", + "@typescript-eslint/types": "8.46.3", + "@typescript-eslint/typescript-estree": "8.46.3", + "@typescript-eslint/visitor-keys": "8.46.3", "debug": "^4.3.4" }, "engines": { @@ -2908,14 +2908,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.2.tgz", - "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", + "version": "8.46.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.3.tgz", + "integrity": "sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.2", - "@typescript-eslint/types": "^8.46.2", + "@typescript-eslint/tsconfig-utils": "^8.46.3", + "@typescript-eslint/types": "^8.46.3", "debug": "^4.3.4" }, "engines": { @@ -2930,14 +2930,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.2.tgz", - "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", + "version": "8.46.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.3.tgz", + "integrity": "sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2" + "@typescript-eslint/types": "8.46.3", + "@typescript-eslint/visitor-keys": "8.46.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2948,9 +2948,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.2.tgz", - "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", + "version": "8.46.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.3.tgz", + "integrity": "sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==", "dev": true, "license": "MIT", "engines": { @@ -2965,9 +2965,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.2.tgz", - "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==", + "version": "8.46.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.3.tgz", + "integrity": "sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==", "dev": true, "license": "MIT", "engines": { @@ -2979,16 +2979,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.2.tgz", - "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", + "version": "8.46.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.3.tgz", + "integrity": "sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.2", - "@typescript-eslint/tsconfig-utils": "8.46.2", - "@typescript-eslint/types": "8.46.2", - "@typescript-eslint/visitor-keys": "8.46.2", + "@typescript-eslint/project-service": "8.46.3", + "@typescript-eslint/tsconfig-utils": "8.46.3", + "@typescript-eslint/types": "8.46.3", + "@typescript-eslint/visitor-keys": "8.46.3", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3008,13 +3008,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.2.tgz", - "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", + "version": "8.46.3", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.3.tgz", + "integrity": "sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.2", + "@typescript-eslint/types": "8.46.3", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -4395,9 +4395,9 @@ } }, "node_modules/eslint": { - "version": "9.38.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.38.0.tgz", - "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", "peer": true, @@ -4405,11 +4405,11 @@ "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", - "@eslint/config-helpers": "^0.4.1", - "@eslint/core": "^0.16.0", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.38.0", - "@eslint/plugin-kit": "^0.4.0", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", From e8f49225c2524d136ea2803b8e887d6fd95898d3 Mon Sep 17 00:00:00 2001 From: Simon Kobler <32038731+KoblerS@users.noreply.github.com> Date: Thu, 6 Nov 2025 11:22:17 +0100 Subject: [PATCH 024/439] Kyma documentation update (#2188) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: René Jeglinsky --- guides/deployment/to-kyma.md | 83 ++++++++++++-------------------- tools/apis/cds-add.md | 6 +-- tools/assets/help/cds-add.out.md | 13 +---- 3 files changed, 35 insertions(+), 67 deletions(-) diff --git a/guides/deployment/to-kyma.md b/guides/deployment/to-kyma.md index 3355fbe200..95396b3be8 100644 --- a/guides/deployment/to-kyma.md +++ b/guides/deployment/to-kyma.md @@ -68,7 +68,7 @@ Deploying apps on the SAP BTP Kyma Runtime requires two main artifact types: The following diagram illustrates the deployment workflow: -![A CAP Helm chart is added to your project. Then you build your project as container images and push those images to a container registry of your choice. As last step the Helm chart is deployed to your Kyma resources, where service instances of SAP BTP services are created and pods pull the previously created container images from the container registry.](assets/deploy-kyma.drawio.svg) +![A CAP Helm chart is added to your project. Then you build your project as container images and push those images to a container registry of your choice. As a last step the Helm chart is deployed to your Kyma cluster, where service instances of SAP BTP services are created and pods pull the previously created container images from the container registry.](assets/deploy-kyma.drawio.svg) ## Prerequisites {#prerequisites} @@ -79,9 +79,8 @@ The following diagram illustrates the deployment workflow: + Install [Docker Desktop or Docker for Linux](https://docs.docker.com/get-docker/) + Download and install the following command line tools: + [`kubectl` command line client](https://kubernetes.io/docs/tasks/tools/) for Kubernetes - + [`pack` command line tool](https://buildpacks.io/docs/tools/pack/) + + [`pack` command line tool](https://buildpacks.io/docs/for-platform-operators/how-to/integrate-ci/pack/) + [`helm` command line tool](https://helm.sh/docs/intro/install/) - + [`ctz` command line tool](https://www.npmjs.com/package/ctz) + Make sure your SAP HANA Cloud is [mapped to your namespace](https://community.sap.com/t5/technology-blogs-by-sap/consuming-sap-hana-cloud-from-the-kyma-environment/ba-p/13552718#toc-hId-569025164) + Ensure SAP HANA Cloud is accessible from your Kyma cluster by [configuring trusted source IPs](https://help.sap.com/docs/HANA_CLOUD/9ae9104a46f74a6583ce5182e7fb20cb/0610e4440c7643b48d869a6376ccaecd.html) @@ -96,34 +95,19 @@ Download the Kubernetes configuration from SAP BTP and move it to _$HOME/.kube/c SAP BTP doesn't provide a container image registry (or container repository), but you can choose from offerings of hosted open source and private container image registries, as well as solutions that can be run on premise or in your own cloud infrastructure. ::: tip Ensure network access - Verify the Kubernetes cluster has network access to the container registry, especially if hosted behind a VPN or within a restricted network environment. - ::: #### Set Up Your Cluster for a Private Container Registry To use a docker image from a private repository, you need to [create an image pull secret](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/) and configure this secret for your containers. -::: details Use this script to create the docker pull secret... - -```sh -echo -n "Your docker registry server: "; read YOUR_REGISTRY -echo -n "Your user: "; read YOUR_USER -echo -n "Your email: "; read YOUR_EMAIL -echo -n "Your API token: "; read -s YOUR_API_TOKEN -kubectl create secret docker-registry \ - docker-registry \ - "--docker-server=$YOUR_REGISTRY" \ - "--docker-username=$YOUR_USER" \ - "--docker-password=$YOUR_API_TOKEN" \ - "--docker-email=$YOUR_EMAIL" -# The 2nd 'docker-registry' above is our default secret name. -``` +:::info Interactive setup +If a pull secret does not exist for your namespace when deploying your application, the CLI will prompt you to set up the pull secret interactively. ::: ::: warning Assign limited permissions to the technical user -It is recommended to use a technical user for this secret that has only read permission, because users with access to the Kubernetes cluster can reveal the password from the secret. +For this secret, use a technical user with read-only permissions. This limits the risk, as anyone with access to the Kubernetes cluster could retrieve the password from the secret and potentially modify or publish images to the registry. ::: @@ -166,9 +150,9 @@ cds add workzone CAP provides a configurable [Helm chart](https://helm.sh/) for Node.js and Java applications, which can be added like so: ```sh -cds add helm +cds add kyma ``` -> You will be asked to provide a Kyma domain, the secret name to pull images and your container registry name. +> You will be asked to provide a Kyma cluster domain and your container registry name. ::: details Running `cds build` now creates a _gen_/_chart_ folder @@ -184,27 +168,38 @@ They support the deployment of your CAP service, database, UI content, and the c You can now quickly deploy the application like so: ```sh -cds up -2 k8s +cds up -2 k8s [ -n ] ``` ::: details Essentially, this automates the following steps... ```zsh -cds add helm,containerize # if not already done +cds add kyma # if not already done # Installing app dependencies, e.g. -npm i app/browse + +# If package-lock.json doesn't exist +npm install --prefix app/browse + +npm run build --prefix app/browse + +# If package-lock.json doesn't exist npm i app/admin-books +npm run build --prefix app/admin-books + # If project is multitenant npm i --package-lock-only mtx/sidecar # If package-lock.json doesn't exist npm i --package-lock-only +# Buildpack commands +pack build bookshop-srv:latest --path gen/srv --builder builder-jammy-base --env BP_NODE_RUN_SCRIPTS="" +pack build bookshop-html5-deployer:latest --path app/html5-deployer --builder builder-jammy-base --env BP_NODE_RUN_SCRIPTS="" + # Final assembly and deployment, e.g. -ctz containerize.yaml --log --push -helm upgrade --install bookshop ./gen/chart --wait --wait-for-jobs --set-file xsuaa.jsonParameters=xs-security.json +helm upgrade --install bookshop ./gen/chart --namespace bookshop --wait --wait-for-jobs --timeout=10m kubectl rollout status deployment bookshop-srv --timeout=8m kubectl rollout status deployment bookshop-approuter --timeout=8m kubectl rollout status deployment bookshop-sidecar --timeout=8m @@ -212,6 +207,8 @@ kubectl rollout status deployment bookshop-sidecar --timeout=8m ::: +_This command uses checksums to detect changes in your code. If any modifications are found, it automatically triggers a rebuild. The checksums are reflected in the Docker image tags._ + This process can take a few minutes to complete and logs output like this: ```log @@ -257,24 +254,13 @@ Specify the repository where you want to push the images: ... repository: ``` - ::: -Now, we use the `ctz` build tool to build all the images: - -```sh -ctz containerize.yaml -``` - -This will start containerizing your modules based on the configuration in _containerize.yaml_. After finishing, it will ask whether you want to push the images or not. Type `y` and press enter to push your images. You can also use the above command with `--push` flag to auto-confirm. If you want more logs, you can use the `--log` flag with the above command. - -[Learn more about the `ctz` build tool.](https://www.npmjs.com/package/ctz/){.learn-more style="margin-top:10px"} - ### Customize Helm Chart {#customize-helm-chart} #### About CAP Helm Charts {#about-cap-helm} -The following files are added to a _chart_ folder by executing `cds add helm`: +The following files are added to a _chart_ folder by executing `cds add kyma`: ```zsh chart/ @@ -323,7 +309,7 @@ imagePullSecret: # Kubernetes cluster ingress domain (used for application URLs) domain: -# Container image registry +# Container image registry where to pull the image from image: registry: ``` @@ -494,13 +480,6 @@ parametersFrom: ``` ::: -The `jsonParameters` key can also be specified using the `--set file` flag while installing/upgrading Helm release. For example, `jsonParameters` for the `xsuaa` property can be defined using the following command: - -```sh -helm install bookshop ./chart \ - --set-file xsuaa.jsonParameters=xs-security.json -``` - > You can explore more configuration options in the subchart's directory _gen/chart/charts/service-instance_. #### Configuration Options for Service Bindings @@ -573,18 +552,18 @@ srv: # Key is the target service, e.g. 'srv' Modifying the Helm chart allows you to customize it to your needs. However, this has consequences if you want to update with the latest changes from the CAP template. -You can run `cds add helm` again to update your Helm chart. It has the following behavior for modified files: +You can run `cds add kyma` again to update your Helm chart. It has the following behavior for modified files: -1. Your changes of the _chart/values.yaml_ and _chart/Chart.yaml_ will not be modified. Only new or missing properties will be added by `cds add helm`. +1. Your changes of the _chart/values.yaml_ and _chart/Chart.yaml_ will not be modified. Only new or missing properties will be added by `cds add kyma`. 2. To modify any of the generated files such as templates or subcharts, copy the files from _gen/chart_ folder and place it in the same level inside the _chart_ folder. After the next `cds build` executions the generated chart will have the modified files. 3. If you want to have some custom files such as templates or subcharts, you can place them in the _chart_ folder at the same level where you want them to be in _gen/chart_ folder. They will be copied as is. ### Extend -Instead of modifying consider extending the CAP Helm chart. Just make sure adding new files to the Helm chart does not conflict with `cds add helm`. +Instead of modifying consider extending the CAP Helm chart. Just make sure adding new files to the Helm chart does not conflict with `cds add kyma`. ::: tip Consider Kustomize -A modification-free approach to change files is to use [Kustomize](https://kustomize.io/) as a [post-processor](https://helm.sh/docs/topics/advanced/#post-rendering) for your Helm chart. This might be usable for small changes if you don't want to branch-out from the generated `cds add helm` content. +A modification-free approach to change files is to use [Kustomize](https://kustomize.io/) as a [post-processor](https://helm.sh/docs/topics/advanced/#post-rendering) for your Helm chart. This might be usable for small changes if you don't want to branch-out from the generated `cds add kyma` content. ::: diff --git a/tools/apis/cds-add.md b/tools/apis/cds-add.md index 36da62a727..cb9d114f6d 100644 --- a/tools/apis/cds-add.md +++ b/tools/apis/cds-add.md @@ -83,7 +83,7 @@ Our `cds add postgres` will: 1. Register with `cds-dk` 2. Add a Dockerfile to start a PostgreSQL instance for development 3. Integrate with `cds add mta` for [Cloud Foundry](../../guides/deployment/to-cf) deployment -4. Integrate with `cds add helm` for [Kyma](../../guides/deployment/to-kyma) deployment +4. Integrate with `cds add kyma` for [Kyma](../../guides/deployment/to-kyma) deployment 5. Integrate with `cds help` Starting with 1, register the plugin: @@ -208,7 +208,7 @@ resources: # [!code ++] ``` ::: -Step 4 integrates with `cds add helm`: +Step 4 integrates with `cds add kyma`: ::: code-group ```js [lib/add.js] @@ -255,7 +255,7 @@ postgres: # [!code ++] ::: ::: tip Common integrations -Typically integrations are for deployment descriptors (`cds add mta` and `cds add helm`), security descriptors (`cds add xsuaa`), or changes that might impact your plugin configuration (`cds add multitenancy`). +Typically integrations are for deployment descriptors (`cds add mta` and `cds add kyma`), security descriptors (`cds add xsuaa`), or changes that might impact your plugin configuration (`cds add multitenancy`). ::: For step 5 we'll add some command-specific options to let users override the output path for the `pg.yaml` file when running `cds add postgres --out `: diff --git a/tools/assets/help/cds-add.out.md b/tools/assets/help/cds-add.out.md index 1fe04d8b36..a465c5e670 100644 --- a/tools/assets/help/cds-add.out.md +++ b/tools/assets/help/cds-add.out.md @@ -16,10 +16,7 @@ extension - extension project mta - Cloud Foundry deployment using mta.yaml cf-manifest - Cloud Foundry deployment using manifest files - helm - Kyma deployment using Helm charts - helm-unified-runtime - Kyma deployment using Unified Runtime Helm charts - containerize - containerization using ctz CLI - kyma - helm + containerize + kyma - Kyma deployment using Helm charts tiny-sample - minimal sample files sample - sample files including Fiori UI handler - handler stubs for service entities, actions and functions @@ -165,14 +162,6 @@ Custom output directory. For Java, the default is 'handlers'. For Node.js, the default is 'srv'. - - cds add helm - - --y - - If provided, the default values will be used for all prompts. - - cds add http --filter | -f From 4d40af8377265e92ecee12175a3f3df106c8453b Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 6 Nov 2025 14:13:40 +0100 Subject: [PATCH 025/439] enhance with acrolinx check --- .github/workflows/ai-review.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index 6b22c4ff66..baa1c52a59 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -35,3 +35,14 @@ jobs: - Check for consistency in terminology and style throughout the document. - Use active voice instead of passive voice - Use present tense and **avoid future tense**! + analyze: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run Custom Analysis + uses: acrolinx/nextgen-analyzer@v0.0.6 + with: + acrolinx_token: ${{ secrets.ACROLINX_KEY }} + github_token: ${{ secrets.GITHUB_TOKEN }} + style-guide: 'chicago' + add_commit_status: 'true' \ No newline at end of file From c1dddc78e8d607162335a865817f79cd88eb6409 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 6 Nov 2025 14:32:02 +0100 Subject: [PATCH 026/439] move acrolinx check out of ai review --- .github/workflows/PR-SAP.yml | 11 +++++++++++ .github/workflows/ai-review.yml | 13 +------------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/PR-SAP.yml b/.github/workflows/PR-SAP.yml index 316e90d111..8369320224 100644 --- a/.github/workflows/PR-SAP.yml +++ b/.github/workflows/PR-SAP.yml @@ -57,3 +57,14 @@ jobs: npm run docs:preview -- --port 5555 & sleep 2 .github/etc/blc.js http://localhost:5555/docs/ + analyze: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run Custom Analysis + uses: acrolinx/nextgen-analyzer@v0.0.6 + with: + acrolinx_token: ${{ secrets.ACROLINX_KEY }} + github_token: ${{ secrets.GITHUB_TOKEN }} + style-guide: 'chicago' + add_commit_status: 'true' \ No newline at end of file diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index baa1c52a59..dfe9b01dc2 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -34,15 +34,4 @@ jobs: - Verify that the structure of the document is logical and that headings and subheadings are used effectively. - Check for consistency in terminology and style throughout the document. - Use active voice instead of passive voice - - Use present tense and **avoid future tense**! - analyze: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Run Custom Analysis - uses: acrolinx/nextgen-analyzer@v0.0.6 - with: - acrolinx_token: ${{ secrets.ACROLINX_KEY }} - github_token: ${{ secrets.GITHUB_TOKEN }} - style-guide: 'chicago' - add_commit_status: 'true' \ No newline at end of file + - Use present tense and **avoid future tense**! \ No newline at end of file From 24e056b17569b09362c64c8645189a526d51d440 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 6 Nov 2025 14:50:39 +0100 Subject: [PATCH 027/439] adapt permissions --- .github/workflows/PR-SAP.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/PR-SAP.yml b/.github/workflows/PR-SAP.yml index 8369320224..0e17d90dba 100644 --- a/.github/workflows/PR-SAP.yml +++ b/.github/workflows/PR-SAP.yml @@ -63,6 +63,9 @@ jobs: - uses: actions/checkout@v4 - name: Run Custom Analysis uses: acrolinx/nextgen-analyzer@v0.0.6 + permissions: + pull-requests: write + statuses: write with: acrolinx_token: ${{ secrets.ACROLINX_KEY }} github_token: ${{ secrets.GITHUB_TOKEN }} From 455c81d8b0a6e6deec1ec36b8d9069e05147e58a Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 6 Nov 2025 14:57:57 +0100 Subject: [PATCH 028/439] move permissions --- .github/workflows/PR-SAP.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/PR-SAP.yml b/.github/workflows/PR-SAP.yml index 0e17d90dba..0de99e5737 100644 --- a/.github/workflows/PR-SAP.yml +++ b/.github/workflows/PR-SAP.yml @@ -59,13 +59,13 @@ jobs: .github/etc/blc.js http://localhost:5555/docs/ analyze: runs-on: ubuntu-latest + permissions: + pull-requests: write + statuses: write steps: - uses: actions/checkout@v4 - name: Run Custom Analysis uses: acrolinx/nextgen-analyzer@v0.0.6 - permissions: - pull-requests: write - statuses: write with: acrolinx_token: ${{ secrets.ACROLINX_KEY }} github_token: ${{ secrets.GITHUB_TOKEN }} From 327b90c593ce6474c142ac8c8e8367b712d0d76c Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 6 Nov 2025 15:02:44 +0100 Subject: [PATCH 029/439] update version of nextgen-analyzer --- .github/workflows/PR-SAP.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/PR-SAP.yml b/.github/workflows/PR-SAP.yml index 0de99e5737..f56860411f 100644 --- a/.github/workflows/PR-SAP.yml +++ b/.github/workflows/PR-SAP.yml @@ -65,7 +65,7 @@ jobs: steps: - uses: actions/checkout@v4 - name: Run Custom Analysis - uses: acrolinx/nextgen-analyzer@v0.0.6 + uses: acrolinx/nextgen-analyzer@v0.0.7 with: acrolinx_token: ${{ secrets.ACROLINX_KEY }} github_token: ${{ secrets.GITHUB_TOKEN }} From 0fd12d5c8e6e6d7aa2def5b1653e02769050f605 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 7 Nov 2025 09:46:58 +0100 Subject: [PATCH 030/439] enhance permission and bump version --- .github/workflows/PR-SAP.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/PR-SAP.yml b/.github/workflows/PR-SAP.yml index f56860411f..0547e3f285 100644 --- a/.github/workflows/PR-SAP.yml +++ b/.github/workflows/PR-SAP.yml @@ -60,10 +60,11 @@ jobs: analyze: runs-on: ubuntu-latest permissions: + contents: write pull-requests: write statuses: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Run Custom Analysis uses: acrolinx/nextgen-analyzer@v0.0.7 with: From a14e211c82ad2e5e4e0aac948aef848660397c4c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Nov 2025 10:23:19 +0100 Subject: [PATCH 031/439] chore(deps): update cap java sdk to v4.4.2 (#2191) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [com.sap.cds:cds-services-api](https://cap.cloud.sap/docs/java) | `4.4.1` -> `4.4.2` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.sap.cds:cds-services-api/4.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.sap.cds:cds-services-api/4.4.1/4.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [com.sap.cds:cds4j-api](http://www.sap.com) ([source](https://cap.cloud.sap/docs/java/)) | `4.4.1` -> `4.4.2` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.sap.cds:cds4j-api/4.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.sap.cds:cds4j-api/4.4.1/4.4.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### 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> --- .vitepress/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index a04d68f67b..b7942c106d 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -106,8 +106,8 @@ config.rewrites = rewrites // Add custom capire info to the theme config config.themeConfig.capire = { versions: { - java_services: '4.4.1', - java_cds4j: '4.4.1' + java_services: '4.4.2', + java_cds4j: '4.4.2' }, gotoLinks: [] } From bfed019db4fced676f29b2415b5b29d7a15baad9 Mon Sep 17 00:00:00 2001 From: Olena Date: Fri, 7 Nov 2025 11:05:58 +0100 Subject: [PATCH 032/439] node.js: Change 'code' to 'status' in req.reject() examples (#2190) --- node.js/events.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/node.js/events.md b/node.js/events.md index 8fdb54101b..55451b544b 100644 --- a/node.js/events.md +++ b/node.js/events.md @@ -482,7 +482,7 @@ This is a convenience variant of the [`req.reject()`](#req-reject) method, with ```tsx function req.reject ( - code? : number, + status? : number, message? : string, target? : string, args? : string[] From c87f0d0709e96c472b35309248fc1063e81d8d3f Mon Sep 17 00:00:00 2001 From: DJ Adams Date: Mon, 10 Nov 2025 09:35:15 +0000 Subject: [PATCH 033/439] Minor fixes in CDL Language Preliminaries (#2195) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Working through this section to learn more, I came across a few places that might benefit from very minor improvements. Thanks! - 24:59:59 is just wishful thinking :) - remove duplicated paragraph - add tip about made-up annotations in example - clarify ref to prev model - make comma spacing consistent --------- Co-authored-by: René Jeglinsky --- cds/cdl.md | 12 ++++++++---- cds/types.md | 4 +--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/cds/cdl.md b/cds/cdl.md index 4d10803e71..278deb9b1f 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -41,7 +41,7 @@ The *Conceptual Definition Language (CDL)* is a human-readable language for defi ```cds namespace capire.bookshop; -using { managed, cuid } from `@sap/cds/common`; +using { managed, cuid } from '@sap/cds/common'; aspect primary : managed, cuid {} entity Books : primary { @@ -85,7 +85,7 @@ The following literals can be used in CDL (mostly as in JavaScript, Java, and SQ ```cds true , false , null // as in all common languages -11 , 2.4 , 1e3, 1.23e-11 // for numbers +11 , 2.4 , 1e3 , 1.23e-11 // for numbers 'A string''s literal' // for strings `A string\n paragraph` // for strings with escape sequences { foo:'boo', bar:'car' } // for records @@ -130,6 +130,10 @@ entity DocumentedEntity { } ``` +::: tip +These annotations are illustrative only and are not defined nor have any meaning beyond this example. +::: + Within those strings, escape sequences from JavaScript, such as `\t` or `\u0020`, are supported. Line endings are normalized. If you don't want a line ending at that position, end a line with a backslash (`\`). For string literals inside triple backticks, indentation is stripped and tagging is possible. @@ -238,7 +242,7 @@ context scoped { You can define types and entities with other definitions' names as prefixes: -```cds +```cds [prefixes.cds] namespace foo.bar; entity Foo {} //> foo.bar.Foo entity Foo.Bar {} //> foo.bar.Foo.Bar @@ -248,7 +252,7 @@ type Foo.Bar.Car {} //> foo.bar.Foo.Bar.Car #### Fully Qualified Names -A model ultimately is a collection of definitions with unique, fully qualified names. For example, the second model above would compile to this [CSN](./csn): +A model ultimately is a collection of definitions with unique, fully qualified names. For example, the model in `contexts.cds` would compile to the following [CSN](./csn): ::: code-group diff --git a/cds/types.md b/cds/types.md index 7c5aeac693..57c3704390 100644 --- a/cds/types.md +++ b/cds/types.md @@ -36,7 +36,7 @@ These types are used to define the structure of entities and services, and are m | `Decimal` (`prec`, `scale`) | A *decfloat* type is used if arguments are omitted | _DECIMAL_ | | `Double` | Floating point with binary mantissa | _DOUBLE_ | | `Date` | e.g. `2022-12-31` | _DATE_ | -| `Time` | e.g. `24:59:59` | _TIME_ | +| `Time` | e.g. `23:59:59` | _TIME_ | | `DateTime` | _sec_ precision | _TIMESTAMP_ | | `Timestamp` | _µs_ precision, with up to 7 fractional digits | _TIMESTAMP_ | | `String` (`length`) | Default *length*: 255; on HANA: 5000 (4)(5) | _NVARCHAR_ | @@ -46,8 +46,6 @@ These types are used to define the structure of entities and services, and are m | `Map` | Mapped to *NCLOB* for HANA. | *JSON* type | | `Vector` (`dimension `) | Requires SAP HANA Cloud QRC 1/2024, or later | _REAL_VECTOR_ | -These types are used to define the structure of entities and services, and are mapped to respective database types when the model is deployed. - > (1) Concrete mappings to specific databases may differ. > > (2) See also [Best Practices](../guides/domain-modeling#don-t-interpret-uuids). From 93f50e0ae1aab2e33cf766bb04974f4f1ff1ea7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20G=C3=B6rler?= Date: Mon, 10 Nov 2025 10:36:40 +0100 Subject: [PATCH 034/439] Remove restrictions for UInt8 (#2193) Remove restrictions for cds.UInt8 --- java/cqn-services/persistence-services.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/java/cqn-services/persistence-services.md b/java/cqn-services/persistence-services.md index ec2c0250f6..9c84de9a0c 100644 --- a/java/cqn-services/persistence-services.md +++ b/java/cqn-services/persistence-services.md @@ -50,8 +50,7 @@ CAP Java SDK is tested on [PostgreSQL](https://www.postgresql.org/) 15 and suppo 1. No locale specific sorting. The sort order of queries behaves as configured on the database. 2. Write operations through CDS views are only supported for views that can be [resolved](../working-with-cql/query-execution#updatable-views) or are [updatable](https://www.postgresql.org/docs/14/sql-createview.html#SQL-CREATEVIEW-UPDATABLE-VIEWS) in PostgreSQL. -3. The CDS type `UInt8` can't be used with PostgreSQL, as there's no `TINYINT`. Use `Int16` instead. -4. [Multitenancy](../../guides/multitenancy/) and [extensibility](../../guides/extensibility/) aren't yet supported on PostgreSQL. +3. [Multitenancy](../../guides/multitenancy/) and [extensibility](../../guides/extensibility/) aren't yet supported on PostgreSQL. ### H2 Database @@ -62,8 +61,7 @@ CAP Java SDK is tested on [PostgreSQL](https://www.postgresql.org/) 15 and suppo 3. By default, views aren't updatable on H2. However, the CAP Java SDK supports some views to be updatable as described [here](../working-with-cql/query-execution#updatable-views). 4. Although referential and foreign key constraints are supported, H2 [doesn't support deferred checking](https://www.h2database.com/html/grammar.html#referential_action). As a consequence, schema SQL is never generated with referential constraints. 5. In [pessimistic locking](../working-with-cql/query-execution#pessimistic-locking), _shared_ locks are not supported but an _exclusive_ lock is used instead. -6. The CDS type `UInt8` can't be used with H2, as there is no `TINYINT`. Use `Int16` instead. -7. For regular expressions, H2's implementation is compatible with Java's: the matching behaviour is an equivalent of the `Matcher.find()` call for the given pattern. +6. For regular expressions, H2's implementation is compatible with Java's: the matching behaviour is an equivalent of the `Matcher.find()` call for the given pattern. ::: warning Support for localized and temporal data via session context variables requires H2 v2.2.x or later. From 7969a02487d35f651adbd0ed50cf7955e4adfab9 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 11 Nov 2025 14:46:42 +0100 Subject: [PATCH 035/439] Custom key delimiters in config inspector --- .vitepress/theme/components/ConfigInspect.vue | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.vitepress/theme/components/ConfigInspect.vue b/.vitepress/theme/components/ConfigInspect.vue index 48520cb0be..5854f2dc0f 100644 --- a/.vitepress/theme/components/ConfigInspect.vue +++ b/.vitepress/theme/components/ConfigInspect.vue @@ -36,12 +36,13 @@ import FloatingVue from 'floating-vue' import yaml from 'yaml' - const { java, keyOnly, filesOnly, showPrivate, label:labelProp } = defineProps<{ + const { java, keyOnly, filesOnly, showPrivate, label:labelProp, keyDelim } = defineProps<{ java?: boolean, keyOnly?: boolean, filesOnly?: boolean, showPrivate?: boolean, - label?: string + label?: string, + keyDelim?: string }>() // sub component that renders code blocks similar to the markdown `::: code-block` syntax @@ -85,6 +86,7 @@ const [key, val] = slotVal.split(/\s*[:=]\s*(.*)/) // split on first `:` or `=` const label = labelProp || `${keyOnly ? key: slotVal}` + const keyDel = keyDelim ?? '.' const cfgKey = ref() const popperVisible = ref(false) @@ -114,25 +116,25 @@ let jsonVal if (typeof value === 'string' && value.trim().match(/^[[{].*[\]}]$/)) { try { jsonVal = JSON.parse(value) } catch {/*ignore*/ } } - const pkg = toJson(key, jsonVal ?? value) + const pkg = toJson(key, jsonVal ?? value, keyDel) pkgStr.value = JSON.stringify(pkg, null, 2) rcJsonStr.value = JSON.stringify(pkg.cds??{}, null, 2) rcJsStr.value = 'module.exports = ' + rcJsonStr.value.replace(/"(\w*?)":/g, '$1:') rcYmlStr.value = yaml.stringify(pkg.cds) - propStr.value = `${key}=${jsonVal ? JSON.stringify(jsonVal) : value}` - let envKey = key.replaceAll('_', '__').replaceAll('.', '_') + let envKey = key.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}` javaAppyml.value = yaml.stringify(pkg) javaEnvStr.value = `-D${propStr.value}` }) -function toJson(key:string, value:string): Record { +function toJson(key:string, value:string, delim:string): Record { let res = {} - const parts = key.split('.') + const parts = key.split(delim) parts.reduce((r:Record, a, i) => { r[a] = r[a] || (i < parts.length-1 ? {} : value) return r[a]; From c25aeb08fb071825e23392cabc709d1c5372ca73 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 11 Nov 2025 15:18:20 +0100 Subject: [PATCH 036/439] Make log blocks draw over outline --- .vitepress/theme/styles.scss | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.vitepress/theme/styles.scss b/.vitepress/theme/styles.scss index 29c198e614..5a207a9733 100644 --- a/.vitepress/theme/styles.scss +++ b/.vitepress/theme/styles.scss @@ -115,11 +115,11 @@ main { // Custom list styles for nested items ul { list-style-type: disc; // First level: filled circle - + ul { list-style-type: circle; // Second level: empty circle - - + + ul { list-style-type: square; // Third level: square } @@ -551,15 +551,14 @@ html.node { pre.log:focus { min-width: fit-content; padding-right: 40px; - z-index: 1; // draw over outline + z-index: 1; position: relative; // draw over outline } table:hover, table:focus { min-width: fit-content; } - tr { // make wide rows go over outline, not below it - z-index: 1; - position: relative; + tr { + z-index: 1; position: relative; // draw wide rows over outline } [class*='language-'] pre { overflow: hidden !important; From 543e48f7e2baa0883ec46fe95734eca4f89efaae Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 21:03:18 +0100 Subject: [PATCH 037/439] chore(deps): update dependency @typescript-eslint/parser to v8.46.4 (#2198) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.46.3` -> `8.46.4`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.46.3/8.46.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.46.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.46.3/8.46.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
typescript-eslint/typescript-eslint (@​typescript-eslint/parser) ### [`v8.46.4`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8464-2025-11-10) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.46.3...v8.46.4) This was a version bump only for parser to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
--- ### 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 | 68 +++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8fb60894b1..7d4e7278bc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2882,17 +2882,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/parser": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.3.tgz", - "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.4.tgz", + "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.46.3", - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/typescript-estree": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", "debug": "^4.3.4" }, "engines": { @@ -2908,14 +2908,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.3.tgz", - "integrity": "sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.4.tgz", + "integrity": "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.3", - "@typescript-eslint/types": "^8.46.3", + "@typescript-eslint/tsconfig-utils": "^8.46.4", + "@typescript-eslint/types": "^8.46.4", "debug": "^4.3.4" }, "engines": { @@ -2930,14 +2930,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.3.tgz", - "integrity": "sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", + "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3" + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2948,9 +2948,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.3.tgz", - "integrity": "sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz", + "integrity": "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==", "dev": true, "license": "MIT", "engines": { @@ -2965,9 +2965,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.3.tgz", - "integrity": "sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", + "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", "dev": true, "license": "MIT", "engines": { @@ -2979,16 +2979,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.3.tgz", - "integrity": "sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", + "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.3", - "@typescript-eslint/tsconfig-utils": "8.46.3", - "@typescript-eslint/types": "8.46.3", - "@typescript-eslint/visitor-keys": "8.46.3", + "@typescript-eslint/project-service": "8.46.4", + "@typescript-eslint/tsconfig-utils": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3008,13 +3008,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.3.tgz", - "integrity": "sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", + "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.3", + "@typescript-eslint/types": "8.46.4", "eslint-visitor-keys": "^4.2.1" }, "engines": { From bb9d5c363a3a7b1ddd4adcddbd8c640a8b0f0c2e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Nov 2025 21:03:58 +0100 Subject: [PATCH 038/439] chore(deps): update dependency sass to v1.94.0 (#2199) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [sass](https://redirect.github.com/sass/dart-sass) | [`1.93.3` -> `1.94.0`](https://renovatebot.com/diffs/npm/sass/1.93.3/1.94.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/sass/1.94.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/sass/1.93.3/1.94.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
sass/dart-sass (sass) ### [`v1.94.0`](https://redirect.github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#1940) [Compare Source](https://redirect.github.com/sass/dart-sass/compare/1.93.3...1.94.0) - **Potentially breaking compatibility fix:** `@function` rules whose names begin with `--` are now parsed as unknown at-rules to support the plain CSS `@function` rule. Within this rule, the `result` property is parsed as raw CSS just like custom properties. - **Potentially breaking compatibility fix:** `@mixin` rules whose names begin with `--` are now errors. These are not yet parsed as unknown at-rules because no browser currently supports CSS mixins.
--- ### 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 7d4e7278bc..a1817e8348 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7549,9 +7549,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.93.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.93.3.tgz", - "integrity": "sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==", + "version": "1.94.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.94.0.tgz", + "integrity": "sha512-Dqh7SiYcaFtdv5Wvku6QgS5IGPm281L+ZtVD1U2FJa7Q0EFRlq8Z3sjYtz6gYObsYThUOz9ArwFqPZx+1azILQ==", "dev": true, "license": "MIT", "peer": true, From d2ed1d6291202ca59b2160ea525dfe0c469fa56c Mon Sep 17 00:00:00 2001 From: Robin Date: Wed, 12 Nov 2025 10:41:13 +0100 Subject: [PATCH 039/439] adjust the draft protection snippet to the implementation (#2196) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: René Jeglinsky --- java/fiori-drafts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/fiori-drafts.md b/java/fiori-drafts.md index 8652fa3e90..f751e8d6a9 100644 --- a/java/fiori-drafts.md +++ b/java/fiori-drafts.md @@ -155,7 +155,7 @@ cds.drafts.cancellationTimeout: 1h You can turn off this feature completely by means of the application configuration property: ```yaml -cds.security.draftProtection.enabled: false +cds.security.authorization.draftProtection.enabled: false ``` ## Draft Garbage Collection { #draft-gc } From 8f945c13be1313848c0183c7efe2c7d39839597b Mon Sep 17 00:00:00 2001 From: Matthias Schur <107557548+MattSchur@users.noreply.github.com> Date: Wed, 12 Nov 2025 13:20:49 +0100 Subject: [PATCH 040/439] Java: Draft Bypassing (#2184) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added warning about bypassing draft updates for entities. --------- Co-authored-by: Marc Becker Co-authored-by: René Jeglinsky --- java/fiori-drafts.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/fiori-drafts.md b/java/fiori-drafts.md index f751e8d6a9..7f16baacd8 100644 --- a/java/fiori-drafts.md +++ b/java/fiori-drafts.md @@ -144,6 +144,10 @@ It's possible to create and update data directly without creating intermediate d These events have the same semantics as described in section [Handling CRUD events](./cqn-services/application-services#crudevents). +::: warning +Directly updating the active entity does **not** bypass the [Draft Lock](#draft-lock). If an existing draft locks the active entity, the system blocks any attempt to update it. This ensures that the system does not lose changes to the active entity when you subsequently activate a draft. +::: + ## Draft Lock { #draft-lock } An entity with a draft is locked from being edited by other users until either the draft is saved or a timeout is hit (15 minutes by default). You can configure this timeout by the following application configuration property: From ae7159dd0a586145f67f9e3f457cc9dcc27c2505 Mon Sep 17 00:00:00 2001 From: Matthias Schur <107557548+MattSchur@users.noreply.github.com> Date: Wed, 12 Nov 2025 13:22:43 +0100 Subject: [PATCH 041/439] Java: Draft Aggregations (#2181) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Marc Becker Co-authored-by: René Jeglinsky Co-authored-by: Mahati Shankar <93712176+smahati@users.noreply.github.com> --- java/fiori-drafts.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/fiori-drafts.md b/java/fiori-drafts.md index 7f16baacd8..6ac3ca9446 100644 --- a/java/fiori-drafts.md +++ b/java/fiori-drafts.md @@ -60,6 +60,9 @@ public Result delegateToS4(ActiveReadEventContext context) { When setting `cds.drafts.persistence` to `split` only queries that are specified by the SAP Fiori draft orchestration are supported. ::: +### Aggregation Queries +Aggregating over active and inactive draft entities isn't supported. Queries with aggregation functions implicitly add `IsActiveEntity` as a part of the group-by clause, resulting in disjunct `active` and `inactive` rows being returned instead of aggregated rows. + ## Editing Drafts When users edit a draft-enabled entity in the frontend, the following requests are sent to the CAP Java backend. As an effect, draft-specific events are triggered, as described in the following table. The draft-specific events are defined by the [DraftService](https://www.javadoc.io/doc/com.sap.cds/cds-services-api/latest/com/sap/cds/services/draft/DraftService.html) interface. From 7589ba8588c5f14032783e034988a3de49f4cd17 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 13 Nov 2025 12:35:40 +0100 Subject: [PATCH 042/439] improve prompt --- .github/workflows/assets/editor.md | 67 ++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 8 deletions(-) diff --git a/.github/workflows/assets/editor.md b/.github/workflows/assets/editor.md index 635cc73b5a..63253599fb 100644 --- a/.github/workflows/assets/editor.md +++ b/.github/workflows/assets/editor.md @@ -1,5 +1,6 @@ --- description: Reviews code for quality and best practices +mode: subagent temperature: 0.1 prompt: Do a detailed edit as outlined in the following. --- @@ -9,10 +10,56 @@ prompt: Do a detailed edit as outlined in the following. You are a helpful editor for a technical writer. Your task is to review and improve the text while ensuring that it adheres to a structured set of writing rules. All categories are of equal priority—no rule should be prioritized over another. ## TASK -Perform a structured review of the text, checking compliance with the following rules: +Perform a structured review of the text, checking compliance with the following categories: + +1. Grammar & Style + +- Use U.S. English spelling and punctuation. +- Prefer active voice and present tense. +- Allow passive voice only when explaining a system process. +- Use common contractions, but avoid them in warnings or important messages. +- Use colons, parentheses, question marks, and intensifiers judiciously. +- Avoid exclamation marks, and abbreviations. +- Use a colon (:) to introduce information. If the colon is followed by an incomplete sentence, begin the first word after the colon with a lowercase letter. +- Spell out numbers one through nine in full. Use numerals for 10 and higher. +- Search for semicolons (;) and replace them with a period (.) For example: Instead of "This isn't needed; the system does this for you" write "This isn't needed. The system does this for you." +- Ensure lists are parallel. +- Avoid wordy constructions. + +2. Clarity & Readability + +- Write clear, concise, and short sentences that are easy to understand. +- Avoid jargon, colloquialisms, dialect, clipped words, and unnecessary complexity. +- Avoid hyperbole. +- Use positive formulations. +- Do NOT edit phrases that contain "the following". Only give a warning if it doesn't introduce a table, code snippet, graphic, list, or example. +- Do not remove markdown-specific formatting like _document URLs_. +- Do not edit code samples, not even whitespace. + +3. Consistency & Tone + +- Use the personal pronoun “you” and make sure the user is the center of the narrative. +- Use "please" when the user is asked to do something extra due to software error or if the situation is already troubling for the user. Avoid "please" when the user is asked to do something that is standard procedure. + +4. Inclusivity & Ethical Considerations + +- Avoid stereotypes, discrimination, and biases. +- Check for stopwords, including: abort, execute, grandfather, terminate, kill, disable, whitelist, blacklist, slave, master) +- Output the detected stopwords as a Python list and explain why they must be replaced or avoided. If no stopwords are found, output: "Language checked." +- Check for potentially sensitive topics, including: personal ability, mobility, status, gender (e.g., "him", "her", "man", "woman", "girl", "boy"), sexist language, appearance, type, culture, ethnicity, language, age, economic background, religion, sexual orientation. +- Output the detected topics as a Python list. If no topics are found, output: "Language checked." +- Be mindful of verbs related to senses (e.g., see, hear, watch, listen) as they may exclude people with disabilities. Consider more inclusive alternatives where appropriate, such as: +Instead of "See the highlighted section," → Use "Note the highlighted sections." +Instead of "Did you hear the announcement?" → Use "Did you receive the announcement?" +Note: "See" is ok when used to mean "refer to" → "For more information, see Troubleshooting." + +5. Formality & Suitability +- Avoid emoticons and emojis. +- Do NOT remove TODO markers at all. +- Do NOT remove tip, warning or danger notes indicated by `::: tip` or similar constructs. -1. Guidelines +6. Guidelines For this repository you should consider the following guideline: To have a consistent look and feel throughout capire, use the following semantic when formatting your text. @@ -41,11 +88,7 @@ There are a couple of aspects that are easy to consider when writing w/o digging This sound easier than it is, but if you can put it in simpler words, it gets automatically clearer and more helpful. -- Use present tense and **avoid future tense**! -- Avoid emoticons and emojis. -- Do NOT remove TODO markers at all. -- Do NOT remove tip, warning or danger notes indicated by `... tip` or similar constructs. - +Use present and avoid future tense! The documentation should follow the here described style guidance so that it keeps a consistent external and internal appearance: @@ -80,4 +123,12 @@ The documentation should follow the here described style guidance so that it kee 1 Avoid latin abbreviations.
2 Use the not recommended spelling only if you're clearly referring to some technical entity or process. -To improve readability and translatability, avoid using modal verbs in your content. \ No newline at end of file +> Always use proper **product names**. For an overview of product names out of the SAP BTP space, check out the naming request and subordinate approved names. + +To improve readability and translatability, avoid using modal verbs in your content. + +## FINAL STEPS +Provide a report summarizing how well the text adheres to the writing rules, highlighting issues found in each category. +Rewrite the text to align with all guidelines while maintaining clarity, accuracy, and user focus. +Explain each change by displaying every sentence of the revised text along with a justification for what was modified or retained. +Finally, output the revised text in its entirety. From 15ed1d0d6d7be18876bb8deb8294d2bdf1c2e03a Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 14 Nov 2025 09:18:22 +0100 Subject: [PATCH 043/439] improve prompt --- .github/workflows/ai-review.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ai-review.yml b/.github/workflows/ai-review.yml index dfe9b01dc2..934c649d84 100644 --- a/.github/workflows/ai-review.yml +++ b/.github/workflows/ai-review.yml @@ -28,7 +28,7 @@ jobs: - Use U.S. English spelling and punctuation. - Check for spelling errors and provide corrections. - Identify and correct grammatical errors and incorrect punctuation. - - Provide suggestions for improving the clarity and conciseness of the text to make it more understandable. Restrict yourself to the 5 most important findings and create suggestions for them. + - Provide suggestions for improving the clarity and conciseness of the text to make it more understandable. Use the comments to create real suggestions and include all proposals that target the same line into one suggestions. Do not create multiple suggestions for the same line or paragraph. - Consider the guidelines that can be found in .github/workflows/assets/editor.md and apply them. - Ensure that the tone is appropriate for technical documentation, maintaining a professional and informative style. - Verify that the structure of the document is logical and that headings and subheadings are used effectively. From c666178366bad917515ff44d4dd8c9d72671e1a6 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 18 Nov 2025 09:03:20 +0100 Subject: [PATCH 044/439] edit prompt instructions --- .github/workflows/assets/editor.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/assets/editor.md b/.github/workflows/assets/editor.md index 63253599fb..e415282644 100644 --- a/.github/workflows/assets/editor.md +++ b/.github/workflows/assets/editor.md @@ -35,6 +35,7 @@ Perform a structured review of the text, checking compliance with the following - Do NOT edit phrases that contain "the following". Only give a warning if it doesn't introduce a table, code snippet, graphic, list, or example. - Do not remove markdown-specific formatting like _document URLs_. - Do not edit code samples, not even whitespace. +- Do not touch tags, as these have a special meaning and need to be preserved. 3. Consistency & Tone From 0238c146800b195aacb34ee4826557096c1d1c8c Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 18 Nov 2025 09:03:39 +0100 Subject: [PATCH 045/439] fixes --- guides/deployment/microservices.md | 2 +- node.js/authentication.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/deployment/microservices.md b/guides/deployment/microservices.md index 0f72155024..60bdae144c 100644 --- a/guides/deployment/microservices.md +++ b/guides/deployment/microservices.md @@ -747,7 +747,7 @@ Before deploying you need to log in to Cloud Foundry: `cf login --sso` Start the deployment and build process: -``` +```sh cds up ``` diff --git a/node.js/authentication.md b/node.js/authentication.md index 2188408e94..99e253f179 100644 --- a/node.js/authentication.md +++ b/node.js/authentication.md @@ -486,7 +486,7 @@ Both caches are enabled by default. The _signature cache_ can be configured or deactivated via cds.requires.auth.config (which is passed through to `@sap/xssec`). -[Learn more about signature cache and its configuration.](https://www.npmjs.com/package/@sap/xssec#signature-cache)[.learn-more] +[Learn more about signature cache and its configuration.](https://www.npmjs.com/package/@sap/xssec#signature-cache){}.learn-more} The _token decode cache_, on the other hand, can only be configured programmatically during bootstrapping, for example in a [custom `server.js`](cds-server#custom-server-js) file, as follows: ```js From dc64c80f33bf0a8aa51d23a2e32e0b884ac184fa Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Tue, 18 Nov 2025 14:11:02 +0100 Subject: [PATCH 046/439] Fix `.learn-more` styling in `:::` blocks (#2211) Before: Screenshot 2025-11-18 at 11 11 28 After: Screenshot 2025-11-18 at 11 11 15 This also fixed the 15 more cases I found via Regex search `.*\{\.learn-more\}\n*:::\n` in VS Code. --- .vitepress/theme/styles.scss | 5 +++++ get-started/in-a-nutshell.md | 2 +- guides/deployment/to-cf.md | 4 ++-- guides/multitenancy/index.md | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.vitepress/theme/styles.scss b/.vitepress/theme/styles.scss index 5a207a9733..e4e2722169 100644 --- a/.vitepress/theme/styles.scss +++ b/.vitepress/theme/styles.scss @@ -299,6 +299,11 @@ main { border-width: 0 0 0 7px; border-radius: 14px; + .learn-more { + margin-top: 10px; + margin-bottom: -5px; + } + &.note { background-color: #f6f6f6; border-color: #bbb; diff --git a/get-started/in-a-nutshell.md b/get-started/in-a-nutshell.md index 822af6e0f5..adaa7f60bf 100644 --- a/get-started/in-a-nutshell.md +++ b/get-started/in-a-nutshell.md @@ -393,7 +393,7 @@ Create CSV files that already include some sample data: ```sh cds add data --records 10 ``` -[Find the full set of options here.](../tools/cds-cli.md#data){.learn-more} +[Find the full set of options in the CLI reference.](../tools/cds-cli.md#data){.learn-more} ::: diff --git a/guides/deployment/to-cf.md b/guides/deployment/to-cf.md index 0257f2b7e1..10c55058e5 100644 --- a/guides/deployment/to-cf.md +++ b/guides/deployment/to-cf.md @@ -277,11 +277,11 @@ While `cds build` is already ran as part of `mbt build` in `cds up`, you can als cds build --production ``` -[Learn more about running and customizing `cds build`.](custom-builds){.learn-more style="margin-top: 10px"} +[Learn more about running and customizing `cds build`.](custom-builds){.learn-more} ::: -[Got errors? See the troubleshooting guide.](../../get-started/troubleshooting#mta){.learn-more style="margin-top: 10px"} +[Got errors? See the troubleshooting guide.](../../get-started/troubleshooting#mta){.learn-more} [Learn how to reduce the MTA archive size **during development**.](../../get-started/troubleshooting#reduce-mta-size){.learn-more} This process can take some minutes and finally logs an output like this: diff --git a/guides/multitenancy/index.md b/guides/multitenancy/index.md index ab4b624109..46ea73bf05 100644 --- a/guides/multitenancy/index.md +++ b/guides/multitenancy/index.md @@ -1172,7 +1172,7 @@ modules: TENANT_HOST_PATTERN: ^(.*)-${default-uri} ``` -[Learn more about _Defining MTA Extension Descriptors_](https://help.sap.com/docs/btp/sap-business-technology-platform/defining-mta-extension-descriptors?q=The%20MTA%20Deployment%20Extension%20Descriptor){.learn-more style="margin-top: 10px;"} +[Learn more about _Defining MTA Extension Descriptors_](https://help.sap.com/docs/btp/sap-business-technology-platform/defining-mta-extension-descriptors?q=The%20MTA%20Deployment%20Extension%20Descriptor){.learn-more} ::: From 479bc411123a160555b618c393012954bd7fc922 Mon Sep 17 00:00:00 2001 From: simonoswald <126768147+simonoswald@users.noreply.github.com> Date: Tue, 18 Nov 2025 14:23:26 +0100 Subject: [PATCH 047/439] cdl.md: Remove superflous , (#2210) --- cds/cdl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cds/cdl.md b/cds/cdl.md index 278deb9b1f..39fb01b314 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -1882,7 +1882,7 @@ service MyOrders { ``` ::: tip -You can optionally add annotations such as `@readonly` or `@insertonly` to exposed entities, which, will be enforced by the CAP runtimes in Java and Node.js. +You can optionally add annotations such as `@readonly` or `@insertonly` to exposed entities, which will be enforced by the CAP runtimes in Java and Node.js. ::: Entities can be also exposed as views with parameters: From 867169f112cb116538cab446b01500784050321c Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Tue, 18 Nov 2025 14:27:49 +0100 Subject: [PATCH 048/439] Prefer `-a` instead of `--to-app-services` in `cds bind` (#2212) Much simpler and more intuitive. I just leave the one usage of `--to-app-services` here: https://cap.cloud.sap/docs/advanced/hybrid-testing#bindings-from-a-cloud-application --- advanced/hybrid-testing.md | 4 ++-- guides/multitenancy/index.md | 4 ++-- guides/multitenancy/old-mtx-migration.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/advanced/hybrid-testing.md b/advanced/hybrid-testing.md index 6683a3fd2f..93d549ffd6 100644 --- a/advanced/hybrid-testing.md +++ b/advanced/hybrid-testing.md @@ -458,10 +458,10 @@ cds bind --to my-service,redis-cache:my-key,bookshop-xsuaa --credentials \ '{ "my-service": { "onpremise_proxy_host": "localhost" }, "redis-cache:my-key":{ "hostname": "localhost", "port": 1234 }}' ``` -Use the service instance name in combination with the option `--to-app-services` if you want to create bindings for all service instances of your application: +Use the service instance name in combination with the option `-a` if you want to create bindings for all service instances of your application: ```sh -cds bind --to-app-services bookshop-srv --credentials \ +cds bind -a bookshop-srv --credentials \ '{ "my-service": { "onpremise_proxy_host": "localhost" }, "redis-cache":{ "hostname": "localhost", "port": 1234 }}' ``` diff --git a/guides/multitenancy/index.md b/guides/multitenancy/index.md index 46ea73bf05..56c66e7cfd 100644 --- a/guides/multitenancy/index.md +++ b/guides/multitenancy/index.md @@ -897,14 +897,14 @@ For faster turnaround cycles in development and testing, you can run the app loc To achieve this, bind your SaaS app and the MTX sidecar to its required cloud services, for example: ```sh -cds bind --to-app-services bookshop-srv +cds bind -a bookshop-srv ``` For testing the sidecar, make sure to run the command there as well: ```sh cd mtx/sidecar -cds bind --to-app-services bookshop-srv +cds bind -a bookshop-mtx ``` To generate the SAP HANA HDI files for deployment, go to your project root and run the build: diff --git a/guides/multitenancy/old-mtx-migration.md b/guides/multitenancy/old-mtx-migration.md index fdc81580db..5e46038677 100644 --- a/guides/multitenancy/old-mtx-migration.md +++ b/guides/multitenancy/old-mtx-migration.md @@ -420,7 +420,7 @@ See also [Extensibility configuration](./mtxs.md#extensibility-config) ### Verify Application Locally As first verification of your configuration changes, you can try to run your application locally in [hybrid mode](../../advanced/hybrid-testing#run-with-service-bindings). To bind all the service -that are bound to your existing application, you can call `cds bind --to-app-services `. Afterwards, you can run `cds run --profile hybrid --resolve-bindings`. +that are bound to your existing application, you can call `cds bind -a `. Afterwards, you can run `cds run --profile hybrid --resolve-bindings`. ### Migrate Tenant Content of Existing Applications From 7ba4355be0d5fd790d5a0602c653ab5a3dcc509e Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Tue, 18 Nov 2025 23:04:18 +0100 Subject: [PATCH 049/439] Cosmetic improvements for i18n guide --- guides/i18n.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/guides/i18n.md b/guides/i18n.md index 30e7977a25..b7f5562949 100644 --- a/guides/i18n.md +++ b/guides/i18n.md @@ -54,8 +54,8 @@ Then you can translate the texts in localized bundles, each with a language/loca ```sh _i18n/ - i18n.properties # dev main --› 'default fallback' - i18n_en.properties # English --› 'default language' + i18n.properties # dev main → 'default fallback' + i18n_en.properties # English → 'default language' i18n_de.properties # German i18n_zh_TW.properties # Traditional Chinese ... @@ -66,7 +66,7 @@ _i18n/ Recommendation is to put your properties files in a folder named `_i18n` in the root of your project, as in this example: -```txt +```zsh bookshop/ ├─ _i18n/ │ ├─ i18n_en.properties @@ -80,7 +80,7 @@ bookshop/ By default, text bundles are fetched from folders named *_i18n* or *i18n* in the neighborhood of models, i.e. all folders that contain `.cds` sources or parent folders thereof. For example, given the following project layout and sources: -```txt +```zsh bookshop/ ├─ app/ │ ├─ browse/ @@ -95,9 +95,9 @@ bookshop/ └─ readme.md ``` -We will be loading i18n bundles from all of these locations, if exist: +We will be loading i18n bundles from all of these locations, if existing: -```txt +```zsh bookshop/app/browse/_i18n bookshop/app/_i18n bookshop/srv/_i18n @@ -122,7 +122,6 @@ The format is as follows: | Book | Book | Buch | ... | | Books | Books | Bücher | ... | | ... | -{ style="width: auto"} With this CSV source: @@ -187,7 +186,8 @@ Upon incoming requests at runtime, the user's preferred language is determined a 2. The value of the `sap-language` URL parameter, but only if it's `1Q`, `2Q` or `3Q` as described below. 3. The first entry from the request's `Accept-Language` header. 2. Narrow to normalized locales as described below. -::: tip + +::: tip Differences between Node.js and Java runtimes CAP Node.js accepts formats following the available standards of POSIX and RFC 1766, and transforms them into normalized locales. CAP Java only accepts language codes following the standard of RFC 1766 (or [IETF's BCP 47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt)). ::: From 5fcdfe24bedee75ad02481cbf430bd8e0bf88ab5 Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Wed, 19 Nov 2025 07:44:51 +0100 Subject: [PATCH 050/439] Fix code fence languages for Temporal Data guide --- guides/temporal-data.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/guides/temporal-data.md b/guides/temporal-data.md index 64a4081025..6c91060341 100644 --- a/guides/temporal-data.md +++ b/guides/temporal-data.md @@ -158,7 +158,7 @@ READ requests without specifying any temporal query parameter will automatically For example, assumed the following OData query to read all employees with their current work assignments is processed on March 2019: -```cds +```http GET Employees? $expand=jobs($select=role&$expand=dept($select=name)) ``` @@ -188,7 +188,7 @@ The result set would be: We can run the same OData query as in the previous sample to read a snapshot data as valid on January 1, 2017 using the `sap-valid-at` query parameter: -```cds +```http GET Employees?sap-valid-at=date'2017-01-01' $expand=jobs($select=role&$expand=dept($select=name)) ``` @@ -218,7 +218,7 @@ Time-travel queries aren't supported on SQLite due to the lack of *session_conte We can run the same OData query as in the previous sample to read all history of data as valid since 2016 using the `sap-valid-from` query parameter: -```cds +```http GET Employees?sap-valid-from=date'2016-01-01' $expand=jobs($select=role&$expand=dept($select=name)) ``` @@ -238,7 +238,7 @@ The result set would be: > You would add `validFrom` in such time-period queries, for example: -```cds +```http GET Employees?sap-valid-from=date'2016-01-01' $expand=jobs($select=validFrom,role,dept/name) ``` @@ -265,7 +265,7 @@ entity Departments : temporal {/*...*/} When reading employees with all history since 2016, for example: -```cds +```http GET Employees?sap-valid-from=date'2016-01-01' $expand=jobs( $select=validFrom,role&$expand=dept( From c1ea510180273bf4fe874a9306e940d80151cc1f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Nov 2025 16:02:24 +0100 Subject: [PATCH 051/439] chore(deps): update dependency markdownlint-cli to v0.46.0 (#2214) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [markdownlint-cli](https://redirect.github.com/igorshubovych/markdownlint-cli) | [`0.45.0` -> `0.46.0`](https://renovatebot.com/diffs/npm/markdownlint-cli/0.45.0/0.46.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/markdownlint-cli/0.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/markdownlint-cli/0.45.0/0.46.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
igorshubovych/markdownlint-cli (markdownlint-cli) ### [`v0.46.0`](https://redirect.github.com/igorshubovych/markdownlint-cli/releases/tag/v0.46.0) [Compare Source](https://redirect.github.com/igorshubovych/markdownlint-cli/compare/v0.45.0...v0.46.0) - Replace `glob` dependency with `tinyglobby` (smaller and fewer dependencies) - Update `markdownlint` dependency to `0.39.0` - Add `MD060`/`table-column-style` - Improve `MD001`/`MD007`/`MD009`/`MD010`/`MD029`/`MD033`/`MD037`/`MD059` - Update all dependencies via `Dependabot`
--- ### 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 | 595 +++++++++------------------------------------- 1 file changed, 115 insertions(+), 480 deletions(-) diff --git a/package-lock.json b/package-lock.json index a1817e8348..a7631514c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -189,7 +189,6 @@ "integrity": "sha512-PTAFMJOpVtJweExEYYgdmSCC6n4V/R+ctDL3fRQy77ulZM/p+zMLIQC9c7HCQE1zqpauvVck3f2zYSejaUTtrw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@algolia/client-common": "5.38.0", "@algolia/requester-browser-xhr": "5.38.0", @@ -358,7 +357,6 @@ "dev": true, "hasInstallScript": true, "license": "Apache-2.0", - "peer": true, "peerDependencies": { "@sap/cds": ">=9.0.0", "@sap/cds-dk": "^9", @@ -560,8 +558,7 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-dart": { "version": "2.3.1", @@ -701,16 +698,14 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.12.tgz", "integrity": "sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-java": { "version": "5.0.12", @@ -908,8 +903,7 @@ "resolved": "https://registry.npmjs.org/@cspell/dict-typescript/-/dict-typescript-3.2.3.tgz", "integrity": "sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@cspell/dict-vue": { "version": "3.0.5", @@ -1565,7 +1559,6 @@ "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -1716,24 +1709,6 @@ "node": "20 || >=22" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -2403,7 +2378,6 @@ "integrity": "sha512-JJCHeEJF4xzFyZSf2ToocvVE9dyHfNLTRXOauOxlmpfyaLg97G7Qp+L4bD132eB0onBG9bQj3eH8DzBm0hVvIw==", "dev": true, "license": "SEE LICENSE IN LICENSE", - "peer": true, "dependencies": { "@sap/cds-compiler": "^6.3", "@sap/cds-fiori": "^2", @@ -2719,7 +2693,6 @@ "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -2887,7 +2860,6 @@ "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.46.4", "@typescript-eslint/types": "8.46.4", @@ -3369,6 +3341,7 @@ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -3383,7 +3356,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -3434,7 +3406,6 @@ "integrity": "sha512-8VJKIzheeI9cjuVJhU1hYEVetOTe7LvA+CujAI7yqvYsPtZfVEvv1pg9AeFNtHBg/ZoSLGU5LPijhcY5l3Ea9g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@algolia/abtesting": "1.4.0", "@algolia/client-abtesting": "5.38.0", @@ -3462,32 +3433,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -3500,7 +3445,8 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/array-timsort": { "version": "1.0.3", @@ -3532,6 +3478,7 @@ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -3557,6 +3504,7 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -3566,7 +3514,8 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/boolbase": { "version": "1.0.0", @@ -3604,6 +3553,7 @@ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -3614,6 +3564,7 @@ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -3628,6 +3579,7 @@ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -3835,6 +3787,7 @@ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "safe-buffer": "5.2.1" }, @@ -3848,6 +3801,7 @@ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -3858,6 +3812,7 @@ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -3867,7 +3822,8 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/copy-anything": { "version": "3.0.5", @@ -4170,6 +4126,7 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -4190,6 +4147,7 @@ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -4229,6 +4187,7 @@ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -4238,26 +4197,13 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/emoji-regex-xs": { "version": "1.0.0", @@ -4272,6 +4218,7 @@ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -4308,6 +4255,7 @@ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" } @@ -4318,6 +4266,7 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" } @@ -4328,6 +4277,7 @@ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -4379,7 +4329,8 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -4400,7 +4351,6 @@ "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", @@ -4665,6 +4615,7 @@ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -4675,6 +4626,7 @@ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -4722,6 +4674,7 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -4731,7 +4684,8 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/extend-shallow": { "version": "2.0.1", @@ -4874,6 +4828,7 @@ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -4893,6 +4848,7 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -4902,7 +4858,8 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/find-up": { "version": "5.0.0", @@ -4968,34 +4925,17 @@ "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "tabbable": "^6.2.0" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -5006,6 +4946,7 @@ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -5031,6 +4972,7 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5051,6 +4993,7 @@ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -5076,6 +5019,7 @@ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -5084,30 +5028,6 @@ "node": ">= 0.4" } }, - "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -5121,22 +5041,6 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/global-directory": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", @@ -5172,6 +5076,7 @@ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -5235,6 +5140,7 @@ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -5248,6 +5154,7 @@ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -5327,6 +5234,7 @@ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -5344,6 +5252,7 @@ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -5434,7 +5343,8 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/ini": { "version": "4.1.1", @@ -5452,6 +5362,7 @@ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.10" } @@ -5513,16 +5424,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -5577,26 +5478,10 @@ "dev": true, "license": "ISC" }, - "node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -5749,16 +5634,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/lru-cache": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", - "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "20 || >=22" - } - }, "node_modules/magic-string": { "version": "0.30.19", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", @@ -5806,9 +5681,9 @@ } }, "node_modules/markdownlint": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.38.0.tgz", - "integrity": "sha512-xaSxkaU7wY/0852zGApM8LdlIfGCW8ETZ0Rr62IQtAnUMlMuifsg09vWJcNYeL4f0anvr8Vo4ZQar8jGpV0btQ==", + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.39.0.tgz", + "integrity": "sha512-Xt/oY7bAiHwukL1iru2np5LIkhwD19Y7frlsiDILK62v3jucXCD6JXlZlwMG12HZOR+roHIVuJZrfCkOhp6k3g==", "dev": true, "license": "MIT", "dependencies": { @@ -5829,23 +5704,24 @@ } }, "node_modules/markdownlint-cli": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.45.0.tgz", - "integrity": "sha512-GiWr7GfJLVfcopL3t3pLumXCYs8sgWppjIA1F/Cc3zIMgD3tmkpyZ1xkm1Tej8mw53B93JsDjgA3KOftuYcfOw==", + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.46.0.tgz", + "integrity": "sha512-4gxTNzPjpLnY7ftrEZD4flPY0QBkQLiqezb6KURFSkV+vPHFOsYw8OMtY6fu82Yt8ghtSrWegpYdq1ix25VFLQ==", "dev": true, "license": "MIT", "dependencies": { - "commander": "~13.1.0", - "glob": "~11.0.2", - "ignore": "~7.0.4", - "js-yaml": "~4.1.0", + "commander": "~14.0.2", + "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", - "markdownlint": "~0.38.0", - "minimatch": "~10.0.1", + "markdownlint": "~0.39.0", + "minimatch": "~10.1.1", "run-con": "~1.3.2", - "smol-toml": "~1.3.4" + "smol-toml": "~1.5.2", + "tinyglobby": "~0.2.15" }, "bin": { "markdownlint": "markdownlint.js" @@ -5854,16 +5730,6 @@ "node": ">=20" } }, - "node_modules/markdownlint-cli/node_modules/commander": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", - "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, "node_modules/markdownlint-cli/node_modules/ignore": { "version": "7.0.5", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", @@ -5875,11 +5741,11 @@ } }, "node_modules/markdownlint-cli/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -5890,19 +5756,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/markdownlint-cli/node_modules/smol-toml": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz", - "integrity": "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==", - "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", @@ -5945,6 +5798,7 @@ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" } @@ -6197,6 +6051,7 @@ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -6207,6 +6062,7 @@ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -6227,6 +6083,7 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -6823,6 +6680,7 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "license": "MIT", + "peer": true, "bin": { "mime": "cli.js" }, @@ -6836,6 +6694,7 @@ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -6846,6 +6705,7 @@ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -6879,16 +6739,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, "node_modules/minisearch": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.2.0.tgz", @@ -6949,6 +6799,7 @@ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -6980,6 +6831,7 @@ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4" }, @@ -6993,6 +6845,7 @@ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ee-first": "1.1.1" }, @@ -7062,13 +6915,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, - "license": "BlueOak-1.0.0" - }, "node_modules/parent-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-2.0.0.tgz", @@ -7115,6 +6961,7 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -7146,29 +6993,13 @@ "node": ">=8" } }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "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==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/perfect-debounce": { "version": "1.0.0", @@ -7278,6 +7109,7 @@ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -7312,6 +7144,7 @@ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "dependencies": { "side-channel": "^1.0.6" }, @@ -7349,6 +7182,7 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.6" } @@ -7359,6 +7193,7 @@ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -7539,14 +7374,16 @@ "url": "https://feross.org/support" } ], - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/sass": { "version": "1.94.0", @@ -7554,7 +7391,6 @@ "integrity": "sha512-Dqh7SiYcaFtdv5Wvku6QgS5IGPm281L+ZtVD1U2FJa7Q0EFRlq8Z3sjYtz6gYObsYThUOz9ArwFqPZx+1azILQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "chokidar": "^4.0.0", "immutable": "^5.0.2", @@ -7611,6 +7447,7 @@ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -7636,6 +7473,7 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -7645,7 +7483,8 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", @@ -7653,6 +7492,7 @@ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -7663,6 +7503,7 @@ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -7678,7 +7519,8 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true, - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/shebang-command": { "version": "2.0.0", @@ -7752,6 +7594,7 @@ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -7772,6 +7615,7 @@ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -7789,6 +7633,7 @@ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -7808,6 +7653,7 @@ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -7822,23 +7668,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/smol-toml": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.4.2.tgz", - "integrity": "sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==", + "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": { @@ -7892,74 +7725,11 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/stringify-entities": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", @@ -7975,46 +7745,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -8107,6 +7837,7 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.6" } @@ -8193,6 +7924,7 @@ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -8309,6 +8041,7 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -8336,6 +8069,7 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.4.0" } @@ -8346,6 +8080,7 @@ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8" } @@ -8386,7 +8121,6 @@ "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -8529,7 +8263,6 @@ "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.22", "@vue/compiler-sfc": "3.5.22", @@ -8607,104 +8340,6 @@ "node": ">=0.10.0" } }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/xdg-basedir": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", From ddc564961c0e036d62972f86037dd1c570904649 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jeglinsky?= Date: Fri, 21 Nov 2025 11:20:14 +0100 Subject: [PATCH 052/439] Remove custom analysis step from PR workflow --- .github/workflows/PR-SAP.yml | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/.github/workflows/PR-SAP.yml b/.github/workflows/PR-SAP.yml index 0547e3f285..316e90d111 100644 --- a/.github/workflows/PR-SAP.yml +++ b/.github/workflows/PR-SAP.yml @@ -57,18 +57,3 @@ jobs: npm run docs:preview -- --port 5555 & sleep 2 .github/etc/blc.js http://localhost:5555/docs/ - analyze: - runs-on: ubuntu-latest - permissions: - contents: write - pull-requests: write - statuses: write - steps: - - uses: actions/checkout@v5 - - name: Run Custom Analysis - uses: acrolinx/nextgen-analyzer@v0.0.7 - with: - acrolinx_token: ${{ secrets.ACROLINX_KEY }} - github_token: ${{ secrets.GITHUB_TOKEN }} - style-guide: 'chicago' - add_commit_status: 'true' \ No newline at end of file From 1ef75c050edeca8439d2e3cd703a78f9e15fc40e Mon Sep 17 00:00:00 2001 From: Johannes Vogt Date: Fri, 21 Nov 2025 17:11:39 +0100 Subject: [PATCH 053/439] cds build is a separate step for `cds up -2 k8s` (#2222) --- guides/deployment/to-kyma.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/guides/deployment/to-kyma.md b/guides/deployment/to-kyma.md index 95396b3be8..b4c9c8b067 100644 --- a/guides/deployment/to-kyma.md +++ b/guides/deployment/to-kyma.md @@ -194,6 +194,9 @@ npm i --package-lock-only mtx/sidecar # If package-lock.json doesn't exist npm i --package-lock-only +# Build tasks +cds build --production + # Buildpack commands pack build bookshop-srv:latest --path gen/srv --builder builder-jammy-base --env BP_NODE_RUN_SCRIPTS="" pack build bookshop-html5-deployer:latest --path app/html5-deployer --builder builder-jammy-base --env BP_NODE_RUN_SCRIPTS="" From 880049d61932cc0f147302c4f4517b5ab03df092 Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Mon, 24 Nov 2025 12:54:54 +0100 Subject: [PATCH 054/439] Link to CI/CD documentation after doing ad-hoc deployment (#2230) --- guides/deployment/cicd.md | 22 +++++++++++----------- guides/deployment/to-cf.md | 5 +++++ guides/deployment/to-kyma.md | 5 ++++- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/guides/deployment/cicd.md b/guides/deployment/cicd.md index d525289b6e..d28cde448d 100644 --- a/guides/deployment/cicd.md +++ b/guides/deployment/cicd.md @@ -31,7 +31,7 @@ cds add github-actions ### Deploy to Staging -The created workflows do a _Staging_ deployment for pushes on the `main` branch, for example after merging pull requests. +The created workflows do a _Staging_ deployment for pushes on the `main` branch, usually after merging pull requests. If no defaults are maintained in your GitHub org, a set of variables and secrets has to be provided. Open the repository and navigate here to maintain them: @@ -41,19 +41,19 @@ For a minimal deployment setup, these variables and secrets are required: #### Cloud Foundry -| **Type** | **Name** | **Note** | **Example** | -|------------|----------------|-----------|-------------------| -| Variable | `CF_API` | API URL | `https://api.cf.example.com` | -| | `CF_USERNAME` | Username | `user@example.com` | -| | `CF_ORG` | Org Name | `my-org` | -| | `CF_SPACE` | Space Name| `my-space` | -| Secret | `CF_PASSWORD` | Password | `********` | +| **Type** | **Name** | **Note** | **Example** | +|------------|----------------|------------|-------------------| +| Variable | `CF_API` | API URL | `https://api.cf.example.com` | +| | `CF_USERNAME` | Username | `user@example.com` | +| | `CF_ORG` | Org Name | `my-org` | +| | `CF_SPACE` | Space Name | `my-space` | +| Secret | `CF_PASSWORD` | Password | `********` | #### Kyma | **Type** | **Name** | **Note** | **Example** | |------------|----------------|-----------|-------------------| -| Secret | `KUBE_CONFIG` | Base64-encoded Kubernetes config | see below | +| Secret | `KUBE_CONFIG` | Base64-encoded Kubernetes config | see below | ::: details Example of a decoded `KUBE_CONFIG` @@ -80,7 +80,7 @@ contexts: user: ci-user current-context: ci-context ``` -[Learn more about configuring Kubernetes](./to-kyma#configure-kubernetes){.learn-more style="margin-top:20px"} +[Learn more about configuring Kubernetes](./to-kyma#configure-kubernetes){.learn-more} ::: @@ -107,7 +107,7 @@ You can now simply push any CAP project that was set up using `cds add github-ac For the actual release we want to override org-wide sandbox variables to deploy to a different subaccount/organization and database. -Go to `Settings` → `Environments` → `New environment` → enter "Production". +Go to **Settings** → **Environments** → **New environment** → enter "Production". Now override org-wide variables (e.g. `CF_ORG` and `CF_SPACE` in Cloud Foundry) to use a dedicated subaccount you created for the release deployment. diff --git a/guides/deployment/to-cf.md b/guides/deployment/to-cf.md index 10c55058e5..746d9aa672 100644 --- a/guides/deployment/to-cf.md +++ b/guides/deployment/to-cf.md @@ -382,6 +382,11 @@ sed -i 's/org.springframework.boot.loader.JarLauncher/-Dloader.main=com.sap.cds. ::: +## Next Up... + +You would then [set up your CI/CD](../deployment/cicd) for automating deployments, for example after merging pull requests. + + ---- +## Next Up... + +You would then [set up your CI/CD](../deployment/cicd) for automating deployments, for example after merging pull requests. + {style="margin-top:11em"} ## Deep Dives From 2b86b934a3273cf9af069789a64daea8cd2a9c8a Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Mon, 24 Nov 2025 12:58:50 +0100 Subject: [PATCH 055/439] Use comma-separated CSV files (#2229) --- guides/i18n.md | 8 ++++---- guides/localized-data.md | 22 +++++++++++----------- guides/using-services.md | 8 ++++---- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/guides/i18n.md b/guides/i18n.md index b7f5562949..cdab641992 100644 --- a/guides/i18n.md +++ b/guides/i18n.md @@ -126,9 +126,9 @@ The format is as follows: With this CSV source: ```csv -key;en;de;zh_CN;... -Book;Book;Buch;... -Books;Books;Bücher;... +key,en,de,zh_CN,... +Book,Book,Buch,... +Books,Books,Bücher,... ... ``` @@ -233,7 +233,7 @@ In this example we removed `es_CO` and `es_MX` from the list, and added `pt_BR`. In CAP Java the preserved locales can be configured via the cds.locales.normalization.includeList [property](../java/developing-applications/properties#cds-locales-normalization). -::: warning *Note:* +::: warning *Note:* However this list is configured, ensure to have translations for the listed locales, as the fallback language will otherwise be `en`. ::: diff --git a/guides/localized-data.md b/guides/localized-data.md index 0537dabe48..1d80e34924 100644 --- a/guides/localized-data.md +++ b/guides/localized-data.md @@ -413,12 +413,12 @@ For example, _Books.csv_ can look as follows: ::: code-group ```csv [Books.csv] -ID;title;descr;author_ID;stock;price;currency_code;genre_ID -201;Wuthering Heights;Wuthering Heights, Emily Brontë's only novel ...;101;12;11.11;GBP;11 -207;Jane Eyre;Jane Eyre is a novel by English writer ...;107;11;12.34;GBP;11 -251;The Raven;The Raven is a narrative poem by ...;150;333;13.13;USD;16 -252;Eleonora;Eleonora is a short story by ...;150;555;14;USD;16 -271;Catweazle;Catweazle is a British fantasy ...;170;22;150;JPY;13 +ID,title,descr,author_ID,stock,price,currency_code,genre_ID +201,Wuthering Heights,"Wuthering Heights, Emily Brontë's only novel ...",101,12,11.11,GBP,11 +207,Jane Eyre,Jane Eyre is a novel by English writer ...,107,11,12.34,GBP,11 +251,The Raven,The Raven is a narrative poem by ...,150,333,13.13,USD,16 +252,Eleonora,Eleonora is a short story by ...,150,555,14,USD,16 +271,Catweazle,Catweazle is a British fantasy ...,170,22,150,JPY,13 ... ``` ::: @@ -427,11 +427,11 @@ This is the corresponding _Books_texts.csv_: ::: code-group ```csv [Books_texts.csv] -ID;locale;title;descr -201;de;Sturmhöhe;Sturmhöhe (Originaltitel: Wuthering Heights) ist der einzige Roman... -201;fr;Les Hauts de Hurlevent;Les Hauts de Hurlevent (titre original : Wuthering Heights)... -207;de;Jane Eyre;Jane Eyre. Eine Autobiographie (Originaltitel: Jane Eyre. An Autobiography)... -252;de;Eleonora;Eleonora ist eine Erzählung von Edgar Allan Poe. Sie wurde 1841... +ID,locale,title,descr +201,de,Sturmhöhe,Sturmhöhe (Originaltitel: Wuthering Heights) ist der einzige Roman... +201,fr,Les Hauts de Hurlevent,Les Hauts de Hurlevent (titre original : Wuthering Heights)... +207,de,Jane Eyre,Jane Eyre. Eine Autobiographie (Originaltitel: Jane Eyre. An Autobiography)... +252,de,Eleonora,Eleonora ist eine Erzählung von Edgar Allan Poe. Sie wurde 1841... ... ``` ::: diff --git a/guides/using-services.md b/guides/using-services.md index ee2b400716..d4cd4de100 100644 --- a/guides/using-services.md +++ b/guides/using-services.md @@ -257,10 +257,10 @@ The CSV file needs to be added to the _db/data_ folder. {.java} ::: code-group ```csv [API_BUSINESS_PARTNER-A_BusinessPartner.csv] -BusinessPartner;BusinessPartnerFullName;BusinessPartnerIsBlocked -1004155;Williams Electric Drives;false -1004161;Smith Batteries Ltd;false -1004100;Johnson Automotive Supplies;true +BusinessPartner,BusinessPartnerFullName,BusinessPartnerIsBlocked +1004155,Williams Electric Drives,false +1004161,Smith Batteries Ltd,false +1004100,Johnson Automotive Supplies,true ``` ::: From 830d173d63e7a0e3cfdad4bbf3e794b4ec2a909e Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Mon, 24 Nov 2025 12:59:38 +0100 Subject: [PATCH 056/439] Editing "Localized Data" guide (#2231) --- guides/localized-data.md | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/guides/localized-data.md b/guides/localized-data.md index 1d80e34924..87161e9b46 100644 --- a/guides/localized-data.md +++ b/guides/localized-data.md @@ -80,9 +80,6 @@ entity localized.Books as select from Books {*, coalesce (localized.descr, descr) as descr }; ``` -::: warning Note: -In contrast to former versions, with CDS compiler v2 we don't add such entities to CSN anymore, but only on generated SQL DDL output. -::: ### Resolving localized texts via views @@ -124,7 +121,9 @@ entity OpenBookView as select from Books {*} Include the `localized` association: ```cds -entity ClosedBookView as select from Books { ID, title, descr, localized }; +entity ClosedBookView as select from Books { + ID, title, descr, localized +}; ``` @@ -266,9 +265,9 @@ using { Books } from './books'; service CatalogService { entity BooksList as projection on Books { ID, title, price }; entity BooksDetails as projection on Books; - entity BooksShort as projection on Books { + entity BooksShort as projection on Books { ID, price, - substr(title, 0, 10) as title : localized String(10), + substr(title, 0, 10) as title : localized String(10), }; } ``` @@ -285,15 +284,16 @@ entity localized.CatalogService.BooksList as entity localized.CatalogService.BooksDetails as SELECT from localized.Books; - + entity localized.CatalogService.BooksShort as SELECT from localized.Books { ID, price, substr(title, 0, 10) as title : localized String(10), }; ``` -::: warning Note: -Note that these `localized.` entities are not part of CSN and aren't exposed through OData. -They are only generated for SQL. +::: warning `localized` entities are only generated for SQL + +They are not part of the CSN or exposed via OData. + ::: ### Read Operations @@ -312,7 +312,9 @@ service CatalogService { In Node.js applications, for requests with an `$expand` query option on entities annotated with `@cds.localized: false`, the expanded properties are not translated. ```http -GET /BooksDetails?$expand=authors //> all fields from authors are non-localized defaults, if BooksDetails is annotated with `@cds.localized: false` +// all fields from authors are non-localized defaults if BooksDetails +// is annotated with `@cds.localized: false` +GET /BooksDetails?$expand=authors ``` ### Write Operations @@ -320,7 +322,7 @@ GET /BooksDetails?$expand=authors //> all fields from authors are non-localized Since the corresponding text table is linked through composition, you can use deep inserts or upserts to fill in language-specific texts. ```http -POST /Entity HTTP/1.1 +POST /Entity HTTP/1.1 Content-Type: application/json { @@ -333,7 +335,7 @@ Content-Type: application/json If you want to add a language-specific text to an existing entity, perform a `POST` request to the text table of the entity through navigation. ```http -POST /Entity()/texts HTTP/1.1 +POST /Entity()/texts HTTP/1.1 Content-Type: application/json { @@ -346,7 +348,7 @@ Content-Type: application/json To update the language-specific texts of an entity along with the default fallback text, you can perform a deep update as a `PUT` or `PATCH` request to the entity through navigation. ```http -PUT/PATCH /Entity() HTTP/1.1 +PUT/PATCH /Entity() HTTP/1.1 Content-Type: application/json { @@ -359,15 +361,15 @@ Content-Type: application/json To update a single language-specific text field, perform a `PUT` or a `PATCH` request to the entity's text field via navigation. ```http -PUT/PATCH /Entity()/texts(ID=,locale='')/ HTTP/1.1 +PUT/PATCH /Entity()/texts(ID=,locale='')/ HTTP/1.1 Content-Type: application/json { - {"name": "Ein neuer Name"} ] + {"name": "Ein neuer Name"} } ``` -::: warning *Note:* +::: warning Language codes need to follow BCP 47 Accepted language codes in the `locale` property need to follow the [BCP 47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) standard but use __underscore__ (`_`) instead of __hyphen__ (`-`), for example `en_GB`. ::: @@ -376,7 +378,7 @@ Accepted language codes in the `locale` property need to follow the [BCP 47](htt To delete a locale's language-specific texts of an entity, perform a `DELETE` request to the entity's texts table through navigation. Specify the entity's key and the locale that you want to delete. ```http -DELETE /Entity()/texts(ID=,locale='') HTTP/1.1 +DELETE /Entity()/texts(ID=,locale='') HTTP/1.1 ``` ## Nested Localized Data From c928b7b42c3a4c75c48e56ee441197a26945cb33 Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Mon, 24 Nov 2025 13:11:06 +0100 Subject: [PATCH 057/439] Fix syntax in Localized Data sample --- guides/localized-data.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/localized-data.md b/guides/localized-data.md index 87161e9b46..9f85a10432 100644 --- a/guides/localized-data.md +++ b/guides/localized-data.md @@ -365,7 +365,7 @@ PUT/PATCH /Entity()/texts(ID=,locale='')/ Date: Tue, 25 Nov 2025 13:24:56 +0100 Subject: [PATCH 058/439] chore(deps): update dependency cspell to v9.3.2 (#2202) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`9.3.0` -> `9.3.2`](https://renovatebot.com/diffs/npm/cspell/9.3.0/9.3.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/9.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.3.0/9.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
streetsidesoftware/cspell (cspell) ### [`v9.3.2`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#v932-2025-11-15) [Compare Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v9.3.1...v9.3.2) ##### Fixes
fix: Add Zig programming language dictionary (#​7998) ##### fix: Add Zig programming language dictionary ([#​7998](https://redirect.github.com/streetsidesoftware/cspell/pull/7998)) ***
fix: Search for TypeScript config files. (#​7997) ##### fix: Search for TypeScript config files. ([#​7997](https://redirect.github.com/streetsidesoftware/cspell/pull/7997)) TypeScript files were allowed, but would not be automatically found. ***
##### Dictionary Updates
fix: Workflow Bot -- Update Dictionaries (main) (#​8004) ##### fix: Workflow Bot -- Update Dictionaries (main) ([#​8004](https://redirect.github.com/streetsidesoftware/cspell/pull/8004)) ### [`v9.3.1`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#v931-2025-11-12) [Compare Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v9.3.0...v9.3.1) ##### Fixes
fix: Support Deno (#​7966) ##### fix: Support Deno ([#​7966](https://redirect.github.com/streetsidesoftware/cspell/pull/7966))
--- ### 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 | 266 ++++++++++++++++++++++++---------------------- 1 file changed, 137 insertions(+), 129 deletions(-) diff --git a/package-lock.json b/package-lock.json index a7631514c0..53ce6a5a66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -369,15 +369,15 @@ } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.3.0.tgz", - "integrity": "sha512-rf5SAdg1EmgCBIo/zFEAIjydlO+VtVLR6oUVeD4rIE7zIPrPdJb0OMUGsxfOH7uePyhcfIxPYTjneQla0e5Ljw==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.3.2.tgz", + "integrity": "sha512-OmKzq/0FATHU671GKMzBrTyLdm25Wnziva7h4ylumVn1wnwWsXGef5bgXD7iuApqfqH9SzxsU0NtTB8m8vwEHQ==", "dev": true, "license": "MIT", "dependencies": { "@cspell/dict-ada": "^4.1.1", "@cspell/dict-al": "^1.1.1", - "@cspell/dict-aws": "^4.0.15", + "@cspell/dict-aws": "^4.0.16", "@cspell/dict-bash": "^4.2.2", "@cspell/dict-companies": "^3.2.7", "@cspell/dict-cpp": "^6.0.14", @@ -416,7 +416,7 @@ "@cspell/dict-markdown": "^2.0.12", "@cspell/dict-monkeyc": "^1.0.11", "@cspell/dict-node": "^5.0.8", - "@cspell/dict-npm": "^5.2.20", + "@cspell/dict-npm": "^5.2.22", "@cspell/dict-php": "^4.1.0", "@cspell/dict-powershell": "^5.0.15", "@cspell/dict-public-licenses": "^2.0.15", @@ -426,35 +426,36 @@ "@cspell/dict-rust": "^4.0.12", "@cspell/dict-scala": "^5.0.8", "@cspell/dict-shell": "^1.1.2", - "@cspell/dict-software-terms": "^5.1.11", + "@cspell/dict-software-terms": "^5.1.13", "@cspell/dict-sql": "^2.2.1", "@cspell/dict-svelte": "^1.0.7", "@cspell/dict-swift": "^2.0.6", "@cspell/dict-terraform": "^1.1.3", "@cspell/dict-typescript": "^3.2.3", - "@cspell/dict-vue": "^3.0.5" + "@cspell/dict-vue": "^3.0.5", + "@cspell/dict-zig": "^1.0.0" }, "engines": { "node": ">=20" } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.3.0.tgz", - "integrity": "sha512-bvpLNS73/SN3969ksipVSYDdMYsxYZqeBDkcA2yKJZ9eHRY/tHUbjTTIvyvlCLODzUiop2RFGrvDPcjyam/FoQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.3.2.tgz", + "integrity": "sha512-YRgpeHN9uY8kUlIw9q+8zJ0tRTAJMbfBTGzCq9Puah09NeMWlRMFPUkXVrkdic6NA7etboZ+zEdoZwRO9EmhiA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "9.3.0" + "@cspell/cspell-types": "9.3.2" }, "engines": { "node": ">=20" } }, "node_modules/@cspell/cspell-pipe": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.3.0.tgz", - "integrity": "sha512-LEl2TYvXnGk/D+Vjq5DBsNQuLsmn3/2QV9dxteK5e323pJRcpEosq76elzsYpVLuB3s1hp2pFQhppWk69Gx2CQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.3.2.tgz", + "integrity": "sha512-REF7ibG79WLEynIMUss/IRDCdYEb1nlE1rj/gt2CbPFzLa6t5MRwW2lajEvXS6/WgbMtsTVHAWi3ALqJzCwxng==", "dev": true, "license": "MIT", "engines": { @@ -462,9 +463,9 @@ } }, "node_modules/@cspell/cspell-resolver": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.3.0.tgz", - "integrity": "sha512-AOIC6xV2XuEWKy/K/CUBHQ7caavDnjb2zflP25j7fGMWpS/GIGKLPjgGQUHFbgNSSy9UY2ZGV7MVCsnD7moW5Q==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.3.2.tgz", + "integrity": "sha512-jLN2Aa/vxm8+IBvTd884SwPEfjxnDwIEPBT3hmqgLlKuUHQ3FMG27lsM4Ik9L2KWBXMgV/wGz4BaxfhKI41Ttw==", "dev": true, "license": "MIT", "dependencies": { @@ -475,9 +476,9 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.3.0.tgz", - "integrity": "sha512-e9ZfG1VJ/kbzh2LBW/TJImEWcEUuBMYSDnIYbQCsclKAWyF3g8eLGxoX7xDbZ82USo4IU2tqYmrDvPcUD8CHxg==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.3.2.tgz", + "integrity": "sha512-/rB8LazM0JzKL+AvZa5fEpLutmwy5QFMpzw8HJd+rDGkzb5r79hURWSRo84QArgaskUqA9XlOHSieDE9pt+WAA==", "dev": true, "license": "MIT", "engines": { @@ -485,9 +486,9 @@ } }, "node_modules/@cspell/cspell-types": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.3.0.tgz", - "integrity": "sha512-WN3R4nqQ7BEgS8UEoPIwNBRuSFT/8GImqXmlx7EHmzBAhevWjF3IDF+OEtokRJ95qik6a4xqJJTJgi624UxDFg==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.3.2.tgz", + "integrity": "sha512-l4H8bMAmdzCbXHO8y1JZiAKszrPEiuLFKWrbhCacHF0iP+PIc/yuQp7cO70m0p70vArRfih6kgGyHFaCy47CfA==", "dev": true, "license": "MIT", "engines": { @@ -509,9 +510,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-aws": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.15.tgz", - "integrity": "sha512-aPY7VVR5Os4rz36EaqXBAEy14wR4Rqv+leCJ2Ug/Gd0IglJpM30LalF3e2eJChnjje3vWoEC0Rz3+e5gpZG+Kg==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.16.tgz", + "integrity": "sha512-a681zShZbtTo947NvTYGLer95ZDQw1ROKvIFydak1e0OlfFCsNdtcYTupn0nbbYs53c9AO7G2DU8AcNEAnwXPA==", "dev": true, "license": "MIT" }, @@ -568,9 +569,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-data-science": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.11.tgz", - "integrity": "sha512-Dt+83nVCcF+dQyvFSaZjCKt1H5KbsVJFtH2X7VUfmIzQu8xCnV1fUmkhBzGJ+NiFs99Oy9JA6I9EjeqExzXk7g==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.12.tgz", + "integrity": "sha512-vI/mg6cI28IkFcpeINS7cm5M9HWemmXSTnxJiu3nmc4VAGx35SXIEyuLGBcsVzySvDablFYf4hsEpmg1XpVsUQ==", "dev": true, "license": "MIT" }, @@ -791,9 +792,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.20", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.20.tgz", - "integrity": "sha512-tJRv1qEdW3f8fxK/D2huoqkSvM6ogz55hAt9RTdB7tZy57wio9Tkj+xfi2DIeOlmf6e94c6pNPZIC/o5rclMhw==", + "version": "5.2.23", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.23.tgz", + "integrity": "sha512-cnlPGzhNkbXFLFURfjzwML2LjHMofqJkemR7lLo9Jwa9IptvzeTn4nOtJMSGfkxNrZPf/IvQ7rH5hamsUQLQ3A==", "dev": true, "license": "MIT" }, @@ -819,13 +820,13 @@ "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.21.tgz", - "integrity": "sha512-M9OgwXWhpZqEZqKU2psB2DFsT8q5SwEahkQeIpNIRWIErjwG7I9yYhhfvPz6s5gMCMhhb3hqcPJTnmdgqGrQyg==", + "version": "4.2.22", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.22.tgz", + "integrity": "sha512-rgF7DuleVK2lkzlw33jjEfxS2a0CU5kwAhOqf5B6XkuaPbqZ/0g0LBCdwglAGccYu7sBuvxRS8Yubk+ytSAFTg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/dict-data-science": "^2.0.11" + "@cspell/dict-data-science": "^2.0.12" } }, "node_modules/@cspell/dict-r": { @@ -864,9 +865,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.11.tgz", - "integrity": "sha512-xwARdlp6o81BK7uNl4qR5CmLBXuc9xWyEeEwzeAw/8SkBdYheVQO6F1Fey2iqMRDT9LAb5Znbg83pJVpLjgBjg==", + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.14.tgz", + "integrity": "sha512-Eu9h090hxHJiqzVFS0WxOZbYXnmb7F1RFIUEg4Nru+D/78bXVDH4b8BiKGVFNRljaieNQRAHaryzdaKJRCH6ZA==", "dev": true, "license": "MIT" }, @@ -912,14 +913,21 @@ "dev": true, "license": "MIT" }, + "node_modules/@cspell/dict-zig": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-zig/-/dict-zig-1.0.0.tgz", + "integrity": "sha512-XibBIxBlVosU06+M6uHWkFeT0/pW5WajDRYdXG2CgHnq85b0TI/Ks0FuBJykmsgi2CAD3Qtx8UHFEtl/DSFnAQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@cspell/dynamic-import": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.3.0.tgz", - "integrity": "sha512-c+coQC+bM1PuHX/Blg1mp2ODPZmMnWzXrZwX/JKpnY0uxcAjUrcmGjdjsV1/S/7ph9OJHvZL5KITCRBgFD1Kqg==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.3.2.tgz", + "integrity": "sha512-au7FyuIHUNI2r9sO3pUBKVTeD/v7c9x/nPUStaAK1bG4rdKt4w+/jUY2IaldAraW5w29z528BboXbiV87SM1kw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.3.0", + "@cspell/url": "9.3.2", "import-meta-resolve": "^4.2.0" }, "engines": { @@ -927,9 +935,9 @@ } }, "node_modules/@cspell/filetypes": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.3.0.tgz", - "integrity": "sha512-pH413zKkMd5lh40HyLNgYfTacIryxsHDhxWShyxS7M+8W9MPl+tmzIHlSEvEVcKUUe3Qpowxo6b6Xkg7taRp/A==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.3.2.tgz", + "integrity": "sha512-0bUxQlmJPRHZrRQD7adbc4lFizO8tGD/6+1cBgU3kV3+NVrpr12y4jU8twCSChhYibZyPr7bnvhkM3cQgb8RzA==", "dev": true, "license": "MIT", "engines": { @@ -937,9 +945,9 @@ } }, "node_modules/@cspell/strong-weak-map": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.3.0.tgz", - "integrity": "sha512-s8/QwCPWvWRXZsAzUbWzv/cgL0xjo7p+5QveThFmD3vODX3IlrC+MfnLpEWQAyTQ7CqB5bRuBVAR2cU9gpzZTA==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.3.2.tgz", + "integrity": "sha512-pFcmOTWCoFMRETb9PCkCmaiZiLb5i2qOZmGH/p/tFEH8kIYhMGfhaulnXwKwS+Ke6PKceQd2YL98bGmo8hL4aQ==", "dev": true, "license": "MIT", "engines": { @@ -947,9 +955,9 @@ } }, "node_modules/@cspell/url": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.3.0.tgz", - "integrity": "sha512-EY4Niv1apHP9RN1mMRP/AHm6xr14fhK+PXnytang6SVwX+tbAEYwwlnFjoEDO6ygPsqs5BBiQ4N7TiSlfmXfmw==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.3.2.tgz", + "integrity": "sha512-TobUlZl7Z7VehhNOMNAg1ABuGizieseftlG94OZJ934JptOhK8TC/1o2ldKrbDH50jyt6E7rPTMV2BW/vWuTzQ==", "dev": true, "license": "MIT", "engines": { @@ -3864,26 +3872,26 @@ } }, "node_modules/cspell": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.3.0.tgz", - "integrity": "sha512-YyXjOS3MAF6d0XggxHZtkyde6Yf0VgXkrFvR8C6jfxcnY0SJrJDKLiOppmm4ol+oWlvt1Dir1neGJW13xN+dUg==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.3.2.tgz", + "integrity": "sha512-3xFyVSTYrYa/QJzLfzsCRMkMXqOsytP8E26DuGrVMJQoLPFmbOXNNtnMu4wrtr17QVloxpvutW77U4vb2L/LDQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "9.3.0", - "@cspell/cspell-pipe": "9.3.0", - "@cspell/cspell-types": "9.3.0", - "@cspell/dynamic-import": "9.3.0", - "@cspell/url": "9.3.0", + "@cspell/cspell-json-reporter": "9.3.2", + "@cspell/cspell-pipe": "9.3.2", + "@cspell/cspell-types": "9.3.2", + "@cspell/dynamic-import": "9.3.2", + "@cspell/url": "9.3.2", "chalk": "^5.6.2", "chalk-template": "^1.1.2", "commander": "^14.0.2", - "cspell-config-lib": "9.3.0", - "cspell-dictionary": "9.3.0", - "cspell-gitignore": "9.3.0", - "cspell-glob": "9.3.0", - "cspell-io": "9.3.0", - "cspell-lib": "9.3.0", + "cspell-config-lib": "9.3.2", + "cspell-dictionary": "9.3.2", + "cspell-gitignore": "9.3.2", + "cspell-glob": "9.3.2", + "cspell-io": "9.3.2", + "cspell-lib": "9.3.2", "fast-json-stable-stringify": "^2.1.0", "flatted": "^3.3.3", "semver": "^7.7.3", @@ -3901,15 +3909,15 @@ } }, "node_modules/cspell-config-lib": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.3.0.tgz", - "integrity": "sha512-YyKMBwRIo8Sh3D9roHWWpW9KnQCkeWOoPJkcLEA3q+UldspkqpjQ8A8bUvigLgVg4dBQosiEUdda3MUZT79Lyg==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.3.2.tgz", + "integrity": "sha512-zXhmA4rqgWQRTVijI+g/mgiep76TvTO4d+P3CHwcqLG57BKVzoW+jkO4qDLC+Neh4b8+CcNWEIr3w16BfuEJAA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "9.3.0", + "@cspell/cspell-types": "9.3.2", "comment-json": "^4.4.1", - "smol-toml": "^1.4.2", + "smol-toml": "^1.5.2", "yaml": "^2.8.1" }, "engines": { @@ -3917,31 +3925,31 @@ } }, "node_modules/cspell-dictionary": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.3.0.tgz", - "integrity": "sha512-+gS59D0ly/UfTDsjKavWCDTSukmQ3HO0Xy+t4+pwgkVOa8kXzhERoXxT0V3v71TJS+kFRHfsWeGekfaVB4n2ng==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.3.2.tgz", + "integrity": "sha512-E3YhOhZzZt1a+AEbFV2B3THCyZ576PDg0mDNUDrU1Y65SyIhf4DC6itfPoAb6R3FI/DI218RqWZg/FTT8lJ2gA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "9.3.0", - "@cspell/cspell-types": "9.3.0", - "cspell-trie-lib": "9.3.0", - "fast-equals": "^5.3.2" + "@cspell/cspell-pipe": "9.3.2", + "@cspell/cspell-types": "9.3.2", + "cspell-trie-lib": "9.3.2", + "fast-equals": "^5.3.3" }, "engines": { "node": ">=20" } }, "node_modules/cspell-gitignore": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.3.0.tgz", - "integrity": "sha512-AdI8WLKGNtTni1P+fbepDBh6u7Mv22diwtqMQoasDPeafArmQHpTp9gc8FgNnQO9tQASB7ZMjIOnLFNvmML+nw==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.3.2.tgz", + "integrity": "sha512-G2bLR+Dfb9GX4Sdm75GfCCa9V/sQYkRbLckuCuVmJxvcDB0xfczAtb6TfAXIziF3oUI6cOB1g+PoNLWBelcK5w==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.3.0", - "cspell-glob": "9.3.0", - "cspell-io": "9.3.0" + "@cspell/url": "9.3.2", + "cspell-glob": "9.3.2", + "cspell-io": "9.3.2" }, "bin": { "cspell-gitignore": "bin.mjs" @@ -3951,13 +3959,13 @@ } }, "node_modules/cspell-glob": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.3.0.tgz", - "integrity": "sha512-Mp1T4Y3utyIB5dgQk+XksdmS97il8TfFI9byMUR6Mprml/I+QglXj38bHX/++DeApfFHr+5y5DgqxmRn3/wnKA==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.3.2.tgz", + "integrity": "sha512-TuSupENEKyOCupOUZ3vnPxaTOghxY/rD1JIkb8e5kjzRprYVilO/rYqEk/52iLwJVd+4Npe8fNhR3KhU7u/UUg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.3.0", + "@cspell/url": "9.3.2", "picomatch": "^4.0.3" }, "engines": { @@ -3965,14 +3973,14 @@ } }, "node_modules/cspell-grammar": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.3.0.tgz", - "integrity": "sha512-X6VrCto78Xm72st+3YZ13qk5jw5sS9QOcS4x3KO41T90YoOMXbMsSH7HPaNrhqaa1rtEKk43kFQp33OLPvsI3Q==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.3.2.tgz", + "integrity": "sha512-ysonrFu9vJvF/derDlEjUfmvLeCfNOWPh00t6Yh093AKrJFoWQiyaS/5bEN/uB5/n1sa4k3ItnWvuTp3+YuZsA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "9.3.0", - "@cspell/cspell-types": "9.3.0" + "@cspell/cspell-pipe": "9.3.2", + "@cspell/cspell-types": "9.3.2" }, "bin": { "cspell-grammar": "bin.mjs" @@ -3982,43 +3990,43 @@ } }, "node_modules/cspell-io": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.3.0.tgz", - "integrity": "sha512-39Gp7asqdsrLvZ9L3BUXYX5wE6gAuvxeklguB4hjz+7i7Jhz02CcjFXDd1VhIA6tJ4hRTHWtgqaoaFv6qQF/vg==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.3.2.tgz", + "integrity": "sha512-ahoULCp0j12TyXXmIcdO/7x65A/2mzUQO1IkOC65OXEbNT+evt0yswSO5Nr1F6kCHDuEKc46EZWwsYAzj78pMg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "9.3.0", - "@cspell/url": "9.3.0" + "@cspell/cspell-service-bus": "9.3.2", + "@cspell/url": "9.3.2" }, "engines": { "node": ">=20" } }, "node_modules/cspell-lib": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.3.0.tgz", - "integrity": "sha512-MM71PponJHWn/tt93hYBSvBVeyivjWjaiROfQ4UlUGw7TIwysAyywH3XNYUnydaHcbjWTk7W12JbEVa8sQaBIQ==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.3.2.tgz", + "integrity": "sha512-kdk11kib68zNANNICuOA8h4oA9kENQUAdeX/uvT4+7eHbHHV8WSgjXm4k4o/pRIbg164UJTX/XxKb/65ftn5jw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-bundled-dicts": "9.3.0", - "@cspell/cspell-pipe": "9.3.0", - "@cspell/cspell-resolver": "9.3.0", - "@cspell/cspell-types": "9.3.0", - "@cspell/dynamic-import": "9.3.0", - "@cspell/filetypes": "9.3.0", - "@cspell/strong-weak-map": "9.3.0", - "@cspell/url": "9.3.0", + "@cspell/cspell-bundled-dicts": "9.3.2", + "@cspell/cspell-pipe": "9.3.2", + "@cspell/cspell-resolver": "9.3.2", + "@cspell/cspell-types": "9.3.2", + "@cspell/dynamic-import": "9.3.2", + "@cspell/filetypes": "9.3.2", + "@cspell/strong-weak-map": "9.3.2", + "@cspell/url": "9.3.2", "clear-module": "^4.1.2", - "cspell-config-lib": "9.3.0", - "cspell-dictionary": "9.3.0", - "cspell-glob": "9.3.0", - "cspell-grammar": "9.3.0", - "cspell-io": "9.3.0", - "cspell-trie-lib": "9.3.0", + "cspell-config-lib": "9.3.2", + "cspell-dictionary": "9.3.2", + "cspell-glob": "9.3.2", + "cspell-grammar": "9.3.2", + "cspell-io": "9.3.2", + "cspell-trie-lib": "9.3.2", "env-paths": "^3.0.0", - "gensequence": "^7.0.0", + "gensequence": "^8.0.8", "import-fresh": "^3.3.1", "resolve-from": "^5.0.0", "vscode-languageserver-textdocument": "^1.0.12", @@ -4030,15 +4038,15 @@ } }, "node_modules/cspell-trie-lib": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.3.0.tgz", - "integrity": "sha512-/hLujE3Gp36hhgJChvp6C3uJdBo5hGOqtyal6HjNmn+K27GXRrrn1L+5RoKaDMgFao9Ks5ccca9NtjQTw1EcoA==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.3.2.tgz", + "integrity": "sha512-1Af7Mq9jIccFQyJl/ZCcqQbtJwuDqpQVkk8xfs/92x4OI6gW1iTVRMtsrh0RTw1HZoR8aQD7tRRCiLPf/D+UiQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "9.3.0", - "@cspell/cspell-types": "9.3.0", - "gensequence": "^7.0.0" + "@cspell/cspell-pipe": "9.3.2", + "@cspell/cspell-types": "9.3.2", + "gensequence": "^8.0.8" }, "engines": { "node": ">=20" @@ -4708,9 +4716,9 @@ "license": "MIT" }, "node_modules/fast-equals": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.2.tgz", - "integrity": "sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.3.tgz", + "integrity": "sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==", "dev": true, "license": "MIT", "engines": { @@ -4978,13 +4986,13 @@ } }, "node_modules/gensequence": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-7.0.0.tgz", - "integrity": "sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==", + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/gensequence/-/gensequence-8.0.8.tgz", + "integrity": "sha512-omMVniXEXpdx/vKxGnPRoO2394Otlze28TyxECbFVyoSpZ9H3EO7lemjcB12OpQJzRW4e5tt/dL1rOxry6aMHg==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/get-intrinsic": { From cbfcc8a6e5096ae32c0d26f3d06d5a38b47706db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Nov 2025 13:25:19 +0100 Subject: [PATCH 059/439] chore(deps): update dependency sass to v1.94.2 (#2208) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [sass](https://redirect.github.com/sass/dart-sass) | [`1.94.0` -> `1.94.2`](https://renovatebot.com/diffs/npm/sass/1.94.0/1.94.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/sass/1.94.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/sass/1.94.0/1.94.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
sass/dart-sass (sass) ### [`v1.94.2`](https://redirect.github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#1942) [Compare Source](https://redirect.github.com/sass/dart-sass/compare/1.94.1...1.94.2) ##### Command-Line Interface - Using `--fatal-deprecation ` no longer emits warnings about deprecations that are obsolete. ##### Dart API - `Deprecation.forVersion` now excludes obsolete deprecations from the set it returns. ##### JS API - Excludes obsolete deprecations from `fatalDeprecations` when a `Version` is passed. ##### Node.js Embedded Host - Fix a bug where a variable could be used before it was initialized during async compilation. ### [`v1.94.1`](https://redirect.github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#1941) [Compare Source](https://redirect.github.com/sass/dart-sass/compare/1.94.0...1.94.1) - No user-visible changes.
--- ### 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 53ce6a5a66..a5104a0b04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7394,9 +7394,9 @@ "peer": true }, "node_modules/sass": { - "version": "1.94.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.94.0.tgz", - "integrity": "sha512-Dqh7SiYcaFtdv5Wvku6QgS5IGPm281L+ZtVD1U2FJa7Q0EFRlq8Z3sjYtz6gYObsYThUOz9ArwFqPZx+1azILQ==", + "version": "1.94.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.94.2.tgz", + "integrity": "sha512-N+7WK20/wOr7CzA2snJcUSSNTCzeCGUTFY3OgeQP3mZ1aj9NMQ0mSTXwlrnd89j33zzQJGqIN52GIOmYrfq46A==", "dev": true, "license": "MIT", "dependencies": { From 948f6053c23fd7b86c20688101aa2fff5ddef6d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Nov 2025 13:25:44 +0100 Subject: [PATCH 060/439] chore(deps): update eslint (#2209) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.46.4` -> `8.48.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.46.4/8.48.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.46.4/8.48.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | [eslint-plugin-vue](https://eslint.vuejs.org) ([source](https://redirect.github.com/vuejs/eslint-plugin-vue)) | [`10.5.1` -> `10.6.0`](https://renovatebot.com/diffs/npm/eslint-plugin-vue/10.5.1/10.6.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/eslint-plugin-vue/10.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint-plugin-vue/10.5.1/10.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
typescript-eslint/typescript-eslint (@​typescript-eslint/parser) ### [`v8.48.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8480-2025-11-24) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.47.0...v8.48.0) This was a version bump only for parser to align it with other projects, there were no code changes. 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.47.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8470-2025-11-17) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.46.4...v8.47.0) This was a version bump only for parser to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.
vuejs/eslint-plugin-vue (eslint-plugin-vue) ### [`v10.6.0`](https://redirect.github.com/vuejs/eslint-plugin-vue/blob/HEAD/CHANGELOG.md#1060) [Compare Source](https://redirect.github.com/vuejs/eslint-plugin-vue/compare/v10.5.1...v10.6.0) ##### Minor Changes - Updated [`vue/no-import-compiler-macros`](https://eslint.vuejs.org/rules/no-import-compiler-macros.html) to clarify that macros are not allowed outside ` \ No newline at end of file diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index 5393bd95ee..aab94a8784 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -3,6 +3,7 @@ import { EnhanceAppContext } from 'vitepress'; import Layout from './Layout.vue'; import IndexList from './components/IndexList.vue'; import ImplVariantsHint from './components/implvariants/ImpVariantsHint.vue'; +import StatusBadge from './components/StatusBadge.vue'; import Alpha from './components/Alpha.vue'; import Beta from './components/Beta.vue'; import Gamma from './components/Gamma.vue'; @@ -26,6 +27,7 @@ export default { ctx.app.component('Config', CfgInspect) ctx.app.component('IndexList', IndexList) ctx.app.component('ImplVariantsHint', ImplVariantsHint) + ctx.app.component('StatusBadge', StatusBadge) ctx.app.component('Alpha', Alpha) ctx.app.component('Beta', Beta) ctx.app.component('Gamma', Gamma) From 85d2e29be118d9080c4c655da5c30a5fb79f5031 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 18 Dec 2025 11:07:04 +0100 Subject: [PATCH 134/439] remove examples from internal --- get-started/learning-sources.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/learning-sources.md b/get-started/learning-sources.md index a8ea6f96e4..6d4f954692 100644 --- a/get-started/learning-sources.md +++ b/get-started/learning-sources.md @@ -40,7 +40,7 @@ Here's a list of the badges and their meanings: | | Alpha features are experimental. They may never be generally available. If released subsequently, the APIs and behavior might change | | | Beta features are planned to be generally available in subsequent releases, however, APIs and their behavior are not final and may change in the general release | | | Gamma features are finalized and ready to use, stable, and supported long term. Yet, as they have a broad scope and range, you should ensure to test them thoroughly. | -| | SAP specific features, processes, or infrastructure. Examples are _Deploy with Confidence_, _SAP product standards_, or _xMake_ | +| | SAP specific features, processes, or infrastructure. | ### CAP Notebooks Integration From 236429e42aa4d31d1f743d0cc1ab371198d0e577 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 18 Dec 2025 11:08:18 +0100 Subject: [PATCH 135/439] remove empty sections --- get-started/learning-sources.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/get-started/learning-sources.md b/get-started/learning-sources.md index 6d4f954692..aec2e6e110 100644 --- a/get-started/learning-sources.md +++ b/get-started/learning-sources.md @@ -24,10 +24,6 @@ It's organized as follows: | [Plugins](../plugins/) | **Curated list of plugins** that extend the capabilities of the CAP framework. | | [Releases](../releases/) | The place where you can stay up to date with the most recent information about new features and changes in CAP. | - -### Node/Java Toggles - - ### Feature Status Badges Within the docs, you find badges that indicate the status of a feature, or API. @@ -43,12 +39,6 @@ Here's a list of the badges and their meanings: | | SAP specific features, processes, or infrastructure. | -### CAP Notebooks Integration - - - - - ## Sample Projects In here, we collected several interesting sample projects for you. Not all of them are maintained by the CAP team, not all of them cover CAP in its entirety, but they are well-prepared sources we can recommend for your learning. From the short description we provide for every resource, you're hopefully able to tell if that fits to the need you're currently having. From 32cc95e6635a1345e953cae9f0b6cdc94a81b52a Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 18 Dec 2025 16:08:20 +0100 Subject: [PATCH 136/439] typo cds mta instead of cds add mta --- tools/cds-cli.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/cds-cli.md b/tools/cds-cli.md index bccbed432e..4fc7682ba5 100644 --- a/tools/cds-cli.md +++ b/tools/cds-cli.md @@ -724,7 +724,7 @@ Make sure the port matches to what the debug tunnel uses (see the message in the > [!NOTE] SapMachine is required > SapMachine is required as Java runtime environment for this feature to work.
-> There is nothing to do if you set up your MTA deployment descriptors with [`cds mta`](../guides/deployment/to-cf#add-mta-yaml) or CAP project wizards. +> There is nothing to do if you set up your MTA deployment descriptors with [`cds add mta`](../guides/deployment/to-cf#add-mta-yaml) or CAP project wizards. > See the [documentation of SapMachine](https://help.sap.com/docs/btp/sap-business-technology-platform/sapmachine) for how to configure this manually. #### Local Applications From 72d959f3c2eef0c569c8c6f9976b5b5ae5125650 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 18 Dec 2025 20:15:08 +0100 Subject: [PATCH 137/439] chore(deps): update dependency @sap/cds to v9.6.1 (#2294) --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e7aa3bdb5b..ecc8bf27d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2343,9 +2343,9 @@ ] }, "node_modules/@sap/cds": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-9.6.0.tgz", - "integrity": "sha512-KZdAQZl8B2hvY71eh0FlXezTMuAsFILNgPZwqcT45ibAU4GSQB1eDc51jqA3t6UnpWN+jLSZDYNOagpztBkwJg==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-9.6.1.tgz", + "integrity": "sha512-Bx6asOBhYXBE+jB6FtmyHmAjoPi11MYb/v/AYpnp0jqL/+kAXXWo6YOxJHqpx1k5Um5FS1r6gM/5tVAo/ta7bw==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { From fa4c7328290633e5ec9ea9c5ef4548fa5f65caa5 Mon Sep 17 00:00:00 2001 From: Johannes Vogt Date: Thu, 18 Dec 2025 20:34:12 +0100 Subject: [PATCH 138/439] actual separation of concern (#2285) The section `separation of concerns` on the authorization page currently does not show any separation => use actual separation of concerns. Screenshot 2025-12-16 at 14 03 45 --- guides/security/authorization.md | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/guides/security/authorization.md b/guides/security/authorization.md index 2c5edc71cf..d1cb7578ad 100644 --- a/guides/security/authorization.md +++ b/guides/security/authorization.md @@ -830,19 +830,16 @@ service CustomerService { ::: code-group ```cds [services-auth.cds] -service ReviewsService @(requires: 'authenticated-user'){ - /*...*/ -} - -service CustomerService @(requires: 'authenticated-user'){ - entity Orders @(restrict: [ - { grant: ['READ','WRITE'], to: 'admin' }, - { grant: 'READ', where: 'buyer = $user' }, - ]){/*...*/} - entity Approval @(restrict: [ - { grant: 'WRITE', where: '$user.level > 2' } - ]){/*...*/} -} +annotate ReviewsService with @(requires: 'authenticated-user'); + +annotate CustomerService with @(requires: 'authenticated-user'); +annotate CustomerService.Orders with @(restrict: [ + { grant: ['READ','WRITE'], to: 'admin' }, + { grant: 'READ', where: 'buyer = $user' }, +]); +annotate CustomerService.Approval with @(restrict: [ + { grant: 'WRITE', where: '$user.level > 2' } +]); ``` ::: From c19b5a9dc7891dd881fe5e52d130492a15d6998d Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 19 Dec 2025 07:52:50 +0100 Subject: [PATCH 139/439] Added services folder --- guides/{ => services}/constraints.md | 0 guides/{ => services}/status-flows.md | 4 ++-- menu.md | 13 ++++--------- 3 files changed, 6 insertions(+), 11 deletions(-) rename guides/{ => services}/constraints.md (100%) rename guides/{ => services}/status-flows.md (97%) diff --git a/guides/constraints.md b/guides/services/constraints.md similarity index 100% rename from guides/constraints.md rename to guides/services/constraints.md diff --git a/guides/status-flows.md b/guides/services/status-flows.md similarity index 97% rename from guides/status-flows.md rename to guides/services/status-flows.md index a8216abd1c..9f62684e67 100644 --- a/guides/status-flows.md +++ b/guides/services/status-flows.md @@ -32,7 +32,7 @@ In CAP Node.js support for flows is built-in and available out of the box. For C The following example is taken from the [@capire/xtravels](https://github.com/capire/xtravels) sample application, in which we want to model a status flow for travel requests as depicted below: -![A flow diagram showing three status states connected by arrows. The leftmost oval contains the word Open. An arrow labeled accept points from Open to an oval containing Accepted at the top right. Another arrow labeled reject points from Open to an oval containing Canceled at the bottom right.](assets/flows/xtravels-flow-simple.svg) +![A flow diagram showing three status states connected by arrows. The leftmost oval contains the word Open. An arrow labeled accept points from Open to an oval containing Accepted at the top right. Another arrow labeled reject points from Open to an oval containing Canceled at the bottom right.](../assets/flows/xtravels-flow-simple.svg) We can easily model this flow in CDS as follows: @@ -136,7 +136,7 @@ Use the target state `$flow.previous` to return a previous state from a current The following example introduces a `Blocked` state with two possible previous states, `Open` and `InReview`, and an `unblock` action that restores the previous state. -![The graphic is explained in the accompanying text.](assets/flows/xtravels-flow-previous.svg) +![The graphic is explained in the accompanying text.](../assets/flows/xtravels-flow-previous.svg) ::: code-group ```cds [srv/flow-previous.cds] diff --git a/menu.md b/menu.md index b08a7f4f91..58b91e8089 100644 --- a/menu.md +++ b/menu.md @@ -22,21 +22,16 @@ ## [Providing Services](guides/providing-services) - ### [Intro: Core Concepts](guides/providing-services#introduction) + ### [Core Concepts](guides/providing-services#introduction) ### [Service Definitions](guides/providing-services#service-definitions) - ### [Generic Providers](guides/providing-services#generic-providers) - ### [Input Validation](guides/providing-services#input-validation) + ### [Served out-of-the-box](guides/providing-services#generic-providers) + ### [Constraints](guides/services/constraints) + ### [Status Flows](guides/services/status-flows) ### [Custom Logic](guides/providing-services#custom-logic) ### [Actions & Functions](guides/providing-services#actions-functions) ### [Serving Media Data](guides/providing-services#serving-media-data) ### [Best Practices](guides/providing-services#best-practices) - -## [Constraints](guides/constraints) - -## [Status Flows](guides/status-flows) - - ## [Consuming Services](guides/using-services) ### [Introduction](guides/using-services#introduction) From f5b2c15793857a8c5e38d89cf6762043dadd5c7f Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 19 Dec 2025 10:14:22 +0100 Subject: [PATCH 140/439] anchor for flows and constraints --- guides/providing-services.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/guides/providing-services.md b/guides/providing-services.md index 37e9381a21..ee556fac03 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -1101,6 +1101,24 @@ entity Person : cuid { Next to input validation, you can add [database constraints](databases#database-constraints) to prevent invalid data from being persisted. +## [Constraints](services/constraints) + +Declarative constraints allow you to express conditions using CXL expressions that are validated automatically whenever data is written, greatly reducing the need for extensive custom code for input validation. + +::: tip Read the guide +Find additional information about constraints in this guide: +[→ **_Constraints_**](services/status-flows) +::: + +## [Status-Transition Flows](services/status-flows) + +Status-transition flows ensure transitions are explicitly modeled, validated, and executed in a controlled and reliable way, thereby eliminating the need for extensive custom coding. + +::: tip Read the guide +Find additional information about modeling status-transition flows in this guide:
+[→ **_Status-Transition Flows_**](services/status-flows) +::: + ## Custom Logic From 5f41e546115d8aa92e401e757e744b10a622758f Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 19 Dec 2025 10:14:35 +0100 Subject: [PATCH 141/439] add anchor for task queues --- guides/messaging/index.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/guides/messaging/index.md b/guides/messaging/index.md index 01bf0dfc40..374483cb0f 100644 --- a/guides/messaging/index.md +++ b/guides/messaging/index.md @@ -644,3 +644,17 @@ S4Bupa.on ('BusinessPartner.Changed', msg => {...}) Find more detailed information specific to receiving events from SAP S/4HANA in this separate guide: [→ **_Receiving Events from SAP S/4HANA_**](./s4) ::: + + +## [Task Queues](task-queues) + +The _Outbox Pattern_ is a reliable strategy used in distributed systems to ensure that messages or events are consistently recorded and delivered, even in the face of failures. +This pattern, however, can not only be applied to outbound messages, but to inbound messages and server-internal background tasks as well. +The core principle remains the same: +1. Persist the message (or _task_) in the database -- using the same transaction as the triggering action, if applicable +2. Process it asynchronously afterwards -- incl. retries, if necessary + +::: tip Read the guide +Find additional information about modeling task queues in this guide: +[→ **_Task Queues_**](task-queues) +::: \ No newline at end of file From 92c73f89fc0c5e9f54e94caaf0b85ce40103ddc4 Mon Sep 17 00:00:00 2001 From: sjvans <30337871+sjvans@users.noreply.github.com> Date: Fri, 19 Dec 2025 10:38:47 +0100 Subject: [PATCH 142/439] update flows diagrams (#2296) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: René Jeglinsky --- guides/assets/flows/xtravels-flow-extend.svg | 4 - .../assets/flows/xtravels-flow-previous.svg | 4 +- guides/assets/flows/xtravels-flow-simple.svg | 4 +- guides/flows.md | 132 ------------------ 4 files changed, 4 insertions(+), 140 deletions(-) delete mode 100644 guides/assets/flows/xtravels-flow-extend.svg delete mode 100644 guides/flows.md diff --git a/guides/assets/flows/xtravels-flow-extend.svg b/guides/assets/flows/xtravels-flow-extend.svg deleted file mode 100644 index 55fde8c076..0000000000 --- a/guides/assets/flows/xtravels-flow-extend.svg +++ /dev/null @@ -1,4 +0,0 @@ - - -OpenAcceptedWithdrawnacceptwithdrawCanceledreject \ No newline at end of file diff --git a/guides/assets/flows/xtravels-flow-previous.svg b/guides/assets/flows/xtravels-flow-previous.svg index ad2a583c85..7416a412c9 100644 --- a/guides/assets/flows/xtravels-flow-previous.svg +++ b/guides/assets/flows/xtravels-flow-previous.svg @@ -1,4 +1,4 @@ -OpenInReviewAcceptedCanceled→ to previous statereviewacceptblockreopenBlockedrejectblockunblock \ No newline at end of file +OpenInReviewAcceptedRejected→ to previous statereviewacceptblockreopenBlockedrejectblockunblock \ No newline at end of file diff --git a/guides/assets/flows/xtravels-flow-simple.svg b/guides/assets/flows/xtravels-flow-simple.svg index 24b2c46de4..80806ca3ae 100644 --- a/guides/assets/flows/xtravels-flow-simple.svg +++ b/guides/assets/flows/xtravels-flow-simple.svg @@ -1,4 +1,4 @@ -OpenAcceptedCanceledacceptreject \ No newline at end of file +OpenAcceptedRejectedacceptreject \ No newline at end of file diff --git a/guides/flows.md b/guides/flows.md deleted file mode 100644 index 3d32fd547c..0000000000 --- a/guides/flows.md +++ /dev/null @@ -1,132 +0,0 @@ ---- -synopsis: > - Learn how to define and manage status-transition flows in your CDS models using annotations, without writing custom handlers. -#status: released ---- - -# Status-Transition Flows - -[...] - -## Extending Flows - -[...] - -### Example Use Case - -Consider a requirement where customers can withdraw from travel — for example, due to sickness — but only up to 24 hours before travel begins. This requires custom validation logic. - -The status transition diagram below shows the new state and transitions: -![](./assets/flows/xtravels-flow-extend.svg) - -First, add the `Withdrawn` status and the `withdrawTravel` action to the model: - -```cds -// db/schema.cds -entity TravelStatus : sap.common.CodeList { - key code : String(1) enum { - Open = 'O'; - Accepted = 'A'; - Canceled = 'X'; - Withdrawn = 'W'; // [!code highlight] - } -} - -// srv/travel-service.cds -service TravelService { - - // Define entity and actions - entity Travels as projection on db.Travels - actions { - action rejectTravel(); - action acceptTravel(); - action withdrawTravel(); // [!code highlight] - action deductDiscount( percent: Percentage not null ) returns Travels; - }; - - // Define flow through actions - annotate Travels with @flow.status: Status actions { - rejectTravel @from: #Open @to: #Canceled; - acceptTravel @from: #Open @to: #Accepted; - withdrawTravel @from: [#Open, #Accepted]; // [!code highlight] - deductDiscount @from: #Open; - }; - -} -``` - -Note that `withdrawTravel` has no `@to` annotation; you implement the transition in a custom handler. - - -### In Java - -Here is a custom Java implementation that enforces the 24-hour rule: - -```java -@Component -@ServiceName(TravelService_.CDS_NAME) -public class WithdrawTravelHandler implements EventHandler { - - private final PersistenceService persistenceService; - - public WithdrawTravelHandler(PersistenceService persistenceService) { - this.persistenceService = persistenceService; - } - - @Before(entity = Travel_.CDS_NAME) - public void check24HoursBeforeTravel(final TravelWithdrawTravelContext context, CqnStructuredTypeRef travelRef) { - Travel travel = ((ApplicationService) context.getService()).run( - Select.from(travelRef).columns(Travel_.BEGIN_DATE)).first(Travel.class) - .orElseThrow(() -> new ServiceException(ErrorStatuses.BAD_REQUEST, "TRAVEL_NOT_FOUND")); - - if (travel.beginDate().isBefore(LocalDate.now().minusDays(1))) { - context.getMessages().error("Travel can only be withdrawn up to 24 hours before travel begins."); - } - } - - @On(entity = Travel_.CDS_NAME) - public void onWithdrawTravel(final TravelWithdrawTravelContext context, CqnStructuredTypeRef travelRef) { - boolean isDraftTarget =DraftUtils.isDraftTarget( - travelRef, - context.getModel().findEntity(travelRef.targetSegment().id()).get(), - context.getModel()); - boolean isDraftEnabled = DraftUtils.isDraftEnabled(context.getTarget()); - var travel = Travel.create(); - travel.travelStatusCode(TravelStatusCode.WITHDRAWN); - if (isDraftTarget) { - ((DraftService) context.getService()).patchDraft(Update.entity(travelRef).data(travel)); - } else { - AnalysisResult analysis = CqnAnalyzer.create(context.getModel()).analyze(travelRef); - Map keys = analysis.targetKeyValues(); - if (isDraftEnabled) { - keys.remove(Drafts.IS_ACTIVE_ENTITY); - } - persistenceService.run(Update.entity(context.getTarget()).matching(keys).data(travel)); - } - context.setCompleted(); - } - -} -``` - -The custom `before` handler reads the travel's `BeginDate` and validates that withdrawal occurs within the allowed timeframe. The custom `on` handler updates the travel status to `Withdrawn` and marks the action as completed. - - - -The custom `on` handler updates the travel status to `Withdrawn` and marks the action as completed. - -::: warning TODO: we should actually do the following! --> `withdrawTravel` should only have an additional before check. -::: - -While you could use the `@to` annotation with the default handler, omitting it signals that you implemented custom transition logic. - - -### In Node.js - -TODO From 77ed90ebf709f8ea88dcbdfe671da7dd31b7acb3 Mon Sep 17 00:00:00 2001 From: sjvans <30337871+sjvans@users.noreply.github.com> Date: Fri, 19 Dec 2025 10:48:50 +0100 Subject: [PATCH 143/439] fix: `.actions` instead of deprecated `.operations` (#2267) --- node.js/core-services.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/node.js/core-services.md b/node.js/core-services.md index cac08dc897..0dd8836796 100644 --- a/node.js/core-services.md +++ b/node.js/core-services.md @@ -396,19 +396,23 @@ var srv.options : { //> from cds.requires config -### . entities {.property alt="The following documentation on operations also applies to entities. "} +### . entities {.property alt="The following documentation on actions also applies to entities. "} -### . events {.property alt="The following documentation on operations also applies to events. "} +### . events {.property alt="The following documentation on actions also applies to events. "} -### . operations {.property} +### . operations {.property .deprecated alt="The following documentation on actions also applies to operations. "} + +Use [`.actions`](#actions) instead. + +### . actions {.property} ```tsx -var srv.entities/events/operations : Iterable <{ +var srv.entities/events/actions : Iterable <{ name : CSN definition }> ``` -These properties provide convenient access to the CSN definitions of the *entities*, *events* and operations — that is *actions* and *functions* — exposed by this service. +These properties provide convenient access to the CSN definitions of the *entities*, *events* and *actions* (incl. *functions*) exposed by this service. They are *iterable* objects, which means you can use them in all of these ways: @@ -423,7 +427,6 @@ for (let d of this.entities) //... d is a CSN definition - ### srv. init() {.method} ```tsx From f978fea999735be6fbead8884b44afb4e931dbda Mon Sep 17 00:00:00 2001 From: DJ Adams Date: Fri, 19 Dec 2025 09:49:50 +0000 Subject: [PATCH 144/439] Associations tweaks (#2206) Minor fixes and improvements for the CDL section on Associations --- cds/cdl.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cds/cdl.md b/cds/cdl.md index c263c274c1..b6d6026d50 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -995,6 +995,7 @@ entity Emp2Addr { ``` [Learn more about **Managed Compositions for Many-to-many Relationships**.](#for-many-to-many-relationships){.learn-more} +[Watch a short video by DJ Adams to see an example of how a link entity can be used.](https://www.youtube.com/shorts/yGg3YD1weIA){.learn-more}
@@ -1023,13 +1024,14 @@ entity Orders.Items { ``` :::info Contained-in relationship -Essentially, Compositions are the same as _[associations](#associations)_, just with the additional information that this association represents a _contained-in_ relationship so the same syntax and rules apply in their base form. +Essentially, Compositions are the same as _[associations](#associations)_, just with the additional information that this association represents a _contained-in_ relationship; so the same syntax and rules apply in their base form. ::: ::: warning Limitations of Compositions of one Using compositions of one for entities is discouraged. There is often no added value of using them as the information can be placed in the root entity. Compositions of one have limitations as follow: - Very limited Draft support. Fiori elements does not support compositions of one unless you take care of their creation in a custom handler. - No extensive support for modifications over paths if compositions of one are involved. You must fill in foreign keys manually in a custom handler. +See the [Keep it Simple, Stupid](/guides/domain-modeling#keep-it-simple-stupid) best practice, especially the [Prefer Flat Models](/guides/domain-modeling#prefer-flat-models) section. ::: ### Managed Compositions of Aspects {#managed-compositions} @@ -1082,7 +1084,7 @@ aspect OrderItems { #### Default Target Cardinality -If not otherwise specified, a managed composition of an aspect has the default target cardinality *to-one*. +If not otherwise specified, a managed composition of an aspect has the default target cardinality *to-one* for the backlink. #### For Many-to-many Relationships From b4923420bacf0fb7c0f1d5272b708a79b86863f0 Mon Sep 17 00:00:00 2001 From: Johannes Vogt Date: Fri, 19 Dec 2025 10:50:58 +0100 Subject: [PATCH 145/439] Minor typo fix in assert docs (#2297) --- guides/providing-services.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/providing-services.md b/guides/providing-services.md index ee556fac03..eec343cb02 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -941,7 +941,7 @@ The `@assert.target` check constraint relies on database locks to ensure accurat ### `@assert` -Annotate an element with `@assert` to define CXL expressions that are validated _after_ the data has been written to the database but _before_ it is committed it. If validation fails, the expression returns a `String` that indicates an error to the runtime. If validation passes, the expression returns `null`. +Annotate an element with `@assert` to define CXL expressions that are validated _after_ the data has been written to the database but _before_ it is committed. If validation fails, the expression returns a `String` that indicates an error to the runtime. If validation passes, the expression returns `null`. ```cds entity OrderItems : cuid { From 9858fed9dcafc6be7597360e0182ad034f6004da Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 19 Dec 2025 11:08:53 +0100 Subject: [PATCH 146/439] Moved all @assert, @readonly, @mandatory to guides/services/constraints --- cds/annotations.md | 14 +- cds/cdl.md | 4 +- guides/databases.md | 2 +- guides/providing-services.md | 347 ++--------------------- guides/services/constraints.md | 328 +++++++++++++++++++++ java/change-tracking.md | 2 +- java/working-with-cql/query-execution.md | 4 +- tools/cds-cli.md | 2 +- 8 files changed, 359 insertions(+), 344 deletions(-) diff --git a/cds/annotations.md b/cds/annotations.md index 5903310a28..7a5c6a0be0 100644 --- a/cds/annotations.md +++ b/cds/annotations.md @@ -36,11 +36,11 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ | Annotation | Description | |---------------------|----------------------------------------------------------------------| -| `@readonly ` | see [Input Validation](../guides/providing-services#readonly) | -| `@mandatory` | see [Input Validation](../guides/providing-services#mandatory) | -| `@assert.target` | see [Input Validation](../guides/providing-services#assert-target) | -| `@assert.format` | see [Input Validation](../guides/providing-services#assert-format) | -| `@assert.range` | see [Input Validation](../guides/providing-services#assert-range) | +| `@readonly ` | see [Input Validation](../guides/services/constraints#readonly) | +| `@mandatory` | see [Input Validation](../guides/services/constraints#mandatory) | +| `@assert.target` | see [Input Validation](../guides/services/constraints#assert-target) | +| `@assert.format` | see [Input Validation](../guides/services/constraints#assert-format) | +| `@assert.range` | see [Input Validation](../guides/services/constraints#assert-range) | @@ -91,8 +91,8 @@ Intrinsically supported OData Annotations: | Annotation | Description | |------------------------|------------------------------------------------------------------| -| `@Core.Computed` | see [Providing Services](../guides/providing-services#readonly) | -| `@Core.Immutable` | see [Providing Services](../guides/providing-services#readonly) | +| `@Core.Computed` | see [Providing Services](../guides/services/constraints#readonly) | +| `@Core.Immutable` | see [Providing Services](../guides/services/constraints#readonly) | | `@Core.MediaType` | see [Media Data](../guides/providing-services#serving-media-data) | | `@Core.IsMediaType` | see [Media Data](../guides/providing-services#serving-media-data) | | `@Core.IsUrl` | see [Media Data](../guides/providing-services#serving-media-data) | diff --git a/cds/cdl.md b/cds/cdl.md index b6d6026d50..6a1292d9c0 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -482,7 +482,7 @@ entity Bar { An element definition can be prefixed with modifier keyword `virtual`. This keyword indicates that this element isn't added to persistent artifacts, that is, tables or views in SQL databases. Virtual elements are part of OData metadata. -By default, virtual elements are annotated with `@Core.Computed: true`, not writable for the client and will be [silently ignored](../guides/providing-services#readonly). This means also, that they are not accessible in custom event handlers. If you want to make virtual elements writable for the client, you explicitly need to annotate these elements with `@Core.Computed: false`. Still those elements are not persisted and therefore, for example, not sortable or filterable. Further, during read requests, you need to provide values for all virtual elements. You can do this by using post-processing in an `after` handler. +By default, virtual elements are annotated with `@Core.Computed: true`, not writable for the client and will be [silently ignored](../guides/services/constraints#readonly). This means also, that they are not accessible in custom event handlers. If you want to make virtual elements writable for the client, you explicitly need to annotate these elements with `@Core.Computed: false`. Still those elements are not persisted and therefore, for example, not sortable or filterable. Further, during read requests, you need to provide values for all virtual elements. You can do this by using post-processing in an `after` handler. ```cds entity Employees { @@ -695,7 +695,7 @@ entity Order { } ``` -To enforce your _enum_ values during runtime, use the [`@assert.range` annotation](../guides/providing-services#assert-range). +To enforce your _enum_ values during runtime, use the [`@assert.range` annotation](../guides/services/constraints#assert-range). For localization of enum values, model them as [code list](./common#adding-own-code-lists).
diff --git a/guides/databases.md b/guides/databases.md index 784069076a..1c18cbbb4a 100644 --- a/guides/databases.md +++ b/guides/databases.md @@ -916,7 +916,7 @@ CREATE TABLE Books_texts ( ::: warning Database constraints aren't intended for checking user input Instead, they protect the integrity of your data in the database layer against programming errors. If a constraint violation occurs, the error messages coming from the database aren't standardized by the runtimes but presented as-is. -→ Use [`@assert.target`](providing-services#assert-target) for corresponding input validations. +→ Use [`@assert.target`](services/constraints#assert-target) for corresponding input validations. ::: ## Standard Database Functions diff --git a/guides/providing-services.md b/guides/providing-services.md index eec343cb02..dea60467db 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -23,7 +23,7 @@ The following sections give a brief overview of CAP's core concepts. A CAP application commonly provides services defined in CDS models and served by the CAP runtimes. Every active thing in CAP is a service. They embody the behavioral aspects of a domain in terms of exposed entities, actions, and events. -![This graphic is explained in the accompanying text.](assets/providing-services/service-centric-paradigm.drawio.svg) +![This graphic is explained in the accompanying text.](./assets/providing-services/service-centric-paradigm.drawio.svg) ### Ubiquitous Events @@ -155,14 +155,14 @@ service AdminService { ## Generic Providers -The CAP runtimes for [Node.js](../node.js/) and [Java](../java/) provide a wealth of generic implementations, which serve most requests automatically, with out-of-the-box solutions to recurring tasks such as search, pagination, or input validation — the majority of this guide focuses on these generic features. +The CAP runtimes for [Node.js](../node.js) and [Java](../java) provide a wealth of generic implementations, which serve most requests automatically, with out-of-the-box solutions to recurring tasks such as search, pagination, or input validation — the majority of this guide focuses on these generic features. In effect, a service definition [as introduced above](#service-definitions) is all we need to run a full-fledged server out of the box. The need for coding reduces to real custom logic specific to a project's domain → section [Custom Logic](#custom-logic) picks that up. ### Serving CRUD Requests {#serving-crud} -The CAP runtimes for [Node.js](../node.js/) and [Java](../java/) provide generic handlers, which automatically serve all CRUD requests to entities for CDS-modelled services on top of a default [primary database](databases). +The CAP runtimes for [Node.js](../node.js) and [Java](../java) provide generic handlers, which automatically serve all CRUD requests to entities for CDS-modelled services on top of a default [primary database](databases). This comprises read and write operations like that: @@ -774,332 +774,19 @@ Here's an overview table: ## Input Validation -CAP runtimes automatically validate user input, controlled by the following annotations. +CAP runtimes provide generic input validation for incoming requests out of the box, based on the data types and constraints defined in CDS models. You can add custom input validation by... +- [Declarative Constraints](./services/constraints) with the following annotations: + - [`@assert`](./services/constraints#assert), incl. derivates: + - [`@assert.format`](./services/constraints#assert-format) + - [`@assert.range`](./services/constraints#assert-range) + - [`@assert.target`](./services/constraints#assert-target) + - [`@mandatory`](./services/constraints#mandatory) + - [`@readonly`](./services/constraints#readonly) +- [Programmatic Validations](#custom-logic) in custom event handlers -### `@readonly` - -Elements annotated with `@readonly`, as well as [_calculated elements_](../cds/cdl#calculated-elements), are protected against write operations. That is, if a CREATE or UPDATE operation specifies values for such fields, these values are **silently ignored**. - -By default [`virtual` elements](../cds/cdl#virtual-elements) are also _calculated_. -::: tip -The same applies for fields with the [OData Annotations](../advanced/odata#annotations) `@FieldControl.ReadOnly` (static), `@Core.Computed`, or `@Core.Immutable` (the latter only on UPDATEs). -::: - -::: warning Not allowed on keys -Do not use the `@readonly` annotation on keys in all variants. -::: - -
- - -### `@mandatory` - -Elements marked with `@mandatory` are checked for nonempty input: `null` and (trimmed) empty strings are rejected. - -```cds -service Sue { - entity Books { - key ID : UUID; - title : String @mandatory; - } -} -``` - -In addition to server-side input validation as introduced above, this adds a corresponding `@FieldControl` annotation to the EDMX so that OData / Fiori clients would enforce a valid entry, thereby avoiding unnecessary request roundtrips: - -```xml - - - -``` - -
- - -### `@assert .format` - -Allows you to specify a regular expression string (in ECMA 262 format in CAP Node.js and java.util.regex.Pattern format in CAP Java) that all string input must match. - -```cds -entity Foo { - bar : String @assert.format: '[a-z]ear'; -} -``` - - -### `@assert .range` - -Allows you to specify `[ min, max ]` ranges for elements with ordinal types — that is, numeric or date/time types. For `enum` elements, `true` can be specified to restrict all input to the defined enum values. - -```cds -entity Foo { - bar : Integer @assert.range: [ 0, 3 ]; - boo : Decimal @assert.range: [ 2.1, 10.25 ]; - car : DateTime @assert.range: ['2018-10-31', '2019-01-15']; - zoo : String @assert.range enum { high; medium; low; }; -} -``` -#### ... with open intervals - -By default, specified `[min,max]` ranges are interpreted as closed intervals, that means, the performed checks are `min ≤ input ≤ max`. You can also specify open intervals by wrapping the *min* and/or *max* values into parentheses like that: - - -```cds -@assert.range: [(0),100] // 0 < input ≤ 100 -@assert.range: [0,(100)] // 0 ≤ input < 100 -@assert.range: [(0),(100)] // 0 < input < 100 -``` -In addition, you can use an underscore `_` to represent *Infinity* like that: - -```cds -@assert.range: [(0),_] // positive numbers only, _ means +Infinity here -@assert.range: [_,(0)] // negative number only, _ means -Infinity here -``` -> Basically values wrapped in parentheses _`(x)`_ can be read as _excluding `x`_ for *min* or *max*. Note that the underscore `_` doesn't have to be wrapped into parentheses, as by definition no number can be equal to *Infinity* . - -Support for open intervals and infinity is available for CAP Node.js since `@sap/cds` version **8.5** and in CAP Java since version **3.5.0**. - - - -### `@assert .target` - -Annotate a [managed to-one association](../cds/cdl#managed-associations) of a CDS model entity definition with the -`@assert.target` annotation to check whether the target entity referenced by the association (the reference's target) -exists. In other words, use this annotation to check whether a non-null foreign key input in a table has a corresponding -primary key in the associated/referenced target table. - -You can check whether multiple targets exist in the same transaction. For example, in the `Books` entity, you could -annotate one or more managed to-one associations with the `@assert.target` annotation. However, it is assumed that -dependent values were inserted before the current transaction. For example, in a deep create scenario, when creating a -book, checking whether an associated author exists that was created as part of the same deep create transaction isn't -supported, in this case, you will get an error. - -The `@assert.target` check constraint is meant to **validate user input** and not to ensure referential integrity. -Therefore only `CREATE`, and `UPDATE` events are supported (`DELETE` events are not supported). To ensure that every -non-null foreign key in a table has a corresponding primary key in the associated/referenced target table -(ensure referential integrity), the [`@assert.integrity`](databases#database-constraints) constraint must be used instead. - -If the reference's target doesn't exist, an HTTP response -(error message) is provided to HTTP client applications and logged to stdout in debug mode. The HTTP response body's -content adheres to the standard OData specification for an error -[response body](https://docs.oasis-open.org/odata/odata-json-format/v4.01/cs01/odata-json-format-v4.01-cs01.html#sec_ErrorResponse). - -#### Example - -Add `@assert.target` annotation to the service definition as previously mentioned: - -```cds -entity Books { - key ID : UUID; - title : String; - author : Association to Authors @assert.target; -} - -entity Authors { - key ID : UUID; - name : String; - books : Association to many Books on books.author = $self; -} -``` - -**HTTP Request** — *assume that an author with the ID `"796e274a-c3de-4584-9de2-3ffd7d42d646"` doesn't exist in the database* - -```http -POST Books HTTP/1.1 -Accept: application/json;odata.metadata=minimal -Prefer: return=minimal -Content-Type: application/json;charset=UTF-8 - -{"author_ID": "796e274a-c3de-4584-9de2-3ffd7d42d646"} -``` - -**HTTP Response** - -```http -HTTP/1.1 400 Bad Request -odata-version: 4.0 -content-type: application/json;odata.metadata=minimal - -{"error": { - "@Common.numericSeverity": 4, - "code": "400", - "message": "Value doesn't exist", - "target": "author_ID" -}} -``` -::: tip -In contrast to the `@assert.integrity` constraint, whose check is performed on the underlying database layer, -the `@assert.target` check constraint is performed on the application service layer before the custom application handlers are called. -::: -::: warning -Cross-service checks are not supported. It is expected that the associated entities are defined in the same service. -::: -::: warning -The `@assert.target` check constraint relies on database locks to ensure accurate results in concurrent scenarios. However, locking is a database-specific feature, and some databases don't permit to lock certain kinds of objects. On SAP HANA, for example, views with joins or unions can't be locked. Do not use `@assert.target` on such artifacts/entities. -::: - -### `@assert` - -Annotate an element with `@assert` to define CXL expressions that are validated _after_ the data has been written to the database but _before_ it is committed. If validation fails, the expression returns a `String` that indicates an error to the runtime. If validation passes, the expression returns `null`. - -```cds -entity OrderItems : cuid { - - @assert: (case - when quantity <= 0 then 'Quantity must be greater than zero' - end) - quantity : Integer; -} -``` - -You can simplify the same condition by using the [ternary conditional operator](../releases/archive/2023/march23#ternary-conditional-operator): - -```cds -entity OrderItems : cuid { - - @assert: (quantity <= 0 ? 'Quantity must be greater than zero' : null) - quantity : Integer; -} -``` - -#### Error Messages and Message Targets - -In general, if validation fails, the transaction is rolled back with an exception. But, if you use [Fiori draft state messages](../advanced/fiori#validating-drafts), the error is persisted. The error targets the annotated element, which is then highlighted on the Fiori UI. - -::: info Error Messages -The CXL expression in the annotation can return either a static error message or a message key to support i18n. If you use a message key, the message is looked up in the message bundle of the service. -[Learn more about localized messages.](./i18n){.learn-more} -::: - - -#### Complex Asserts - -::: warning Use complex asserts on service layer -Like other annotations, `@assert` is propagated to projections. If you annotate an element with `@assert` and the condition uses other elements from the same or an associated entity, you must ensure that these elements are available in all projections to which the annotated element is propagated. Otherwise the CDS model won't compile. - -It is therefore recommended to use complex asserts on the highest projection, that is on the service layer. -::: - -For the examples given in this section, consider the following _domain_ and _service_ model: - -```cds -context db { - entity Books : cuid { - title : String; - stock : Integer; - deliveryDate : Date; - orderDate : Date; - } - - entity Orders : cuid { - items : Composition of many OrderItems on items.order = $self; - } - - entity OrderItems : cuid { - order : Association to Orders; - book : Association to Books; - quantity : Integer; - } -} - -service OrderService { - entity Orders as projection on db.Orders; - entity OrderItems as projection on db.OrderItems; -} -``` - -An `@assert` annotation can use other elements from the same entity. This annotation checks that the delivery date of an order is after the order date: - -```cds -annotate OrderService.Orders with { - deliveryDate @assert: (deliveryDate < orderDate ? 'DELIVERY_BEFORE_ORDER' : null); // [!code highlight] -} -``` - -In an `@assert` condition, you can also refer to elements of associated entities. The following example validates the `quantity` of the ordered book against the actual `stock`. If the stock level is insufficient, a static error message is returned: - -```cds -annotate OrderService.OrderItems with { - quantity @assert: (case // [!code highlight] - when book.stock <= quantity then 'Stock exceeded' // [!code highlight] - end); // [!code highlight] -} -``` - -You can also perform validations based on entities associated via a to-many association. Use an [exists predicate](../cds/cql#exists-predicate) in this case: - -```cds -annotate OrderService.Orders with { - items @assert: ( exists items[book.isNotReleased = true] // [!code highlight] - ? 'Some ordered book is not yet released' : null) // [!code highlight] -} -``` - -Refer to [Expressions as Annotation Values](../cds/cdl.md#expressions-as-annotation-values) for detailed rules on expression syntax. - -#### Multiple Conditions - -Use multiple `when` clauses to check multiple conditions with a single `@assert` annotation. Each condition returns its own error message to precisely describe the error: - -```cds -annotate OrderService.OrderItems with { - quantity @assert: (case - when book.stock = 0 then 'Stock is zero' - when book.stock <= quantity then 'Stock exceeded' - end) -} -``` - -#### Background - -The system evaluates expressions after it applies the request to the underlying datastore. This affects the entities in the request's payload. The runtime executes check statements with the provided expressions and the primary key values for the given entities. - -::: warning Limitations -- All primary key fields need to be contained in the CQN statement for validations to be enforced (including deep insert and deep update). -- Only elements with simple types (like `String`, `Integer`, `Boolean`) can be annotated with `@assert`. Elements typed with structured or arrayed types are not supported. -::: - -### Custom Error Messages - -The annotations `@assert.range`, `@assert.format`, and `@mandatory` also support custom error messages. Use the annotation `@.message` with an error text or [text bundle key](../guides/i18n#externalizing-texts-bundles) to specify a custom error message: - -```cds -entity Person : cuid { - name : String; - - @assert.format: '/^\S+@\S+\.\S+$/' - @assert.format.message: 'Provide a valid email address' - email : String; - - @assert.range: [(0),_] - @assert.range.message: '{i18n>person-age}' - age : Int16; -} -``` - -Note: The above can also be written like that: - -```cds -entity Person : cuid { - name : String; - - @assert.format: { - $value: '/^\S+@\S+\.\S+$/', message: 'Provide a valid email address' - } - email : String; - - @assert.range: { - $value: [(0),_], message: '{i18n>person-age}' - } - age : Int16; -} -``` - - -### Database Constraints - -Next to input validation, you can add [database constraints](databases#database-constraints) to prevent invalid data from being persisted. +> [!tip] +> Prefer declarative constraints over programmatic validations wherever possible, as they require no implementation coding and are automatically served by CAP runtimes in optimized ways. ## [Constraints](services/constraints) @@ -1154,7 +841,7 @@ The remaining cases that need custom handlers, reduce to real custom logic, spec public class FooServiceImpl implements EventHandler {...} ``` -[Learn more about Event Handler classes in Java.](../java/event-handlers/#handlerclasses){.learn-more} +[Learn more about Event Handler classes in Java.](../java/event-handlers#handlerclasses){.learn-more} @@ -1187,7 +874,7 @@ public class BookshopServiceImpl implements EventHandler { [Learn more about **adding event handlers in Node.js**.](../node.js/core-services#srv-on-before-after){.learn-more} -[Learn more about **adding event handlers in Java**.](../java/event-handlers/#handlerclasses){.learn-more} +[Learn more about **adding event handlers in Java**.](../java/event-handlers#handlerclasses){.learn-more} @@ -1221,7 +908,7 @@ Event handlers all get a uniform _Request_/_Event Message_ context object as the - The `tenant` using your SaaS application, if enabled [Learn more about **implementing event handlers in Node.js**.](../node.js/events#cds-request){.learn-more} -[Learn more about **implementing event handlers in Java**.](../java/event-handlers/#eventcontext){.learn-more} +[Learn more about **implementing event handlers in Java**.](../java/event-handlers#eventcontext){.learn-more} diff --git a/guides/services/constraints.md b/guides/services/constraints.md index 149ae84dd3..395b4eaa70 100644 --- a/guides/services/constraints.md +++ b/guides/services/constraints.md @@ -9,3 +9,331 @@ status: released Declarative constraints allow you to express conditions using CXL expressions that are validated automatically whenever data is written, greatly reducing the need for extensive custom code for input validation. [[toc]] + + +## `@mandatory` + +Elements marked with `@mandatory` are checked for missing and empty input and respective requests are rejected. + +```cds +service Sue { + entity Books { + key ID : UUID; + title : String @mandatory; + } +} +``` + +In addition to server-side input validation as introduced above, this adds a corresponding `@FieldControl` annotation to the EDMX so that OData / Fiori clients would enforce a valid entry, thereby avoiding unnecessary request roundtrips: + +```xml + + + +``` + +
+ + + +## `@readonly` + +Elements annotated with `@readonly`, as well as [_calculated elements_](../../cds/cdl#calculated-elements), are protected against write operations. That is, if a CREATE or UPDATE operation specifies values for such fields, these values are **silently ignored**. + +By default [`virtual` elements](../../cds/cdl#virtual-elements) are also _calculated_. +::: tip +The same applies for fields with the [OData Annotations](../../advanced/odata#annotations) `@FieldControl.ReadOnly` (static), `@Core.Computed`, or `@Core.Immutable` (the latter only on UPDATEs). +::: + +::: warning Not allowed on keys +Do not use the `@readonly` annotation on keys in all variants. +::: + +
+ + + +## `@assert` + +Annotate an element with `@assert` to define CXL expressions that are validated _after_ the data has been written to the database but _before_ it is committed it. If validation fails, the expression returns a `String` that indicates an error to the runtime. If validation passes, the expression returns `null`. + +```cds +entity OrderItems : cuid { + + @assert: (case + when quantity <= 0 then 'Quantity must be greater than zero' + end) + quantity : Integer; +} +``` + +You can simplify the same condition by using the [ternary conditional operator](../../releases/archive/2023/march23#ternary-conditional-operator): + +```cds +entity OrderItems : cuid { + + @assert: (quantity <= 0 ? 'Quantity must be greater than zero' : null) + quantity : Integer; +} +``` + +### Error Messages and Message Targets + +In general, if validation fails, the transaction is rolled back with an exception. But, if you use [Fiori draft state messages](../../advanced/fiori#validating-drafts), the error is persisted. The error targets the annotated element, which is then highlighted on the Fiori UI. + +::: info Error Messages +The CXL expression in the annotation can return either a static error message or a message key to support i18n. If you use a message key, the message is looked up in the message bundle of the service. +[Learn more about localized messages.](../i18n){.learn-more} +::: + + +### Complex Asserts + +::: warning Use complex asserts on service layer +Like other annotations, `@assert` is propagated to projections. If you annotate an element with `@assert` and the condition uses other elements from the same or an associated entity, you must ensure that these elements are available in all projections to which the annotated element is propagated. Otherwise the CDS model won't compile. + +It is therefore recommended to use complex asserts on the highest projection, that is on the service layer. +::: + +For the examples given in this section, consider the following _domain_ and _service_ model: + +```cds +context db { + entity Books : cuid { + title : String; + stock : Integer; + deliveryDate : Date; + orderDate : Date; + } + + entity Orders : cuid { + items : Composition of many OrderItems on items.order = $self; + } + + entity OrderItems : cuid { + order : Association to Orders; + book : Association to Books; + quantity : Integer; + } +} + +service OrderService { + entity Orders as projection on db.Orders; + entity OrderItems as projection on db.OrderItems; +} +``` + +An `@assert` annotation can use other elements from the same entity. This annotation checks that the delivery date of an order is after the order date: + +```cds +annotate OrderService.Orders with { + deliveryDate @assert: (deliveryDate < orderDate ? 'DELIVERY_BEFORE_ORDER' : null); // [!code highlight] +} +``` + +In an `@assert` condition, you can also refer to elements of associated entities. The following example validates the `quantity` of the ordered book against the actual `stock`. If the stock level is insufficient, a static error message is returned: + +```cds +annotate OrderService.OrderItems with { + quantity @assert: (case // [!code highlight] + when book.stock <= quantity then 'Stock exceeded' // [!code highlight] + end); // [!code highlight] +} +``` + +You can also perform validations based on entities associated via a to-many association. Use an [exists predicate](../../cds/cql#exists-predicate) in this case: + +```cds +annotate OrderService.Orders with { + items @assert: ( exists items[book.isNotReleased = true] // [!code highlight] + ? 'Some ordered book is not yet released' : null) // [!code highlight] +} +``` + +Refer to [Expressions as Annotation Values](../../cds/cdl.md#expressions-as-annotation-values) for detailed rules on expression syntax. + +### Multiple Conditions + +Use multiple `when` clauses to check multiple conditions with a single `@assert` annotation. Each condition returns its own error message to precisely describe the error: + +```cds +annotate OrderService.OrderItems with { + quantity @assert: (case + when book.stock = 0 then 'Stock is zero' + when book.stock <= quantity then 'Stock exceeded' + end) +} +``` + +### Background + +The system evaluates expressions after it applies the request to the underlying datastore. This affects the entities in the request's payload. The runtime executes check statements with the provided expressions and the primary key values for the given entities. + +::: warning Limitations +- All primary key fields need to be contained in the CQN statement for validations to be enforced (including deep insert and deep update). +- Only elements with simple types (like `String`, `Integer`, `Boolean`) can be annotated with `@assert`. Elements typed with structured or arrayed types are not supported. +::: + + +## `@assert .format` + +Allows you to specify a regular expression string (in ECMA 262 format in CAP Node.js and java.util.regex.Pattern format in CAP Java) that all string input must match. + +```cds +entity Foo { + bar : String @assert.format: '[a-z]ear'; +} +``` + + +## `@assert .range` + +Allows you to specify `[ min, max ]` ranges for elements with ordinal types — that is, numeric or date/time types. For `enum` elements, `true` can be specified to restrict all input to the defined enum values. + +```cds +entity Foo { + bar : Integer @assert.range: [ 0, 3 ]; + boo : Decimal @assert.range: [ 2.1, 10.25 ]; + car : DateTime @assert.range: ['2018-10-31', '2019-01-15']; + zoo : String @assert.range enum { high; medium; low; }; +} +``` + +By default, specified `[min,max]` ranges are interpreted as closed intervals, that means, the performed checks are `min ≤ input ≤ max`. You can also specify open intervals by wrapping the *min* and/or *max* values into parentheses like that: + + +```cds +@assert.range: [(0),100] // 0 < input ≤ 100 +@assert.range: [0,(100)] // 0 ≤ input < 100 +@assert.range: [(0),(100)] // 0 < input < 100 +``` +In addition, you can use an underscore `_` to represent *Infinity* like that: + +```cds +@assert.range: [(0),_] // positive numbers only, _ means +Infinity here +@assert.range: [_,(0)] // negative number only, _ means -Infinity here +``` +> Basically values wrapped in parentheses _`(x)`_ can be read as _excluding `x`_ for *min* or *max*. Note that the underscore `_` doesn't have to be wrapped into parentheses, as by definition no number can be equal to *Infinity* . + +Support for open intervals and infinity is available for CAP Node.js since `@sap/cds` version **8.5** and in CAP Java since version **3.5.0**. + + + +## `@assert .target` + +Annotate a [managed to-one association](../../cds/cdl#managed-associations) of a CDS model entity definition with the +`@assert.target` annotation to check whether the target entity referenced by the association (the reference's target) +exists. In other words, use this annotation to check whether a non-null foreign key input in a table has a corresponding +primary key in the associated/referenced target table. + +You can check whether multiple targets exist in the same transaction. For example, in the `Books` entity, you could +annotate one or more managed to-one associations with the `@assert.target` annotation. However, it is assumed that +dependent values were inserted before the current transaction. For example, in a deep create scenario, when creating a +book, checking whether an associated author exists that was created as part of the same deep create transaction isn't +supported, in this case, you will get an error. + +The `@assert.target` check constraint is meant to **validate user input** and not to ensure referential integrity. +Therefore only `CREATE`, and `UPDATE` events are supported (`DELETE` events are not supported). To ensure that every +non-null foreign key in a table has a corresponding primary key in the associated/referenced target table +(ensure referential integrity), the [`@assert.integrity`](../databases#database-constraints) constraint must be used instead. + +If the reference's target doesn't exist, an HTTP response +(error message) is provided to HTTP client applications and logged to stdout in debug mode. The HTTP response body's +content adheres to the standard OData specification for an error +[response body](https://docs.oasis-open.org/odata/odata-json-format/v4.01/cs01/odata-json-format-v4.01-cs01.html#sec_ErrorResponse). + +#### Example + +Add `@assert.target` annotation to the service definition as previously mentioned: + +```cds +entity Books { + key ID : UUID; + title : String; + author : Association to Authors @assert.target; +} + +entity Authors { + key ID : UUID; + name : String; + books : Association to many Books on books.author = $self; +} +``` + +**HTTP Request** — *assume that an author with the ID `"796e274a-c3de-4584-9de2-3ffd7d42d646"` doesn't exist in the database* + +```http +POST Books HTTP/1.1 +Accept: application/json;odata.metadata=minimal +Prefer: return=minimal +Content-Type: application/json;charset=UTF-8 + +{"author_ID": "796e274a-c3de-4584-9de2-3ffd7d42d646"} +``` + +**HTTP Response** + +```http +HTTP/1.1 400 Bad Request +odata-version: 4.0 +content-type: application/json;odata.metadata=minimal + +{"error": { + "@Common.numericSeverity": 4, + "code": "400", + "message": "Value doesn't exist", + "target": "author_ID" +}} +``` +::: tip +In contrast to the `@assert.integrity` constraint, whose check is performed on the underlying database layer, +the `@assert.target` check constraint is performed on the application service layer before the custom application handlers are called. +::: +::: warning +Cross-service checks are not supported. It is expected that the associated entities are defined in the same service. +::: +::: warning +The `@assert.target` check constraint relies on database locks to ensure accurate results in concurrent scenarios. However, locking is a database-specific feature, and some databases don't permit to lock certain kinds of objects. On SAP HANA, for example, views with joins or unions can't be locked. Do not use `@assert.target` on such artifacts/entities. +::: + + +## Custom Error Messages + +The annotations `@assert.range`, `@assert.format`, and `@mandatory` also support custom error messages. Use the annotation `@.message` with an error text or [text bundle key](../i18n#externalizing-texts-bundles) to specify a custom error message: + +```cds +entity Person : cuid { + name : String; + + @assert.format: '/^\S+@\S+\.\S+$/' + @assert.format.message: 'Provide a valid email address' + email : String; + + @assert.range: [(0),_] + @assert.range.message: '{i18n>person-age}' + age : Int16; +} +``` + +Note: The above can also be written like that: + +```cds +entity Person : cuid { + name : String; + + @assert.format: { + $value: '/^\S+@\S+\.\S+$/', message: 'Provide a valid email address' + } + email : String; + + @assert.range: { + $value: [(0),_], message: '{i18n>person-age}' + } + age : Int16; +} +``` + + +## Database Constraints + +Next to input validation, you can add [database constraints](../databases#database-constraints) to prevent invalid data from being persisted. diff --git a/java/change-tracking.md b/java/change-tracking.md index cdf2ef4b6c..cfbed58a14 100644 --- a/java/change-tracking.md +++ b/java/change-tracking.md @@ -213,7 +213,7 @@ Elements from the `@changelog` annotation value must always be prefixed by the a :::warning Validation required If the target of the association is missing, for example, when an entity is updated with the ID for a customer that does not exist, the changelog entry is not created. You need to validate -such cases in the custom code or use annotations, for example, [`@assert.target`](/guides/providing-services#assert-target). +such cases in the custom code or use annotations, for example, [`@assert.target`](/guides/services/constraints#assert-target). ::: ### Caveats of Identifiers diff --git a/java/working-with-cql/query-execution.md b/java/working-with-cql/query-execution.md index e641c8f335..0d952c4a3b 100644 --- a/java/working-with-cql/query-execution.md +++ b/java/working-with-cql/query-execution.md @@ -283,11 +283,11 @@ UPDATE entity OrderView2 - [Path expressions](../../cds/cql#path-expressions) over compositions *of one* (*header.status*) are writable. For [inserts](./query-api#insert), the view must expose all *not null* elements of the target entity and the data must include values for all of them. In the example above, the order header must have a generated key to support inserting new orders with a value for *headerStatus*. ::: warning Handling Compositions and Aliased Paths in Projections - For projections that include *to-one* compositions (*header*) and aliased paths over these compositions (*headerStatus*), write structured data using the composition and make the aliased path [@readonly](../../guides/providing-services#readonly). Do not use data for the aliased path along with structured data for the composition in the same statement. + For projections that include *to-one* compositions (*header*) and aliased paths over these compositions (*headerStatus*), write structured data using the composition and make the aliased path [@readonly](../../guides/services/constraints#readonly). Do not use data for the aliased path along with structured data for the composition in the same statement. ::: ::: warning Path Expressions over Associations - Path expressions navigating *associations* (*header.customer.name*) are [not writable](#cascading-over-associations) by default. To avoid issues on write, annotate them with [@readonly](../../guides/providing-services#readonly). + Path expressions navigating *associations* (*header.customer.name*) are [not writable](#cascading-over-associations) by default. To avoid issues on write, annotate them with [@readonly](../../guides/services/constraints#readonly). ::: ### Delete through Views { #delete-via-view } diff --git a/tools/cds-cli.md b/tools/cds-cli.md index 4fc7682ba5..68370ccdc8 100644 --- a/tools/cds-cli.md +++ b/tools/cds-cli.md @@ -259,7 +259,7 @@ The result could look like this for a typical _Books_ entity from the _Bookshop_ - `author.ID` refers to a key from the _...Authors.json_ file that is created at the same time. If the _Authors_ entity is excluded, though, no such foreign key would be created, which cuts the association off. - Data for _compositions_, like the `texts` composition to `Books.texts`, is always created. - A random unique number for each record, _29894036_ here, is added to each string property, to help you correlate properties more easily. -- Data for elements annotated with a regular expression using [`assert.format`](../guides/providing-services#assert-format) can be generated using the NPM package [randexp](https://www.npmjs.com/package/randexp), which you need to installed manually. +- Data for elements annotated with a regular expression using [`assert.format`](../guides/services/constraints#assert-format) can be generated using the NPM package [randexp](https://www.npmjs.com/package/randexp), which you need to installed manually. - Other constraints like [type formats](../cds/types), [enums](../cds/cdl#enums), and [validation constraints](../guides/providing-services#input-validation) are respected as well, in a best effort way. ::: From 888c7b29227e685ced42dc872991553c0731f501 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 19 Dec 2025 11:39:37 +0100 Subject: [PATCH 147/439] fix link --- guides/providing-services.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/providing-services.md b/guides/providing-services.md index dea60467db..cd74848456 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -794,7 +794,7 @@ Declarative constraints allow you to express conditions using CXL expressions th ::: tip Read the guide Find additional information about constraints in this guide: -[→ **_Constraints_**](services/status-flows) +[→ **_Constraints_**](services/constraints) ::: ## [Status-Transition Flows](services/status-flows) From 1c283b85455a3f1fe7d4c5e9fca8b5507daad3d4 Mon Sep 17 00:00:00 2001 From: DJ Adams Date: Fri, 19 Dec 2025 11:03:00 +0000 Subject: [PATCH 148/439] Align with entity naming best practice (#2201) See: https://cap.cloud.sap/docs/guides/domain-modeling#naming-conventions There are plenty of entity names in examples in this CDL topic. Some of them are "real" in that they are genuine representations such as Orders and Products. These should be subject to the naming convention best practice of being pluralised. Others are clearly illustrative only, such as the Foo, Bar, Baz set and those conveying meaning for the given example such as EmployeeView, SomeView, P, Proj, SomeExposedEntity and so on. These should not be subject to the naming convention. Note: Perhaps we should add something to the naming convention section itself to qualify the boundary of where it applies, i.e. "mostly" at the schema level, less so at the service definition level? --- cds/cdl.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/cds/cdl.md b/cds/cdl.md index 6a1292d9c0..68b3a587a9 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -639,7 +639,7 @@ type Complex { If the element has an enum type, you can use the enum symbol instead of a literal value: ```cds type Status : String enum {open; closed;} -entity Order { +entity Orders { status : Status default #open; } ``` @@ -650,7 +650,7 @@ entity Order { If you want to base an element's type on another element of the same structure, you can use the `type of` operator. ```cds -entity Author { +entity Authors { firstname : String(100); lastname : type of firstname; // has type "String(100)" } @@ -685,7 +685,7 @@ For string types, declaration of actual values is optional; if omitted, the actu ```cds type Gender : String enum { male; female; non_binary = 'non-binary'; } -entity Order { +entity Orders { status : Integer enum { submitted = 1; fulfilled = 2; @@ -1916,14 +1916,14 @@ exposing entities. ```cds service CatalogService { - entity Product as projection on data.Products { + entity Products as projection on data.Products { *, created.at as since } excluding { created }; } service MyOrders { //> $user only implemented for SAP HANA - entity Order as select from data.Orders { * } where buyer=$user.id; - entity Product as projection on CatalogService.Product; + entity Orders as select from data.Orders { * } where buyer=$user.id; + entity Products as projection on CatalogService.Products; } ``` @@ -2096,7 +2096,7 @@ Within service definitions, you can additionally specify `actions` and `function ```cds service MyOrders { - entity Order { /*...*/ }; + entity Orders { /*...*/ }; // unbound actions / functions type cancelOrderRet { acknowledge: String enum { succeeded; failed; }; From e5f2c27faef07f5b1733a2b128ee553111726beb Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 19 Dec 2025 13:55:53 +0100 Subject: [PATCH 149/439] adapt link even though redirect worked --- guides/providing-services.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guides/providing-services.md b/guides/providing-services.md index cd74848456..db50795664 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -841,7 +841,7 @@ The remaining cases that need custom handlers, reduce to real custom logic, spec public class FooServiceImpl implements EventHandler {...} ``` -[Learn more about Event Handler classes in Java.](../java/event-handlers#handlerclasses){.learn-more} +[Learn more about Event Handler classes in Java.](../java/event-handlers/#handlerclasses){.learn-more} @@ -874,7 +874,7 @@ public class BookshopServiceImpl implements EventHandler { [Learn more about **adding event handlers in Node.js**.](../node.js/core-services#srv-on-before-after){.learn-more} -[Learn more about **adding event handlers in Java**.](../java/event-handlers#handlerclasses){.learn-more} +[Learn more about **adding event handlers in Java**.](../java/event-handlers/#handlerclasses){.learn-more} @@ -908,7 +908,7 @@ Event handlers all get a uniform _Request_/_Event Message_ context object as the - The `tenant` using your SaaS application, if enabled [Learn more about **implementing event handlers in Node.js**.](../node.js/events#cds-request){.learn-more} -[Learn more about **implementing event handlers in Java**.](../java/event-handlers#eventcontext){.learn-more} +[Learn more about **implementing event handlers in Java**.](../java/event-handlers/#eventcontext){.learn-more} From 061211cc6a3874a93e1615574d887a52a1551377 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 19 Dec 2025 14:07:22 +0100 Subject: [PATCH 150/439] fix links --- guides/providing-services.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/providing-services.md b/guides/providing-services.md index db50795664..e269d3cede 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -155,14 +155,14 @@ service AdminService { ## Generic Providers -The CAP runtimes for [Node.js](../node.js) and [Java](../java) provide a wealth of generic implementations, which serve most requests automatically, with out-of-the-box solutions to recurring tasks such as search, pagination, or input validation — the majority of this guide focuses on these generic features. +The CAP runtimes for [Node.js](../node.js/) and [Java](../java/) provide a wealth of generic implementations, which serve most requests automatically, with out-of-the-box solutions to recurring tasks such as search, pagination, or input validation — the majority of this guide focuses on these generic features. In effect, a service definition [as introduced above](#service-definitions) is all we need to run a full-fledged server out of the box. The need for coding reduces to real custom logic specific to a project's domain → section [Custom Logic](#custom-logic) picks that up. ### Serving CRUD Requests {#serving-crud} -The CAP runtimes for [Node.js](../node.js) and [Java](../java) provide generic handlers, which automatically serve all CRUD requests to entities for CDS-modelled services on top of a default [primary database](databases). +The CAP runtimes for [Node.js](../node.js/) and [Java](../java/) provide generic handlers, which automatically serve all CRUD requests to entities for CDS-modelled services on top of a default [primary database](databases). This comprises read and write operations like that: From 393acc39208aa3887e85babf0edf3d6c550cae3a Mon Sep 17 00:00:00 2001 From: somags <152288060+somags@users.noreply.github.com> Date: Fri, 19 Dec 2025 14:28:15 +0100 Subject: [PATCH 151/439] Fix links in reflection-api.md (#2279) Fixed dead links for UserInfo and ParameterInfo. --- java/reflection-api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java/reflection-api.md b/java/reflection-api.md index 864965c074..c2a9be2697 100644 --- a/java/reflection-api.md +++ b/java/reflection-api.md @@ -259,7 +259,7 @@ cds: ::: #### Custom Implementation -Applications can implement a custom [`FeatureTogglesInfoProvider`](https://javadoc.io/doc/com.sap.cds/cds-services-api/latest/com/sap/cds/services/runtime/FeatureTogglesInfoProvider.html) that computes a `FeatureTogglesInfo` based on the request's [`UserInfo`](https://www.javadoc.io/static/com.sap.cds/cds-services-api/latest/com/sap/cds/services/request/UserInfo.html) and [`ParameterInfo`](https://www.javadoc.io/static/com.sap.cds/cds-services-api/latest/com/sap/cds/services/request/ParameterInfo.html). +Applications can implement a custom [`FeatureTogglesInfoProvider`](https://javadoc.io/doc/com.sap.cds/cds-services-api/latest/com/sap/cds/services/runtime/FeatureTogglesInfoProvider.html) that computes a `FeatureTogglesInfo` based on the request's [`UserInfo`](https://www.javadoc.io/doc/com.sap.cds/cds-services-api/latest/com/sap/cds/services/request/UserInfo.html) and [`ParameterInfo`](https://www.javadoc.io/doc/com.sap.cds/cds-services-api/latest/com/sap/cds/services/request/ParameterInfo.html). The following example demonstrates a feature toggles info provider that enables the feature `isbn` if the user has the `expert` role: From dfe51d217cc9085a6796e3c8903c66ff657f4958 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 19 Dec 2025 14:31:36 +0100 Subject: [PATCH 152/439] fix links --- guides/providing-services.md | 2 +- node.js/events.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/providing-services.md b/guides/providing-services.md index e269d3cede..c7e98fb53b 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -95,7 +95,7 @@ This way, services become facades to encapsulated domain data, exposing differen Instead of exposing access to underlying data in a 1:1 fashion, services frequently expose denormalized views, tailored to specific use cases. -For example, the following service definition, undiscloses information about maintainers from end users and also [marks the entities as `@readonly`](#readonly): +For example, the following service definition, undiscloses information about maintainers from end users and also [marks the entities as `@readonly`](services/constraints#readonly): ```cds using { sap.capire.bookshop as my } from '../db/schema'; diff --git a/node.js/events.md b/node.js/events.md index 650f4998dc..4add035ad7 100644 --- a/node.js/events.md +++ b/node.js/events.md @@ -431,7 +431,7 @@ this.on('CREATE', Books, req => { ``` ::: details **Best Practice:**{.good} Use the `@mandatory` annotation instead. -The sample above is just for illustration. Instead, use the [`@mandatory`](../guides/providing-services.md#mandatory) +The sample above is just for illustration. Instead, use the [`@mandatory`](../guides/services/constraints#mandatory) annotation in your CDS model to define mandatory inputs like that: ```cds From 0710de80281f8e7d6263c10348204cb476c6ffbf Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 19 Dec 2025 14:50:55 +0100 Subject: [PATCH 153/439] Adding placeholder for CXL docs --- cds/cxl.md | 12 ++++++++++++ menu.md | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 cds/cxl.md diff --git a/cds/cxl.md b/cds/cxl.md new file mode 100644 index 0000000000..f9734ff3d9 --- /dev/null +++ b/cds/cxl.md @@ -0,0 +1,12 @@ +--- +status: released +--- + +# CDS Expression Language (CXL) + +This document provides an overview of the CDS Expression Language (CXL) used in CDS models and queries. +CXL is essentially a standard subset of SQL expressions enhanced by [Path Expressions](../cds/cql#path-expressions) with [Infix Filters](../cds/cql#with-infix-filters). + +The documentation is still **under construction** and will be released soon. + +For the time being, please refer to the existing reference docs about [CDS Query Language (CQL)](../cds/cql), and to the [CDS Expression Notation (CXN)](../cds/cxn) documentation. diff --git a/menu.md b/menu.md index cd5f80d834..b12ed7ae96 100644 --- a/menu.md +++ b/menu.md @@ -127,7 +127,8 @@ ## [Schema Notation (CSN)](cds/csn) ## [Query Language (CQL)](cds/cql) ## [Query Notation (CQN)](cds/cqn) -## [Expressions (CXN)](cds/cxn) +## [Expression Language (CXL)](cds/cxl) +## [Expression Notation (CXN)](cds/cxn) ## [Core / Built-in Types](cds/types) ## [Common Reuse Types](cds/common) ## [Common Annotations](cds/annotations) From 0920e4d8ca9be711173f8552e936952d1cbf65cb Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 19 Dec 2025 14:51:12 +0100 Subject: [PATCH 154/439] Overhauled constraints docs --- .../assets/constraints/fiori-errors.png | Bin 0 -> 903454 bytes guides/services/constraints.md | 470 +++++++++++++----- 2 files changed, 358 insertions(+), 112 deletions(-) create mode 100644 guides/services/assets/constraints/fiori-errors.png diff --git a/guides/services/assets/constraints/fiori-errors.png b/guides/services/assets/constraints/fiori-errors.png new file mode 100644 index 0000000000000000000000000000000000000000..3e104ae7d91d3035c03690f6f5768089cff0a39e GIT binary patch literal 903454 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

)amvBkLam+^ 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%0Au+pA3>tQNbr>kuj2WF)^~; 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 z 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�!0|Dpc`j$OvSq`POA9se16KzC~v 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 sQ> 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

xBsOe;i+8Bm7%<(6p?R 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:kdyo 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 literal 0 HcmV?d00001 diff --git a/guides/services/constraints.md b/guides/services/constraints.md index 395b4eaa70..36d282e915 100644 --- a/guides/services/constraints.md +++ b/guides/services/constraints.md @@ -6,176 +6,244 @@ status: released # Declarative Constraints -Declarative constraints allow you to express conditions using CXL expressions that are validated automatically whenever data is written, greatly reducing the need for extensive custom code for input validation. +Declarative constraints allow you to express conditions using [CDS Expression Language (CXL)](/cds/cxl) that are validated automatically whenever data is written. This greatly reduces the need for extensive custom code for input validation. + +> [!note] +> Don't confuse declarative constraints as discussed in here with [database constraints](../databases#database-constraints). Declarative constraints are meant for domain-specific input validation with error messages meant to be shown to end users, while database constraints are meant to prevent data corruption due to programming error, with error messages not intended for end users. + + [[toc]] -## `@mandatory` -Elements marked with `@mandatory` are checked for missing and empty input and respective requests are rejected. +## Introduction + +Use annotations like `@assert` and `@mandatory` to declaratively add constraints for the primary purpose of input validation. Add them to the elements of the entities exposed by respective services, which accept input to be validated. + +### Constraints Annotations + +Following is an excerpt from the [`@capire/xtravels`](https:/github.com/capire/xtravels/tree/main/srv/travel-constraints.cds) sample: + +::: code-group + +```cds [srv/travel-constraints.cds] +using { TravelService } from './travel-service'; +annotate TravelService.Travels with { + + Description @assert: (case + when length(Description) < 3 then 'Description too short' + end); + + Agency @mandatory @assert: (case + when not exists Agency then 'Agency does not exist' + end); + + Customer @assert: (case + when Customer is null then 'Customer must be specified' + when not exists Customer then 'Customer does not exist' + end); + + BeginDate @mandatory @assert: (case + when BeginDate > EndDate then 'ASSERT_BEGINDATE_BEFORE_ENDDATE' + when exists Bookings [Flight.date < Travel.BeginDate] + then 'ASSERT_BOOKINGS_IN_TRAVEL_PERIOD' + end); + + BookingFee @assert: (case + when BookingFee < 0 then 'ASSERT_BOOKING_FEE_NON_NEGATIVE' + end); -```cds -service Sue { - entity Books { - key ID : UUID; - title : String @mandatory; - } } ``` -In addition to server-side input validation as introduced above, this adds a corresponding `@FieldControl` annotation to the EDMX so that OData / Fiori clients would enforce a valid entry, thereby avoiding unnecessary request roundtrips: +::: -```xml - - - -``` +> [!tip] BEST PRACTICES +> +> **Separation of Concerns** – always put secondary concerns, such as constraints in this case, into separate files as in the example, instead of polluting your core service definitions. +> +> **Concise and comprehensible** – in contrast to imperative coding, constraints expressed in expression languages as shown here are easy to read and understand. +> +> **Fueling AI** – Not the least, this also fuels AI-based approaches: AIs can easily generate such constraints, and you as a developer using such AIs can easily validate what was generated. -

+### Served Out-of-the-Box -## `@readonly` -Elements annotated with `@readonly`, as well as [_calculated elements_](../../cds/cdl#calculated-elements), are protected against write operations. That is, if a CREATE or UPDATE operation specifies values for such fields, these values are **silently ignored**. -By default [`virtual` elements](../../cds/cdl#virtual-elements) are also _calculated_. -::: tip -The same applies for fields with the [OData Annotations](../../advanced/odata#annotations) `@FieldControl.ReadOnly` (static), `@Core.Computed`, or `@Core.Immutable` (the latter only on UPDATEs). -::: +The constraints are enforced automatically by the CAP runtimes on any input, and if failures occur, the request is ultimately rejected and the transaction rolled back. -::: warning Not allowed on keys -Do not use the `@readonly` annotation on keys in all variants. -::: +Some of the checks, e.g. the static `@mandatory` checks, are validated directly on the input data, while the ones specified with `@assert:(\)` are collected into a query and **pushed down to the database** for execution. This in turn means, that first the respective `INSERT`s and `UPDATE`s are sent to the database, followed by the validation query. -
+::: details Behind the scenes... -## `@assert` +The automatically compiled and executed validation query would look like that (in [CQL](/cds/cql)) for the constraints from the sample above: -Annotate an element with `@assert` to define CXL expressions that are validated _after_ the data has been written to the database but _before_ it is committed it. If validation fails, the expression returns a `String` that indicates an error to the runtime. If validation passes, the expression returns `null`. +```sql +SELECT from TravelService.Travels { -```cds -entity OrderItems : cuid { - - @assert: (case - when quantity <= 0 then 'Quantity must be greater than zero' - end) - quantity : Integer; -} -``` + (case + when length(Description) < 3 then 'Description too short' + end) as Description, -You can simplify the same condition by using the [ternary conditional operator](../../releases/archive/2023/march23#ternary-conditional-operator): + (case + when not exists Agency then 'Agency does not exist' + end) as Agency, + + (case + when Customer is null then 'Customer must be specified' + when not exists Customer then 'Customer does not exist' + end) as Customer, + + (case + when BeginDate > EndDate then 'ASSERT_BEGINDATE_BEFORE_ENDDATE' + when exists Bookings [Flight.date < Travel.BeginDate] + then 'ASSERT_BOOKINGS_IN_TRAVEL_PERIOD' + end) as BeginDate, + + (case + when BookingFee < 0 then 'ASSERT_BOOKING_FEE_NON_NEGATIVE' + end) as BookingFee, -```cds -entity OrderItems : cuid { - - @assert: (quantity <= 0 ? 'Quantity must be greater than zero' : null) - quantity : Integer; } ``` -### Error Messages and Message Targets +::: -In general, if validation fails, the transaction is rolled back with an exception. But, if you use [Fiori draft state messages](../../advanced/fiori#validating-drafts), the error is persisted. The error targets the annotated element, which is then highlighted on the Fiori UI. -::: info Error Messages -The CXL expression in the annotation can return either a static error message or a message key to support i18n. If you use a message key, the message is looked up in the message bundle of the service. -[Learn more about localized messages.](../i18n){.learn-more} -::: +> [!tip] BEST PRACTICES +> +> **Push down to the database** is a general principle applied in CAP. Applied to input validation with declarative constraints it means that instead of reading a lot of related data into the service layer to do the checks there, we push down the respective checks to where the data is (in the database). +> +> **What, not how!** – This in turn boils down to the even more general principle that we share with functional programming: tell us *what* to do (= *intentional*), not how (= *imperative*), because then generic runtimes can apply advanced optimized ways to execute things, which is impossible with imperative code. -### Complex Asserts -::: warning Use complex asserts on service layer -Like other annotations, `@assert` is propagated to projections. If you annotate an element with `@assert` and the condition uses other elements from the same or an associated entity, you must ensure that these elements are available in all projections to which the annotated element is propagated. Otherwise the CDS model won't compile. -It is therefore recommended to use complex asserts on the highest projection, that is on the service layer. -::: -For the examples given in this section, consider the following _domain_ and _service_ model: -```cds -context db { - entity Books : cuid { - title : String; - stock : Integer; - deliveryDate : Date; - orderDate : Date; - } - - entity Orders : cuid { - items : Composition of many OrderItems on items.order = $self; - } - - entity OrderItems : cuid { - order : Association to Orders; - book : Association to Books; - quantity : Integer; - } -} +### Served to Fiori UIs + +For Fiori UIs as clients the error messages will be automatically be equiped with relevant `target` properties to attach them to the respective fields on the UIs. For example a Fiori UI for the sample above, would display returned errors like that: -service OrderService { - entity Orders as projection on db.Orders; - entity OrderItems as projection on db.OrderItems; +![image-20251219115646302](./assets/constraints/fiori-errors.png) + +::: details Behind the scenes ... + +A sample response for such errors displayed in Fiori UIs would look like that: + +```json +{ + "@odata.context": "$metadata#Travels/$entity", + "ID": 4132, + "DraftMessages": [ + { + "target": "/Travels(ID=4132,IsActiveEntity=false)/EndDate", // [!code focus] + "numericSeverity": 4, + "@Common.numericSeverity": 4, + "message": "Alle Buchungen müssen innerhalb des Reisezeitraums liegen", + "code": "ASSERT_BOOKINGS_IN_TRAVEL_PERIOD" + }, + { + "target": "/Travels(ID=4132,IsActiveEntity=false)/Customer_ID", // [!code focus] + "numericSeverity": 4, + "@Common.numericSeverity": 4, + "message": "Customer does not exist", + "code": "400" + }, + { + "target": "/Travels(ID=4132,IsActiveEntity=false)/Bookings(Travel_ID=4132,Pos=1,IsActiveEntity=false)/Flight_date", // [!code focus] + "numericSeverity": 4, + "@Common.numericSeverity": 4, + "message": "Das Flugdatum dieser Buchung liegt nicht innerhalb des Reisezeitraums", + "code": "ASSERT_BOOKING_IN_TRAVEL_PERIOD" + } + ], + "IsActiveEntity": false } ``` -An `@assert` annotation can use other elements from the same entity. This annotation checks that the delivery date of an order is after the order date: +::: + + + + + +## Input Validation + + + +Use annotations like `@assert` and `@mandatory` to declaratively add constraints for the primary purpose of input validation. Add them to the elements of the entities exposed by respective services, which accept input to be validated. + + + +### `@assert:` *(constraint)* + +Annotate an element with `@assert: ()` to specify checks to be applied on respective input and errors to be raised if they fail. The `` are standard SQL `case` expressions with one or more `when` branches, as shown in this example: ```cds -annotate OrderService.Orders with { - deliveryDate @assert: (deliveryDate < orderDate ? 'DELIVERY_BEFORE_ORDER' : null); // [!code highlight] +annotate TravelService.Travels with { + + Description @assert: (case // [!code focus] + when Description then 'Description must be specified' // [!code focus] + when trim(Description) = '' then 'Description must not be empty' // [!code focus] + when length(Description) < 3 then 'Description too short' // [!code focus] + end); // [!code focus] + } ``` -In an `@assert` condition, you can also refer to elements of associated entities. The following example validates the `quantity` of the ordered book against the actual `stock`. If the stock level is insufficient, a static error message is returned: +[Refer to _Expressions as Annotation Values_ for details on syntax.](../../cds/cdl.md#expressions-as-annotation-values) {.learn-more} + + +Conditions can also **refer to other data elements** in the same entity as shown in this example which validated input for `BeginDate` with the related `EndDate`: ```cds -annotate OrderService.OrderItems with { - quantity @assert: (case // [!code highlight] - when book.stock <= quantity then 'Stock exceeded' // [!code highlight] - end); // [!code highlight] +annotate TravelService.Travels with { + + BeginDate @assert: (case // [!code focus] + when BeginDate > EndDate then 'Begin date must be before end date' // [!code focus] + end); // [!code focus] + } ``` -You can also perform validations based on entities associated via a to-many association. Use an [exists predicate](../../cds/cql#exists-predicate) in this case: +We can also use **path expressions** to compare with data from **associated** entities. For example, this one is from anoter annotation on `TravelService.Bookings` in the [`@capire/xtravels`](https:/github.com/capire/xtravels/tree/main/srv/travel-constraints.cds) sample, that checks if all currencies specified in the list of bookings match the currency chosen in the travel header, refered to by the `Travel` association: ```cds -annotate OrderService.Orders with { - items @assert: ( exists items[book.isNotReleased = true] // [!code highlight] - ? 'Some ordered book is not yet released' : null) // [!code highlight] -} -``` +annotate TravelService.Bookings with { -Refer to [Expressions as Annotation Values](../../cds/cdl.md#expressions-as-annotation-values) for detailed rules on expression syntax. + Currency @assert: (case // [!code focus] + when Currency != Travel.Currency then 'Currencies must match' // [!code focus] + end); // [!code focus] -### Multiple Conditions +} -Use multiple `when` clauses to check multiple conditions with a single `@assert` annotation. Each condition returns its own error message to precisely describe the error: +``` + +We can also do checks with sets of related data using path expressions which navigate along **to-many associations** or compositions, combined with SQL's `exists` quantifier, and optional [infix filters](../..//cds/cql#with-infix-filters), as shown in this example: ```cds -annotate OrderService.OrderItems with { - quantity @assert: (case - when book.stock = 0 then 'Stock is zero' - when book.stock <= quantity then 'Stock exceeded' - end) +annotate TravelService.Travels with { + + BeginDate @assert: (case // [!code focus] + when exists Bookings [Flight.date < Travel.BeginDate] // [!code focus] + then 'All bookings must be within travel period' // [!code focus] + end); // [!code focus] + } ``` -### Background -The system evaluates expressions after it applies the request to the underlying datastore. This affects the entities in the request's payload. The runtime executes check statements with the provided expressions and the primary key values for the given entities. -::: warning Limitations -- All primary key fields need to be contained in the CQN statement for validations to be enforced (including deep insert and deep update). -- Only elements with simple types (like `String`, `Integer`, `Boolean`) can be annotated with `@assert`. Elements typed with structured or arrayed types are not supported. -::: -## `@assert .format` + +### `@assert .format` Allows you to specify a regular expression string (in ECMA 262 format in CAP Node.js and java.util.regex.Pattern format in CAP Java) that all string input must match. @@ -186,7 +254,7 @@ entity Foo { ``` -## `@assert .range` +### `@assert .range` Allows you to specify `[ min, max ]` ranges for elements with ordinal types — that is, numeric or date/time types. For `enum` elements, `true` can be specified to restrict all input to the defined enum values. @@ -219,7 +287,7 @@ Support for open intervals and infinity is available for CAP Node.js since `@sap -## `@assert .target` +### `@assert .target` Annotate a [managed to-one association](../../cds/cdl#managed-associations) of a CDS model entity definition with the `@assert.target` annotation to check whether the target entity referenced by the association (the reference's target) @@ -297,9 +365,70 @@ The `@assert.target` check constraint relies on database locks to ensure accurat ::: -## Custom Error Messages -The annotations `@assert.range`, `@assert.format`, and `@mandatory` also support custom error messages. Use the annotation `@.message` with an error text or [text bundle key](../i18n#externalizing-texts-bundles) to specify a custom error message: + +### `@mandatory` + +Elements marked with `@mandatory` are checked for missing and empty input and respective requests are rejected. + +```cds +service Sue { + entity Books { + key ID : UUID; + title : String @mandatory; + } +} +``` + +In addition to server-side input validation as introduced above, this adds a corresponding `@FieldControl` annotation to the EDMX so that OData / Fiori clients would enforce a valid entry, thereby avoiding unnecessary request roundtrips: + +```xml + + + +``` + +
+ + + +### `@readonly` + +Elements annotated with `@readonly`, as well as [_calculated elements_](../../cds/cdl#calculated-elements), are protected against write operations. That is, if a CREATE or UPDATE operation specifies values for such fields, these values are **silently ignored**. + +By default [`virtual` elements](../../cds/cdl#virtual-elements) are also _calculated_. +::: tip +The same applies for fields with the [OData Annotations](../../advanced/odata#annotations) `@FieldControl.ReadOnly` (static), `@Core.Computed`, or `@Core.Immutable` (the latter only on UPDATEs). +::: + +::: warning Not allowed on keys +Do not use the `@readonly` annotation on keys in all variants. +::: + +
+ + +## Error Messages + +### Custom Messages + +For `@assert: ()` annotations you always specify custom error messages, specific to the individual checks: + +```cds +annotate TravelService.Travels with { + + Description @assert: (case // [!code focus] + when Description then 'Description must be specified' // [!code focus] + when trim(Description) = '' then 'Description must not be empty' // [!code focus] + when length(Description) < 3 then 'Description too short' // [!code focus] + end); // [!code focus] + +} +``` + + + +The annotations `@assert.range`, `@assert.format`, and `@mandatory` also support custom error messages, just not as elegant, as the above: Use the annotation `@.message` to specify a custom error message: ```cds entity Person : cuid { @@ -334,6 +463,123 @@ entity Person : cuid { ``` -## Database Constraints -Next to input validation, you can add [database constraints](../databases#database-constraints) to prevent invalid data from being persisted. +### Localized Messages + +Whenever you specify an error message with the annotations above, i.e., in the `then` part of an `@assert: ()` or in `@mandatory.message`, `@assert.format.message`, or `@assert.range.message`, you can either specify a plain text, or a [I18n text bundle key](../i18n#externalizing-texts-bundles). + +Actually, we saw this already in the [sample in the introduction](#introduction): + +::: code-group + +```cds [srv/travel-constraints.cds] +using { TravelService } from './travel-service'; +annotate TravelService.Travels with { + + Description @assert: (case + when length(Description) < 3 + then 'Description too short' // [!code focus] + end); + + Agency @mandatory @assert: (case + when not exists Agency + then 'Agency does not exist' // [!code focus] + end); + + BeginDate @mandatory @assert: (case + when BeginDate > EndDate + then 'ASSERT_BEGINDATE_BEFORE_ENDDATE' // [!code focus] + when exists Bookings [Flight.date < Travel.BeginDate] + then 'ASSERT_BOOKINGS_IN_TRAVEL_PERIOD' // [!code focus] + end); + + BookingFee @assert: (case + when BookingFee < 0 + then 'ASSERT_BOOKING_FEE_NON_NEGATIVE' // [!code focus] + end); + +} +``` + +::: + +If you use a message key, the message is automatically looked up in the message bundle of the service with the current user's preferred locale. + +[Learn more about localized messages.](../i18n){.learn-more} + + + +## Field Control + +Declarative constraints can also be used to do field control in Fiori UIs, i.e. to add visual indicators to mandatory or readonly fields, or to hide fields. In particular, CAP automatically adds respective OData annotations to generated EDMX $metadata documents for the CDS listed below. + + +### `@mandatory` + +Currently only static `@mandatory` annotations are supported for field control in Fiori UIs. They result in the addition of the following OData annotation to the EDMX $metadata: + +```xml + + + +``` + + + +### `@readonly` + +Currently only static `@readonly` annotations are supported for field control in Fiori UIs. They result in the addition of the following OData annotation to the EDMX $metadata: + +```xml + + + +``` + + +### `@UI.Hidden` + +Use the `@UI.Hidden` annotation to hide fields in Fiori UIs. You can also use it with expressions as values, for example like that: + +```cds +@UI.Hidden: (status <> 'visible') +``` + +[Learn more about that in the *OData guide*](/advanced/odata#expression-annotations) {.learn-more} + + + +## Invariant Constraints + + + +Annotations in general are propagated from underlying entities to views on top. This also applies to the annotations like `@assert` and `@mandatory` introduced in here, which can be used to declare invariant constraints on base entities, which are then inherited to and hence enforced on all interface views on top. + +Picking up the [sample from the introduction](#introduction) again, we could extract some of the constraints and add them to the `sap.capire.travels.Travels` entity from the domain model, with is the underlying entity of `TravelService.Travels`: + +::: code-group + +```cds [srv/travel-invariants.cds] +using { sap.capire.travels.Travels } from '../db/schema'; +annotate Travels with { + + Description @assert: (case + when length(Description) < 3 then 'Description too short' + end); + + Customer @assert: (case + when Customer is null then 'Customer must be specified' + when not exists Customer then 'Customer does not exist' + end); + +} +``` + +::: + +And this works fine for these constraints in this example. However, it may be dangerous if you do that for constraints which refer to other fields, as views on top might not expose these fields. This would immediately lead to compiler errors. Note also, that even though you might think you know all your views, and ensure all related fields are included in all views, somebody that you never meet, builds a new view on top of one of your entity. Hence always **adhere to this strict rule**: + +> [!danger] +> +> Only add invariant constraints to underlying entities that **do not refer to other elements**! + From 0197a606ff2f7184ff9ea5e634c3954cf86becb6 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 19 Dec 2025 14:56:02 +0100 Subject: [PATCH 155/439] beta -> gamma --- guides/services/constraints.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/guides/services/constraints.md b/guides/services/constraints.md index 36d282e915..1711b9e160 100644 --- a/guides/services/constraints.md +++ b/guides/services/constraints.md @@ -181,7 +181,7 @@ Use annotations like `@assert` and `@mandatory` to declaratively add constraints -### `@assert:` *(constraint)* +### `@assert:` *(constraint)* Annotate an element with `@assert: ()` to specify checks to be applied on respective input and errors to be raised if they fail. The `` are standard SQL `case` expressions with one or more `when` branches, as shown in this example: @@ -582,4 +582,3 @@ And this works fine for these constraints in this example. However, it may be da > [!danger] > > Only add invariant constraints to underlying entities that **do not refer to other elements**! - From 10a1c0e21caaa6cdb93d53ca761bc47698989cb0 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 19 Dec 2025 15:19:03 +0100 Subject: [PATCH 156/439] less clutter --- guides/providing-services.md | 57 +++++++++++++++------------------- guides/services/constraints.md | 45 ++++++++++----------------- menu.md | 4 +-- 3 files changed, 44 insertions(+), 62 deletions(-) diff --git a/guides/providing-services.md b/guides/providing-services.md index c7e98fb53b..620ac83308 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -772,55 +772,48 @@ Here's an overview table: - Pessimistic locking is not supported by SQLite. H2 supports exclusive locks only. ::: -## Input Validation -CAP runtimes provide generic input validation for incoming requests out of the box, based on the data types and constraints defined in CDS models. You can add custom input validation by... +## Custom Logic -- [Declarative Constraints](./services/constraints) with the following annotations: - - [`@assert`](./services/constraints#assert), incl. derivates: - - [`@assert.format`](./services/constraints#assert-format) - - [`@assert.range`](./services/constraints#assert-range) - - [`@assert.target`](./services/constraints#assert-target) - - [`@mandatory`](./services/constraints#mandatory) - - [`@readonly`](./services/constraints#readonly) -- [Programmatic Validations](#custom-logic) in custom event handlers +As most standard tasks and use cases are covered by [generic service providers](#generic-providers), the need to add service implementation code is greatly reduced and minified, and hence the quantity of individual boilerplate coding. -> [!tip] -> Prefer declarative constraints over programmatic validations wherever possible, as they require no implementation coding and are automatically served by CAP runtimes in optimized ways. +The remaining cases that need custom handlers, reduce to real custom logic, specific to your domain and application, such as: -## [Constraints](services/constraints) +- Domain-specific programmatic [Validations](#input-validation) +- Augmenting result sets, for example to add computed fields for frontends +- Programmatic [Authorization Enforcements](/guides/security/authorization#enforcement) +- Triggering follow-up actions, for example calling other services or emitting outbound events in response to inbound events +- And more... In general, all the things not (yet) covered by generic handlers -Declarative constraints allow you to express conditions using CXL expressions that are validated automatically whenever data is written, greatly reducing the need for extensive custom code for input validation. -::: tip Read the guide -Find additional information about constraints in this guide: -[→ **_Constraints_**](services/constraints) -::: -## [Status-Transition Flows](services/status-flows) +### Declarative Custom Logic -Status-transition flows ensure transitions are explicitly modeled, validated, and executed in a controlled and reliable way, thereby eliminating the need for extensive custom coding. +CAP supports various declarative techniques to express custom logic without coding, in particular for input validation and status-transition flows. -::: tip Read the guide -Find additional information about modeling status-transition flows in this guide:
-[→ **_Status-Transition Flows_**](services/status-flows) -::: +#### Status Transition Flows -## Custom Logic +- [Status-Transition Flows](./services/status-flows.md) ensure transitions are explicitly modeled, validated, and executed in a controlled and reliable way, thereby eliminating the need for extensive custom coding. +#### Input Validation -As most standard tasks and use cases are covered by [generic service providers](#generic-providers), the need to add service implementation code is greatly reduced and minified, and hence the quantity of individual boilerplate coding. +- [Declarative Constraints](./services/constraints) allow to annotate your models and have the respective checks still be executed and enforced by generic runtimes, with the following annotations: -The remaining cases that need custom handlers, reduce to real custom logic, specific to your domain and application, such as: + - [`@assert`](./services/constraints#assert), incl. derivates: + - [`@assert.format`](./services/constraints#assert-format) + - [`@assert.range`](./services/constraints#assert-range) + - [`@assert.target`](./services/constraints#assert-target) + - [`@mandatory`](./services/constraints#mandatory) + - [`@readonly`](./services/constraints#readonly) + + +> [!tip] +> Prefer declarative constraints over programmatic validations wherever possible, as they require no implementation coding and are automatically served by CAP runtimes in optimized ways. -- Domain-specific programmatic [Validations](#input-validation) -- Augmenting result sets, for example to add computed fields for frontends -- Programmatic [Authorization Enforcements](/guides/security/authorization#enforcement) -- Triggering follow-up actions, for example calling other services or emitting outbound events in response to inbound events -- And more... In general, all the things not (yet) covered by generic handlers +### Custom Service Providers **In Node.js**, the easiest way to add custom implementations for services is through equally named _.js_ files placed next to a service definition's _.cds_ file: diff --git a/guides/services/constraints.md b/guides/services/constraints.md index 1711b9e160..5e5eee18d6 100644 --- a/guides/services/constraints.md +++ b/guides/services/constraints.md @@ -243,7 +243,7 @@ annotate TravelService.Travels with { -### `@assert .format` +### `@assert.format` Allows you to specify a regular expression string (in ECMA 262 format in CAP Node.js and java.util.regex.Pattern format in CAP Java) that all string input must match. @@ -254,7 +254,7 @@ entity Foo { ``` -### `@assert .range` +### `@assert.range` Allows you to specify `[ min, max ]` ranges for elements with ordinal types — that is, numeric or date/time types. For `enum` elements, `true` can be specified to restrict all input to the defined enum values. @@ -287,32 +287,9 @@ Support for open intervals and infinity is available for CAP Node.js since `@sap -### `@assert .target` +### `@assert.target` -Annotate a [managed to-one association](../../cds/cdl#managed-associations) of a CDS model entity definition with the -`@assert.target` annotation to check whether the target entity referenced by the association (the reference's target) -exists. In other words, use this annotation to check whether a non-null foreign key input in a table has a corresponding -primary key in the associated/referenced target table. - -You can check whether multiple targets exist in the same transaction. For example, in the `Books` entity, you could -annotate one or more managed to-one associations with the `@assert.target` annotation. However, it is assumed that -dependent values were inserted before the current transaction. For example, in a deep create scenario, when creating a -book, checking whether an associated author exists that was created as part of the same deep create transaction isn't -supported, in this case, you will get an error. - -The `@assert.target` check constraint is meant to **validate user input** and not to ensure referential integrity. -Therefore only `CREATE`, and `UPDATE` events are supported (`DELETE` events are not supported). To ensure that every -non-null foreign key in a table has a corresponding primary key in the associated/referenced target table -(ensure referential integrity), the [`@assert.integrity`](../databases#database-constraints) constraint must be used instead. - -If the reference's target doesn't exist, an HTTP response -(error message) is provided to HTTP client applications and logged to stdout in debug mode. The HTTP response body's -content adheres to the standard OData specification for an error -[response body](https://docs.oasis-open.org/odata/odata-json-format/v4.01/cs01/odata-json-format-v4.01-cs01.html#sec_ErrorResponse). - -#### Example - -Add `@assert.target` annotation to the service definition as previously mentioned: +Annotate a [managed to-one association](../../cds/cdl#managed-associations) with `@assert.target` to check whether the target entity referenced by the association (the reference's target) exists for a given input. ```cds entity Books { @@ -328,7 +305,19 @@ entity Authors { } ``` -**HTTP Request** — *assume that an author with the ID `"796e274a-c3de-4584-9de2-3ffd7d42d646"` doesn't exist in the database* +You can check whether multiple targets exist in the same transaction. For example, in the `Books` entity, you could +annotate one or more managed to-one associations with the `@assert.target` annotation. However, it is assumed that +dependent values were inserted before the current transaction. For example, in a deep create scenario, when creating a book, checking whether an associated author exists that was created as part of the same deep create transaction isn't supported, in this case, you will get an error. + +The `@assert.target` check constraint is meant to **validate user input** and not to ensure referential integrity. +Therefore only `CREATE`, and `UPDATE` events are supported (`DELETE` events are not supported). To ensure that every +non-null foreign key in a table has a corresponding primary key in the associated/referenced target table +(ensure referential integrity), the [`@assert.integrity`](../databases#database-constraints) constraint must be used instead. + +If the reference's target doesn't exist, an HTTP response +(error message) is provided to HTTP client applications and logged to stdout in debug mode. The HTTP response body's +content adheres to the standard OData specification for an error +[response body](https://docs.oasis-open.org/odata/odata-json-format/v4.01/cs01/odata-json-format-v4.01-cs01.html#sec_ErrorResponse). ```http POST Books HTTP/1.1 diff --git a/menu.md b/menu.md index b12ed7ae96..556c39adfb 100644 --- a/menu.md +++ b/menu.md @@ -24,9 +24,9 @@ ### [Core Concepts](guides/providing-services#introduction) ### [Service Definitions](guides/providing-services#service-definitions) - ### [Served out-of-the-box](guides/providing-services#generic-providers) - ### [Constraints](guides/services/constraints) + ### [Served Out-of-the-Box](guides/providing-services#generic-providers) ### [Status Flows](guides/services/status-flows) + ### [Constraints](guides/services/constraints) ### [Custom Logic](guides/providing-services#custom-logic) ### [Actions & Functions](guides/providing-services#actions-functions) ### [Status-Transition Flows](guides/providing-services#status-transition-flows) From 26c0d4dca9b3f790dfffb845cb6bf3f7f7c5a34b Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 19 Dec 2025 15:50:47 +0100 Subject: [PATCH 157/439] fixed link --- guides/providing-services.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/providing-services.md b/guides/providing-services.md index 620ac83308..51885c31e8 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -800,7 +800,7 @@ CAP supports various declarative techniques to express custom logic without codi - [Declarative Constraints](./services/constraints) allow to annotate your models and have the respective checks still be executed and enforced by generic runtimes, with the following annotations: - - [`@assert`](./services/constraints#assert), incl. derivates: + - [`@assert`](./services/constraints#assert-constraint), incl. derivates: - [`@assert.format`](./services/constraints#assert-format) - [`@assert.range`](./services/constraints#assert-range) - [`@assert.target`](./services/constraints#assert-target) From ca4d7520627568847a0cf9942599498ec7e97e58 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Sat, 20 Dec 2025 00:13:02 +0100 Subject: [PATCH 158/439] Removed twoslash as it broke vitepress build --- package.json | 2 +- tools/cds-typer.md | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 74ade9ad7b..7b15a4f633 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@cap-js/cds-typer": "^0", "@cap-js/cds-types": "^0", "@sap/cds": "^9", - "@shikijs/vitepress-twoslash": "^2.0.0", + "@shikijs/vitepress-twoslash": "^3", "@types/adm-zip": ">=0.5.0", "@types/express": "^4.17.21", "@typescript-eslint/parser": "^8.0.0", diff --git a/tools/cds-typer.md b/tools/cds-typer.md index fda5f3cef9..1e75cbcb86 100644 --- a/tools/cds-typer.md +++ b/tools/cds-typer.md @@ -26,7 +26,7 @@ If you are planning to use cds-typer in a TypeScript project, you should read th 5. Saving any _.cds_ file of your model from VS Code triggers the type generation process. 6. Model types now have to be imported to service implementation files by traditional imports of the generated files: -```js twoslash +```js // @noErrors const cds = require('@sap/cds') const service = new cds.ApplicationService @@ -38,7 +38,7 @@ service.before('CREATE', Books, ({ data }) => { /* data is of type any */}) ```

-```js twoslash +```js // @noErrors // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} const cds = require('@sap/cds') @@ -69,7 +69,7 @@ The types emitted by the type generator are tightly integrated with the CDS API. Most CQL constructs have an overloaded signature to support passing in generated types. Chained calls will offer code completion related to the type you pass in. -```js twoslash +```js // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} const cds = require('@sap/cds') // ---cut--- @@ -99,7 +99,7 @@ Note that your entities will expose additional capabilities in the context of CQ ### CRUD Handlers The CRUD handlers `before`, `on`, and `after` accept generated types: -```js twoslash +```js // @noErrors // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} const cds = require('@sap/cds') @@ -132,7 +132,7 @@ service.on('READ', Book, req => req.data.ID) In the same manner, actions can be combined with `on`: -```js twoslash +```js // @noErrors // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} const cds = require('@sap/cds') @@ -154,7 +154,7 @@ You can remedy this by specifying the expected type with one of the following op Using [JSDoc](https://jsdoc.app/) in JavaScript projects: -```js twoslash +```js // @noErrors // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} const cds = require('@sap/cds') @@ -173,7 +173,7 @@ function readBooksHandler (req) {
Using `import` in TypeScript projects: -```ts twoslash +```ts // @noErrors // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} import cds from '@sap/cds' @@ -197,7 +197,7 @@ CDS enums are supported by `cds-typer` and are represented during runtime as wel <<< assets/incidents/db/schema.cds -```js twoslash +```js // @paths: {"#cds-models/*": ["%typedModels:incidents:resolved%"]} const cds = require('@sap/cds') const service = new cds.ApplicationService @@ -253,7 +253,7 @@ class Book { In consequence, you will get called out by the type system when trying to chain property calls. You can overcome this in a variety of ways: -```ts twoslash +```ts // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} import cds from '@sap/cds' // ---cut--- @@ -292,7 +292,7 @@ CDS file: Generated classes: -```ts twoslash +```ts // @paths: {"#cds-models/*": ["%typedModels:farm:resolved%"]} import { Mouse, Mice, Sheep, FlockOfSheep } from '#cds-models/farm' ``` @@ -457,7 +457,7 @@ const { Books } = require('#cds-models/sap/capire/bookshop') These imports will behave like [`cds.entities('sap.capire.bookshop')`](../node.js/cds-reflect#entities) during runtime, but offer you code completion and type hinting at design time: -```js twoslash +```js // @noErrors // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} const cds = require('@sap/cds') @@ -476,7 +476,7 @@ class CatalogService extends cds.ApplicationService { init(){ Similar to `cds.entities(…)`, you can't use static imports here. Instead, you need to use dynamic imports. However, there's an exception for [static top-level imports](#typer-top-level-imports). -```js twoslash +```js // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} const cds = require('@sap/cds') // ---cut--- @@ -491,7 +491,7 @@ class CatalogService extends cds.ApplicationService { init(){ In TypeScript you can use [type-only imports](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html#type-only-imports-and-export) on top level if you just want the types for annotation purposes. The counterpart for the JavaScript example above that works during design time _and_ runtime is a [dynamic import expression](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html#dynamic-import-expressions): -```ts twoslash +```ts // @noErrors // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} import cds from '@sap/cds' @@ -510,7 +510,7 @@ class CatalogService extends cds.ApplicationService { async init(){ ### Static Top-Level Imports {#typer-top-level-imports} You can pass a new option, `useEntitiesProxy`, to `cds-typer`. This option allows you to statically import your entities at the top level, as you intuitively would. However, you can still only _use these entities_ in a context where the CDS runtime is fully booted, like in a service definition: -```ts twoslash +```ts // @paths: {"#cds-models/*": ["%typedModels:bookshop:resolved%"]} import cds from '@sap/cds' // ---cut--- From 7b1421633b94edbdd119e14efaa383a754cefa30 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Sat, 20 Dec 2025 12:38:19 +0100 Subject: [PATCH 159/439] New folder guides/databases --- about/features.md | 10 ++-- advanced/fiori.md | 3 +- cds/annotations.md | 10 ++-- cds/cdl.md | 6 +-- cds/common.md | 2 +- cds/compiler/hdbcds-to-hdbtable.md | 2 +- cds/compiler/v2.md | 2 +- get-started/in-a-nutshell.md | 6 +-- get-started/troubleshooting.md | 2 +- guides/data-privacy/annotations.md | 2 +- guides/databases-h2.md | 43 --------------- guides/databases/h2.md | 43 +++++++++++++++ .../{databases-hana.md => databases/hana.md} | 40 +++++++------- guides/{databases.md => databases/index.md} | 54 +++++++++---------- .../postgres.md} | 20 +++---- .../sqlite.md} | 28 +++++----- guides/deployment/custom-builds.md | 2 +- guides/deployment/to-cf.md | 4 +- guides/domain-modeling.md | 2 +- guides/providing-services.md | 2 +- guides/services/constraints.md | 10 ++-- java/cds-data.md | 2 +- java/cqn-services/persistence-services.md | 4 +- java/migration.md | 2 +- java/working-with-cql/query-api.md | 2 +- java/working-with-cql/query-execution.md | 4 +- menu.md | 12 ++--- node.js/cds-reflect.md | 7 +-- 28 files changed, 161 insertions(+), 165 deletions(-) delete mode 100644 guides/databases-h2.md create mode 100644 guides/databases/h2.md rename guides/{databases-hana.md => databases/hana.md} (93%) rename guides/{databases.md => databases/index.md} (91%) rename guides/{databases-postgres.md => databases/postgres.md} (95%) rename guides/{databases-sqlite.md => databases/sqlite.md} (94%) diff --git a/about/features.md b/about/features.md index e9b320bb16..085c482e3e 100644 --- a/about/features.md +++ b/about/features.md @@ -197,12 +197,12 @@ Following is an index of the features currently covered by CAP, with status and | | CDS/deploy | Node.js | Java | |-----------------------------------------------------------------|:----------:|:-------:|:----:| -| [SAP HANA](../guides/databases) | | | | -| [SAP HANA Cloud](../guides/databases-hana) | | | | -| [PostgreSQL](../guides/databases-postgres) | | | | -| [SQLite](../guides/databases-sqlite) 1 | | | | +| [SAP HANA](../guides/databases/index) | | | | +| [SAP HANA Cloud](../guides/databases/hana) | | | | +| [PostgreSQL](../guides/databases/postgres) | | | | +| [SQLite](../guides/databases/sqlite) 1 | | | | | [H2](../java/cqn-services/persistence-services#h2) 1 | | | | -| [MongoDB](../guides/databases) out of the box | | | | +| [MongoDB](../guides/databases/index) out of the box | | | | | Pluggable drivers architecture | | | | | Out-of-the-box support for other databases? | | | | diff --git a/advanced/fiori.md b/advanced/fiori.md index 1f42cc9e1d..b6f03e8b8a 100644 --- a/advanced/fiori.md +++ b/advanced/fiori.md @@ -525,7 +525,7 @@ SELECT.from(Books.drafts) //returns all drafts of the Books entity In addition to adding [restrictions on services, entities, and actions/functions](/guides/security/authorization#restrictions), there are use cases where you only want to hide certain parts of the UI for specific users. This is possible by using the respective UI annotations like `@UI.Hidden` or `@UI.CreateHidden` in conjunction with `$edmJson` pointing to a singleton. -First, you define the [singleton](../advanced/odata#singletons) in your service and annotate it with [`@cds.persistence.skip`](../guides/databases#cds-persistence-skip) so that no database artefact is created: +First, you define the [singleton](../advanced/odata#singletons) in your service and annotate it with [`@cds.persistence.skip`](../guides/databases/index#cds-persistence-skip) so that no database artefact is created: ```cds @odata.singleton @cds.persistence.skip @@ -861,4 +861,3 @@ extend AdminService.Genres with @( > `Hierarchy`

- diff --git a/cds/annotations.md b/cds/annotations.md index 7a5c6a0be0..cd1d2e6772 100644 --- a/cds/annotations.md +++ b/cds/annotations.md @@ -63,14 +63,14 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ | Annotation | Description | |---------------------------|------------------------------------------------------------------------| -| `@cds.persistence.exists` | see [Generating DDL Files](../guides/databases#cds-persistence-exists) | -| `@cds.persistence.table` | see [Generating DDL Files](../guides/databases#cds-persistence-table) | -| `@cds.persistence.skip` | see [Generating DDL Files](../guides/databases#cds-persistence-skip) | +| `@cds.persistence.exists` | see [Generating DDL Files](../guides/databases/index#cds-persistence-exists) | +| `@cds.persistence.table` | see [Generating DDL Files](../guides/databases/index#cds-persistence-table) | +| `@cds.persistence.skip` | see [Generating DDL Files](../guides/databases/index#cds-persistence-skip) | | `@cds.persistence.mock` | `false` excludes this entity from automatic mocking | | `@cds.on.insert` | see [Providing Services](../guides/providing-services) | | `@cds.on.update` | see [Providing Services](../guides/providing-services) | -| `@sql.prepend` | see [Generating DDL Files](../guides/databases#sql-prepend-append) | -| `@sql.append` | see [Generating DDL Files](../guides/databases#sql-prepend-append) | +| `@sql.prepend` | see [Generating DDL Files](../guides/databases/index#sql-prepend-append) | +| `@sql.append` | see [Generating DDL Files](../guides/databases/index#sql-prepend-append) | ## OData diff --git a/cds/cdl.md b/cds/cdl.md index 68b3a587a9..36688f9cd4 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -858,7 +858,7 @@ Result result = service.run(Select.from("UsingView"), params); ### Runtime Views { #runtimeviews } -To add or update CDS views without redeploying the database schema, annotate them with [@cds.persistence.skip](../guides/databases#cds-persistence-skip). This advises the CDS compiler to skip generating database views for these CDS views. Instead, CAP resolves them *at runtime* on each request. +To add or update CDS views without redeploying the database schema, annotate them with [@cds.persistence.skip](../guides/databases/index#cds-persistence-skip). This advises the CDS compiler to skip generating database views for these CDS views. Instead, CAP resolves them *at runtime* on each request. 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. @@ -948,7 +948,7 @@ This example is equivalent to the [unmanaged example above](#unmanaged-associati key element `address_ID` being added automatically upon activation to a SQL database. The names of the automatically added foreign key elements cannot be changed. -> Note: For adding foreign key constraints on database level, see [Database Constraints.](../guides/databases#database-constraints). +> Note: For adding foreign key constraints on database level, see [Database Constraints.](../guides/databases/index#database-constraints). If the target has a single primary key, a default value can be provided. This default applies to the generated foreign key element `address_ID`: @@ -1429,7 +1429,7 @@ Propagation of annotations can be stopped via value `null`, for example, `@anno: ::: -### Expressions as Annotation Values {#expressions-as-annotation-values} +### Expressions as Annotation Values In order to use an expression as an annotation value, it must be enclosed in parentheses: ```cds diff --git a/cds/common.md b/cds/common.md index 0b2d0062c4..5184bf3e4d 100644 --- a/cds/common.md +++ b/cds/common.md @@ -421,7 +421,7 @@ EU;European Union;European Union ``` ::: -[Learn more about the database aspects of **Providing Initial Data**.](../guides/databases#providing-initial-data){ .learn-more} +[Learn more about the database aspects of **Providing Initial Data**.](../guides/databases/index#providing-initial-data){ .learn-more} ### Add Translated Texts diff --git a/cds/compiler/hdbcds-to-hdbtable.md b/cds/compiler/hdbcds-to-hdbtable.md index 24da8c125c..1e91e05bb9 100644 --- a/cds/compiler/hdbcds-to-hdbtable.md +++ b/cds/compiler/hdbcds-to-hdbtable.md @@ -69,7 +69,7 @@ If the table doesn't contain much data, this process won't significantly impact ## Annotations -Annotations [`@sql.append/prepend`](../../guides/databases#sql-prepend-append) are used to generate native SQL clauses to the _.hdbtable_ files, or add native SAP HANA CDS clauses to the _.hdbcds_ files. +Annotations [`@sql.append/prepend`](../../guides/databases/index#sql-prepend-append) are used to generate native SQL clauses to the _.hdbtable_ files, or add native SAP HANA CDS clauses to the _.hdbcds_ files. If you have used these annotations in your model, a simple switchover from `hdbcds` to `hdbtable` is unlikely as such an annotation written for `hdbcds` in general is not valid for `hdbtable`. You'll have to adapt your model before the migration. diff --git a/cds/compiler/v2.md b/cds/compiler/v2.md index d20f0b4418..04e26e6edd 100644 --- a/cds/compiler/v2.md +++ b/cds/compiler/v2.md @@ -705,7 +705,7 @@ Select.from("bookshop.Books", b -> b.matching(id).to("texts")); #### CSV Files -CAP Java allows to [provide initial data](../../guides/databases#providing-initial-data) to your application using CSV files. The name of the CSV file should adhere to the pattern `-.csv` (`.csv`). Renaming the CSV file is recommended. +CAP Java allows to [provide initial data](../../guides/databases/index#providing-initial-data) to your application using CSV files. The name of the CSV file should adhere to the pattern `-.csv` (`.csv`). Renaming the CSV file is recommended. ```sh mv bookshop-Books_texts.csv bookshop-Books.texts.csv diff --git a/get-started/in-a-nutshell.md b/get-started/in-a-nutshell.md index 9006891851..313c9de4ed 100644 --- a/get-started/in-a-nutshell.md +++ b/get-started/in-a-nutshell.md @@ -423,7 +423,7 @@ c.s.c.s.impl.persistence.CsvDataLoader : Filling sap.capire.bookshop.Books fro -[Learn more about **Using Databases**.](../guides/databases){.learn-more} +[Learn more about **Using Databases**.](../guides/databases/index){.learn-more} ### Querying via OData @@ -491,7 +491,7 @@ cds deploy --to hana ``` ::: -[Learn more about deploying to SAP HANA.](../guides/databases){.learn-more .impl .node} +[Learn more about deploying to SAP HANA.](../guides/databases/index){.learn-more .impl .node} @@ -831,7 +831,7 @@ With this getting started guide we introduced many of the basics of CAP, such as - [Domain Modeling](../guides/domain-modeling) - [Providing Services](../guides/providing-services) - [Consuming Services](../guides/using-services) -- [Using Databases](../guides/databases) +- [Using Databases](../guides/databases/index) - [Serving UIs](../advanced/fiori) Visit the [***Cookbook***](../guides/) for deep dive guides on these topics and more. Also see the reference documentations for [***CDS***](../cds/), as well as [***Node.js***](../node.js/) and [***Java***](../java/) Service SDKs and runtimes. diff --git a/get-started/troubleshooting.md b/get-started/troubleshooting.md index e3de313b8b..d80cc5beda 100644 --- a/get-started/troubleshooting.md +++ b/get-started/troubleshooting.md @@ -510,7 +510,7 @@ After you have successfully deployed these changes to all affected HDI (tenant) | | Explanation | | --- | ---- | | _Root Cause_ | Your configuration isn't properly set. | -| _Solution_ | Configure your project as described in [Using Databases](../guides/databases). +| _Solution_ | Configure your project as described in [Using Databases](../guides/databases/index). #### Deployment fails — _Connection failed (RTE:[89008] Socket closed by peer_ {#connection-failed-89008} diff --git a/guides/data-privacy/annotations.md b/guides/data-privacy/annotations.md index 6549842caa..3140a3d53a 100644 --- a/guides/data-privacy/annotations.md +++ b/guides/data-privacy/annotations.md @@ -144,7 +144,7 @@ Use this annotation to identify data subject's unique key, or a reference to it. - Each `@PersonalData` entity needs to identify a `DataSubjectID` element. - For entities with `DataSubject` semantics, this is typically the primary key. - For entities with `DataSubjectDetails` or `Other` semantics, this is usually an association to the data subject. -- Fields marked as `DataSubjectID` should use [`not null`](../databases#not-null) to guarantee a value is present at all times. +- Fields marked as `DataSubjectID` should use [`not null`](../databases/index#not-null) to guarantee a value is present at all times. Hence, we annotate our model as follows: diff --git a/guides/databases-h2.md b/guides/databases-h2.md deleted file mode 100644 index d329dedf23..0000000000 --- a/guides/databases-h2.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -status: released -impl-variants: true ---- - - - -# Using H2 for Development in CAP Java - -For local development and testing, CAP Java supports the [H2](https://www.h2database.com/) database, which can be configured to run in-memory. - -[Learn more about features and limitations of using CAP with H2.](../java/cqn-services/persistence-services#h2){.learn-more} - -
- -::: warning -Not supported for CAP Node.js. -::: - -
- - -
- -[[toc]] - -
- -## Setup & Configuration {.java} - -There are various options of how to configure the [H2 database for local development and testing in CAP Java.](../java/developing-applications/testing#setup-configuration) - -## Features {.java} - -CAP supports most of the major features on H2: - -* [Path Expressions](../java/working-with-cql/query-api#path-expressions) & Filters -* [Expands](../java/working-with-cql/query-api#projections) -* [Localized Queries](../guides/localized-data#read-operations) -* [Comparison Operators](../java/working-with-cql/query-api#comparison-operators) -* [Predicate Functions](../java/working-with-cql/query-api#predicate-functions) - -[Learn about features and limitations of H2.](../java/cqn-services/persistence-services#h2){.learn-more} diff --git a/guides/databases/h2.md b/guides/databases/h2.md new file mode 100644 index 0000000000..9916a31e0e --- /dev/null +++ b/guides/databases/h2.md @@ -0,0 +1,43 @@ +--- +status: released +impl-variants: true +--- + + + +# Using H2 for Development in CAP Java + +For local development and testing, CAP Java supports the [H2](https://www.h2database.com/) database, which can be configured to run in-memory. + +[Learn more about features and limitations of using CAP with H2.](../../java/cqn-services/persistence-services#h2){.learn-more} + +
+ +::: warning +Not supported for CAP Node.js. +::: + +
+ + +
+ +[[toc]] + +
+ +## Setup & Configuration {.java} + +There are various options of how to configure the [H2 database for local development and testing in CAP Java.](../../java/developing-applications/testing#setup-configuration) + +## Features {.java} + +CAP supports most of the major features on H2: + +* [Path Expressions](../../java/working-with-cql/query-api#path-expressions) & Filters +* [Expands](../../java/working-with-cql/query-api#projections) +* [Localized Queries](../localized-data#read-operations) +* [Comparison Operators](../../java/working-with-cql/query-api#comparison-operators) +* [Predicate Functions](../../java/working-with-cql/query-api#predicate-functions) + +[Learn about features and limitations of H2.](../../java/cqn-services/persistence-services#h2){.learn-more} diff --git a/guides/databases-hana.md b/guides/databases/hana.md similarity index 93% rename from guides/databases-hana.md rename to guides/databases/hana.md index 9fc25a5443..ca5c443a57 100644 --- a/guides/databases-hana.md +++ b/guides/databases/hana.md @@ -44,16 +44,16 @@ Package `@cap-js/hana` uses the [`hdb`](https://www.npmjs.com/package/hdb) drive ::: :::details In CAP Java ... -The [modules](../java/developing-applications/building#standard-modules) `cds-starter-cloudfoundry` and `cds-starter-k8s` include `cds-feature-hana`. +The [modules](../../java/developing-applications/building#standard-modules) `cds-starter-cloudfoundry` and `cds-starter-k8s` include `cds-feature-hana`. The datasource for SAP HANA is then auto-configured based on available service bindings of type *service-manager* and *hana*. -[Learn more about the configuration of an SAP HANA Cloud Database](../java/cqn-services/persistence-services#sap-hana){ .learn-more} +[Learn more about the configuration of an SAP HANA Cloud Database](../../java/cqn-services/persistence-services#sap-hana){ .learn-more} ::: ::: tip Prefer `cds add` -... as documented in the [deployment guide](deployment/to-cf#_1-sap-hana-database), which also does the equivalent of `npm add @cap-js/hana` but in addition cares for updating `mta.yaml` and other deployment resources. +... as documented in the [deployment guide](../deployment/to-cf#_1-sap-hana-database), which also does the equivalent of `npm add @cap-js/hana` but in addition cares for updating `mta.yaml` and other deployment resources. ::: @@ -164,9 +164,9 @@ In addition to the generated HDI artifacts, you can add custom ones by adding ac ## Deploying to SAP HANA -There are two ways to include SAP HANA in your setup: Use SAP HANA in a [hybrid mode](#cds-deploy-hana), meaning running your services locally and connecting to your database in the cloud, or running your [whole application](deployment/) on SAP Business Technology Platform. This is possible either in trial accounts or in productive accounts. +There are two ways to include SAP HANA in your setup: Use SAP HANA in a [hybrid mode](#cds-deploy-hana), meaning running your services locally and connecting to your database in the cloud, or running your [whole application](../deployment) on SAP Business Technology Platform. This is possible either in trial accounts or in productive accounts. -To make the following configuration steps work, we assume that you've provisioned, set up, and started, for example, your SAP HANA Cloud instance in the [trial environment](https://cockpit.hanatrial.ondemand.com). If you need to prepare your SAP HANA first, see [How to Get an SAP HANA Cloud Instance for SAP Business Technology Platform, Cloud Foundry environment](../get-started/troubleshooting#get-hana) to learn about your options. +To make the following configuration steps work, we assume that you've provisioned, set up, and started, for example, your SAP HANA Cloud instance in the [trial environment](https://cockpit.hanatrial.ondemand.com). If you need to prepare your SAP HANA first, see [How to Get an SAP HANA Cloud Instance for SAP Business Technology Platform, Cloud Foundry environment](../../get-started/troubleshooting#get-hana) to learn about your options. ### Prepare for Production { #configure-hana } @@ -178,8 +178,8 @@ cds add hana --for hybrid This configures deployment for SAP HANA to use the _hdbtable_ and _hdbview_ formats. The configuration is added to a `[hybrid]` profile in your _package.json_. -::: tip The profile `hybrid` relates to [the hybrid testing](../advanced/hybrid-testing) scenario -If you want to prepare your project for production and use the profile `production`, read the [Deploy to Cloud Foundry](deployment/) guide. +::: tip The profile `hybrid` relates to [the hybrid testing](../../advanced/hybrid-testing) scenario +If you want to prepare your project for production and use the profile `production`, read the [Deploy to Cloud Foundry](../deployment) guide. ::: No further configuration is necessary for Node.js. For Java, see the [Use SAP HANA as the Database for a CAP Java Application](https://developers.sap.com/tutorials/cp-cap-java-hana-db.html#880cf07a-1788-4fda-b6dd-b5a6e5259625) tutorial for the rest of the configuration. @@ -190,19 +190,19 @@ No further configuration is necessary for Node.js. For Java, see the [Use SAP HA `cds deploy` lets you deploy _just the database parts_ of the project to an SAP HANA instance. The server application (the Node.js or Java part) still runs locally and connects to the remote database instance, allowing for fast development roundtrips. -Make sure that you're [logged in to Cloud Foundry](deployment/to-cf#build-and-deploy) with the correct target, that is, org and space. +Make sure that you're [logged in to Cloud Foundry](../deployment/to-cf#build-and-deploy) with the correct target, that is, org and space. Then in the project root folder, just execute: ```sh cds deploy --to hana ``` -> To connect to your SAP HANA Cloud instance use `cds watch --profile hybrid` in Node.js or[ `mvn cds:watch` in Java](../java/developing-applications/running#local-development-support) projects. +> To connect to your SAP HANA Cloud instance use `cds watch --profile hybrid` in Node.js or[ `mvn cds:watch` in Java](../../java/developing-applications/running#local-development-support) projects. Behind the scenes, `cds deploy` does the following: * Compiles the CDS model to SAP HANA files (usually in _gen/db_, or _db/src/gen_) -* Generates _[.hdbtabledata](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-deployment-infrastructure-hdi-reference/table-data-hdbtabledata)_ files for the [CSV files](databases#providing-initial-data) in the project. If a _[.hdbtabledata](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-deployment-infrastructure-hdi-reference/table-data-hdbtabledata)_ file is already present next to the CSV files, no new file is generated. +* Generates _[.hdbtabledata](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-deployment-infrastructure-hdi-reference/table-data-hdbtabledata)_ files for the [CSV files](#providing-initial-data) in the project. If a _[.hdbtabledata](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-deployment-infrastructure-hdi-reference/table-data-hdbtabledata)_ file is already present next to the CSV files, no new file is generated. * Creates a Cloud Foundry service of type `hdi-shared`, which creates an HDI container. Also, you can explicitly specify the name like so: `cds deploy --to hana:`. * Starts `@sap/hdi-deploy` locally. If you need a tunnel to access the database, you can specify its address with `--tunnel-address `. * Stores the binding information with profile `hybrid` in the _.cdsrc-private.json_ file of your project. You can use a different profile with parameter `--for`. With this information, `cds watch`/`run` can fetch the SAP HANA credentials at runtime, so that the server can connect to it. @@ -216,9 +216,9 @@ cds deploy --to hana --profile hybrid Based on these profile settings, `cds deploy` executes `cds build` and also resolves additionally binding information. If a corresponding binding exists, its service name and service key are used. The development profile is used by default. [Learn more about the deployment using HDI.](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-developer-guide-for-cloud-foundry-multitarget-applications-sap-business-app-studio/sap-hdi-deployer?){.learn-more} -[Learn more about hybrid testing using service bindings to Cloud services.](../advanced/hybrid-testing#run-with-service-bindings){.learn-more} +[Learn more about hybrid testing using service bindings to Cloud services.](../../advanced/hybrid-testing#run-with-service-bindings){.learn-more} -If you run into issues, see the [Troubleshooting](../get-started/troubleshooting#hana) guide. +If you run into issues, see the [Troubleshooting](../../get-started/troubleshooting#hana) guide. #### Deploy Parameters @@ -244,7 +244,7 @@ This is equivalent to `cds deploy --to hana:myservice` and ignores information c ### Using `cf deploy` or `cf push` -See the [Deploying to Cloud Foundry](deployment/) guide for information about how to deploy the complete application to SAP Business Technology Platform, including a dedicated deployer application for the SAP HANA database. +See the [Deploying to Cloud Foundry](../deployment) guide for information about how to deploy the complete application to SAP Business Technology Platform, including a dedicated deployer application for the SAP HANA database. @@ -252,7 +252,7 @@ See the [Deploying to Cloud Foundry](deployment/) guide for information about ho The HANA Service provides dedicated support for native SAP HANA features as follows. -### Vector Embeddings { #vector-embeddings } +### 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. @@ -328,7 +328,7 @@ Use the [SAP Cloud SDK for AI](https://sap.github.io/ai-sdk/) for unified access [Learn more about the SAP Cloud SDK for AI (Java)](https://sap.github.io/ai-sdk/docs/java/getting-started) {.learn-more} -[Learn more about Vector Embeddings in CAP Java](../java/cds-data#vector-embeddings) {.learn-more} +[Learn more about Vector Embeddings in CAP Java](../../java/cds-data#vector-embeddings) {.learn-more} [Learn more about the SAP Cloud SDK for AI (JavaScript)](https://sap.github.io/ai-sdk/docs/js/getting-started) {.learn-more} @@ -422,7 +422,7 @@ first_value(name order by price desc) Restriction: `COLLATE` isn't supported. -For other functions, where the syntax isn't supported by the compiler (for example, `xmltable(...)`), a native _.hdbview_ can be used. See [Using Native SAP HANA Artifacts](../advanced/hana) for more details. +For other functions, where the syntax isn't supported by the compiler (for example, `xmltable(...)`), a native _.hdbview_ can be used. See [Using Native SAP HANA Artifacts](../../advanced/hana) for more details. @@ -490,7 +490,7 @@ For all transitions you want to execute in HDI, you need to specify an undeploy :::tip Moving From _.hdbcds_ To _.hdbtable_ There a migration guide providing you step-by-step instructions for making the switch. -[Learn more about Moving From _.hdbcds_ To _.hdbtable_](../cds/compiler/hdbcds-to-hdbtable){.learn-more} +[Learn more about Moving From _.hdbcds_ To _.hdbtable_](../../cds/compiler/hdbcds-to-hdbtable){.learn-more} ::: #### Enabling hdbmigrationtable Generation for Selected Entities During CDS Build {#enabling-hdbmigrationtable-generation} @@ -543,7 +543,7 @@ We recommend keeping _.hdbtable_ deployment for entities where you expect low da You can switch large-volume tables to _.hdbmigrationtable_ at any time, keeping in mind that the existing _.hdbtable_ design-time artifact needs to be undeployed. When choosing to use _.hdbmigrationtable_ for an entity with -[localized elements](../guides/localized-data#localized-data) or [compositions of aspects](../cds/cdl#managed-compositions), +[localized elements](../localized-data#localized-data) or [compositions of aspects](../../cds/cdl#managed-compositions), the generated `.texts` and composition child entities are automatically handled via _.hdbmigrationtable_, too. If this is not desired, annotate these generated entities with `@cds.persistence.journal: false`. @@ -557,7 +557,7 @@ CDS build performs rudimentary checks on generated _.hdmigrationtable_ files: - CDS build fails if manual resolution comments starting with `>>>>>` exist in one of the generated _.hdbmigrationtable_ files. This ensures that manual resolution is performed before deployment. ### Native Database Clauses {#schema-evolution-native-db-clauses} -Not all clauses supported by SQL can directly be written in CDL syntax. To use native database clauses also in a CAP CDS model, you can provide arbitrary SQL snippets with the annotations [`@sql.prepend` and `@sql.append`](databases#sql-prepend-append). In this section, we're focusing on schema evolution specific details. +Not all clauses supported by SQL can directly be written in CDL syntax. To use native database clauses also in a CAP CDS model, you can provide arbitrary SQL snippets with the annotations [`@sql.prepend` and `@sql.append`](#sql-prepend-append). In this section, we're focusing on schema evolution specific details. Schema evolution requires that any changes are applied by corresponding ALTER statements. See [ALTER TABLE statement reference](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/alter-table-statement-data-definition?version=2024_1_QRC) for more information. A new migration version is generated whenever an `@sql.append` or `@sql.prepend` annotation is added, changed, or removed. ALTER statements define the individual changes that create the final database schema. This schema has to match the schema defined by the TABLE statement in the _.hdbmigrationtable_ artifact. Please note that the compiler doesn't evaluate or process these SQL snippets. Any snippet is taken as is and inserted into the TABLE statement and the corresponding ALTER statement. The deployment fails in case of syntax errors. @@ -689,7 +689,7 @@ If you need to remove deployed CSV files, also add this entry: ::: -*See this [troubleshooting](../get-started/troubleshooting#hana-csv) entry for more information.*{.learn-more} +*See this [troubleshooting](../../get-started/troubleshooting#hana-csv) entry for more information.*{.learn-more} ### SAP HANA Cloud System Limits diff --git a/guides/databases.md b/guides/databases/index.md similarity index 91% rename from guides/databases.md rename to guides/databases/index.md index 1c18cbbb4a..3edd9b5c23 100644 --- a/guides/databases.md +++ b/guides/databases/index.md @@ -24,7 +24,7 @@ impl-variants: true ### Migrating to the `@cap-js/` Database Services? {.node} -With CDS 8, the [`@cap-js`](https://github.com/cap-js/cds-dbs) database services for SQLite, PostgreSQL, and SAP HANA are generally available. It's highly recommended to migrate. You can find instructions in the [migration guide](databases-sqlite#migration). Although the guide is written in the context of the SQLite Service, the same hints apply to PostgreSQL and SAP HANA. +With CDS 8, the [`@cap-js`](https://github.com/cap-js/cds-dbs) database services for SQLite, PostgreSQL, and SAP HANA are generally available. It's highly recommended to migrate. You can find instructions in the [migration guide](../databases/sqlite#migration). Although the guide is written in the context of the SQLite Service, the same hints apply to PostgreSQL and SAP HANA. ### Adding Database Packages {.node} @@ -32,9 +32,9 @@ Following are cds-plugin packages for CAP Node.js runtime that support the respe | Database | Package | Remarks | | ------------------------------ | ------------------------------------------------------------ | ---------------------------------- | -| **[SAP HANA Cloud](databases-hana)** | [`@cap-js/hana`](https://www.npmjs.com/package/@cap-js/hana) | recommended for production | -| **[SQLite](databases-sqlite)** | [`@cap-js/sqlite`](https://www.npmjs.com/package/@cap-js/sqlite) | recommended for development | -| **[PostgreSQL](databases-postgres)** | [`@cap-js/postgres`](https://www.npmjs.com/package/@cap-js/postgres) | maintained by community + CAP team | +| **[SAP HANA Cloud](../databases/hana)** | [`@cap-js/hana`](https://www.npmjs.com/package/@cap-js/hana) | recommended for production | +| **[SQLite](../databases/sqlite)** | [`@cap-js/sqlite`](https://www.npmjs.com/package/@cap-js/sqlite) | recommended for development | +| **[PostgreSQL](../databases/postgres)** | [`@cap-js/postgres`](https://www.npmjs.com/package/@cap-js/postgres) | maintained by community + CAP team | > Follow the preceding links to find specific information for each. @@ -56,7 +56,7 @@ npm add @cap-js/hana ::: details Prefer `cds add hana` ... -... which also does the equivalent of `npm add @cap-js/hana` but in addition cares for updating `mta.yaml` and other deployment resources as documented in the [deployment guide](deployment/to-cf#_1-sap-hana-database). +... which also does the equivalent of `npm add @cap-js/hana` but in addition cares for updating `mta.yaml` and other deployment resources as documented in the [deployment guide](../deployment/to-cf#_1-sap-hana-database). ::: @@ -153,12 +153,12 @@ Database support is enabled by adding a Maven dependency to the JDBC driver, as | Database | JDBC Driver | Remarks | | ------------------------------ | ------------------------------------------------------------ | ---------------------------------- | -| **[SAP HANA Cloud](databases-hana)** | `com.sap.cloud.db.jdbc:ngdbc` | Recommended for productive use | -| **[H2](databases-h2)** | `com.h2database:h2` | Recommended for development and CI | -| **[SQLite](databases-sqlite)** | `org.xerial:sqlite-jdbc` | Supported for development and CI
Recommended for local MTX | -| **[PostgreSQL](databases-postgres)** | `org.postgresql:postgresql` | Supported for productive use | +| **[SAP HANA Cloud](../databases/hana)** | `com.sap.cloud.db.jdbc:ngdbc` | Recommended for productive use | +| **[H2](h2-h2)** | `com.h2database:h2` | Recommended for development and CI | +| **[SQLite](../databases/sqlite)** | `org.xerial:sqlite-jdbc` | Supported for development and CI
Recommended for local MTX | +| **[PostgreSQL](../databases/postgres)** | `org.postgresql:postgresql` | Supported for productive use | -[Learn more about supported databases in CAP Java and their configuration](../java/cqn-services/persistence-services#database-support){ .learn-more} +[Learn more about supported databases in CAP Java and their configuration](../../java/cqn-services/persistence-services#database-support){ .learn-more} ## Providing Initial Data @@ -231,7 +231,7 @@ ID,title,descr ::: danger On SAP HANA, only use CSV files for _configuration data_ that can't be changed by application users. -→ See [CSV data gets overridden in the SAP HANA guide for details](databases-hana#csv-data-gets-overridden). +→ See [CSV data gets overridden in the SAP HANA guide for details](../databases/hana#csv-data-gets-overridden). ::: ### Use `cds add data` @@ -281,7 +281,7 @@ Quite frequently you need to distinguish between sample data and real initial da
-Use the properties [cds.dataSource.csv.*](../java/developing-applications/properties#cds-dataSource-csv) to configure the location of the CSV files. You can configure different sets of CSV files in different [Spring profiles](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.profiles). This configuration reads CSV data from `test/data` if the profile `test` is active: +Use the properties [cds.dataSource.csv.*](../../java/developing-applications/properties#cds-dataSource-csv) to configure the location of the CSV files. You can configure different sets of CSV files in different [Spring profiles](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.profiles). This configuration reads CSV data from `test/data` if the profile `test` is active: ::: code-group @@ -306,7 +306,7 @@ cds: -Most queries to databases are constructed and executed from [generic event handlers of CRUD requests](providing-services#serving-crud), so quite frequently there's nothing to do. The following is for the remaining cases where you have to provide custom logic, and as part of it execute database queries. +Most queries to databases are constructed and executed from [generic event handlers of CRUD requests](../providing-services#serving-crud), so quite frequently there's nothing to do. The following is for the remaining cases where you have to provide custom logic, and as part of it execute database queries. @@ -331,7 +331,7 @@ SELECT.from (Authors, a => {
-At runtime, we usually construct queries using the [CQL Query Builder API](../java/working-with-cql/query-api) in a database-agnostic way. For example, queries like this are supported for all databases: +At runtime, we usually construct queries using the [CQL Query Builder API](../../java/working-with-cql/query-api) in a database-agnostic way. For example, queries like this are supported for all databases: ```java Select.from(AUTHOR) @@ -381,7 +381,7 @@ cds.db.run (`SELECT from sqlite_schema where name like ?`, name)
-Use Spring's [JDBC Template](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html) to [leverage native database features](../java/cqn-services/persistence-services#jdbctemplate) as follows: +Use Spring's [JDBC Template](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/core/JdbcTemplate.html) to [leverage native database features](../../java/cqn-services/persistence-services#jdbctemplate) as follows: ```java @Autowired @@ -402,7 +402,7 @@ SELECT(['image1', 'image2']).from(Books) //> [{ image1, image2 }] // [!code --] SELECT(['image1', 'image2']).from(Books) //> [{ image1: Readable, image2: Readable }] ``` -[Read more about custom streaming in Node.js.](../node.js/best-practices#custom-streaming-beta){.learn-more} +[Read more about custom streaming in Node.js.](../../node.js/best-practices#custom-streaming-beta){.learn-more} ## Generating DDL Files {#generating-sql-ddl} @@ -418,9 +418,9 @@ You can also do this manually with the CLI command `cds compile --to `.
-When you've created a CAP Java application with `cds init --java` or with CAP Java's [Maven archetype](../java/developing-applications/building#the-maven-archetype), the Maven build invokes the CDS compiler to generate a `schema.sql` file for your target database. In the `default` profile (development mode), an in-memory database is [initialized by Spring](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.data-initialization) and the schema is bootstrapped from the `schema.sql` file. +When you've created a CAP Java application with `cds init --java` or with CAP Java's [Maven archetype](../../java/developing-applications/building#the-maven-archetype), the Maven build invokes the CDS compiler to generate a `schema.sql` file for your target database. In the `default` profile (development mode), an in-memory database is [initialized by Spring](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.data-initialization) and the schema is bootstrapped from the `schema.sql` file. -[Learn more about adding an initial database schema.](../java/cqn-services/persistence-services#initial-database-schema){.learn-more} +[Learn more about adding an initial database schema.](../../java/cqn-services/persistence-services#initial-database-schema){.learn-more}
@@ -632,7 +632,7 @@ Use the specific SQL dialect (`hana`, `sqlite`, `h2`, `postgres`) with `cds comp A few observations on the generated SQL DDL output: 1. **Tables / Views** — Declared entities become tables, projected entities become views. -2. **Type Mapping** — [CDS types are mapped to database-specific SQL types](../cds/types). +2. **Type Mapping** — [CDS types are mapped to database-specific SQL types](../../cds/types). 3. **Slugified FQNs** — Dots in fully qualified CDS names become underscores in SQL names. 4. **Flattened Structs** — Structured elements like `Books:price` are flattened with underscores. 5. **Generated Foreign Keys** — For managed to-one Associations, foreign key columns are created. For example, this applies to `Books:author`. @@ -669,7 +669,7 @@ entity Bar as select from Foo; //> The SQL view will be generated ::: details On SAP HANA ... -If the respective entity is a user-defined function or a calculation view, one of the annotations `@cds.persistence.udf` or `@cds.persistence.calcview` also needs to be assigned. See [Calculated Views and User-Defined Functions](../advanced/hana#calculated-views-and-user-defined-functions) for more details. +If the respective entity is a user-defined function or a calculation view, one of the annotations `@cds.persistence.udf` or `@cds.persistence.calcview` also needs to be assigned. See [Calculated Views and User-Defined Functions](../../advanced/hana#calculated-views-and-user-defined-functions) for more details. ::: @@ -723,7 +723,7 @@ CREATE VIEW V AS SELECT ... FROM E WITH DDL ONLY; The following rules apply: -- The value of the annotation must be a [string literal](../cds/cdl#multiline-literals). +- The value of the annotation must be a [string literal](../../cds/cdl#multiline-literals). - The compiler doesn't check or process the provided SQL snippets in any way. You're responsible to ensure that the resulting statement is valid and doesn't negatively impact your database or your application. We don't provide support for problems caused by using this feature. @@ -735,7 +735,7 @@ The following rules apply: * Both `@sql.prepend` and `@sql.append` are disallowed in SaaS extension projects. -If you use native database clauses in combination with `@cds.persistence.journal`, see [Schema Evolution Support of Native Database Clauses](databases-hana#schema-evolution-native-db-clauses). +If you use native database clauses in combination with `@cds.persistence.journal`, see [Schema Evolution Support of Native Database Clauses](../databases/hana#schema-evolution-native-db-clauses). @@ -772,7 +772,7 @@ Find here a collection of resources on selected databases and their reference do * [H2 Keywords/Reserved Words](https://www.h2database.com/html/advanced.html#keywords) * [PostgreSQL SQL Key Words](https://www.postgresql.org/docs/current/sql-keywords-appendix.html) -[There are also reserved words related to SAP Fiori.](../advanced/fiori#reserved-words){.learn-more} +[There are also reserved words related to SAP Fiori.](../../advanced/fiori#reserved-words){.learn-more} @@ -782,7 +782,7 @@ Find here a collection of resources on selected databases and their reference do ### Not Null -You can specify that a column's value must not be `NULL` by adding the [`not null` constraint](../cds/cdl#null-values) to the element, for example: +You can specify that a column's value must not be `NULL` by adding the [`not null` constraint](../../cds/cdl#null-values) to the element, for example: ```cds entity Books { @@ -884,7 +884,7 @@ entity Genres { ``` As a special case, a referential constraint with `delete cascade` is also generated -for the text table of a [localized entity](../guides/localized-data#localized-data), +for the text table of a [localized entity](../localized-data#localized-data), although no managed association is present in the `texts` entity. Add a localized element to entity `Books` from the previous example: @@ -916,7 +916,7 @@ CREATE TABLE Books_texts ( ::: warning Database constraints aren't intended for checking user input Instead, they protect the integrity of your data in the database layer against programming errors. If a constraint violation occurs, the error messages coming from the database aren't standardized by the runtimes but presented as-is. -→ Use [`@assert.target`](services/constraints#assert-target) for corresponding input validations. +→ Use [`@assert.target`](../services/constraints#assert-target) for corresponding input validations. ::: ## Standard Database Functions @@ -1075,7 +1075,7 @@ In addition to the OData and SAP HANA standard functions, the **CAP runtime** pr - `search(x, y)` Checks whether `y` is contained in any element of `x` (fuzzy matching may apply). - See [Searching Data](../guides/providing-services#searching-data) for more details. + See [Searching Data](../providing-services#searching-data) for more details. - `session_context()` Utilizes standard variable names to maintain session context. diff --git a/guides/databases-postgres.md b/guides/databases/postgres.md similarity index 95% rename from guides/databases-postgres.md rename to guides/databases/postgres.md index 08ed832d56..738d5a1d56 100644 --- a/guides/databases-postgres.md +++ b/guides/databases/postgres.md @@ -7,7 +7,7 @@ impl-variants: true
-This guide focuses on the new PostgreSQL Service provided through *[@cap-js/postgres](https://www.npmjs.com/package/@cap-js/postgres)*, which is based on the same new database services architecture as the new [SQLite Service](databases-sqlite). This architecture brings significantly enhanced feature sets and feature parity, as documented in the [*Features* section of the SQLite guide](databases-sqlite#features). +This guide focuses on the new PostgreSQL Service provided through *[@cap-js/postgres](https://www.npmjs.com/package/@cap-js/postgres)*, which is based on the same new database services architecture as the new [SQLite Service](sqliteite). This architecture brings significantly enhanced feature sets and feature parity, as documented in the [*Features* section of the SQLite guidsqlite#featuresatures). *Learn about migrating from the former `cds-pg` in the [Migration](#migration) chapter.*{.learn-more} @@ -17,7 +17,7 @@ This guide focuses on the new PostgreSQL Service provided through *[@cap-js/post CAP Java 3 is tested on [PostgreSQL](https://www.postgresql.org/) 16 and most CAP features are supported on PostgreSQL. -[Learn more about features and limitations of using CAP with PostgreSQL](../java/cqn-services/persistence-services#postgresql){.learn-more} +[Learn more about features and limitations of using CAP with PostgreSQL](../../java/cqn-services/persistence-services#postgresql){.learn-more}
@@ -80,7 +80,7 @@ Output: } ``` -[See also the general information on installing database packages](databases#setup-configuration){.learn-more} +[See also the general information on installing database packages](index#setup-configurationmore} ## Provisioning a DB Instance @@ -160,7 +160,7 @@ In the cloud, use given techniques to bind a cloud-based instance of PostgreSQL
-For local development provide the credentials using a suitable [`cds env`](../node.js/cds-env) technique, like one of the following. +For local development provide the credentials using a suitable [`cds env`](../../node.js/cds-env) technique, like one of the following.
@@ -168,7 +168,7 @@ For local development provide the credentials using a suitable [`cds env`](../no If a PostgreSQL service binding exists, the corresponding `DataSource` is auto-configured. -You can also explicitly [configure the connection data](../java/cqn-services/persistence-services#postgres-connection) of your PostgreSQL database in the _application.yaml_ file. +You can also explicitly [configure the connection data](../../java/cqn-services/persistence-services#postgres-connection) of your PostgreSQL database in the _application.yaml_ file. If you run the PostgreSQL database in a [docker container](#using-docker) your connection data might look like this: ::: code-group @@ -184,7 +184,7 @@ spring: ::: To start the application with the new profile `postgres-docker`, the `spring-boot-maven-plugin` can be used: `mvn spring-boot:run -Dspring-boot.run.profiles=postgres-docker`. -[Learn more about the configuration of a PostgreSQL database](../java/cqn-services/persistence-services#postgresql-1){ .learn-more} +[Learn more about the configuration of a PostgreSQL database](../../java/cqn-services/persistence-services#postgresql-1){ .learn-more} ### Service Bindings for CDS Tooling {.java} @@ -282,7 +282,7 @@ cds.requires.db.[pg].credentials.database = postgres ::: tip Using Profiles -The previous configuration examples use the [`cds.env` profile](../node.js/cds-env#profiles) `[pg]` to allow selectively testing with PostgreSQL databases from the command line as follows: +The previous configuration examples use the [`cds.env` profile](../../node.js/cds-env#profiles) `[pg]` to allow selectively testing with PostgreSQL databases from the command line as follows: ```sh cds watch --profile pg @@ -352,7 +352,7 @@ cds add postgres ### Deploy -You can package and deploy that application, for example using [MTA-based deployment](deployment/to-cf#add-mta-yaml). +You can package and deploy that application, for example using [MTA-based deployment](../deployment/to-cf#add-mta-yaml). ## Automatic Schema Evolution { #schema-evolution } @@ -618,7 +618,7 @@ If the changes in the model could lead to data loss, an error is raised. ## Migration { .node } -Thanks to CAP's database-agnostic cds.ql API, we're confident that the new PostgreSQL service comes without breaking changes. Nevertheless, please check the instructions in the [SQLite Migration guide](databases-sqlite#migration), with by and large applies also to the new PostgreSQL service. +Thanks to CAP's database-agnostic cds.ql API, we're confident that the new PostgreSQL service comes without breaking changes. Nevertheless, please check the instructions in the [SQLite Migration guide](sqlite#migrationion), with by and large applies also to the new PostgreSQL service. ### `cds deploy --model-only` @@ -651,6 +651,6 @@ When you have a SaaS application, upgrade all your tenants using the [deployer a ::: warning -[Multitenancy](../guides/multitenancy/) and [extensibility](../guides/extensibility/) aren't yet supported on PostgreSQL. +[Multitenancy](../multitenancy) and [extensibility](../extensibility) aren't yet supported on PostgreSQL. ::: diff --git a/guides/databases-sqlite.md b/guides/databases/sqlite.md similarity index 94% rename from guides/databases-sqlite.md rename to guides/databases/sqlite.md index 59f3f76143..4a487a7185 100644 --- a/guides/databases-sqlite.md +++ b/guides/databases/sqlite.md @@ -3,7 +3,7 @@ status: released impl-variants: true --- -# Using SQLite for Development {#sqlite} +# Using SQLite for Development CAP provides extensive support for [SQLite](https://www.sqlite.org/index.html), which allows projects to speed up development by magnitudes at minimized costs. We strongly recommend using this option as much as possible during development and testing. @@ -17,7 +17,7 @@ This guide focuses on the new SQLite Service provided through *[@cap-js/sqlite](
-[Learn more about the features and limitations of using CAP with SQlite.](../java/cqn-services/persistence-services#sqlite){.learn-more} +[Learn more about the features and limitations of using CAP with SQlite.](../../java/cqn-services/persistence-services#sqlite){.learn-more}
@@ -57,14 +57,14 @@ Output: } ``` -[See also the general information on installing database packages.](databases#setup-configuration){.learn-more} +[See also the general information on installing database packages.](index#setup-configurationmore}
### Using the Maven Archetype {.java} -When a new CAP Java project is created with the [Maven Archetype](../java/developing-applications/building#the-maven-archetype), +When a new CAP Java project is created with the [Maven Archetype](../../java/developing-applications/building#the-maven-archetype), you can specify the in-memory database to be used. Use the option `-DinMemoryDatabase=sqlite` to create a project that uses SQLite as in-memory database. @@ -162,7 +162,7 @@ spring: ::: -[Learn how to configure an in-memory SQLite database.](../java/cqn-services/persistence-services#in-memory-storage){.learn-more} +[Learn how to configure an in-memory SQLite database.](../../java/cqn-services/persistence-services#in-memory-storage){.learn-more}
@@ -245,7 +245,7 @@ spring: ``` ::: -[Learn how to configure a file-based SQLite database](../java/cqn-services/persistence-services#file-based-storage){.learn-more} +[Learn how to configure a file-based SQLite database](../../java/cqn-services/persistence-services#file-based-storage){.learn-more}
@@ -287,7 +287,7 @@ While drop-create is most appropriate for development, it isn't suitable for dat -[Learn more about automatic schema evolution in the PostgreSQL guide.
The information in there is also applicable to SQLite with persistent databases.](databases-postgres#schema-evolution) {.learn-more} +[Learn more about automatic schema evolution in the PostgreSQL guide.
The information in there is also applicable to SQLite with persistent databases.](postgres#schema-evolution) {.learn-more} @@ -297,13 +297,13 @@ While drop-create is most appropriate for development, it isn't suitable for dat CAP supports most of the major features on SQLite: -* [Path Expressions](../java/working-with-cql/query-api#path-expressions) & Filters -* [Expands](../java/working-with-cql/query-api#projections) -* [Localized Queries](../guides/localized-data#read-operations) -* [Comparison Operators](../java/working-with-cql/query-api#comparison-operators) -* [Predicate Functions](../java/working-with-cql/query-api#predicate-functions) +* [Path Expressions](../../java/working-with-cql/query-api#path-expressions) & Filters +* [Expands](../../java/working-with-cql/query-api#projections) +* [Localized Queries](../localized-data#read-operations) +* [Comparison Operators](../../java/working-with-cql/query-api#comparison-operators) +* [Predicate Functions](../../java/working-with-cql/query-api#predicate-functions) -[Learn about features and limitations of SQLite.](../java/cqn-services/persistence-services#sqlite){.learn-more} +[Learn about features and limitations of SQLite.](../../java/cqn-services/persistence-services#sqlite){.learn-more}
@@ -317,7 +317,7 @@ The following is an overview of advanced features supported by the new database ### Path Expressions & Filters {.node} -The new database service provides **full support** for all kinds of [path expressions](../cds/cql#path-expressions), including [infix filters](../cds/cql#with-infix-filters) and [exists predicates](../cds/cql#exists-predicate). For example, you can try this out with *[@capire/samples](https://github.com/capire/samples)* as follows: +The new database service provides **full support** for all kinds of [path expressions](../../cds/cql#path-expressions), including [infix filters](../../cds/cql#with-infix-filters) and [exists predicates](../../cds/cql#exists-predicate). For example, you can try this out with *[@capire/samples](https://github.com/capire/samples)* as follows: ```js // $ cds repl --profile better-sqlite diff --git a/guides/deployment/custom-builds.md b/guides/deployment/custom-builds.md index f8859cefa9..771347dd7f 100644 --- a/guides/deployment/custom-builds.md +++ b/guides/deployment/custom-builds.md @@ -90,7 +90,7 @@ th { min-width: 160px; } | Property | Description | |------------------|-----------------------------------------------------------------------------| -| `hana` | SAP HANA Development Infrastructure (HDI) artifacts

[Learn more about **configuring SAP HANA**](../databases-hana#configure-hana){.learn-more} | +| `hana` | SAP HANA Development Infrastructure (HDI) artifacts

[Learn more about **configuring SAP HANA**](../databases/hana#configure-hana){.learn-more} | | `nodejs` | Node.js applications | | `java` | Java applications | | `mtx-sidecar` | [MTX](../multitenancy/mtxs)-enabled projects _with_ sidecar architecture.

[Learn more about **Multitenant Saas Application Deployment**](./to-cf){.learn-more} | diff --git a/guides/deployment/to-cf.md b/guides/deployment/to-cf.md index 481b83470a..5483f66e1e 100644 --- a/guides/deployment/to-cf.md +++ b/guides/deployment/to-cf.md @@ -148,7 +148,7 @@ While we used SQLite or H2 as a low-cost stand-in during development, we're goin cds add hana ``` -[Learn more about using SAP HANA for production.](../databases-hana){.learn-more} +[Learn more about using SAP HANA for production.](../databases/hana){.learn-more} ### 2. Authorization/Authentication @@ -447,7 +447,7 @@ cds build --production [Learn how `cds build` can be configured.](custom-builds#build-config){.learn-more} -The `--production` parameter ensures that the cloud deployment-related artifacts are created by `cds build`. See section [SAP HANA database deployment](../databases-hana) for more details. +The `--production` parameter ensures that the cloud deployment-related artifacts are created by `cds build`. See section [SAP HANA database deployment](../databases/hana) for more details. ### Push the Application { #push-the-application} diff --git a/guides/domain-modeling.md b/guides/domain-modeling.md index 7f7b016afe..0970d5167e 100644 --- a/guides/domain-modeling.md +++ b/guides/domain-modeling.md @@ -7,7 +7,7 @@ status: released # Domain Modeling -Domain Models capture the static, data-related aspects of a problem domain in terms of entity-relationship models. They serve as the basis for *[persistence models](./databases)* deployed to databases as well as for *[service definitions](./providing-services)*. +Domain Models capture the static, data-related aspects of a problem domain in terms of entity-relationship models. They serve as the basis for *[persistence models](./databases/index)* deployed to databases as well as for *[service definitions](./providing-services)*. [[toc]] diff --git a/guides/providing-services.md b/guides/providing-services.md index 51885c31e8..4a7d947a16 100644 --- a/guides/providing-services.md +++ b/guides/providing-services.md @@ -162,7 +162,7 @@ In effect, a service definition [as introduced above](#service-definitions) is a ### Serving CRUD Requests {#serving-crud} -The CAP runtimes for [Node.js](../node.js/) and [Java](../java/) provide generic handlers, which automatically serve all CRUD requests to entities for CDS-modelled services on top of a default [primary database](databases). +The CAP runtimes for [Node.js](../node.js/) and [Java](../java/) provide generic handlers, which automatically serve all CRUD requests to entities for CDS-modelled services on top of a default [primary database](databases/index). This comprises read and write operations like that: diff --git a/guides/services/constraints.md b/guides/services/constraints.md index 5e5eee18d6..6f130b2578 100644 --- a/guides/services/constraints.md +++ b/guides/services/constraints.md @@ -6,10 +6,10 @@ status: released # Declarative Constraints -Declarative constraints allow you to express conditions using [CDS Expression Language (CXL)](/cds/cxl) that are validated automatically whenever data is written. This greatly reduces the need for extensive custom code for input validation. +Declarative constraints allow you to express conditions using [CDS Expression Language (CXL)](../../cds/cxl) that are validated automatically whenever data is written. This greatly reduces the need for extensive custom code for input validation. > [!note] -> Don't confuse declarative constraints as discussed in here with [database constraints](../databases#database-constraints). Declarative constraints are meant for domain-specific input validation with error messages meant to be shown to end users, while database constraints are meant to prevent data corruption due to programming error, with error messages not intended for end users. +> Don't confuse declarative constraints as discussed in here with [database constraints](../databases/index#database-constraints). Declarative constraints are meant for domain-specific input validation with error messages meant to be shown to end users, while database constraints are meant to prevent data corruption due to programming error, with error messages not intended for end users. @@ -81,7 +81,7 @@ Some of the checks, e.g. the static `@mandatory` checks, are validated directly ::: details Behind the scenes... -The automatically compiled and executed validation query would look like that (in [CQL](/cds/cql)) for the constraints from the sample above: +The automatically compiled and executed validation query would look like that (in [CQL](../../cds/cql)) for the constraints from the sample above: ```sql SELECT from TravelService.Travels { @@ -312,7 +312,7 @@ dependent values were inserted before the current transaction. For example, in a The `@assert.target` check constraint is meant to **validate user input** and not to ensure referential integrity. Therefore only `CREATE`, and `UPDATE` events are supported (`DELETE` events are not supported). To ensure that every non-null foreign key in a table has a corresponding primary key in the associated/referenced target table -(ensure referential integrity), the [`@assert.integrity`](../databases#database-constraints) constraint must be used instead. +(ensure referential integrity), the [`@assert.integrity`](../databases/index#database-constraints) constraint must be used instead. If the reference's target doesn't exist, an HTTP response (error message) is provided to HTTP client applications and logged to stdout in debug mode. The HTTP response body's @@ -534,7 +534,7 @@ Use the `@UI.Hidden` annotation to hide fields in Fiori UIs. You can also use it @UI.Hidden: (status <> 'visible') ``` -[Learn more about that in the *OData guide*](/advanced/odata#expression-annotations) {.learn-more} +[Learn more about that in the *OData guide*](../../advanced/odata#expression-annotations) {.learn-more} diff --git a/java/cds-data.md b/java/cds-data.md index 4ae07cc218..7ce9490fdd 100644 --- a/java/cds-data.md +++ b/java/cds-data.md @@ -331,7 +331,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 `cds.Vector`: +In CDS [vector embeddings](../guides/databases/hana#vector-embeddings) are stored in elements of type `cds.Vector`: ```cds entity Books : cuid { // [!code focus] diff --git a/java/cqn-services/persistence-services.md b/java/cqn-services/persistence-services.md index 9c84de9a0c..8ae0a51c77 100644 --- a/java/cqn-services/persistence-services.md +++ b/java/cqn-services/persistence-services.md @@ -69,7 +69,7 @@ Support for localized and temporal data via session context variables requires H ### SQLite -CAP supports [SQLite](https://www.sqlite.org/index.html) out of the box. When working with Java, it's [recommended](../../guides/databases-sqlite?impl-variant=java#sqlite-in-production) to use SQLite only for development and testing purposes. +CAP supports [SQLite](https://www.sqlite.org/index.html) out of the box. When working with Java, it's [recommended](../../guides/databases/sqlite#sqlite-in-production) to use SQLite only for development and testing purposes. CAP does support most of the major features on SQLite, although there are a few shortcomings that are listed here: @@ -184,7 +184,7 @@ cds add postgres ``` ::: warning -Automatic schema deployment isn't suitable for productive use. Consider using production-ready tools like Flyway or Liquibase. See more on that in the [Database guide for PostgreSQL](../../guides/databases-postgres.md?impl-variant=java#deployment-using-liquibase) +Automatic schema deployment isn't suitable for productive use. Consider using production-ready tools like Flyway or Liquibase. See more on that in the [Database guide for PostgreSQL](../../guides/databases/postgres#deployment-using-liquibase) ::: #### Configure the Connection Data Explicitly { #postgres-connection } diff --git a/java/migration.md b/java/migration.md index 1697c152b1..bf4bff8686 100644 --- a/java/migration.md +++ b/java/migration.md @@ -907,7 +907,7 @@ If this Maven build finishes successfully, you can optionally try to deploy your cds deploy --to hana ``` -[See section **SAP HANA Cloud** for more details about deploying to SAP HANA.](../guides/databases-hana){.learn-more} +[See section **SAP HANA Cloud** for more details about deploying to SAP HANA.](../guides/databases/hana){.learn-more} ### Migrate Java Business Logic diff --git a/java/working-with-cql/query-api.md b/java/working-with-cql/query-api.md index 6b06cc8749..16671fe308 100644 --- a/java/working-with-cql/query-api.md +++ b/java/working-with-cql/query-api.md @@ -559,7 +559,7 @@ Object authorId = book.get("author.Id"); // path access ``` ::: tip -Only to-one associations that are mapped via the primary key elements of the target entity are supported on the select list. The execution is optimized and gives no guarantee that the target entity exists, if this is required use expand or enable [integrity constraints](../../guides/databases#database-constraints) on the database. +Only to-one associations that are mapped via the primary key elements of the target entity are supported on the select list. The execution is optimized and gives no guarantee that the target entity exists, if this is required use expand or enable [integrity constraints](../../guides/databases/index#database-constraints) on the database. ::: #### Selecting Map Data diff --git a/java/working-with-cql/query-execution.md b/java/working-with-cql/query-execution.md index 0d952c4a3b..2de3e5099c 100644 --- a/java/working-with-cql/query-execution.md +++ b/java/working-with-cql/query-execution.md @@ -193,7 +193,7 @@ entity Author { ::: warning _Warning_ - For inactive draft entities `@cascade` annotations are ignored. -- The `@cascade` annotation is not respected by foreign key constraints on the database. To avoid unexpected behaviour you might have to disable a foreign key constraint with [`@assert.integrity:false`](../../guides/databases#database-constraints). +- The `@cascade` annotation is not respected by foreign key constraints on the database. To avoid unexpected behaviour you might have to disable a foreign key constraint with [`@assert.integrity:false`](../../guides/databases/index#database-constraints). ::: #### Deep Insert / Upsert { #deep-insert-upsert} @@ -226,7 +226,7 @@ long deleteCount = service.run(delete).rowCount(); With CDS [views](../../cds/cdl#views-projections) you can derive new entities from existing ones, for example to rename or exclude certain elements, or to add [virtual elements](../../cds/cdl#virtual-elements-in-views) for specific use cases. -From the CDS model the CDS compiler generates [DDL](../../guides/databases?impl-variant=java#generating-sql-ddl) files, which include SQL views for the CDS views. These views are deployed to the [database](../cqn-services/persistence-services#database-support) and used by the CAP runtime to read data. +From the CDS model the CDS compiler generates [DDL](../../guides/databases/index#generating-sql-ddl) files, which include SQL views for the CDS views. These views are deployed to the [database](../cqn-services/persistence-services#database-support) and used by the CAP runtime to read data. For *read-only* views, you can use the full feature set of [selects](../../cds/cdl#as-select-from), including *aggregations* to summarize, as well as *joins* and *unions* to combine data from multiple entities. However, such complex views are *not writable* and require a schema redeployment if the view definition is changed. diff --git a/menu.md b/menu.md index 556c39adfb..a67e542119 100644 --- a/menu.md +++ b/menu.md @@ -59,13 +59,13 @@ ## [Serving UIs](advanced/fiori) ### [SAP Fiori UIs](advanced/fiori) -## [Databases](guides/databases) +## [Databases](guides/databases/) - ### [Common](guides/databases) - ### [SQLite](guides/databases-sqlite) - ### [H2 (Java)](guides/databases-h2) - ### [PostgreSQL](guides/databases-postgres) - ### [SAP HANA Cloud](guides/databases-hana) + ### [Common](guides/databases/index.md) + ### [SQLite](guides/databases/sqlite) + ### [H2 (Java)](guides/databases/h2) + ### [PostgreSQL](guides/databases/postgres) + ### [SAP HANA Cloud](guides/databases/hana) ### [SAP HANA Native](advanced/hana) ## [Analytics](advanced/analytics) diff --git a/node.js/cds-reflect.md b/node.js/cds-reflect.md index 5ed61f23fa..d20fcdb085 100644 --- a/node.js/cds-reflect.md +++ b/node.js/cds-reflect.md @@ -447,10 +447,7 @@ The effective foreign keys of [*managed* association](../cds/cdl#managed-associa -## cds. linked .classes {#cds-linked-classes .property} - -[`cds.linked.classes`]: #cds-linked-classes - +## cds. linked .classes {.property} This property gives you access to the very roots of `cds`'s type system. When a model is passed through [`cds.linked`] all definitions effectively become instances of one of these classes. In essence they are defined as follows: @@ -533,7 +530,7 @@ m.foreach (d => console.log(d.toCDL())) -## cds. builtin. types {#cds-builtin-types .property} +## cds. builtin. types {.property} [`cds.builtin.types`]: #cds-builtin-types From 285407079d96864d645b3c26fc7e086cf3220a1a Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 22 Dec 2025 13:05:01 +0100 Subject: [PATCH 160/439] Restructured (#2299) --- .vitepress/config.js | 14 +- advanced/assets/cat-service-comp.cds | 7 - advanced/assets/cat-service-enable.cds | 4 - advanced/assets/data-model.cds | 19 - assets/agnostic-services.drawio.svg | 154 -- assets/concepts/aspects.svg | 3 - assets/core-concepts.drawio.svg | 296 ---- assets/datasources.drawio.svg | 138 -- assets/domain-models.drawio.svg | 188 -- assets/feature-toggles.drawio.svg | 208 --- cds/_menu.md | 23 + cds/annotations.md | 41 +- cds/cdl.md | 32 +- cds/common.md | 30 +- cds/compiler/hdbcds-to-hdbtable.md | 1 - cds/compiler/v2.md | 8 +- cds/csn.md | 2 +- cds/types.md | 6 +- about/index.md => get-started/about.md | 75 +- .../assets/architecture.drawio.svg | 0 .../assets/bookshop-erm.drawio.svg | 0 .../assets/cdl-csn.drawio.svg | 0 .../assets/cql-cqn.drawio.svg | 0 .../assets/event-handlers.drawio.svg | 0 .../assets/events.drawio.svg | 0 .../assets/fueling-services.drawio.svg | 0 {about => get-started}/assets/inner-loop.png | Bin {about => get-started}/assets/inner-loop.pptx | Bin {about => get-started}/assets/jobkiller.png | Bin .../assets/key-concepts.drawio.svg | 0 .../assets/late-cut microservices.pptx | Bin .../assets/late-cut-microservices.png | Bin {about => get-started}/assets/modulith.png | Bin .../assets/paradigm.drawio.svg | 0 .../assets/passive-data.drawio.svg | 0 .../assets/protocol-adapters.drawio.svg | 0 .../assets/service-classes.drawio.svg | 0 {about => get-started}/assets/too-busy.md | 0 {about => get-started}/assets/too-busy.png | Bin get-started/attic/grow-as-you-go.-md | 118 -- {about => get-started}/bad-practices.md | 4 +- {about => get-started}/best-practices.md | 54 +- {about => get-started}/features.md | 222 +-- get-started/in-a-nutshell.md | 26 +- get-started/index.md | 8 +- get-started/learning-sources.md | 8 +- get-started/troubleshooting.md | 6 +- {advanced => guides/advanced}/analytics.md | 0 .../advanced}/hybrid-testing.md | 15 +- {advanced => guides/advanced}/index.data.ts | 3 +- {advanced => guides/advanced}/index.md | 0 {advanced => guides/advanced}/odata.md | 27 +- .../advanced}/performance-modeling.md | 4 +- .../assets/openapi-diagram.png | Bin .../publishing-apis/assets/swagger-link.png | Bin .../advanced}/publishing-apis/asyncapi.md | 2 +- .../advanced}/publishing-apis/index.data.ts | 2 +- .../advanced}/publishing-apis/index.md | 0 .../advanced}/publishing-apis/openapi.md | 0 ...verview.drawio.svg => cookbook.drawio.svg} | 0 guides/databases/h2.md | 2 +- .../databases/hana-native.md | 7 +- guides/databases/hana.md | 18 +- guides/databases/index.md | 32 +- .../databases}/native-hana-samples.zip | Bin guides/databases/postgres.md | 6 +- guides/databases/sqlite.md | 9 +- .../assets/apps-cockpit.png | Bin .../assets/deploy-kyma.drawio.svg | 0 .../assets/deploy-setps.drawio.svg | 0 .../assets/github-deployment.png | Bin .../assets/github-release.png | Bin .../app-instances.excalidraw.svg | 0 .../microservices/bookstore.excalidraw.svg | 0 .../microservices/complex.excalidraw.svg | 0 .../microservices/late-cut.excalidraw.svg | 0 .../microservices/modules.excalidraw.svg | 0 .../microservices/modulith.excalidraw.svg | 0 .../microservices/monolith.excalidraw.svg | 0 .../multiple-apps.excalidraw.svg | 0 .../microservices/multiple-dbs.excalidraw.svg | 0 .../multiple-deployment-units.excalidraw.svg | 0 .../true-microservices-full.excalidraw.svg | 0 .../true-microservices.excalidraw.svg | 0 .../assets/overview.drawio.svg | 0 .../custom-builds.md => deploy/build.md} | 262 +-- guides/{deployment => deploy}/cicd.md | 6 - .../{deployment => deploy}/health-checks.md | 5 - guides/{deployment => deploy}/index.data.ts | 0 guides/{deployment => deploy}/index.md | 17 +- .../{deployment => deploy}/microservices.md | 4 +- guides/{deployment => deploy}/to-cf.md | 101 +- guides/{deployment => deploy}/to-kyma.md | 2 +- .../cds-fueling-generic-providers.drawio.svg | 0 .../modeling.md} | 44 +- guides/{ => domain}/temporal-data.md | 12 +- .../temporal-details.drawio.svg | 0 .../time-slices.drawio.svg | 0 .../timeless-data.drawio.svg | 0 .../assets/api-specification.png | Bin .../assets/async.drawio.svg | 0 .../assets/business-partner-events.png | Bin .../assets/cap-samples.drawio.svg | 0 .../assets/capire-books.png | Bin .../assets/capire-reviews.png | Bin .../assets/composite1.drawio.svg | 0 .../assets/composite2.drawio.svg | 0 .../assets/composite3.drawio.svg | 0 ...ent-broker-test-integration-dependency.png | Bin .../assets/event-broker-test-log-entry.png | Bin .../assets/local.drawio.svg | 0 .../assets/remote.drawio.svg | 0 .../assets/sync-async.drawio.svg | 0 .../assets/sync.drawio.svg | 0 guides/events/core-concepts.md | 233 +++ .../event-broker.md => events/event-hub.md} | 14 +- guides/{messaging => events}/event-mesh.md | 12 +- .../task-queues.md => events/event-queues.md} | 31 +- guides/events/index.data.ts | 11 + guides/events/index.md | 11 + guides/events/is-aem.md | 29 + guides/events/messaging.md | 330 ++++ guides/{messaging => events}/s4.md | 10 +- .../extensibility/assets/customization-old.md | 249 --- guides/extensibility/composition.md | 4 +- guides/extensibility/customization.md | 14 +- guides/extensibility/index.md | 2 +- guides/index.md | 2 +- guides/integration/index.md | 3 + guides/messaging/index.md | 660 ------- guides/multitenancy/index.md | 554 ++---- guides/multitenancy/old-mtx-apis.md | 9 - guides/multitenancy/old-mtx-migration.md | 4 +- guides/{querying.md => querying/index.md} | 14 +- .../data-privacy}/Data-Privacy.drawio.svg | 0 .../data-privacy}/Data-Subjects.drawio.svg | 0 .../data-privacy}/Incidents-App.drawio.svg | 0 .../Transactional-Outbox.drawio.svg | 0 .../assets/data-privacy}/dpiCockpit.png | Bin .../assets/data-privacy}/dpingCockpit.png | Bin .../assets/data-privacy}/pdmApplication.png | Bin .../assets/data-privacy}/pdmCockpit.png | Bin .../assets/data-privacy}/pdmCockpitCreate.png | Bin guides/security/authorization.md | 32 +- .../index.md => security/data-privacy.md} | 47 +- guides/security/data-protection-privacy.md | 67 - .../{aspects.md => data-protection.md} | 42 +- .../dpp-annotations.md} | 14 +- .../dpp-audit-logging.md} | 20 +- .../drm.md => security/dpp-drm.md} | 2 + .../pdm.md => security/dpp-pdm.md} | 22 +- guides/security/index.md | 24 +- guides/security/overview.md | 2 +- guides/services/constraints.md | 22 +- .../{assets/constraints => }/fiori-errors.png | Bin guides/services/{status-flows.md => flows.md} | 4 +- guides/{ => services}/providing-services.md | 78 +- .../risk-mgmt.drawio.svg | 0 .../service-apis.drawio.svg | 0 .../service-as-facades.drawio.svg | 0 .../service-centric-paradigm.drawio.svg | 0 .../services-events.drawio.svg | 0 guides/{ => services}/using-services.md | 35 +- .../xtravels-flow-previous.svg | 0 .../xtravels-flow-simple.svg | 0 .../uis}/draft-for-localized-data.png | Bin {advanced => guides/uis}/fiori.md | 63 +- .../uis}/hierarchical-tree-view.png | Bin guides/{ => uis}/i18n.md | 10 +- guides/{ => uis}/localized-data.md | 14 +- index.md | 25 +- java/building-plugins.md | 2 +- java/cds-data.md | 6 +- java/change-tracking.md | 4 +- java/cqn-services/application-services.md | 2 +- java/cqn-services/index.md | 6 +- java/cqn-services/persistence-services.md | 4 +- java/cqn-services/remote-services.md | 18 +- java/developing-applications/building.md | 14 +- java/developing-applications/testing.md | 2 +- java/event-handlers/changeset-contexts.md | 2 +- java/event-handlers/index.md | 6 +- java/event-handlers/indicating-errors.md | 6 +- java/event-handlers/request-contexts.md | 2 +- java/fiori-drafts.md | 2 +- java/getting-started.md | 8 +- java/messaging.md | 4 +- java/migration.md | 2 +- java/multitenancy-classic.md | 4 +- java/multitenancy.md | 2 +- java/reflection-api.md | 4 +- java/services.md | 2 +- java/working-with-cql/query-api.md | 14 +- java/working-with-cql/query-execution.md | 16 +- menu.md | 248 ++- node.js/_menu.md | 2 +- node.js/app-services.md | 18 +- node.js/authentication.md | 4 +- node.js/best-practices.md | 7 +- node.js/cds-connect.md | 4 +- node.js/cds-env.md | 2 +- node.js/cds-facade.md | 2 +- node.js/cds-i18n.md | 4 +- node.js/cds-reflect.md | 4 +- node.js/cds-test.md | 2 +- node.js/core-services.md | 8 +- node.js/events.md | 5 +- node.js/fiori.md | 2 +- node.js/index.md | 2 +- node.js/messaging.md | 8 +- node.js/queue.md | 2 +- node.js/remote-services.md | 6 +- node.js/typescript.md | 2 +- package-lock.json | 1522 +++++++++-------- plugins/_menu.md | 16 + plugins/index.md | 61 +- public/cap-logo.png | Bin 28534 -> 0 bytes public/logos/cap.png | Bin 0 -> 19822 bytes public/{cap-logo.svg => logos/cap.svg} | 0 {assets => public}/logos/express.svg | 0 {assets => public}/logos/github.svg | 0 {assets => public}/logos/java.svg | 0 {assets => public}/logos/nodejs.svg | 0 public/{sap-logo.svg => logos/sap.svg} | 0 {assets => public}/logos/spring.svg | 0 redirects.md | 102 ++ tools/_menu.md | 12 + tools/apis/cds-add.md | 4 +- tools/apis/cds-build.md | 169 ++ tools/apis/cds-import.md | 2 +- tools/cds-cli.md | 8 +- .../rules/start-elements-lowercase/index.md | 2 +- .../rules/start-entities-uppercase/index.md | 2 +- tools/cds-typer.md | 4 +- 234 files changed, 2847 insertions(+), 4515 deletions(-) delete mode 100644 advanced/assets/cat-service-comp.cds delete mode 100644 advanced/assets/cat-service-enable.cds delete mode 100644 advanced/assets/data-model.cds delete mode 100644 assets/agnostic-services.drawio.svg delete mode 100644 assets/concepts/aspects.svg delete mode 100644 assets/core-concepts.drawio.svg delete mode 100644 assets/datasources.drawio.svg delete mode 100644 assets/domain-models.drawio.svg delete mode 100644 assets/feature-toggles.drawio.svg create mode 100644 cds/_menu.md rename about/index.md => get-started/about.md (87%) rename {about => get-started}/assets/architecture.drawio.svg (100%) rename {about => get-started}/assets/bookshop-erm.drawio.svg (100%) rename {about => get-started}/assets/cdl-csn.drawio.svg (100%) rename {about => get-started}/assets/cql-cqn.drawio.svg (100%) rename {about => get-started}/assets/event-handlers.drawio.svg (100%) rename {about => get-started}/assets/events.drawio.svg (100%) rename {about => get-started}/assets/fueling-services.drawio.svg (100%) rename {about => get-started}/assets/inner-loop.png (100%) rename {about => get-started}/assets/inner-loop.pptx (100%) rename {about => get-started}/assets/jobkiller.png (100%) rename {about => get-started}/assets/key-concepts.drawio.svg (100%) rename {about => get-started}/assets/late-cut microservices.pptx (100%) rename {about => get-started}/assets/late-cut-microservices.png (100%) rename {about => get-started}/assets/modulith.png (100%) rename {about => get-started}/assets/paradigm.drawio.svg (100%) rename {about => get-started}/assets/passive-data.drawio.svg (100%) rename {about => get-started}/assets/protocol-adapters.drawio.svg (100%) rename {about => get-started}/assets/service-classes.drawio.svg (100%) rename {about => get-started}/assets/too-busy.md (100%) rename {about => get-started}/assets/too-busy.png (100%) delete mode 100644 get-started/attic/grow-as-you-go.-md rename {about => get-started}/bad-practices.md (98%) rename {about => get-started}/best-practices.md (89%) rename {about => get-started}/features.md (57%) rename {advanced => guides/advanced}/analytics.md (100%) rename {advanced => guides/advanced}/hybrid-testing.md (94%) rename {advanced => guides/advanced}/index.data.ts (77%) rename {advanced => guides/advanced}/index.md (100%) rename {advanced => guides/advanced}/odata.md (97%) rename {advanced => guides/advanced}/performance-modeling.md (99%) rename {advanced => guides/advanced}/publishing-apis/assets/openapi-diagram.png (100%) rename {advanced => guides/advanced}/publishing-apis/assets/swagger-link.png (100%) rename {advanced => guides/advanced}/publishing-apis/asyncapi.md (99%) rename {advanced => guides/advanced}/publishing-apis/index.data.ts (79%) rename {advanced => guides/advanced}/publishing-apis/index.md (100%) rename {advanced => guides/advanced}/publishing-apis/openapi.md (100%) rename guides/{assets/cookbook-overview.drawio.svg => cookbook.drawio.svg} (100%) rename advanced/hana.md => guides/databases/hana-native.md (98%) rename {advanced/assets => guides/databases}/native-hana-samples.zip (100%) rename guides/{deployment => deploy}/assets/apps-cockpit.png (100%) rename guides/{deployment => deploy}/assets/deploy-kyma.drawio.svg (100%) rename guides/{deployment => deploy}/assets/deploy-setps.drawio.svg (100%) rename guides/{deployment => deploy}/assets/github-deployment.png (100%) rename guides/{deployment => deploy}/assets/github-release.png (100%) rename guides/{deployment => deploy}/assets/microservices/app-instances.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/bookstore.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/complex.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/late-cut.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/modules.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/modulith.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/monolith.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/multiple-apps.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/multiple-dbs.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/multiple-deployment-units.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/true-microservices-full.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/microservices/true-microservices.excalidraw.svg (100%) rename guides/{deployment => deploy}/assets/overview.drawio.svg (100%) rename guides/{deployment/custom-builds.md => deploy/build.md} (55%) rename guides/{deployment => deploy}/cicd.md (98%) rename guides/{deployment => deploy}/health-checks.md (97%) rename guides/{deployment => deploy}/index.data.ts (100%) rename guides/{deployment => deploy}/index.md (54%) rename guides/{deployment => deploy}/microservices.md (99%) rename guides/{deployment => deploy}/to-cf.md (78%) rename guides/{deployment => deploy}/to-kyma.md (99%) rename guides/{assets/domain-modeling => domain}/cds-fueling-generic-providers.drawio.svg (100%) rename guides/{domain-modeling.md => domain/modeling.md} (92%) rename guides/{ => domain}/temporal-data.md (95%) rename guides/{assets/temporal-data => domain}/temporal-details.drawio.svg (100%) rename guides/{assets/temporal-data => domain}/time-slices.drawio.svg (100%) rename guides/{assets/temporal-data => domain}/timeless-data.drawio.svg (100%) rename guides/{messaging => events}/assets/api-specification.png (100%) rename guides/{messaging => events}/assets/async.drawio.svg (100%) rename guides/{messaging => events}/assets/business-partner-events.png (100%) rename guides/{messaging => events}/assets/cap-samples.drawio.svg (100%) rename guides/{messaging => events}/assets/capire-books.png (100%) rename guides/{messaging => events}/assets/capire-reviews.png (100%) rename guides/{messaging => events}/assets/composite1.drawio.svg (100%) rename guides/{messaging => events}/assets/composite2.drawio.svg (100%) rename guides/{messaging => events}/assets/composite3.drawio.svg (100%) rename guides/{messaging => events}/assets/event-broker-test-integration-dependency.png (100%) rename guides/{messaging => events}/assets/event-broker-test-log-entry.png (100%) rename guides/{messaging => events}/assets/local.drawio.svg (100%) rename guides/{messaging => events}/assets/remote.drawio.svg (100%) rename guides/{messaging => events}/assets/sync-async.drawio.svg (100%) rename guides/{messaging => events}/assets/sync.drawio.svg (100%) create mode 100644 guides/events/core-concepts.md rename guides/{messaging/event-broker.md => events/event-hub.md} (93%) rename guides/{messaging => events}/event-mesh.md (92%) rename guides/{messaging/task-queues.md => events/event-queues.md} (61%) create mode 100644 guides/events/index.data.ts create mode 100644 guides/events/index.md create mode 100644 guides/events/is-aem.md create mode 100644 guides/events/messaging.md rename guides/{messaging => events}/s4.md (91%) delete mode 100644 guides/extensibility/assets/customization-old.md create mode 100644 guides/integration/index.md delete mode 100644 guides/messaging/index.md rename guides/{querying.md => querying/index.md} (95%) rename guides/{data-privacy/assets => security/assets/data-privacy}/Data-Privacy.drawio.svg (100%) rename guides/{data-privacy/assets => security/assets/data-privacy}/Data-Subjects.drawio.svg (100%) rename guides/{data-privacy/assets => security/assets/data-privacy}/Incidents-App.drawio.svg (100%) rename guides/{data-privacy/assets => security/assets/data-privacy}/Transactional-Outbox.drawio.svg (100%) rename guides/{data-privacy/assets => security/assets/data-privacy}/dpiCockpit.png (100%) rename guides/{data-privacy/assets => security/assets/data-privacy}/dpingCockpit.png (100%) rename guides/{data-privacy/assets => security/assets/data-privacy}/pdmApplication.png (100%) rename guides/{data-privacy/assets => security/assets/data-privacy}/pdmCockpit.png (100%) rename guides/{data-privacy/assets => security/assets/data-privacy}/pdmCockpitCreate.png (100%) rename guides/{data-privacy/index.md => security/data-privacy.md} (63%) delete mode 100644 guides/security/data-protection-privacy.md rename guides/security/{aspects.md => data-protection.md} (93%) rename guides/{data-privacy/annotations.md => security/dpp-annotations.md} (92%) rename guides/{data-privacy/audit-logging.md => security/dpp-audit-logging.md} (93%) rename guides/{data-privacy/drm.md => security/dpp-drm.md} (90%) rename guides/{data-privacy/pdm.md => security/dpp-pdm.md} (94%) rename guides/services/{assets/constraints => }/fiori-errors.png (100%) rename guides/services/{status-flows.md => flows.md} (97%) rename guides/{ => services}/providing-services.md (91%) rename guides/{assets/using-services => services}/risk-mgmt.drawio.svg (100%) rename guides/{assets/providing-services => services}/service-apis.drawio.svg (100%) rename guides/{assets/providing-services => services}/service-as-facades.drawio.svg (100%) rename guides/{assets/providing-services => services}/service-centric-paradigm.drawio.svg (100%) rename guides/{assets/providing-services => services}/services-events.drawio.svg (100%) rename guides/{ => services}/using-services.md (97%) rename guides/{assets/flows => services}/xtravels-flow-previous.svg (100%) rename guides/{assets/flows => services}/xtravels-flow-simple.svg (100%) rename {assets => guides/uis}/draft-for-localized-data.png (100%) rename {advanced => guides/uis}/fiori.md (90%) rename {advanced/assets => guides/uis}/hierarchical-tree-view.png (100%) rename guides/{ => uis}/i18n.md (92%) rename guides/{ => uis}/localized-data.md (97%) create mode 100644 plugins/_menu.md delete mode 100644 public/cap-logo.png create mode 100644 public/logos/cap.png rename public/{cap-logo.svg => logos/cap.svg} (100%) rename {assets => public}/logos/express.svg (100%) rename {assets => public}/logos/github.svg (100%) rename {assets => public}/logos/java.svg (100%) rename {assets => public}/logos/nodejs.svg (100%) rename public/{sap-logo.svg => logos/sap.svg} (100%) rename {assets => public}/logos/spring.svg (100%) create mode 100644 redirects.md create mode 100644 tools/_menu.md create mode 100644 tools/apis/cds-build.md diff --git a/.vitepress/config.js b/.vitepress/config.js index 7b39a57aef..d1fe43d546 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -26,6 +26,7 @@ const config = defineConfig({ '**/LICENSE.md', '**/CONTRIBUTING.md', '**/CODE_OF_CONDUCT.md', + '**/redirects.md', '**/menu.md', '**/-*.md' ], @@ -40,7 +41,7 @@ const config = defineConfig({ themeConfig: { sidebar: menu.items, nav: menu.navbar, - logo: '/cap-logo.svg', + logo: '/logos/cap.svg', outline: [2,3], socialLinks: [ { icon: 'github', link: 'https://github.com/capire/docs' } @@ -64,7 +65,7 @@ const config = defineConfig({ ['meta', { 'http-equiv': 'Content-Security-Policy', content: "script-src 'self' https://www.capire-matomo.cloud.sap 'unsafe-inline' 'unsafe-eval'" }], ['link', { rel: 'icon', href: base+'favicon.ico' }], ['link', { rel: 'shortcut icon', href: base+'favicon.ico' }], - ['link', { rel: 'apple-touch-icon', sizes: '180x180', href: base+'cap-logo.png' }], + ['link', { rel: 'apple-touch-icon', sizes: '180x180', href: base+'logos/cap.png' }], ['script', { src: base+'script.js' } ] ], @@ -207,12 +208,11 @@ config.buildEnd = async ({ outDir, site }) => { // disabled by default to avoid online fetches during local build if (process.env.VITE_CAPIRE_EXTRA_ASSETS) { // zip assets aren't copied automatically, and `vite.assetInclude` doesn't work either - const hanaAssetDir = 'advanced/assets' - const hanaAsset = path.join(hanaAssetDir, 'native-hana-samples.zip') - await fs.mkdir(path.join(outDir, hanaAssetDir), {recursive: true}) - console.debug('✓ copying HANA assets to ', path.join(outDir, hanaAsset)) // eslint-disable-line no-console + const archive = 'advanced/assets/native-hana-samples.zip' + await fs.mkdir(path.dirname(path.join(outDir, archive)), {recursive: true}) + console.debug('✓ copying HANA assets to ', path.join(outDir, archive)) // eslint-disable-line no-console - await fs.copyFile(path.join(__dirname, '..', hanaAsset), path.join(outDir, hanaAsset)) + await fs.copyFile(path.join(__dirname, '..', archive), path.join(outDir, archive)) await cdsMavenSite.copySiteAssets(path.join(outDir, 'java/assets/cds-maven-plugin-site'), site) } } diff --git a/advanced/assets/cat-service-comp.cds b/advanced/assets/cat-service-comp.cds deleted file mode 100644 index 3ba0ef8ef4..0000000000 --- a/advanced/assets/cat-service-comp.cds +++ /dev/null @@ -1,7 +0,0 @@ -using my.bookshop from './data-model'; -service CatalogService { - @odata.draft.enabled:true - entity Books as projection on bookshop.Books; - - entity Chapters as projection on bookshop.Chapters; -} diff --git a/advanced/assets/cat-service-enable.cds b/advanced/assets/cat-service-enable.cds deleted file mode 100644 index f053ec8451..0000000000 --- a/advanced/assets/cat-service-enable.cds +++ /dev/null @@ -1,4 +0,0 @@ -service CatalogService { - @odata.draft.enabled - entity Books {/*...*/} -} diff --git a/advanced/assets/data-model.cds b/advanced/assets/data-model.cds deleted file mode 100644 index fa7a6a5a6e..0000000000 --- a/advanced/assets/data-model.cds +++ /dev/null @@ -1,19 +0,0 @@ -namespace my.bookshop; - -entity Books { - key ID : Integer; - title : String; - stock : Integer; - chapters: Composition of many Chapters on chapters.book=$self; -} - -entity Chapters { - key ID : UUID; - book_ID : UUID; - chapterName : String; - book : Association to one Books on book.ID=book_ID; -}; - -extend entity Books with @foo:11 { - author : String; -}; \ No newline at end of file diff --git a/assets/agnostic-services.drawio.svg b/assets/agnostic-services.drawio.svg deleted file mode 100644 index 0e464dbb4d..0000000000 --- a/assets/agnostic-services.drawio.svg +++ /dev/null @@ -1,154 +0,0 @@ - - - - - - - -
-
-
-

- - - Legend - -
-
-
-

-
-
-
-
- - Legend... - -
-
- - - - - -
-
-
- - APIs - -
-
-
-
- - APIs - -
-
- - - - - -
-
-
- - Binding - -
-
-
-
- - Binding - -
-
- - - - -
-
-
- Inbound Adapter -
-
-
-
- - Inbound Adapter - -
-
- - - - - - -
-
-
- Outbound Adapter -
-
-
-
- - Outbound Adapt... - -
-
- - - - - - -
-
-
- Services -
-
-
-
- - Services - -
-
- - - - - - -
-
-
- - Event messages/requests with optional queries - -
-
-
-
- - Event messages/requ... - -
-
-
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file diff --git a/assets/concepts/aspects.svg b/assets/concepts/aspects.svg deleted file mode 100644 index dc4523fe9a..0000000000 --- a/assets/concepts/aspects.svg +++ /dev/null @@ -1,3 +0,0 @@ - - -
Aspects
Aspects
Feature
Toggling
Feature...
Separation of Concerns
Separation of Con...
Extensibility
Extensibility
Verticalization
Verticalization
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/assets/core-concepts.drawio.svg b/assets/core-concepts.drawio.svg deleted file mode 100644 index 083dd48b9d..0000000000 --- a/assets/core-concepts.drawio.svg +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - - - - -
-
-
- Annotations -
-
-
-
- - Annotations - -
-
- - - - -
-
-
- UI Markup -
-
-
-
- - UI Markup - -
-
- - - - - - -
-
-
- Domain Models -
-
-
-
- - Domain Models - -
-
- - - - - - -
-
-
- Service Models -
-
-
-
- - Service Models - -
-
- - - - - - -
-
-
- UIs/Consumers -
-
-
-
- - UIs/Consumers - -
-
- - - - - - - -
-
-
- Implementation -
-
-
-
- - Implementation - -
-
- - - - -
-
-
- Services -
-
-
-
- - Services - -
-
- - - - -
-
-
- Data Sources -
-
-
-
- - Data Sources - -
-
- - - - -
-
-
- - Event Handlers - -
-
-
-
- - Event Handlers - -
-
- - - - - - -
-
-
-

-
-

-
-
-
-
- -
-
- - - - - - - -
-
-
- Views -
-
-
-
- - Views - -
-
- - - - -
-
-
- - CDS Models - -
-
-
-
- - CDS Models - -
-
- - - - -
-
-
- - Custom Code - -
-
-
-
- - Custom Code - -
-
- - - - -
-
-
- - Generic Runtimes - -
-
-
-
- - Generic Runtimes - -
-
- - - - -
-
-
- - - Legend - - -
-
-
-
- - Legend - -
-
-
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file diff --git a/assets/datasources.drawio.svg b/assets/datasources.drawio.svg deleted file mode 100644 index f48306b8e2..0000000000 --- a/assets/datasources.drawio.svg +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - -
-
-
- Service Client -
-
-
-
- - Service Client - -
-
- - - - -
-
-
- Database -
-
-
-
- - Database - -
-
- - - - -
-
-
- Local Service -
-
-
-
- - Local Service - -
-
- - - - -
-
-
- External Service -
-
-
-
- - External Servi... - -
-
- - - - - -
-
-
- Data Model -
-
-
-
- - Data Model - -
-
- - - - - -
-
-
- Service Definition -
-
-
-
- - Service Defini... - -
-
- - - - - -
-
-
- Service Definition -
-
-
-
- - Service Defini... - -
-
- - - -
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file diff --git a/assets/domain-models.drawio.svg b/assets/domain-models.drawio.svg deleted file mode 100644 index 873f4090fb..0000000000 --- a/assets/domain-models.drawio.svg +++ /dev/null @@ -1,188 +0,0 @@ - - - - - - - - - -
-
-
- Domain Models -
-
-
-
- - Domain Models - -
-
- - - - -
-
-
- Other Projects -
-
-
-
- - Other Projects - -
-
- - - - -
-
-
- Service Models -
-
-
-
- - Service Models - -
-
- - - - -
-
-
- Database -
-
-
-
- - Database - -
-
- - - - - -
-
-
- deploy -
-
-
-
- - deploy - -
-
- - - - -
-
-
- Persistence Models -
-
-
-
- - Persistence Mo... - -
-
- - - - - -
-
-
- expose -
-
-
-
- - expose - -
-
- - - - - -
-
-
- map -
-
-
-
- - map - -
-
- - - - - -
-
-
- direct -
-
-
-
- - direct - -
-
- - - -
-
-
- reuse -
-
-
-
- - reuse - -
-
-
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file diff --git a/assets/feature-toggles.drawio.svg b/assets/feature-toggles.drawio.svg deleted file mode 100644 index b6d4d707b0..0000000000 --- a/assets/feature-toggles.drawio.svg +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - -
-
-
- Authentication -
-
-
-
- - Authentication - -
-
- - - - - - -
-
-
- CAP Runtime -
-
-
-
- - CAP Runtime - -
-
- - - - - -
-
-
- req + - - .features - -
-
-
-
- - req + .features - -
-
- - - - -
-
-
- - Inbound -
- Request -
-
-
-
-
- - Inbound... - -
-
- - - - -
-
-
- Model -
- Provider -
-
-
-
- - Model... - -
-
- - - - - -
-
-
- - getCsn - - (t,fts) -
-
-
-
- - getCsn(t,fts) - -
-
- - - - -
-
-
- Base Model -
-
-
-
- - Base Model - -
-
- - - - -
-
-
- Features -
-
-
-
- - Features - -
-
- - - - - - - - - -
-
-
- Database -
-
-
-
- - Database - -
-
- - - - - - -
-
-
- Feature Toggles Management -
-
-
-
- - Feature Toggles Manag... - -
-
- - -
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file diff --git a/cds/_menu.md b/cds/_menu.md new file mode 100644 index 0000000000..625131b184 --- /dev/null +++ b/cds/_menu.md @@ -0,0 +1,23 @@ + +# [Definition Language (CDL)](cdl) + + ## [Keywords & Identifiers](cdl#keywords-identifiers) + ## [Built-in Types & Literals](cdl#built-in-types) + ## [Entities & Type Definitions](cdl#entities-type-definitions) + ## [Views & Projections](cdl#views-projections) + ## [Associations](cdl#associations) + ## [Annotations](cdl#annotations) + ## [Aspects](cdl#aspects) + ## [Services](cdl#services) + +# [Schema Notation (CSN)](csn) +# [Query Language (CQL)](cql) +# [Query Notation (CQN)](cqn) +# [Expression Language (CXL)](cxl) +# [Expression Notation (CXN)](cxn) +# [Core / Built-in Types](types) +# [Common Reuse Types](common) +# [Common Annotations](annotations) +# [Compiler Messages](../compiler/messages) +# [Aspect-oriented Modelling](aspects) +# [The Nature of CDS Models](models) diff --git a/cds/annotations.md b/cds/annotations.md index cd1d2e6772..b8078462c2 100644 --- a/cds/annotations.md +++ b/cds/annotations.md @@ -51,13 +51,13 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ |----------------------|------------------------------------------------------------------------------------| | `@path` | see [Services](./cdl#service-definitions) | | `@impl` | see [Reuse & Compose](../guides/extensibility/composition#reuse-code) | -| `@odata.etag` | see [Providing Services](../guides/providing-services#etag) | -| `@cds.autoexpose` | see [Providing Services](../guides/providing-services#auto-exposed-entities) | -| `@cds.api.ignore` | see [OData](../advanced/odata#omitting-elements-from-apis) | -| `@cds.query.limit` | see [Providing Services](../guides/providing-services#annotation-cds-query-limit) | -| `@cds.localized` | see [Localized Data](../guides/localized-data#read-operations) | -| `@cds.valid.from/to` | see [Temporal Data](../guides/temporal-data#using-annotations-cds-valid-from-to) | -| `@cds.search` | see [Search Capabilities](../guides/providing-services#searching-data) | +| `@odata.etag` | see [Providing Services](../guides/services/providing-services#etag) | +| `@cds.autoexpose` | see [Providing Services](../guides/services/providing-services#auto-exposed-entities) | +| `@cds.api.ignore` | see [OData](../guides/advanced/odata#omitting-elements-from-apis) | +| `@cds.query.limit` | see [Providing Services](../guides/services/providing-services#annotation-cds-query-limit) | +| `@cds.localized` | see [Localized Data](../guides/uis/localized-data#read-operations) | +| `@cds.valid.from/to` | see [Temporal Data](../guides/domain/temporal-data#using-annotations-cds-valid-from-to) | +| `@cds.search` | see [Search Capabilities](../guides/services/providing-services#searching-data) | ## Persistence @@ -67,33 +67,32 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ | `@cds.persistence.table` | see [Generating DDL Files](../guides/databases/index#cds-persistence-table) | | `@cds.persistence.skip` | see [Generating DDL Files](../guides/databases/index#cds-persistence-skip) | | `@cds.persistence.mock` | `false` excludes this entity from automatic mocking | -| `@cds.on.insert` | see [Providing Services](../guides/providing-services) | -| `@cds.on.update` | see [Providing Services](../guides/providing-services) | +| `@cds.on.insert` | see [Providing Services](../guides/services/providing-services) | +| `@cds.on.update` | see [Providing Services](../guides/services/providing-services) | | `@sql.prepend` | see [Generating DDL Files](../guides/databases/index#sql-prepend-append) | | `@sql.append` | see [Generating DDL Files](../guides/databases/index#sql-prepend-append) | ## OData -[Learn more about **OData Annotations in CDS**.](../advanced/odata#annotations){.learn-more} +[Learn more about **OData Annotations in CDS**.](../guides/advanced/odata#annotations){.learn-more} Shortcuts: | Annotation | Description | |---------------------|------------------------------------------------------| -| `@ValueList.entity` | see [Domain Modeling](../guides/domain-modeling) | -| `@odata.Type` | see [OData](../advanced/odata#override-type-mapping) | -| `@odata.MaxLength` | see [OData](../advanced/odata#override-type-mapping) | -| `@odata.Precision` | see [OData](../advanced/odata#override-type-mapping) | -| `@odata.Scale` | see [OData](../advanced/odata#override-type-mapping) | -| `@odata.singleton` | see [OData](../advanced/odata#singletons) | - +| `@ValueList.entity` | see [Domain Modeling](../guides/domain/modeling) | +| `@odata.Type` | see [OData](../guides/advanced/odata#override-type-mapping) | +| `@odata.MaxLength` | see [OData](../guides/advanced/odata#override-type-mapping) | +| `@odata.Precision` | see [OData](../guides/advanced/odata#override-type-mapping) | +| `@odata.Scale` | see [OData](../guides/advanced/odata#override-type-mapping) | +| `@odata.singleton` | see [OData](../guides/advanced/odata#singletons) | Intrinsically supported OData Annotations: | Annotation | Description | |------------------------|------------------------------------------------------------------| | `@Core.Computed` | see [Providing Services](../guides/services/constraints#readonly) | | `@Core.Immutable` | see [Providing Services](../guides/services/constraints#readonly) | -| `@Core.MediaType` | see [Media Data](../guides/providing-services#serving-media-data) | -| `@Core.IsMediaType` | see [Media Data](../guides/providing-services#serving-media-data) | -| `@Core.IsUrl` | see [Media Data](../guides/providing-services#serving-media-data) | -| `@Capabilities...` | see [Fiori](../advanced/fiori) | +| `@Core.MediaType` | see [Media Data](../guides/services/providing-services#serving-media-data) | +| `@Core.IsMediaType` | see [Media Data](../guides/services/providing-services#serving-media-data) | +| `@Core.IsUrl` | see [Media Data](../guides/services/providing-services#serving-media-data) | +| `@Capabilities...` | see [Fiori](../guides/uis/fiori) | diff --git a/cds/cdl.md b/cds/cdl.md index 36688f9cd4..937915ef80 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -322,7 +322,7 @@ cds.compile(..., { docs: true }) ::: tip Doc comments are automatically enabled in CAP Java. In CAP Java, doc comments are automatically enabled by the [CDS Maven Plugin](../java/developing-applications/building#cds-maven-plugin). -In generated interfaces they are [converted to corresponding Javadoc comments](../java/assets/cds-maven-plugin-site/generate-mojo.html#documentation){target="_blank"}. +In generated interfaces they are converted to corresponding Javadoc comments. ::: When generating output for deployment to SAP HANA, the first paragraph of a doc comment is translated @@ -450,12 +450,12 @@ type EmailAddress : { kind:String; address:String; } > Keywords `many` and `array of` are mere syntax variants with identical semantics and implementations. -When deployed to SQL databases, such fields are mapped to [LargeString](types) columns and the data is stored denormalized as JSON array. +When deployed to SQL databases, such fields are mapped to [LargeString](./types) columns and the data is stored denormalized as JSON array. With OData V4, arrayed types are rendered as `Collection` in the EDM(X). ::: warning -Filter expressions, [instance-based authorization](../guides/security/authorization#instance-based-auth) and [search](../guides/providing-services#searching-data) are not supported on arrayed elements. +Filter expressions, [instance-based authorization](../guides/security/authorization#instance-based-auth) and [search](../guides/services/providing-services#searching-data) are not supported on arrayed elements. ::: #### Null Values @@ -838,9 +838,9 @@ entity UsingView ( bar: Boolean ) as SELECT * from SomeView(foo: 17, bar: :bar); ``` -For Node.js, there's no programmatic API yet. You need to provide a [CQN snippet](/cds/cqn#select). +For Node.js, there's no programmatic API yet. You need to provide a [CQN snippet](cqn#select). -In CAP Java, run a select statement against the view with named [parameter values](/java/working-with-cql/query-execution#querying-views): +In CAP Java, run a select statement against the view with named [parameter values](../java/working-with-cql/query-execution#querying-views): ::: code-group ```js [Node] @@ -854,7 +854,7 @@ Result result = service.run(Select.from("UsingView"), params); [Learn more about how to expose views with parameters in **Services - Exposed Entities**.](#exposed-entities){ .learn-more} -[Learn more about views with parameters for existing HANA artifacts in **Native SAP HANA Artifacts**.](../advanced/hana){ .learn-more} +[Learn more about views with parameters for existing HANA artifacts in **Native SAP HANA Artifacts**.](../guides/databases/hana-native){ .learn-more} ### Runtime Views { #runtimeviews } @@ -1031,7 +1031,7 @@ Essentially, Compositions are the same as _[associations](#associations)_, just Using compositions of one for entities is discouraged. There is often no added value of using them as the information can be placed in the root entity. Compositions of one have limitations as follow: - Very limited Draft support. Fiori elements does not support compositions of one unless you take care of their creation in a custom handler. - No extensive support for modifications over paths if compositions of one are involved. You must fill in foreign keys manually in a custom handler. -See the [Keep it Simple, Stupid](/guides/domain-modeling#keep-it-simple-stupid) best practice, especially the [Prefer Flat Models](/guides/domain-modeling#prefer-flat-models) section. +See the [Keep it Simple, Stupid](../guides/domain/modeling#keep-it-simple-stupid) best practice, especially the [Prefer Flat Models](../guides/domain/modeling#prefer-flat-models) section. ::: ### Managed Compositions of Aspects {#managed-compositions} @@ -1180,9 +1180,9 @@ Publishing a _composition_ with a filter is similar, with an important differenc in a deep Update, Insert, or Delete statement the respective operation does not cascade to the target entities. Thus the type of the resulting element is set to `cds.Association`. -[Learn more about `cds.Association`.](/cds/csn#associations){.learn-more} +[Learn more about `cds.Association`.](csn#associations){.learn-more} -In [SAP Fiori Draft](../advanced/fiori#draft-support), it behaves +In [SAP Fiori Draft](../guides/uis/fiori#draft-support), it behaves like an "enclosed" association, that means, it points to the target draft entity. In the following example, `singleItem` has type `cds.Association`. @@ -1199,7 +1199,7 @@ entity P_orders as projection on Orders { ## Annotations -This section describes how to add Annotations to model definitions written in CDL, focused on the common syntax options, and fundamental concepts. Find additional information in the [OData Annotations](../advanced/odata#annotations) guide. +This section describes how to add Annotations to model definitions written in CDL, focused on the common syntax options, and fundamental concepts. Find additional information in the [OData Annotations](../guides/advanced/odata#annotations) guide. - [Annotation Syntax](#annotation-syntax) - [Annotation Targets](#annotation-targets) @@ -1602,7 +1602,7 @@ the annotations. #### OData Annotations The OData backend of the CAP CDS compiler supports expression-valued annotations. -See [Expressions in OData Annotations](../advanced/odata#expression-annotations). +See [Expressions in OData Annotations](../guides/advanced/odata#expression-annotations). @@ -1935,7 +1935,7 @@ Entities can be also exposed as views with parameters: ```cds service MyOrders { - entity OrderWithParameter( foo: Integer ) as select from data.Orders where id=:foo; + entity OrderWithParameter( foo: Integer, bar: Boolean ) as select from data.Orders where id=:foo; } ``` A parametrized view like modeled in the section on [`view with parameter`](#views-with-parameters) can be exposed as follows: @@ -2076,8 +2076,8 @@ extend service Zoo with { // auto-exposed entities: You can still expose such entities explicitly, for example, to make them read-write: ```cds -service Sue { - entity Foo { /*...*/ } +service MyOrders { + entity Orders { /*...*/ } entity Bar as projection on my.Bar; } ``` @@ -2147,7 +2147,7 @@ Explicitly modelled binding parameters are ignored for OData V2. #### Returning Media Data Streams { #actions-returning-media} -Actions and functions can also be modeled to return streamed media data such as images and CSV files. To achieve this, the return type of the actions or functions must refer to a [predefined type](#types), annotated with [media data annotations](/guides/providing-services#annotating-media-elements), that is defined in the same service. The minimum set of annotations required is `@Core.MediaType`. +Actions and functions can also be modeled to return streamed media data such as images and CSV files. To achieve this, the return type of the actions or functions must refer to a [predefined type](#types), annotated with [media data annotations](../guides/services/providing-services#annotating-media-elements), that is defined in the same service. The minimum set of annotations required is `@Core.MediaType`. ```cds service CatalogService { @@ -2204,5 +2204,3 @@ extend entity CatalogService.Products with actions { function getRatings() returns Integer; } ``` - -
diff --git a/cds/common.md b/cds/common.md index 5184bf3e4d..4954119f98 100644 --- a/cds/common.md +++ b/cds/common.md @@ -23,20 +23,20 @@ CDS ships with a prebuilt model *`@sap/cds/common`* that provides common types a [ISO 4217]: https://en.wikipedia.org/wiki/ISO_4217 [ISO/IEC 15897]: https://en.wikipedia.org/wiki/ISO/IEC_15897 [tzdata]: https://en.wikipedia.org/wiki/Tz_database -[localized data]: ../guides/localized-data -[temporal data]: ../guides/temporal-data +[localized data]: ../guides/uis/localized-data +[temporal data]: ../guides/domain/temporal-data ## Why Use _@sap/cds/common_? It's recommended that all applications use the common types and aspects provided through _@sap/cds/common_ to benefit from these features: -* **Concise** and **comprehensible** models → see also [Conceptual Modeling](../guides/domain-modeling) +* **Concise** and **comprehensible** models → see also [Conceptual Modeling](../guides/domain/modeling) * **Foster interoperability** between all applications * **Proven best practices** captured from real applications * **Streamlined** data models with **minimal entry barriers** * **Optimized** implementations and runtime performance -* **Automatic** support for [localized](../guides/localized-data) code lists and [value helps](../advanced/fiori#pre-defined-types-in-sap-cds-common) -* **Extensibility** using [Aspects](../guides/domain-modeling#aspect-oriented-modeling) +* **Automatic** support for [localized](../guides/uis/localized-data) code lists and [value helps](../guides/uis/fiori#pre-defined-types-in-sap-cds-common) +* **Extensibility** using [Aspects](../guides/domain/modeling#aspect-oriented-modeling) * **Verticalization** through third-party extension packages For example, usage is as simple as indicated in the following sample: @@ -83,7 +83,7 @@ entity Foo { > The service provider runtimes automatically fill in UUID-typed keys like these with auto-generated UUIDs. -[Learn more about **canonical keys** and **UUIDs**.](../guides/domain-modeling#prefer-canonic-keys){ .learn-more} +[Learn more about **canonical keys** and **UUIDs**.](../guides/domain/modeling#prefer-canonic-keys){ .learn-more} ### Aspect `managed` @@ -110,12 +110,12 @@ entity Foo { The annotations `@cds.on.insert/update` are handled in generic service providers so to fill in those fields automatically. -[Learn more about **generic service features**.](../guides/domain-modeling#managed-data){ .learn-more} +[Learn more about **generic service features**.](../guides/domain/modeling#managed-data){ .learn-more} ### Aspect `temporal` -This aspect basically adds two canonical elements, `validFrom` and `validTo` to an entity. It also adds a tag annotation that connects the CDS compiler's and runtime's built-in support for _[Temporal Data](../guides/temporal-data)_. This built-in support covers handling date-effective records and time slices, including time travel. All you've to do is, add the temporal aspect to respective entities as follows: +This aspect basically adds two canonical elements, `validFrom` and `validTo` to an entity. It also adds a tag annotation that connects the CDS compiler's and runtime's built-in support for _[Temporal Data](../guides/domain/temporal-data)_. This built-in support covers handling date-effective records and time slices, including time travel. All you've to do is, add the temporal aspect to respective entities as follows: ```cds entity Contract : temporal {...} @@ -213,7 +213,7 @@ aspect sap.common.CodeList { descr : localized String(1111); } ``` -[Learn more about **localized** keyword.](../guides/localized-data){ .learn-more} +[Learn more about **localized** keyword.](../guides/uis/localized-data){ .learn-more} ### Entity `Countries` @@ -249,7 +249,7 @@ entity sap.common.Languages : CodeList { key code : sap.common.Locale; //> for example, en_GB } ``` -[Learn more on **normalized locales**.](../guides/i18n#normalized-locales){ .learn-more} +[Learn more on **normalized locales**.](../guides/uis/i18n#normalized-locales){ .learn-more} ### Entity `Timezones` @@ -297,7 +297,7 @@ Assumption is that ~80% of all apps don't need more than what is already covered ## Aspects for Localized Data -Following are types and aspects mostly used behind the scenes for [localized data](../guides/localized-data).
+Following are types and aspects mostly used behind the scenes for [localized data](../guides/uis/localized-data).
For example given this entity definition: ```cds @@ -355,7 +355,7 @@ aspect sap.common.TextsAspect { } ``` -[Learn more about **Extending .texts entities**.](../guides/localized-data#extending-texts-entities){ .learn-more} +[Learn more about **Extending .texts entities**.](../guides/uis/localized-data#extending-texts-entities){ .learn-more} ### Type `Locale` {#locale-type} @@ -365,7 +365,7 @@ type sap.common.Locale : String(14) @title: '{i18n>LanguageCode}'; The reuse type `sap.common.Locale` is used when generating `.texts` entities for the unfolding of *localized* elements. -[Learn more about **localized data**.](../guides/localized-data){ .learn-more} +[Learn more about **localized data**.](../guides/uis/localized-data){ .learn-more} ### SQL Persistence @@ -395,7 +395,7 @@ FROM Foo ( ) ``` -[Learn more about **localized data**.](../guides/localized-data){ .learn-more} +[Learn more about **localized data**.](../guides/uis/localized-data){ .learn-more} ## Providing Initial Data @@ -446,7 +446,7 @@ EU;de;Europäische Union;Europäische Union ``` ::: -[Learn more about **Localization/i18n**.](../guides/localized-data){ .learn-more} +[Learn more about **Localization/i18n**.](../guides/uis/localized-data){ .learn-more} ### Using Tools like Excel diff --git a/cds/compiler/hdbcds-to-hdbtable.md b/cds/compiler/hdbcds-to-hdbtable.md index 1e91e05bb9..3a209c2c81 100644 --- a/cds/compiler/hdbcds-to-hdbtable.md +++ b/cds/compiler/hdbcds-to-hdbtable.md @@ -161,7 +161,6 @@ Then run a new build and deploy the newly generated _.hdbcds_ files. The `@Comme ## Temporal Data With Time Slice IDs - Temporal Data with Time Slice IDs is a conceptual feature, thus it shouldn't occur in productive applications. Nevertheless, we mention it here for completeness. Example: diff --git a/cds/compiler/v2.md b/cds/compiler/v2.md index 04e26e6edd..fb5bfb4e15 100644 --- a/cds/compiler/v2.md +++ b/cds/compiler/v2.md @@ -45,7 +45,7 @@ before upgrading to v2 → find respective hints in the following sections. ### Fix ambiguous `redirects` -When there's no unique target for [**_auto-redirection_**](../../guides/providing-services#redirected-associations), +When there's no unique target for [**_auto-redirection_**](../../guides/services/providing-services#redirected-associations), compiler v1 'silently' skipped respective associations with a warning. Yet, many ignored these warnings, which lead to hard-to-detect subsequent errors. Therefore, we raised that to an error-level message with compiler v2. @@ -155,7 +155,7 @@ You can fix this already with compiler v1 → just pay attention to the warni With compiler v2, suffixes of generated texts entities change from `_texts` to `.texts`. This is to consistently apply the same principles and automatisms, including upcoming ones, -of [_Scoped Names_](../cdl#scoped-names) and [_Managed Compositions_](../cdl#managed-compositions) also for [_Localized Data_](../../guides/localized-data#behind-the-scenes). +of [_Scoped Names_](../cdl#scoped-names) and [_Managed Compositions_](../cdl#managed-compositions) also for [_Localized Data_](../../guides/uis/localized-data#behind-the-scenes). While you should not have to refer to these generated entities at all, we saw this did happen in stakeholder models. @@ -553,7 +553,7 @@ Their names can change or they can even disappear in a future version. If you re ### Removed: `localized.<...>` Entries in CSN For entities with "localized" elements, "convenience" views are still generated -[behind the scenes](../../guides/localized-data#behind-the-scenes) into the database, but the CSN doesn't contain them anymore. +[behind the scenes](../../guides/uis/localized-data#behind-the-scenes) into the database, but the CSN doesn't contain them anymore. You shouldn't rely on the presence of these views in the database, as they can disappear in a future version. @@ -634,7 +634,7 @@ CAP Java supports using CDS models that have been compiled with the CDS complier ### Name of Text Entities -For every entity that has *localized* elements the CDS compiler [behind the scenes](../../guides/localized-data#behind-the-scenes) generates a corresponding "texts" entity that holds the translated texts. The name of this entity changes with CDS compiler v2. +For every entity that has *localized* elements the CDS compiler [behind the scenes](../../guides/uis/localized-data#behind-the-scenes) generates a corresponding "texts" entity that holds the translated texts. The name of this entity changes with CDS compiler v2. ::: warning _❗ Warning_ With compiler v1 the "texts" entity is generated with the suffix `_texts`, while the compiler v2 uses the suffix `.texts`! diff --git a/cds/csn.md b/cds/csn.md index 039fb6e6e8..8fa708bed1 100644 --- a/cds/csn.md +++ b/cds/csn.md @@ -15,7 +15,7 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ CSN (pronounced as "_Season_") is a notation for compact representations of CDS models — tailored to serve as an optimized format to share and interpret models with minimal footprint and dependencies. -It's similar to [JSON Schema] but goes beyond JSON's abilities, in order to capture full-blown _Entity-Relationship Models_ and [Extensions](#aspects). This makes CSN models a perfect source to generate target models, such as [OData/EDM](../advanced/odata) or [OpenAPI] interfaces, as well as persistence models for SQL or NoSQL databases. +It's similar to [JSON Schema] but goes beyond JSON's abilities, in order to capture full-blown _Entity-Relationship Models_ and [Extensions](#aspects). This makes CSN models a perfect source to generate target models, such as [OData/EDM](../guides/advanced/odata) or [OpenAPI] interfaces, as well as persistence models for SQL or NoSQL databases. [[toc]] diff --git a/cds/types.md b/cds/types.md index 2148b31280..42cca47aa0 100644 --- a/cds/types.md +++ b/cds/types.md @@ -48,7 +48,7 @@ These types are used to define the structure of entities and services, and are m > (1) Concrete mappings to specific databases may differ. > -> (2) See also [Best Practices](../guides/domain-modeling#don-t-interpret-uuids). +> (2) See also [Best Practices](../guides/domain/modeling#don-t-interpret-uuids). > > (3) _SMALLINT_ on PostgreSQL and H2. > @@ -62,6 +62,6 @@ These types are used to define the structure of entities and services, and are m [Additional Reuse Types and Aspects by `@sap/cds/common`](common) {.learn-more} -[Mapping to OData EDM types](../advanced/odata#type-mapping) {.learn-more} +[Mapping to OData EDM types](../guides/advanced/odata#type-mapping) {.learn-more} -[HANA-native Data Types](../advanced/hana#hana-types){.learn-more} +[HANA-native Data Types](../guides/databases/hana-native#hana-types){.learn-more} diff --git a/about/index.md b/get-started/about.md similarity index 87% rename from about/index.md rename to get-started/about.md index 2ab52dd1e5..809468b1c8 100644 --- a/about/index.md +++ b/get-started/about.md @@ -30,7 +30,7 @@ Someone once said: ### Jumpstarting Projects -To get started with CAP, there's only a [minimalistic initial setup](../get-started/index.md) required. Starting a project is a matter of seconds. No tedious long lasting platform onboarding ceremonies are required; instead you can (and should): +To get started with CAP, there's only a [minimalistic initial setup](./index.md) required. Starting a project is a matter of seconds. No tedious long lasting platform onboarding ceremonies are required; instead you can (and should): - Start new CAP projects within seconds. - Create functional apps with full-fledged servers within minutes. @@ -74,7 +74,7 @@ cds add hana,redis,mta,helm,mtx,multitenancy,extensibility... Most of your development happens in inner loops, where developers would **code**, **run**, and **test** in **fast iteration**. However, at least in mediocre cloud-based development approaches, this is slowed down drastically, for example, by the need to always be connected to platform services, up to the need to always deploy to the cloud to see and test the effects of recent changes. -![inner-loop](assets/inner-loop.png){.zoom75} +![inner-loop](./assets/inner-loop.png){.zoom75} CAP applications are [**agnostic by design**](best-practices#agnostic-by-design), which allows to stay in fast inner loops by using local mock variants as stand-ins for many platform services and features, thereby eliminating the need to always connect to or deploy to the cloud; developers can stay in fast inner loops, without connection to cloud – aka. ***airplane*** mode development. Only when necessary, they can test in ***hybrid*** mode or do ad-hoc deployments to the cloud. @@ -103,9 +103,9 @@ Assumed you plan for a microservices architecture, the team developing microserv With CAP, you can (and should) instead just run both services in the same local process at development, basically by using `B` as a plain old library in `A`, and only deploy them to separate microservices in production, **without having to touch your models or code** (given `A` uses `B` through public APIs, which should always be the case anyways). -![modulith](assets/modulith.png){.zoom66} +![modulith](./assets/modulith.png){.zoom66} -![late-cut-microservices](assets/late-cut-microservices.png){.zoom66} +![late-cut-microservices](./assets/late-cut-microservices.png){.zoom66} If service `A` and `B` are developed in different runtimes, for example, Node.js and Java, you can't run them in the same process. But even then you can (and should) leverage CAP's ability to easily serve a service generically based on a service definition in CDS. So during development, `A` would use a mocked variant of `B` served automatically by CAP's generic providers. @@ -139,7 +139,7 @@ In general, we always propose that approach: -As shown in the [*Bookshop by capire*](../get-started/in-a-nutshell) walkthrough, a simple service definition in CDS is all we need to run a full-fledged REST, or OData, or GraphQL server +As shown in the [*Bookshop by capire*](./in-a-nutshell) walkthrough, a simple service definition in CDS is all we need to run a full-fledged REST, or OData, or GraphQL server There are more options to parallelize workflows. Fueled by service definition is all that is required to get a full-fledged REST or OData service **served out of the box** by generic providers. @@ -157,20 +157,19 @@ So, projects could spawn two teams in parallel: one working on the frontend usin The CAP runtimes in Node.js and Java provide many generic implementations for recurring tasks and best practices, distilled from proven SAP applications. This is a list of the most common tasks covered by the core frameworks: -- [Serving CRUD Requests](../guides/providing-services#generic-providers) -- [Serving Nested Documents](../guides/providing-services#deep-reads-and-writes) -- [Serving Variable Data](../releases/archive/2024/oct24#basic-support-for-cds-map) -- [Serving (Fiori) Drafts](../advanced/fiori#draft-support) -- [Serving Media Data](../guides/providing-services#serving-media-data) -- [Searching Data](../guides/providing-services#searching-data) -- [Pagination](../guides/providing-services#implicit-pagination) -- [Sorting](../guides/providing-services#implicit-sorting) +- [Serving CRUD Requests](../guides/services/providing-services#generic-providers) +- [Serving Nested Documents](../guides/services/providing-services#deep-reads-and-writes) +- [Serving (Fiori) Drafts](../guides/uis/fiori#draft-support) +- [Serving Media Data](../guides/services/providing-services#serving-media-data) +- [Searching Data](../guides/services/providing-services#searching-data) +- [Pagination](../guides/services/providing-services#implicit-pagination) +- [Sorting](../guides/services/providing-services#implicit-sorting) - [Authentication](../node.js/authentication) - [Authorization](../guides/security/authorization) -- [Localization / i18n](../guides/i18n) -- [Basic Input Validation](../guides/providing-services#input-validation) -- [Auto-generated Keys](../guides/providing-services#auto-generated-keys) -- [Concurrency Control](../guides/providing-services#concurrency-control) +- [Localization / i18n](../guides/uis/i18n) +- [Basic Input Validation](../guides/services/providing-services#input-validation) +- [Auto-generated Keys](../guides/services/providing-services#auto-generated-keys) +- [Concurrency Control](../guides/services/providing-services#concurrency-control)
@@ -178,7 +177,7 @@ The CAP runtimes in Node.js and Java provide many generic implementations for re > > This set of automatically served requests and covered related requirements, means that CAP's generic providers automatically serve the vast majority, if not all of the requests showing up in your applications, without you having to code anything for that, except for true custom domain logic. -[See also the *Features Overview*](./features) {.learn-more} +[See also the *Features Overview*](features) {.learn-more} @@ -189,11 +188,11 @@ The CAP runtimes in Node.js and Java provide many generic implementations for re On top of the common request-serving related things handled by CAP's generic providers, we provide out of the box solutions for these higher-level topic fields: - [Common Reuse Types & Aspects](../cds/common) -- [Managed Data](../guides/domain-modeling#managed-data) -- [Localized Data](../guides/localized-data) -- [Temporal Data](../guides/temporal-data) +- [Managed Data](../guides/domain/modeling#managed-data) +- [Localized Data](../guides/uis/localized-data) +- [Temporal Data](../guides/domain/temporal-data) - [Data Federation](https://github.com/SAP-samples/teched2022-AD265/wiki) → hands-on tutorial; capire guide in the making... -- [Verticalization & Extensibility](../guides/extensibility/) +- [Verticalization & Extensibility](../guides/extensibility/index.md)
@@ -216,23 +215,23 @@ On top of the common request-serving related things handled by CAP's generic pro That initiative happened to be successful, and gave a boost to a steadily **growing ecosystem** around CAP with an active **inner source** and **open source** community on the one hand side. On the other hand, it resulted into an impressive collection of production-level add-ons. Here are some highlights **maintained by SAP teams**: -- [GraphQL Adapter](../plugins/#graphql-adapter) -- [OData V2 Adapter](../plugins/#odata-v2-proxy) -- [WebSockets Adapter](../plugins/#websocket) -- [UI5 Dev Server](../plugins/#ui5-dev-server) -- [Open Telemetry → SAP Cloud Logging, Dynatrace, ...](../plugins/#telemetry) -- [Attachments → SAP Object Store /S3](../plugins/#attachments) -- [Attachments → SAP Document Management Service](../plugins/#@cap-js/sdm) -- [Messaging → SAP Cloud Application Event Hub](../plugins/#event-hub) -- [Change Tracking](../plugins/#change-tracking) -- [Notifications](../plugins/#notifications) -- [Audit Logging → SAP Audit Logging](../plugins/#audit-logging) -- [Personal Data Management → SAP DPI Services](../guides/data-privacy/) -- [Open Resource Discovery (ORD)](../plugins/#ord-open-resource-discovery) +- [GraphQL Adapter](../plugins/index.md#graphql-adapter) +- [OData V2 Adapter](../plugins/index.md#odata-v2-proxy) +- [WebSockets Adapter](../plugins/index.md#websocket) +- [UI5 Dev Server](../plugins/index.md#ui5-dev-server) +- [Open Telemetry → SAP Cloud Logging, Dynatrace, ...](../plugins/index.md#telemetry) +- [Attachments → SAP Object Store /S3](../plugins/index.md#attachments) +- [Attachments → SAP Document Management Service](../plugins/index.md#@cap-js/sdm) +- [Messaging → SAP Cloud Application Event Hub](../plugins/index.md#event-hub) +- [Change Tracking](../plugins/index.md#change-tracking) +- [Notifications](../plugins/index.md#notifications) +- [Audit Logging → SAP Audit Logging](../plugins/index.md#audit-logging) +- [Personal Data Management → SAP DPI Services](../guides/security/data-privacy) +- [Open Resource Discovery (ORD)](../plugins/index.md#ord-open-resource-discovery) > [!tip] > -> This is just a subset and a snapshot of the growing number of plugins
→ find more in the [***CAP Plugins***](../plugins/) page, as well in the [***CAP Commmunity***](../resources/community-sap) spaces. +> This is just a subset and a snapshot of the growing number of plugins
→ find more in the [***CAP Plugins***](../plugins/index.md) page, as well in the [***CAP Commmunity***](/resources/community-sap.md) spaces. @@ -293,8 +292,8 @@ That might sound like a contradiction, but it isn't: While CAP certainly gives * | CAP is *Opinionated* in... | CAP is *Open* as... | | ------------------------------------------------------------ | ------------------------------------------------------------ | | **Platform-agnostic APIs** to avoid lock-ins to low-level stuff. | All abstractions follow a glass-box pattern that allows unrestricted access to lower-level things, if necessary | -| **Best practices**, served out of the box by generic providers | You're free to do things your way in [custom handlers](../guides/providing-services#custom-logic), ... while CAP simply tries to get the tedious tasks out of your way. | -| **Out-of-the-box support** for
**[SAP Fiori](https://developers.sap.com/topics/ui-development.html)** and **[SAP HANA](https://developers.sap.com/topics/hana.html)** | You can also choose other UI technologies, like [Vue.js](../get-started/in-a-nutshell#vue). Other databases are supported as well. | +| **Best practices**, served out of the box by generic providers | You're free to do things your way in [custom handlers](../guides/services/providing-services#custom-logic), ... while CAP simply tries to get the tedious tasks out of your way. | +| **Out-of-the-box support** for
**[SAP Fiori](https://developers.sap.com/topics/ui-development.html)** and **[SAP HANA](https://developers.sap.com/topics/hana.html)** | You can also choose other UI technologies, like [Vue.js](./in-a-nutshell#vue). Other databases are supported as well. | | **Tools support** in [SAP Build Code](../tools/cds-editors#bas) or [VS Code](../tools/cds-editors#vscode). | Everything in CAP can be done using the [`@sap/cds-dk`](../tools/cds-cli) CLI and any editor or IDE of your choice. |
diff --git a/about/assets/architecture.drawio.svg b/get-started/assets/architecture.drawio.svg similarity index 100% rename from about/assets/architecture.drawio.svg rename to get-started/assets/architecture.drawio.svg diff --git a/about/assets/bookshop-erm.drawio.svg b/get-started/assets/bookshop-erm.drawio.svg similarity index 100% rename from about/assets/bookshop-erm.drawio.svg rename to get-started/assets/bookshop-erm.drawio.svg diff --git a/about/assets/cdl-csn.drawio.svg b/get-started/assets/cdl-csn.drawio.svg similarity index 100% rename from about/assets/cdl-csn.drawio.svg rename to get-started/assets/cdl-csn.drawio.svg diff --git a/about/assets/cql-cqn.drawio.svg b/get-started/assets/cql-cqn.drawio.svg similarity index 100% rename from about/assets/cql-cqn.drawio.svg rename to get-started/assets/cql-cqn.drawio.svg diff --git a/about/assets/event-handlers.drawio.svg b/get-started/assets/event-handlers.drawio.svg similarity index 100% rename from about/assets/event-handlers.drawio.svg rename to get-started/assets/event-handlers.drawio.svg diff --git a/about/assets/events.drawio.svg b/get-started/assets/events.drawio.svg similarity index 100% rename from about/assets/events.drawio.svg rename to get-started/assets/events.drawio.svg diff --git a/about/assets/fueling-services.drawio.svg b/get-started/assets/fueling-services.drawio.svg similarity index 100% rename from about/assets/fueling-services.drawio.svg rename to get-started/assets/fueling-services.drawio.svg diff --git a/about/assets/inner-loop.png b/get-started/assets/inner-loop.png similarity index 100% rename from about/assets/inner-loop.png rename to get-started/assets/inner-loop.png diff --git a/about/assets/inner-loop.pptx b/get-started/assets/inner-loop.pptx similarity index 100% rename from about/assets/inner-loop.pptx rename to get-started/assets/inner-loop.pptx diff --git a/about/assets/jobkiller.png b/get-started/assets/jobkiller.png similarity index 100% rename from about/assets/jobkiller.png rename to get-started/assets/jobkiller.png diff --git a/about/assets/key-concepts.drawio.svg b/get-started/assets/key-concepts.drawio.svg similarity index 100% rename from about/assets/key-concepts.drawio.svg rename to get-started/assets/key-concepts.drawio.svg diff --git a/about/assets/late-cut microservices.pptx b/get-started/assets/late-cut microservices.pptx similarity index 100% rename from about/assets/late-cut microservices.pptx rename to get-started/assets/late-cut microservices.pptx diff --git a/about/assets/late-cut-microservices.png b/get-started/assets/late-cut-microservices.png similarity index 100% rename from about/assets/late-cut-microservices.png rename to get-started/assets/late-cut-microservices.png diff --git a/about/assets/modulith.png b/get-started/assets/modulith.png similarity index 100% rename from about/assets/modulith.png rename to get-started/assets/modulith.png diff --git a/about/assets/paradigm.drawio.svg b/get-started/assets/paradigm.drawio.svg similarity index 100% rename from about/assets/paradigm.drawio.svg rename to get-started/assets/paradigm.drawio.svg diff --git a/about/assets/passive-data.drawio.svg b/get-started/assets/passive-data.drawio.svg similarity index 100% rename from about/assets/passive-data.drawio.svg rename to get-started/assets/passive-data.drawio.svg diff --git a/about/assets/protocol-adapters.drawio.svg b/get-started/assets/protocol-adapters.drawio.svg similarity index 100% rename from about/assets/protocol-adapters.drawio.svg rename to get-started/assets/protocol-adapters.drawio.svg diff --git a/about/assets/service-classes.drawio.svg b/get-started/assets/service-classes.drawio.svg similarity index 100% rename from about/assets/service-classes.drawio.svg rename to get-started/assets/service-classes.drawio.svg diff --git a/about/assets/too-busy.md b/get-started/assets/too-busy.md similarity index 100% rename from about/assets/too-busy.md rename to get-started/assets/too-busy.md diff --git a/about/assets/too-busy.png b/get-started/assets/too-busy.png similarity index 100% rename from about/assets/too-busy.png rename to get-started/assets/too-busy.png diff --git a/get-started/attic/grow-as-you-go.-md b/get-started/attic/grow-as-you-go.-md deleted file mode 100644 index c664f03a03..0000000000 --- a/get-started/attic/grow-as-you-go.-md +++ /dev/null @@ -1,118 +0,0 @@ ---- -status: released -synopsis: Grow your project gradually and learn the next steps. ---- - -# Grow As You Go... - -As your project evolves, you would gradually add new features, for example as outlined in the sections below. The idea of *grow as you go* is to keep you focused on your application's domain and functionality, getting fast results in inner-loop development, starting with a minimalistic upfront setup and the simplest possible project structure, and add more features as you go, **only when you really need them**. - -[[toc]] - - -## Prepare for Production - -While we used SQLite in-memory databases and mocked authentication during development, we would use SAP HANA Cloud and a combination of App Router, IAS and/or XSUAA in production. We can quickly do so as follows: - -```sh -cds add hana,approuter,xsuaa -``` - -This adds respective packages and configuration to your project with the `[production]` profile. The content of your project, that is, models or code, doesn't change and doesn't have to be touched. The profile controls that these service variants are only used when in production, that is, when the app is deployed to the cloud. Locally you continue to develop in airplane mode. - - - -## Deploy to Cloud - -After we are prepared for production we can deploy to the cloud. In case of the SAP BTP, Cloud Foundry environment, this is commonly done using MTA tooling. The required `mta.yaml` can be added and fully generated with: - -```sh -cds add mta -``` - -[Learn more deploying your CAP application.](../guides/deployment/){.learn-more} - - - -## Add Multitenancy - -If you are creating a SaaS application you also need to add support for tenant subscriptions and tenant upgrades. When a tenant subscribes, new database containers have to be bootstrapped along with other resources, like message channels. CAP provides the so-called MTX services which do that automatically in a sidecar micro service. You can add all required packages and configurations by: - -```sh -cds add multitenancy -``` - -[Learn more about multitenancy.](../guides/multitenancy/){.learn-more} - -::: tip Intrinsic Cloud Qualities -As we see below, we can add qualities like multitenancy or extensibility late in time. This is made possible by the fact that there is no difference between a single-tenant and a multitenant application from content perspective: CAP does all the necessary things, for example for tenant isolation, behind the scenes. Similarly, CAP provides intrinsic extensibility, which means there's nothing you, as an app developer, need to do to enable this. -::: - - - -## Add Extensibility - -Extensibility is required to allow customers to adapt SaaS applications to their needs, for example, by adding extension fields and entities. CAP provides powerful intrinsic extensibility. Nothing needs to be changed or added to your content for that. Again, you just need to switch it on by: - -```sh -cds add extensibility -``` - -[Learn more about extensibility.](../guides/extensibility/){.learn-more} - - - -## Add CI/CD Pipelines - -Continuous Integration and Continuous Delivery is accomplished through test and deploy pipelines based on technologies like Jenkins, Travis, or GitHub Actions. You can have a headstart by: - -```sh -cds add pipeline -``` - - - -## Late-Cut Micro Services - -Micro services are deployment units, with main motivations being: separate scaling, different technologies, separate delivery cycles. - -Compared to *micro* services, CAP services are ***nano***: They constitute active functional entities of your application. Given their uniform, protocol-agnostic programmatic APIs, all services can be placed into one single process (that is, a monolith), or distributed across different micro services. Here's a simple example: - -::: code-group - -```js [ServiceA] -class ServiceA extends cds.Service { init(){ - const b = cds.connect.to('ServiceB') - this.on ('foo', ()=> b.send('bar')) -}} -``` - -```js [ServiceB] -class ServiceB extends cds.Service { init(){ - this.on ('*', console.log) -}} -``` - -::: - -If nothing else is configured, both services would be served in the same process. - -We can move them to separate ones by simply adding this config to the one hosting `ServiceA`: - -```json -{"cds":{ - "requires": { - "ServiceB": "rest" - } -}} -``` - -> Kind `rest` declares the service to be remote, consumed via REST protocol. - -This flexibility allows you to, again, focus on your domain, and avoid the efforts and costs of premature microservice design and overhead, especially in the early phases of development. - -::: tip Avoid Premature Micro-Services Design - -Experience shows that initial cuts of applications into micro services, quite frequently turn out to be problematic later on. Refrain from that and rather delay the cuts until you learned more about your application during development. - -::: diff --git a/about/bad-practices.md b/get-started/bad-practices.md similarity index 98% rename from about/bad-practices.md rename to get-started/bad-practices.md index 7d2b7a74f6..7085ead92d 100644 --- a/about/bad-practices.md +++ b/get-started/bad-practices.md @@ -169,7 +169,7 @@ See also... When writing these guides we frequently wonder whether it is worth the effort, because we likely have to understand and to accept that we're living in times of ... - Too long; didn't read (TL;DR) -- Too busy (→ an [anti pattern on it's own](assets/too-busy) \;-) +- Too busy (→ an [anti pattern on it's own](./assets/too-busy) \;-) - Not required, as we've AI now - I don't need to read that, as I already know (better) ... @@ -183,7 +183,7 @@ If against all odds you are indeed just reading these lines, please leave a trac And in case you are just reading these lines, because of these posts, we strongly encourage you to read these new guides, even if (you think) you already know CAP: -- *[Introduction – What is CAP?](./index) → Value Propositions* +- *[Introduction – What is CAP?](about) → Value Propositions* - *[Best Practices](best-practices) → Key Concepts & Rationales* - *[Anti Patterns](bad-practices) → Do's and **don'ts*** diff --git a/about/best-practices.md b/get-started/best-practices.md similarity index 89% rename from about/best-practices.md rename to get-started/best-practices.md index bb6e09eb84..33671ec0dc 100644 --- a/about/best-practices.md +++ b/get-started/best-practices.md @@ -18,19 +18,19 @@ Key Concepts & Rationales The CAP framework features a mix of proven and broadly adopted open-source and SAP technologies. The following figure depicts CAP's place and focus in a stack architecture. -![Vertically CAP services are placed between database and UI. Horizontally, CDS fuels CAP services and is closer to the core than, for example, toolkits and IDEs. Also shown horizontally is the integration into various platform services.](assets/architecture.drawio.svg){style="width:555px"} +![Vertically CAP services are placed between database and UI. Horizontally, CDS fuels CAP services and is closer to the core than, for example, toolkits and IDEs. Also shown horizontally is the integration into various platform services.](./assets/architecture.drawio.svg){style="width:555px"} The major building blocks are as follows: -- [**Core Data Services** (CDS)](../cds/) — CAP's universal modeling language, and the very backbone of everything; used to capture domain knowledge, generating database schemas, translating to and from various API languages, and most important: fueling generic runtimes to automatically serve request out of the box. +- [**Core Data Services** (CDS)](../cds/index.md) — CAP's universal modeling language, and the very backbone of everything; used to capture domain knowledge, generating database schemas, translating to and from various API languages, and most important: fueling generic runtimes to automatically serve request out of the box. -- [**Service Runtimes**](../guides/providing-services.md) for [Node.js](../node.js/) and [Java](../java/) — providing the core frameworks for services, generic providers to serve requests automatically, database support for SAP HANA, SQLite, and PostgreSQL, and protocol adaptors for REST, OData, GraphQL, ... +- [**Service Runtimes**](../guides/services/providing-services.md) for [Node.js](../node.js) and [Java](../java/index.md) — providing the core frameworks for services, generic providers to serve requests automatically, database support for SAP HANA, SQLite, and PostgreSQL, and protocol adaptors for REST, OData, GraphQL, ... -- [**Platform Integrations**](../plugins/) — providing CAP-level service interfaces (*'[Calesi](#the-calesi-pattern)'*) to cloud platform services in platform-agnostic ways, as much as possible. Some of these are provided out of the box, others as plugins. +- [**Platform Integrations**](../plugins/index.md) — providing CAP-level service interfaces (*'[Calesi](#the-calesi-pattern)'*) to cloud platform services in platform-agnostic ways, as much as possible. Some of these are provided out of the box, others as plugins. -- [**Command-Line Interface** (CLI)](../tools/) — the Swiss army knife on the tools and development kit front, complemented by integrations and support in [*SAP Build Code*](https://www.sap.com/germany/products/technology-platform/developer-tools.html), *Visual Studio Code*, *IntelliJ*, and *Eclipse*. +- [**Command-Line Interface** (CLI)](../tools/index.md) — the Swiss army knife on the tools and development kit front, complemented by integrations and support in [*SAP Build Code*](https://www.sap.com/germany/products/technology-platform/developer-tools.html), *Visual Studio Code*, *IntelliJ*, and *Eclipse*. -In addition, there's a fast-growing number of [plugins](../plugins/) contributed by open-source and inner-source [communities](/resources/#public-resources) that enhance CAP in various ways, and integrate with additional tools and environments; the [*Calesi* plugins](./index.md#the-calesi-effect) are among them. +In addition, there's a fast-growing number of [plugins](../plugins/index.md) contributed by open-source and inner-source [communities](/resources/index#public-resources) that enhance CAP in various ways, and integrate with additional tools and environments; the [*Calesi* plugins](about.md#the-calesi-effect) are among them. @@ -38,7 +38,7 @@ In addition, there's a fast-growing number of [plugins](../plugins/) contributed CDS models play a prevalent role in CAP applications. They're ultimately used to fuel generic runtimes to automatically serve requests, without any coding for custom implementations required. -![Models fuel Generic Services](assets/fueling-services.drawio.svg){style="width:444px"} +![Models fuel Generic Services](./assets/fueling-services.drawio.svg){style="width:444px"} CAP runtimes bootstrap *Generic Service Providers* for services defined in service models. They use the information at runtime to translate incoming requests from a querying protocol, such as OData, into SQL queries sent to the database. @@ -53,7 +53,7 @@ CAP uses the captured declarative information about data and services to **autom The following sections provide an overview of the core concepts and design principles of CAP. The following illustration is an attempt to show all concepts, how they relate to each other, and to introduce the terminology. -![Service models declare service interfaces, events, facades, and services. Service interfaces are published as APIs and are consumed by clients. Clients send requests which trigger events. Services are implemented in service providers, react on events, and act as facades. Facades are inferred to service interfaces and are views on domain models. Service providers are implemented through event handlers which handle events. Also, service providers read/write data which has been declared in domain models.](assets/key-concepts.drawio.svg){style="padding-right:50px"} +![Service models declare service interfaces, events, facades, and services. Service interfaces are published as APIs and are consumed by clients. Clients send requests which trigger events. Services are implemented in service providers, react on events, and act as facades. Facades are inferred to service interfaces and are views on domain models. Service providers are implemented through event handlers which handle events. Also, service providers read/write data which has been declared in domain models.](./assets/key-concepts.drawio.svg){style="padding-right:50px"} Start reading the diagram from the _Service Models_ bubble in the middle, then follow the arrows to the other concepts. We dive into each of these concepts in the following sections, starting with _Domain Models_, the other grey bubble in the previous illustration. @@ -62,9 +62,9 @@ We dive into each of these concepts in the following sections, starting with _Do ## Domain Models -[CDS](../cds/) is CAP's universal modeling language to declaratively capture knowledge about an application's domain. Data models capture the *static* aspects of a domain, using the widely used technique of [*entity-relationship modeling*](https://en.wikipedia.org/wiki/Entity–relationship_model#:~:text=An%20entity–relationship%20model%20(or,instances%20of%20those%20entity%20types).). For example, a simple domain model as illustrated in this ER diagram: +[CDS](../cds/index.md) is CAP's universal modeling language to declaratively capture knowledge about an application's domain. Data models capture the *static* aspects of a domain, using the widely used technique of [*entity-relationship modeling*](https://en.wikipedia.org/wiki/Entity–relationship_model#:~:text=An%20entity–relationship%20model%20(or,instances%20of%20those%20entity%20types).). For example, a simple domain model as illustrated in this ER diagram: -![bookshop-erm.drawio](assets/bookshop-erm.drawio.svg) +![bookshop-erm.drawio](./assets/bookshop-erm.drawio.svg) In a first iteration, it would look like this in CDS, with some fields added: @@ -94,9 +94,9 @@ entity Authors : cuid, managed { We use CDS's [*Conceptual Definition Language (CDL)*](../cds/cdl) as a *human-readable* way to express CDS models. Think of it as a *concise*, and more *expressive* derivate of [SQL DDL](https://wikipedia.org/wiki/Data_definition_language). -For processing at runtime CDS models are compiled into a *machine-readable* plain object notation, called *CSN*, which stands for [*Core Schema Notation (CSN)*](../cds/csn). For deployment to databases, CSN models are translated into native SQL DDL. Supported databases are [*SQLite*](../guides/databases-sqlite.md) and *[H2](../guides/databases-h2.md)* for development, and [_SAP HANA_](../guides/databases-hana.md) and [_PostgreSQL_](../guides/databases-postgres.md) for production. +For processing at runtime CDS models are compiled into a *machine-readable* plain object notation, called *CSN*, which stands for [*Core Schema Notation (CSN)*](../cds/csn). For deployment to databases, CSN models are translated into native SQL DDL. Supported databases are [*SQLite*](../guides/databases/sqlite.md) and *[H2](../guides/databases/h2.md)* for development, and [_SAP HANA_](../guides/databases/hana.md) and [_PostgreSQL_](../guides/databases/postgres.md) for production. -![cdl-csn.drawio](assets/cdl-csn.drawio.svg) +![cdl-csn.drawio](./assets/cdl-csn.drawio.svg) See also *[On the Nature of Models](../cds/models)* in the CDS reference docs. {.learn-more} @@ -206,7 +206,7 @@ Services are the most central concept in CAP when it comes to an application's b - Services are **agnostic** → *platforms and protocols*{.grey} - Services are **stateless** → *process passive data*{.grey} -![Key Design Principles](assets/paradigm.drawio.svg) +![Key Design Principles](./assets/paradigm.drawio.svg) :::tip Design principles and benefits The design principles - and adherence to them - are crucial for the key features & benefits. @@ -232,7 +232,7 @@ service BookshopService { Most frequently, services expose denormalized views of underlying domain models. They act as facades to an application's core domain data. The service interface results from the _inferred_ element structures of the given projections. -For example, if we take the [*bookshop* domain model](../get-started/in-a-nutshell#capture-domain-models) as a basis, we could define a service that exposes a flattened view on books with authors names as follows (note and click on the *⇒ Inferred Interface* tab): +For example, if we take the [*bookshop* domain model](./in-a-nutshell#capture-domain-models) as a basis, we could define a service that exposes a flattened view on books with authors names as follows (note and click on the *⇒ Inferred Interface* tab): ::: code-group @@ -260,7 +260,7 @@ service CatalogService { ::: ::: tip **Single-purposed Services** -The previous example follows the recommended best practice of a *[single-purposed service](../guides/providing-services#single-purposed-services)* which is specialized on *one* specific use case and group of users. Learn more about that in the [Providing Services](../guides/providing-services) guide. +The previous example follows the recommended best practice of a *[single-purposed service](../guides/services/providing-services#single-purposed-services)* which is specialized on *one* specific use case and group of users. Learn more about that in the [Providing Services](../guides/services/providing-services) guide. ::: ### Service Providers @@ -299,7 +299,7 @@ We complement our [*Service-centric Paradigm*](#services) by these additional ** Services react to events by registering *event handlers*. -![event-handlers.drawio](assets/event-handlers.drawio.svg) +![event-handlers.drawio](./assets/event-handlers.drawio.svg) This is an example of that in Node.js: @@ -359,7 +359,7 @@ Everyone/everything can register event handlers with a given service. This is no From an event handler's perspective, there's close to no difference between *synchronous requests* received from client like UIs, and *asynchronous event messages* coming in from respective message queues. The arrival of both, or either of which, at the service's interface is an event, to which we can subscribe to and react in the same uniform way, thus blurring the lines between the synchronous and the asynchronous world. -![events.drawio](assets/events.drawio.svg) +![events.drawio](./assets/events.drawio.svg) Handling synchronous requests vs asynchronous event messages: @@ -420,7 +420,7 @@ this.on ('READ','SomeEntity', req => {/* process req.query */}) All data processed and served by CAP services is *passive*, and represented by *plain simple* data structures as much as possible. In Node.js it's plain JavaScript record objects, in Java it's hash maps. This is of utmost importance for the reasons set out in the following sections. -![passive-data.drawio](assets/passive-data.drawio.svg) +![passive-data.drawio](./assets/passive-data.drawio.svg) ### Extensible Data @@ -560,7 +560,7 @@ let books = await SELECT.from (Books, b => { The CAP runtimes automatically translate incoming queries from the protocol-specific query language to CQN and then to native SQL, which is finally sent to underlying databases. The idea is to push down queries to where the data is, and execute them there with best query optimization and late materialization. -![cql-cqn.drawio](assets/cql-cqn.drawio.svg) +![cql-cqn.drawio](./assets/cql-cqn.drawio.svg) CAP queries are **first-class** objects with **late materialization**. They're captured in CQN, kept in standard program variables, passed along as method arguments, are transformed and combined with other queries, translated to other target query languages, and finally sent to their targets for execution. This process is similar to the role of functions as first-class objects in functional programming languages. @@ -570,7 +570,7 @@ CAP queries are **first-class** objects with **late materialization**. They're c -In [Introduction - What is CAP](../about/index) we learned that your domain models, as well as the services, and their implementations are **agnostic to protocols**, as well whether they're connected to and consume other services **locally or remotely**. In this chapter, we complement this by CAP-level integration of platform services and vendor-independent database support. +In [Introduction - What is CAP](about) we learned that your domain models, as well as the services, and their implementations are **agnostic to protocols**, as well whether they're connected to and consume other services **locally or remotely**. In this chapter, we complement this by CAP-level integration of platform services and vendor-independent database support. So, in total, and in effect, we learn: @@ -581,7 +581,7 @@ So, in total, and in effect, we learn: > - Agnostic to *Databases* > - Agnostic to *Platform Services* and low-level *Technologies* > -> **This is *the* key enabling quality** for several major benefits and value propositions of CAP, such as [*Fast Inner Loops*](./index#fast-inner-loops), [*Agnostic Services*](./index#agnostic-microservices), [*Late-cut Microservices*](./index.md#late-cut-microservices), and several more... +> **This is *the* key enabling quality** for several major benefits and value propositions of CAP, such as [*Fast Inner Loops*](about#fast-inner-loops), [*Agnostic Services*](about#agnostic-microservices), [*Late-cut Microservices*](about#late-cut-microservices), and several more... @@ -606,7 +606,7 @@ In a nutshell, this introduction to the objectives of hexagonal architecture tra > - Your *Application* (→ the inner hexagon) should stay ***agnostic*** to *"the outside"* > - Thereby allowing to replace *"the outside"* met in production by *mocked* variants > - To reduce complexity and speed up turnaround times at *development*, and in *tests* ->
→ [*'Airplane Mode' Development & Tests*](index.md#fast-inner-loops) +>
→ [*'Airplane Mode' Development & Tests*](about.md#fast-inner-loops) > > **In contrast to that**, if you (think you) are doing Hexagonal Architecture, but still find yourself trapped in a slow and expensive always-connected development experience, you might have missed a point... → the *Why* and *What*, not *How*. @@ -614,7 +614,7 @@ In a nutshell, this introduction to the objectives of hexagonal architecture tra #### CAP as an implementation of Hexagonal Architecture -CAP's [agnostic design principles](#agnostic-by-design) are very much in line with the goals of Hexagonal Architecture, and actually give you exactly what these are aiming for: as your applications greatly stay *agnostic* to protocols, and other low-level details, which could lock them in to one specific execution environment, they can be "*developed and tested in isolation*", which in fact is one of CAP's [key value propositions](./index#fast-inner-loops). Moreover, they become [*resilient* to disrupting changes](./index#minimized-lock-ins) in "the outside". +CAP's [agnostic design principles](#agnostic-by-design) are very much in line with the goals of Hexagonal Architecture, and actually give you exactly what these are aiming for: as your applications greatly stay *agnostic* to protocols, and other low-level details, which could lock them in to one specific execution environment, they can be "*developed and tested in isolation*", which in fact is one of CAP's [key value propositions](about#fast-inner-loops). Moreover, they become [*resilient* to disrupting changes](about#minimized-lock-ins) in "the outside". Not only do we address the very same goals, we can also identify several symmetries in the way we address and achieve these goals as follows: @@ -693,7 +693,7 @@ Behind the scenes, i.e., in the **outer hexagon** containing stuff, you as an ap In effect your service implementations stay agnostic to (wire) protocols, which allows us to exchange protocols, replace targets by mocks, do fast inner loop development in airplane mode, ... even change topologies from a monolith to micro services and vice versa late in time. -![protocol-adapters.drawio](assets/protocol-adapters.drawio.svg) +![protocol-adapters.drawio](./assets/protocol-adapters.drawio.svg) The inbound and outbound adapters (and the framework services) effectively provide your inner core with the ***ports*** to the outside world, which always provide the same, hence *agnostic* style of API (indicated by the green arrows used in the previous graphic), as already introduced in [Local /Remote](#local-remote). @@ -726,7 +726,7 @@ In the figure above we see boxes for *Framework Services* and *Database Services Overall, this is the class hierarchy implemented in the CAP runtimes: -![service-classes.drawio](assets/service-classes.drawio.svg) +![service-classes.drawio](./assets/service-classes.drawio.svg) @@ -861,7 +861,7 @@ proxy.after ('READ', '*', result => { 'Calesi' stands for CAP-level Service Interfaces, and refers to the increasing numbers of BTP platform services which offer a CAP-level client library. These drastically reduce the boilerplate code applications would have to write. -For example, adding attachments required thousands of lines of code, caring for the UI, streaming of large data, size limiting, malware scanning, multitenancy, and so forth... after we provided the [Attachments plugin](../plugins/#attachments), all an application needs to do now is to add that line to an entity: +For example, adding attachments required thousands of lines of code, caring for the UI, streaming of large data, size limiting, malware scanning, multitenancy, and so forth... after we provided the [Attachments plugin](../plugins/index.md#attachments), all an application needs to do now is to add that line to an entity: ```cds entity Foo { //... @@ -907,7 +907,7 @@ Whenever you have to integrate external services, you should follow the Calesi p > [!tip] > - > With that, you already fulfilled a few goals and guidelines from Hexagonal Architecture: The interface offered to your clients is agnostic and follows CAP's uniform service API style. Your consumers can use this mock implementation at development to speed up their [inner loop development](./#fast-inner-loops) phases. + > With that, you already fulfilled a few goals and guidelines from Hexagonal Architecture: The interface offered to your clients is agnostic and follows CAP's uniform service API style. Your consumers can use this mock implementation at development to speed up their [inner loop development](about#fast-inner-loops) phases. diff --git a/about/features.md b/get-started/features.md similarity index 57% rename from about/features.md rename to get-started/features.md index 085c482e3e..b5f13792bd 100644 --- a/about/features.md +++ b/get-started/features.md @@ -39,31 +39,31 @@ Following is an index of the features currently covered by CAP, with status and ### CLI & Tools Support -| CLI commands | | -|----------------------------------------------------------------------------|----------------------------| -| [Jump-start cds-based projects](../get-started/) | `cds init ` | -| [Add a feature to an existing project](../tools/cds-cli#cds-add) | `cds add ` | -| [Add models from external sources](../guides/using-services#local-mocking) | `cds import ` | -| [Compile cds models to different outputs](../node.js/cds-compile) | `cds compile ` | -| [Run your services in local server](../node.js/cds-serve) | `cds serve ` | -| [Run and restart on file changes](../get-started/in-a-nutshell) | `cds watch` | -| [Read-eval-event loop](../node.js/cds-env#cli) | `cds repl` | -| Inspect effective configuration | `cds env` | -| Prepare for deployment | `cds build` | -| Deploy to databases | `cds deploy` | -| Build and deploy your application to the cloud | `cds up` | -| Bind application to remote services | `cds bind` | -| Debug your application | `cds debug` | -| Login to multitenant SaaS application | `cds login ` | -| Upgrade SaaS tenant(s) to latest versions | `cds upgrade` | -| Logout from multitenant SaaS application | `cds logout` | -| Subscribe a tenant to a SaaS application | `cds subscribe ` | -| Unsubscribe a tenant from a SaaS application | `cds unsubscribe ` | -| Pull the base model for a SaaS extension | `cds pull` | -| Push a SaaS extension | `cds push` | - - -> Run `cds help ` to find details about an individual command. Use `cds version` to check the version that you've installed. To know what is the latest version, see the [Release Notes](../releases/) for CAP. +| CLI commands | | +|-------------------------------------------------------------------------------------|----------------------------| +| [Jump-start cds-based projects](./) | `cds init ` | +| [Add a feature to an existing project](../tools/cds-cli#cds-add) | `cds add ` | +| [Add models from external sources](../guides/services/using-services#local-mocking) | `cds import ` | +| [Compile cds models to different outputs](../node.js/cds-compile) | `cds compile ` | +| [Run your services in local server](../node.js/cds-serve) | `cds serve ` | +| [Run and restart on file changes](./in-a-nutshell) | `cds watch` | +| [Read-eval-event loop](../node.js/cds-env#cli) | `cds repl` | +| Inspect effective configuration | `cds env` | +| Prepare for deployment | `cds build` | +| Deploy to databases | `cds deploy` | +| Build and deploy your application to the cloud | `cds up` | +| Bind application to remote services | `cds bind` | +| Debug your application | `cds debug` | +| Login to multitenant SaaS application | `cds login ` | +| Upgrade SaaS tenant(s) to latest versions | `cds upgrade` | +| Logout from multitenant SaaS application | `cds logout` | +| Subscribe a tenant to a SaaS application | `cds subscribe ` | +| Unsubscribe a tenant from a SaaS application | `cds unsubscribe ` | +| Pull the base model for a SaaS extension | `cds pull` | +| Push a SaaS extension | `cds push` | + + +> Run `cds help ` to find details about an individual command. Use `cds version` to check the version that you've installed. To know what is the latest version, see the [Release Notes](/releases/index.md) for CAP.
@@ -79,43 +79,43 @@ Following is an index of the features currently covered by CAP, with status and ### CDS Language & Compiler -| | CDS | -|-------------------------------------------------------------------------------------------------------------------|:----:| -| [Entity-Relationship Modeling](../cds/cdl#entities) | | -| [Custom-defined Types](../cds/cdl#types) | | -| [Views / Projections ](../cds/cdl#views) | | -| [Associations & Compositions](../cds/cdl#associations) | | -| [Annotations](../cds/cdl#annotations) → [Common](../cds/annotations), [OData](../advanced/odata#annotations) | | -| [Aspects](../guides/domain-modeling#aspects) | | -| [Services...](../cds/cdl#services) | | -| [— w/ Redirected Associations](../cds/cdl#auto-redirect) | | -| [— w/ Auto-exposed Targets](../cds/cdl#auto-expose) | | -| [— w/ Actions & Functions](../cds/cdl#actions) | | -| [— w/ Events](../cds/cdl#events) | | -| [Managed Compositions of Aspects](../cds/cdl#managed-compositions) | | -| [Structured Elements](../cds/cdl#structured-types) | | -| Nested Projections | | -| [Calculated Elements](../cds/cdl#calculated-elements) | | -| Managed _n:m_ Associations | | -| Pluggable CDS Linter | | -| [CDS Linter](../tools/cds-lint/) | | +| | CDS | +|---------------------------------------------------------------------------------------------------------------------------|:----:| +| [Entity-Relationship Modeling](../cds/cdl#entities) | | +| [Custom-defined Types](../cds/cdl#types) | | +| [Views / Projections ](../cds/cdl#views) | | +| [Associations & Compositions](../cds/cdl#associations) | | +| [Annotations](../cds/cdl#annotations) → [Common](../cds/annotations), [OData](../guides//advanced/odata#annotations) | | +| [Aspects](../guides/domain/modeling#aspects) | | +| [Services...](../cds/cdl#services) | | +| [— w/ Redirected Associations](../cds/cdl#auto-redirect) | | +| [— w/ Auto-exposed Targets](../cds/cdl#auto-expose) | | +| [— w/ Actions & Functions](../cds/cdl#actions) | | +| [— w/ Events](../cds/cdl#events) | | +| [Managed Compositions of Aspects](../cds/cdl#managed-compositions) | | +| [Structured Elements](../cds/cdl#structured-types) | | +| Nested Projections | | +| [Calculated Elements](../cds/cdl#calculated-elements) | | +| Managed _n:m_ Associations | | +| Pluggable CDS Linter | | +| CDS Linter | | ### Providing Services -| Core Framework Features | CDS | Node.js | Java | -|--------------------------------------------------------------------------------------------|:-----:|:-------:|:----:| -| [Automatically Serving CRUD Requests](../guides/providing-services#generic-providers) | | | | -| [Deep-Read/Write Structured Documents](../guides/providing-services#deep-reads-and-writes) | | | | -| [Automatic Input Validation](../guides/providing-services#input-validation) | | | | -| [Auto-filled Primary Keys](../guides/domain-modeling#prefer-uuids-for-keys) | | | | -| [Implicit Paging](../guides/providing-services#implicit-pagination) | | | | -| [Implicit Sorting](../guides/providing-services#implicit-sorting) | | | | -| [Access Control](../guides/security/authorization) | | | | -| [Arrayed Elements](../cds/cdl#arrayed-types) | | | | -| [Streaming & Media Types](../guides/providing-services#serving-media-data) | | | | -| [Conflict Detection through _ETags_](../guides/providing-services#etag) | | | | -| [Authentication via JWT](../guides/security/authorization#prerequisite-authentication) | | | | -| [Mocked Authentication](../guides/security/authorization#prerequisite-authentication) | | | | +| Core Framework Features | CDS | Node.js | Java | +|-----------------------------------------------------------------------------------------------------|:-----:|:-------:|:----:| +| [Automatically Serving CRUD Requests](../guides/services/providing-services#generic-providers) | | | | +| [Deep-Read/Write Structured Documents](../guides/services/providing-services#deep-reads-and-writes) | | | | +| [Automatic Input Validation](../guides/services/providing-services#input-validation) | | | | +| [Auto-filled Primary Keys](../guides/domain/modeling#prefer-uuids-for-keys) | | | | +| [Implicit Paging](../guides/services/providing-services#implicit-pagination) | | | | +| [Implicit Sorting](../guides/services/providing-services#implicit-sorting) | | | | +| [Access Control](../guides/security/authorization) | | | | +| [Arrayed Elements](../cds/cdl#arrayed-types) | | | | +| [Streaming & Media Types](../guides/services/providing-services#serving-media-data) | | | | +| [Conflict Detection through _ETags_](../guides/services/providing-services#etag) | | | | +| [Authentication via JWT](../guides/security/authorization#prerequisite-authentication) | | | | +| [Mocked Authentication](../guides/security/authorization#prerequisite-authentication) | | | |
@@ -123,32 +123,32 @@ Following is an index of the features currently covered by CAP, with status and | Enterprise Features | CDS | Node.js | Java | |--------------------------------------------------------------------------------------------------------------------|:-----:|:-------:|:----:| | [Authorization](../guides/security/authorization) | | | | -| [Analytics in Fiori](../advanced/odata#data-aggregation) | | | | -| [Localization/i18n](../guides/i18n) | | | | -| [Localized Data](../guides/localized-data) | | | | -| [Temporal Data](../guides/temporal-data) | | | | -| [Managed Data](../guides/domain-modeling#managed-data) | | | | -| [Dynamic Extensibility](../guides/extensibility/) | | | | +| [Analytics in Fiori](../guides//advanced/odata#data-aggregation) | | | | +| [Localization/i18n](../guides/uis/i18n) | | | | +| [Localized Data](../guides/uis/localized-data) | | | | +| [Temporal Data](../guides/domain/temporal-data) | | | | +| [Managed Data](../guides/domain/modeling#managed-data) | | | | +| [Dynamic Extensibility](../guides/extensibility/index.md) | | | | | Monitoring / Logging [[Node.js](../node.js/cds-log)\|[Java](../java/operating-applications/observability#logging)] | | | | -| Audit Logging [[Node.js](../guides/data-privacy/audit-logging)\|[Java](../java/auditlog)] | | | | +| Audit Logging [[Node.js](../guides/security/dpp-audit-logging.md)\|[Java](../java/auditlog)] | | | |
-| Inbound Protocol Support | CDS 1 | Node.js | Java | -|-------------------------------------------------------|:----------------:|:-----------------:|:-----------------:| -| [REST/OpenAPI](/advanced/publishing-apis/openapi) | | | | -| [OData V2](../advanced/odata#v2-support) 2 | | 3 | | -| OData V4 | | | | -| OData V4 for APIs | | | | -| GraphQL4 | | 5 | 6 | +| Inbound Protocol Support | CDS 1 | Node.js | Java | +|--------------------------------------------------------------|:----------------:|:-----------------:|:-----------------:| +| [REST/OpenAPI](../guides/advanced/publishing-apis/openapi) | | | | +| [OData V2](../guides/advanced/odata#v2-support) 2 | | 3 | | +| OData V4 | | | | +| OData V4 for APIs | | | | +| GraphQL4 | | 5 | 6 |
> 1 Export CDS models to ...
> 2 To support customers with existing OData V2 UIs
-> 3 Through [V2 proxy](../advanced/odata#odata-v2-adapter-node)
+> 3 Through [V2 proxy](../guides/advanced/odata#odata-v2-adapter-node)
> 4 Could be a good case for 3rd-party contribution
> 5 For Node.js try out the [GraphQL Adapter](/plugins/#graphql-adapter)
> 6 For Java try out the provided [sample code](https://github.com/SAP-samples/cloud-cap-samples-java/commit/16dc5d9a1f103eb1336405ee601dc7004f70538f).
@@ -156,13 +156,13 @@ Following is an index of the features currently covered by CAP, with status and ### Consuming Services -| [Service Consumption APIs](../guides/using-services) | Node.js | Java | -|------------------------------------------------------|:-------:|:----:| -| Uniform Consumption APIs → Hexagonal Architecture | | | -| Dynamic Querying | | | -| Programmatic Delegation | | | -| Generic Delegation | | | -| Resilience (retry, circuit breaking, ...) | | | +| [Service Consumption APIs](../guides/services/using-services) | Node.js | Java | +|---------------------------------------------------------------|:-------:|:----:| +| Uniform Consumption APIs → Hexagonal Architecture | | | +| Dynamic Querying | | | +| Programmatic Delegation | | | +| Generic Delegation | | | +| Resilience (retry, circuit breaking, ...) | | |
@@ -177,17 +177,17 @@ Following is an index of the features currently covered by CAP, with status and > 1 Import API to CSN
> 2 Could be a good case for 3rd-party contribution
-[Learn more about supported features for consuming services.](../guides/using-services){.learn-more} +[Learn more about supported features for consuming services.](../guides/services/using-services){.learn-more} ### Events / Messaging -| | CDS | Node.js | Java | +| | CDS | Node.js | Java | |-------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----:|:-------------------------:|:-------------------------:| -| [Declared Events in CDS](../cds/cdl#events) | | | | -| Mock Broker (to speed up local dev) [[Node.js](../node.js/messaging#file-based)\|[Java](../java/messaging#local-testing)] | | | | -| [SAP Cloud Application Event Hub](../guides/messaging/event-broker) | |
plugin |
plugin | -| [SAP Event Mesh](../guides/messaging/event-mesh) | | | | -| Composite Messaging (routing by configuration) [[Node.js](../node.js/messaging#composite-messaging)\|[Java](../java/messaging#composite-messaging-service)] | | | | +| [Declared Events in CDS](../cds/cdl#events) | | | | +| Mock Broker (to speed up local dev) [[Node.js](../node.js/messaging#file-based)\|[Java](../java/messaging#local-testing)] | | | | +| [SAP Cloud Application Event Hub](../guides/events/event-hub) | |
plugin |
plugin | +| [SAP Event Mesh](../guides/events/event-mesh) | | | | +| Composite Messaging (routing by configuration) [[Node.js](../node.js/messaging#composite-messaging)\|[Java](../java/messaging#composite-messaging-service)] | | | | | Import AsyncAPI | | | | | Export AsyncAPI | | | | @@ -197,12 +197,12 @@ Following is an index of the features currently covered by CAP, with status and | | CDS/deploy | Node.js | Java | |-----------------------------------------------------------------|:----------:|:-------:|:----:| -| [SAP HANA](../guides/databases/index) | | | | +| [SAP HANA](../guides/databases/index) | | | | | [SAP HANA Cloud](../guides/databases/hana) | | | | | [PostgreSQL](../guides/databases/postgres) | | | | | [SQLite](../guides/databases/sqlite) 1 | | | | | [H2](../java/cqn-services/persistence-services#h2) 1 | | | | -| [MongoDB](../guides/databases/index) out of the box | | | | +| [MongoDB](../guides/databases/index) out of the box | | | | | Pluggable drivers architecture | | | | | Out-of-the-box support for other databases? | | | | @@ -211,8 +211,8 @@ Following is an index of the features currently covered by CAP, with status and > Note: You can already integrate your database of choice in a project or a contribution level. The last two are meant to further facilitate this by out-of-the-box features in CAP. - @@ -221,29 +221,29 @@ Following is an index of the features currently covered by CAP, with status and ### UIs/Frontend Support -| | CDS | Node.js | Java | -|---------------------------------------------------------------------------------------------------------|:----:|:-------:|:----:| -| [Serving Fiori UIs](../advanced/fiori) | | | | -| [Fiori Annotations in CDS](../advanced/fiori#fiori-annotations) | | | | -| [Advanced Value Help](../advanced/fiori#value-helps) | | | | -| [Draft Support](../advanced/fiori#draft-support) | | | | -| [Draft for Localized Data](../advanced/fiori#draft-for-localized-data) | | | | -| [Support for Fiori Analytics](../advanced/analytics) | | | | -| [Support for other UI technologies, for example Vue.js](../get-started/in-a-nutshell#vue) 1 | | | | +| | CDS | Node.js | Java | +|--------------------------------------------------------------------------------------------|:----:|:-------:|:----:| +| [Serving Fiori UIs](../guides/uis/fiori) | | | | +| [Fiori Annotations in CDS](../guides/uis/fiori#fiori-annotations) | | | | +| [Advanced Value Help](../guides/uis/fiori#value-helps) | | | | +| [Draft Support](../guides/uis/fiori#draft-support) | | | | +| [Draft for Localized Data](../guides/uis/fiori#draft-for-localized-data) | | | | +| [Support for Fiori Analytics](../guides/advanced/analytics) | | | | +| [Support for other UI technologies, for example Vue.js](./in-a-nutshell#vue) 1 | | | | > 1 through standard REST/AJAX ### Platform Support & Integration -| | Node.js | Java | -|--------------------------------------------------------------------------------|:-------:|:----:| -| [Deploy to/run on _SAP BTP, Cloud Foundry environment_](../guides/deployment/) | | | -| Deploy to/run on _Kubernetes_1 | | | -| [Deploy to/run on _Kyma_](../guides/deployment/to-kyma) | | | -| [SaaS on-/offboarding](../guides/multitenancy/) | | | -| [Multitenancy](../guides/multitenancy/) | | | -| [Health checks](/guides/deployment/health-checks) | | | +| | Node.js | Java | +|----------------------------------------------------------------------------------------|:-------:|:----:| +| [Deploy to/run on _SAP BTP, Cloud Foundry environment_](../guides/deploy/index.md) | | | +| Deploy to/run on _Kubernetes_1 | | | +| [Deploy to/run on _Kyma_](../guides/deploy/to-kyma) | | | +| [SaaS on-/offboarding](../guides/multitenancy/index.md) | | | +| [Multitenancy](../guides/multitenancy/index.md) | | | +| [Health checks](../guides/deploy/health-checks) | | | > 1 Available on plain Kubernetes level → see [blog post by Thomas Jung](https://blogs.sap.com/2019/07/16/running-sap-cloud-application-programming-model-with-connection-to-hana-on-kubernetes/)
@@ -252,7 +252,7 @@ Following is an index of the features currently covered by CAP, with status and | | | |------------------------------------------------------------------------------------------|:----:| -| [Tenant-Specific Extensions](../guides/extensibility/) | | +| [Tenant-Specific Extensions](../guides/extensibility/index.md) | | | [Adding Extension Fields](../guides/extensibility/customization#about-extension-models) | | | [Adding new Entities](../guides/extensibility/customization#about-extension-models) | | | [Adding new Relationships](../guides/extensibility/customization#about-extension-models) | | @@ -261,7 +261,7 @@ Following is an index of the features currently covered by CAP, with status and | [Extension Namespaces](../guides/extensibility/customization) | | | [Extension Templates](../guides/extensibility/customization#templates) | | | Custom Governance Checks | | -| [Generic Input Validations](../guides/providing-services#input-validation) | | +| [Generic Input Validations](../guides/services/providing-services#input-validation) | | | Declarative Constraints | | | Execute Sandboxed Code | | | Runtime API for In-App Extensibility | | diff --git a/get-started/in-a-nutshell.md b/get-started/in-a-nutshell.md index 313c9de4ed..ac8cbf54f6 100644 --- a/get-started/in-a-nutshell.md +++ b/get-started/in-a-nutshell.md @@ -43,7 +43,7 @@ Note: When comparing the code from the repo in GitHub to the snippets given in t -After you completed the [*Initial Setup*](./), you jumpstart a project as follows: +After you completed the [*Initial Setup*](index.md#setup), you jumpstart a project as follows: - Create a new project using `cds init` @@ -68,7 +68,7 @@ After you completed the [*Initial Setup*](./), you jumpstart a project as follow ```sh code bookshop ``` - [Assumes you activated the `code` command on macOS as documented](/tools/cds-editors#vscode) {.learn-more} + [Assumes you activated the `code` command on macOS as documented](../tools/cds-editors#vscode) {.learn-more} For Java development in VS Code you need to [install extensions](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack). {.learn-more .java} @@ -149,7 +149,7 @@ entity Genres : sap.common.CodeList { // [!code focus] ::: _Find this source also in the GitHub repos [for Node.js](https://github.com/capire/bookshop/tree/main/db/schema.cds), and [for Java](https://github.com/sap-samples/cloud-cap-samples-java/blob/main/db/books.cds)_{ .learn-more} -[Learn more about **Domain Modeling**.](../guides/domain-modeling){ .learn-more} +[Learn more about **Domain Modeling**.](../guides/domain/modeling){ .learn-more} [Learn more about **CDS Modeling Languages**.](../cds/){ .learn-more} @@ -248,7 +248,7 @@ service CatalogService @(path:'/browse') { // [!code focus] *Find this source also on GitHub [for Node.js](https://github.com/capire/bookshop/tree/main/srv), and [for Java](https://github.com/sap-samples/cloud-cap-samples-java/blob/main/srv)*{.learn-more} -[Learn more about **Defining Services**.](../guides/providing-services){ .learn-more} +[Learn more about **Defining Services**.](../guides/services/providing-services){ .learn-more} @@ -303,7 +303,7 @@ mvn com.sap.cds:cds-maven-plugin:add -Dfeature=SECURITY > > CAP-based services are full-fledged OData services out of the box. Without adding any provider implementation code, they translate OData request into corresponding database requests, and return the results as OData responses. -[Learn more about **Generic Providers**.](../guides/providing-services){.learn-more} +[Learn more about **Generic Providers**.](../guides/services/providing-services){.learn-more} @@ -441,8 +441,8 @@ Now that we have a connected, fully capable SQL database, filled with some initi > Note: Use [_authenticated_](../java/security#mock-users) to query the `admin` service. You don't need to enter a password. {.impl .java} -[Learn more about **Generic Providers**.](../guides/providing-services){.learn-more} -[Learn more about **OData's Query Options**.](../advanced/odata){.learn-more} +[Learn more about **Generic Providers**.](../guides/services/providing-services){.learn-more} +[Learn more about **OData's Query Options**.](../guides/advanced/odata){.learn-more} @@ -508,7 +508,7 @@ CAP provides out-of-the-box support for SAP Fiori UIs, for example, with respect ![Shows the famous bookshop catalog service in an SAP Fiori UI.](assets/fiori-app.png) -[Learn more about **Serving Fiori UIs**.](../advanced/fiori){.learn-more} +[Learn more about **Serving Fiori UIs**.](../guides/uis/fiori){.learn-more} ### Vue.js UIs {#vue .impl .node} @@ -781,7 +781,7 @@ Books book = persistenceService.run(byId).single(Books.class); ### Sample HTTP Requests -Test the implementation by submitting orders until you see the error messages. Create a file called _test.http_ and copy the request into it. Send requests from your IDE supporting `*.http` files with, for example, a [REST Client](/tools/cds-editors#add-useful-plugins). +Test the implementation by submitting orders until you see the error messages. Create a file called _test.http_ and copy the request into it. Send requests from your IDE supporting `*.http` files with, for example, a [REST Client](../tools/cds-editors#add-useful-plugins). @@ -828,10 +828,10 @@ Authorization: Basic authenticated: With this getting started guide we introduced many of the basics of CAP, such as: -- [Domain Modeling](../guides/domain-modeling) -- [Providing Services](../guides/providing-services) -- [Consuming Services](../guides/using-services) +- [Domain Modeling](../guides/domain/modeling) +- [Providing Services](../guides/services/providing-services) +- [Consuming Services](../guides/services/using-services) - [Using Databases](../guides/databases/index) -- [Serving UIs](../advanced/fiori) +- [Serving UIs](../guides/uis/fiori) Visit the [***Cookbook***](../guides/) for deep dive guides on these topics and more. Also see the reference documentations for [***CDS***](../cds/), as well as [***Node.js***](../node.js/) and [***Java***](../java/) Service SDKs and runtimes. diff --git a/get-started/index.md b/get-started/index.md index 6518c74bca..95c5361f75 100644 --- a/get-started/index.md +++ b/get-started/index.md @@ -152,10 +152,10 @@ After the [initial setup](#setup), we recommend continuing as follows while you | # | Guide | Description | |---|-------------------------------------------|--------------------------------------------------------| -| 1 | [Introduction – What is CAP?](../about/) | Learn about key benefits and value propositions. | +| 1 | [Introduction – What is CAP?](about) | Learn about key benefits and value propositions. | | 2 | [Bookshop by capire](in-a-nutshell) | Build your first CAP application within 4-44 minutes. | -| 3 | [Best Practices](../about/best-practices) | Key concepts & rationales to understand → *must read*. | -| 4 | [Anti Patterns](../about/bad-practices) | Misconceptions & bad practices to avoid → *must read*. | +| 3 | [Best Practices](best-practices) | Key concepts & rationales to understand → *must read*. | +| 4 | [Anti Patterns](bad-practices) | Misconceptions & bad practices to avoid → *must read*. | | 5 | [Learn More](learning-sources) | Find samples, videos, blogs, tutorials, and so on. | @@ -170,7 +170,7 @@ After these getting started-level introductions, you would continuously revisit | 7 | [CDS](../cds/)
[Java](../java/)
[Node.js](../node.js/)
[Tools](../tools/) | The reference docs for these respective areas. | | 8 | [Plugins](../plugins/) | Curated list of recommended Calesi plugins. | | 9 | [Releases](../releases/) | Your primary source to stay up to date. | -| 10 | [Resources](../resources/) | About support channels, community, ... | +| 10 | [Resources](/resources/) | About support channels, community, ... | This also reflects the overall structure of [this documentation](./learning-sources.md#this-documentation). diff --git a/get-started/learning-sources.md b/get-started/learning-sources.md index aec2e6e110..bb577ce1a3 100644 --- a/get-started/learning-sources.md +++ b/get-started/learning-sources.md @@ -19,7 +19,7 @@ It's organized as follows: | Section | Description | |------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------| -| [Getting Started](./)
[Cookbook](../guides/)
[Advanced](../advanced/) | **Task-oriented guides** that walk you through the most common tasks and advanced topics in CAP-based development. | +| [Getting Started](./)
[Cookbook](../guides/))
[Advanced](../guides/advanced/) | **Task-oriented guides** that walk you through the most common tasks and advanced topics in CAP-based development. | | [CDS](../cds/)
[Java](../java/)
[Node](../node.js/)
[Tools](../tools/) | **Reference docs** for respective areas. | | [Plugins](../plugins/) | **Curated list of plugins** that extend the capabilities of the CAP framework. | | [Releases](../releases/) | The place where you can stay up to date with the most recent information about new features and changes in CAP. | @@ -50,20 +50,20 @@ In here, we collected several interesting sample projects for you. Not all of th transition: opacity 0.2s; } main .vp-doc a.node img { - content: url(../assets/logos/nodejs.svg); + content: url(/logos/nodejs.svg); height:3em; display:inline; margin:0 0.2em; padding-top:11px; } main .vp-doc a.java img { - content: url(../assets/logos/java.svg); + content: url(/logos/java.svg); height:3em; display:inline; margin:0 0.2em; padding-bottom:5px; }main .vp-doc a.github img { - content: url(../assets/logos/github.svg); + content: url(/logos/github.svg); height:3em; display:inline; margin:0 0.2em; diff --git a/get-started/troubleshooting.md b/get-started/troubleshooting.md index d80cc5beda..3075b6ab1f 100644 --- a/get-started/troubleshooting.md +++ b/get-started/troubleshooting.md @@ -534,7 +534,7 @@ After you have successfully deployed these changes to all affected HDI (tenant) #### Deployment fails — _In USING declarations only main artifacts can be accessed, not sub artifacts of \_ This error occurs if all of the following applies: -+ You [added native SAP HANA objects](../advanced/hana#add-native-objects) to your CAP model. ++ You [added native SAP HANA objects](../guides/databases/hana-native#add-native-objects) to your CAP model. + You used deploy format `hdbcds`. + You didn't use the default naming mode `plain`. @@ -750,7 +750,7 @@ If you receive an error response `404 Not Found: Requested route ('') doe 1. The route really does not exist or is not bound to an app. You can check this in SAP BTP cockpit either in the app details view or in the list of routes in the Cloud Foundry space. 2. The app (or all app instances, in case of horizontal scale-out) failed the readiness check. - Please see [Health Checks](../guides/deployment/health-checks.md) and [Using Cloud Foundry health checks](https://docs.cloudfoundry.org/devguide/deploy-apps/healthchecks.html) for details on how to set up the check. + Please see [Health Checks](../guides/deploy/health-checks.md) and [Using Cloud Foundry health checks](https://docs.cloudfoundry.org/devguide/deploy-apps/healthchecks.html) for details on how to set up the check. ::: details Troubleshoot using the Cloud Foundry CLI @@ -772,7 +772,7 @@ If you receive an error response `404 Not Found: Requested route ('') doe For security reasons, the **index page is not served in production** by default in both [Node.js](../node.js/cds-server#toggle-generic-index-page) and [Java](../java/developing-applications/configuring#production-profile). If you try to access your backend URL, you will therefore see a _404 Cannot GET /_ error. -This also means you **cannot use the `/` path as a health status indicator**. See the [Health Checks guide](../guides/deployment/health-checks) for the correct paths. +This also means you **cannot use the `/` path as a health status indicator**. See the [Health Checks guide](../guides/deploy/health-checks) for the correct paths. Only if absolutely required and you understand the security implications to your application, you can enable this page in your deployment. diff --git a/advanced/analytics.md b/guides/advanced/analytics.md similarity index 100% rename from advanced/analytics.md rename to guides/advanced/analytics.md diff --git a/advanced/hybrid-testing.md b/guides/advanced/hybrid-testing.md similarity index 94% rename from advanced/hybrid-testing.md rename to guides/advanced/hybrid-testing.md index 93d549ffd6..f88fd4fc10 100644 --- a/advanced/hybrid-testing.md +++ b/guides/advanced/hybrid-testing.md @@ -30,7 +30,7 @@ If no service key for your service `` is specified, a `-key` is automa The service name `db` can be omitted as it represents the default value for the service kind `hana`. ::: -[Got errors? See our troubleshooting for connection issues with SAP HANA Cloud.](../get-started/troubleshooting#connection-failed-89008){.learn-more} +[Got errors? See our troubleshooting for connection issues with SAP HANA Cloud.](../../get-started/troubleshooting#connection-failed-89008){.learn-more} Output: @@ -477,7 +477,7 @@ This can be overwritten using the `--out` option. You can start arbitrary command line programs with your bindings. -The service bindings are [resolved from the cloud](#node) and [provided in the `VCAP_SERVICES` env variable](../node.js/cds-connect#provide-service-bindings) to the application. So it works with every application that can consume Cloud Foundry credentials. +The service bindings are [resolved from the cloud](#node) and [provided in the `VCAP_SERVICES` env variable](../../node.js/cds-connect#provide-service-bindings) to the application. So it works with every application that can consume Cloud Foundry credentials. ```sh cds bind --exec [--] @@ -505,12 +505,11 @@ Most of the following use cases are shown for Node.js, but can be easily adapted ### Destinations -Learn how to [connect to remote services locally](../guides/using-services#connect-to-remote-services-locally) using SAP BTP destinations. +Learn how to [connect to remote services locally](../../guides/services/using-services#connect-to-remote-services-locally) using SAP BTP destinations. ### Authentication and Authorization using XSUAA -Learn how to do hybrid testing using the XSUAA service in the [CAP Node.js authentication documentation](../node.js/authentication#xsuaa-setup). - +Learn how to do hybrid testing using the XSUAA service in the [CAP Node.js authentication documentation](../../node.js/authentication#xsuaa-setup). ### Integration Tests `cds bind` can be handy for testing with real cloud services in your CI/CD pipeline. @@ -542,9 +541,9 @@ npm run integration-test # [!code highlight] ``` Some comments to the previous snippet: -- With `CDS_ENV` you specify the [configuration profile](../node.js/cds-env#profiles) for the test, where you previously put the service binding configuration. -- [`cds env get requires`](../node.js/cds-env#services) prints the `requires` section of the configuration as a JSON string. Through `--resolve-bindings`, it includes the credentials of the service bindings from the cloud. To make the credentials available for all subsequent `cds` commands and the tests, the `requires` JSON string is put into the `cds_requires` script variable. -- In `npm run integration-test` any test code can run, for example, [`cds.test`](../node.js/cds-test). +- With `CDS_ENV` you specify the [configuration profile](../../node.js/cds-env#profiles) for the test, where you previously put the service binding configuration. +- [`cds env get requires`](../../node.js/cds-env#services) prints the `requires` section of the configuration as a JSON string. Through `--resolve-bindings`, it includes the credentials of the service bindings from the cloud. To make the credentials available for all subsequent `cds` commands and the tests, the `requires` JSON string is put into the `cds_requires` script variable. +- In `npm run integration-test` any test code can run, for example, [`cds.test`](../../node.js/cds-test). diff --git a/advanced/index.data.ts b/guides/advanced/index.data.ts similarity index 77% rename from advanced/index.data.ts rename to guides/advanced/index.data.ts index 752b300d02..cf8216d401 100644 --- a/advanced/index.data.ts +++ b/guides/advanced/index.data.ts @@ -1,13 +1,12 @@ import { basename } from 'node:path' import { createContentLoader } from 'vitepress' -import filter from '../.vitepress/theme/components/indexFilter.ts' +import filter from '../../.vitepress/theme/components/indexFilter.ts' const basePath = basename(__dirname) export default createContentLoader([ `**/${basePath}/*.md`, `**/${basePath}/publishing-apis/*.md`, `**/guides/security/*.md`, - `**/guides/data-privacy/*.md` ], { transform(rawData) { return filter(rawData, `/${basePath}/`) diff --git a/advanced/index.md b/guides/advanced/index.md similarity index 100% rename from advanced/index.md rename to guides/advanced/index.md diff --git a/advanced/odata.md b/guides/advanced/odata.md similarity index 97% rename from advanced/odata.md rename to guides/advanced/odata.md index 95006c42b2..4dda1eaceb 100644 --- a/advanced/odata.md +++ b/guides/advanced/odata.md @@ -43,7 +43,7 @@ OData is an OASIS standard that enhances plain REST with standardized system que | [Lambda Operators](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#_Toc31361024) | Boolean expressions on a collection | | (3) | | [Parameters Aliases](https://docs.oasis-open.org/odata/odata/v4.01/os/part1-protocol/odata-v4.01-os-part1-protocol.html#sec_ParameterAliases) | Replace literal value in URL with parameter alias | | (4) | -- (1) The elements to be searched are specified with the [`@cds.search` annotation](../guides/providing-services#searching-data). +- (1) The elements to be searched are specified with the [`@cds.search` annotation](../../guides/services/providing-services#searching-data). - (2) Node.js only supports a limited subset in `$select` query option. - (3) The navigation path identifying the collection can only contain one segment. - (4) Supported for key values and for parameters of functions only. @@ -104,27 +104,27 @@ Content-Type: application/json } ``` -The system executes PATCH requests with a delta payload using batch delete and [upsert](../java/working-with-cql/query-api#bulk-upsert) statements. These requests are more efficient than OData [batch requests](https://docs.oasis-open.org/odata/odata/v4.01/csprd02/part1-protocol/odata-v4.01-csprd02-part1-protocol.html#sec_BatchRequests). +The system executes PATCH requests with a delta payload using batch delete and [upsert](../../java/working-with-cql/query-api#bulk-upsert) statements. These requests are more efficient than OData [batch requests](https://docs.oasis-open.org/odata/odata/v4.01/csprd02/part1-protocol/odata-v4.01-csprd02-part1-protocol.html#sec_BatchRequests). -Use PATCH on entity collections to upload mass data using a dedicated service secured with [role-based authorization](../guides/security/authorization#requires). Enable delta updates explicitly by annotating the entity with +Use PATCH on entity collections to upload mass data using a dedicated service secured with [role-based authorization](../../guides/security/authorization#requires). Enable delta updates explicitly by annotating the entity with ```cds @Capabilities.UpdateRestrictions.DeltaUpdateSupported ``` Limitations: - * Conflict detection via [ETags](../guides/providing-services#etag) is not supported. - * The system bypasses [draft flow](../java/fiori-drafts#bypassing-draft-flow). `IsActiveEntity` must be `true`. - * The system ignores [draft locks](../java/fiori-drafts#draft-lock). Active entities are updated or deleted without canceling drafts. + * Conflict detection via [ETags](../../guides/services/providing-services#etag) is not supported. + * The system bypasses [draft flow](../../java/fiori-drafts#bypassing-draft-flow). `IsActiveEntity` must be `true`. + * The system ignores [draft locks](../../java/fiori-drafts#draft-lock). Active entities are updated or deleted without canceling drafts. * [Added and deleted links](https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_IteminaDeltaPayloadResponse) are not supported. * The header `Prefer=representation` is not yet supported. * The `continue-on-error` preference is not yet supported. - * The generic CAP handler support for [upsert](../java/working-with-cql/query-api#upsert) is limited, for example, audit logging is not supported. + * The generic CAP handler support for [upsert](../../java/working-with-cql/query-api#upsert) is limited, for example, audit logging is not supported. ## Mapping of CDS Types { #type-mapping} -The following table lists [CDS's built-in types](../cds/types) and their mapping to the OData EDM type system. +The following table lists [CDS's built-in types](../../cds/types) and their mapping to the OData EDM type system. | CDS Type | OData V4 | | -------------- | --------------------------------------- | @@ -168,7 +168,7 @@ Use the annotation `@odata.Type` first to override standard type mappings, then `@odata.Type` is effective on scalar CDS types only and the value must be a valid OData (EDM) primitive type for the specified protocol version. Unknown types and non-matching facets are silently ignored. No further value constraint checks are applied. -These annotations allow you to produce additional OData EDM types that are not available in the standard type mapping. Use this approach during the import of external service APIs. See [Using Services](../guides/using-services#external-service-api). +These annotations allow you to produce additional OData EDM types that are not available in the standard type mapping. Use this approach during the import of external service APIs. See [Using Services](../../guides/services/using-services#external-service-api). ```cds entity Foo { @@ -543,7 +543,7 @@ The second example is for a (record type) term in the [Communication vocabulary] ### Expressions { #expression-annotations } -If the value of an OData annotation is an [expression](../cds/cdl#expressions-as-annotation-values), +If the value of an OData annotation is an [expression](../../cds/cdl#expressions-as-annotation-values), the OData backend provides improved handling of references and automatic mapping from CDS expression syntax to OData expression syntax. @@ -784,7 +784,7 @@ service S { ``` If you need to access an element of an entity in an annotation for a bound action or function, -use a path that navigates via an explicitly defined [binding parameter](../cds/cdl#bound-actions). +use a path that navigates via an explicitly defined [binding parameter](../../cds/cdl#bound-actions). Example: ```cds @@ -1416,12 +1416,11 @@ Example: Read service metadata for `CatalogService`: ### Using OData V2 in Java Apps -In CAP Java, serving the OData V2 protocol is supported natively by the [CDS OData V2 Adapter](../java/migration#v2adapter). +In CAP Java, serving the OData V2 protocol is supported natively by the [CDS OData V2 Adapter](../../java/migration#v2adapter). ## Miscellaneous -### Omitting Elements from APIs - +### Omitting Elements From APIs Add annotation `@cds.api.ignore` to suppress unwanted entity fields (for example, foreign key fields) in APIs exposed from the CDS model, that is, OData or OpenAPI. For example: ```cds diff --git a/advanced/performance-modeling.md b/guides/advanced/performance-modeling.md similarity index 99% rename from advanced/performance-modeling.md rename to guides/advanced/performance-modeling.md index 9184116d95..cf7b7c9835 100644 --- a/advanced/performance-modeling.md +++ b/guides/advanced/performance-modeling.md @@ -278,8 +278,8 @@ Typical examples of calculated fields are: The following steps show you which option takes precedence over another. Use options one/two as the preferred way and three/four as fallback. 1. Do the calculation on the UI with help of field controls or dedicated custom controls. This applies to all kinds of **String concatenation** and **Formatting**. -2. Pre-calculate using CDS [on write](../cds/cdl#on-write) calculated fields. -3. Some calculations are dynamic in nature. If possible, use CDS [on read](../cds/cdl#on-read) calculated fields. +2. Pre-calculate using CDS [on write](../../cds/cdl#on-write) calculated fields. +3. Some calculations are dynamic in nature. If possible, use CDS [on read](../../cds/cdl#on-read) calculated fields. 4. As a **very last resort**, use event handlers on *read*. Hints: diff --git a/advanced/publishing-apis/assets/openapi-diagram.png b/guides/advanced/publishing-apis/assets/openapi-diagram.png similarity index 100% rename from advanced/publishing-apis/assets/openapi-diagram.png rename to guides/advanced/publishing-apis/assets/openapi-diagram.png diff --git a/advanced/publishing-apis/assets/swagger-link.png b/guides/advanced/publishing-apis/assets/swagger-link.png similarity index 100% rename from advanced/publishing-apis/assets/swagger-link.png rename to guides/advanced/publishing-apis/assets/swagger-link.png diff --git a/advanced/publishing-apis/asyncapi.md b/guides/advanced/publishing-apis/asyncapi.md similarity index 99% rename from advanced/publishing-apis/asyncapi.md rename to guides/advanced/publishing-apis/asyncapi.md index 94c7ac304d..c62e2a6f84 100644 --- a/advanced/publishing-apis/asyncapi.md +++ b/guides/advanced/publishing-apis/asyncapi.md @@ -34,7 +34,7 @@ If you want to generate one AsyncAPI document for all the services, you can use cds compile srv --service all -o docs --to asyncapi --asyncapi:merged ``` -[Learn how to programmatically convert the CSN file into an AsyncAPI Document](/node.js/cds-compile#to-asyncapi){.learn-more} +[Learn how to programmatically convert the CSN file into an AsyncAPI Document](../../../node.js/cds-compile#to-asyncapi){.learn-more} ## Presets { #presets} diff --git a/advanced/publishing-apis/index.data.ts b/guides/advanced/publishing-apis/index.data.ts similarity index 79% rename from advanced/publishing-apis/index.data.ts rename to guides/advanced/publishing-apis/index.data.ts index dfb30c43bd..44f6a78673 100644 --- a/advanced/publishing-apis/index.data.ts +++ b/guides/advanced/publishing-apis/index.data.ts @@ -1,6 +1,6 @@ import { basename } from 'node:path' import { createContentLoader } from 'vitepress' -import filter from '../../.vitepress/theme/components/indexFilter.ts' +import filter from '../../../.vitepress/theme/components/indexFilter.ts' const basePath = basename(__dirname) export default createContentLoader([ diff --git a/advanced/publishing-apis/index.md b/guides/advanced/publishing-apis/index.md similarity index 100% rename from advanced/publishing-apis/index.md rename to guides/advanced/publishing-apis/index.md diff --git a/advanced/publishing-apis/openapi.md b/guides/advanced/publishing-apis/openapi.md similarity index 100% rename from advanced/publishing-apis/openapi.md rename to guides/advanced/publishing-apis/openapi.md diff --git a/guides/assets/cookbook-overview.drawio.svg b/guides/cookbook.drawio.svg similarity index 100% rename from guides/assets/cookbook-overview.drawio.svg rename to guides/cookbook.drawio.svg diff --git a/guides/databases/h2.md b/guides/databases/h2.md index 9916a31e0e..b23c771ca2 100644 --- a/guides/databases/h2.md +++ b/guides/databases/h2.md @@ -36,7 +36,7 @@ CAP supports most of the major features on H2: * [Path Expressions](../../java/working-with-cql/query-api#path-expressions) & Filters * [Expands](../../java/working-with-cql/query-api#projections) -* [Localized Queries](../localized-data#read-operations) +* [Localized Queries](../uis/localized-data#read-operations) * [Comparison Operators](../../java/working-with-cql/query-api#comparison-operators) * [Predicate Functions](../../java/working-with-cql/query-api#predicate-functions) diff --git a/advanced/hana.md b/guides/databases/hana-native.md similarity index 98% rename from advanced/hana.md rename to guides/databases/hana-native.md index 7d0d9a36d6..3f8660d00f 100644 --- a/advanced/hana.md +++ b/guides/databases/hana-native.md @@ -2,7 +2,6 @@ label: Native SAP HANA synopsis: > Create or use an existing database object (table, view, table function, calculation view) and make use of it in your CDS model, for instance for exposing it in an OData service. -permalink: advanced/hana status: released --- @@ -63,7 +62,7 @@ We can distinguish two types of names - __plain__ and __quoted__. |Quoted | If the existing database name also contains lower-case characters or characters that can't occur in regular SQL identifiers, it's not possible to choose a name in the CDS model that matches this name. Let's call such a database name "quoted", as the only possibility to create such a name is to quote it in the CREATE statement. In this case, it's necessary to introduce an additional database object (a synonym or a view) on top of the existing database object and construct the facade entity for this newly introduced mapping object. -[Find here troubleshooting related to SAP HANA.](../get-started/troubleshooting#hana){.learn-more} +[Find here troubleshooting related to SAP HANA.](../../get-started/troubleshooting#hana){.learn-more} ### Tables and Views Without Parameters @@ -499,7 +498,7 @@ By composing `ItemSelection` instead of `Items`, it's possible to use this compo ## SAP HANA-Specific Data Types { #hana-types} -The following SAP HANA-specific data types are primarily intended for porting existing SAP HANA CDS models into the CAP domain if the old SAP HANA types must be preserved in the existing database tables. If you're starting from scratch, these types shouldn't be used but only the [predefined CDS types](../cds/types). +The following SAP HANA-specific data types are primarily intended for porting existing SAP HANA CDS models into the CAP domain if the old SAP HANA types must be preserved in the existing database tables. If you're starting from scratch, these types shouldn't be used but only the [predefined CDS types](../../cds/types). | CDS Type | Arguments / Remarks | SQL | OData (V4) | | --- | --- |--- | --- | @@ -526,7 +525,7 @@ By default, `cds` maps UUIDs to `nvarchar(36)` in SQL databases. The length is t > If the client side needs to work with the UUID, VARBINARY would lead to CAST operations or binary array handling at the client side. Here **NVARCHAR would be the data type of choice** to avoid handling binary arrays on the client side. ### Example Index -> [Download from here](assets/native-hana-samples.zip) a fully fledged model with even more examples. +> [Download from here](native-hana-samples.zip) a fully fledged model with even more examples. | What | Database Object | Mapping Object | Facade Entity | | --- | --- | --- | --- | diff --git a/guides/databases/hana.md b/guides/databases/hana.md index ca5c443a57..bda7c2cffb 100644 --- a/guides/databases/hana.md +++ b/guides/databases/hana.md @@ -53,7 +53,7 @@ The datasource for SAP HANA is then auto-configured based on available service b ::: tip Prefer `cds add` -... as documented in the [deployment guide](../deployment/to-cf#_1-sap-hana-database), which also does the equivalent of `npm add @cap-js/hana` but in addition cares for updating `mta.yaml` and other deployment resources. +... as documented in the [deployment guide](../deploy/to-cf#_1-sap-hana-database), which also does the equivalent of `npm add @cap-js/hana` but in addition cares for updating `mta.yaml` and other deployment resources. ::: @@ -164,7 +164,7 @@ In addition to the generated HDI artifacts, you can add custom ones by adding ac ## Deploying to SAP HANA -There are two ways to include SAP HANA in your setup: Use SAP HANA in a [hybrid mode](#cds-deploy-hana), meaning running your services locally and connecting to your database in the cloud, or running your [whole application](../deployment) on SAP Business Technology Platform. This is possible either in trial accounts or in productive accounts. +There are two ways to include SAP HANA in your setup: Use SAP HANA in a [hybrid mode](#cds-deploy-hana), meaning running your services locally and connecting to your database in the cloud, or running your [whole application](../deploy/index.md) on SAP Business Technology Platform. This is possible either in trial accounts or in productive accounts. To make the following configuration steps work, we assume that you've provisioned, set up, and started, for example, your SAP HANA Cloud instance in the [trial environment](https://cockpit.hanatrial.ondemand.com). If you need to prepare your SAP HANA first, see [How to Get an SAP HANA Cloud Instance for SAP Business Technology Platform, Cloud Foundry environment](../../get-started/troubleshooting#get-hana) to learn about your options. @@ -178,8 +178,8 @@ cds add hana --for hybrid This configures deployment for SAP HANA to use the _hdbtable_ and _hdbview_ formats. The configuration is added to a `[hybrid]` profile in your _package.json_. -::: tip The profile `hybrid` relates to [the hybrid testing](../../advanced/hybrid-testing) scenario -If you want to prepare your project for production and use the profile `production`, read the [Deploy to Cloud Foundry](../deployment) guide. +::: tip The profile `hybrid` relates to [the hybrid testing](../advanced/hybrid-testing) scenario +If you want to prepare your project for production and use the profile `production`, read the [Deploy to Cloud](../deploy/index.md) guide. ::: No further configuration is necessary for Node.js. For Java, see the [Use SAP HANA as the Database for a CAP Java Application](https://developers.sap.com/tutorials/cp-cap-java-hana-db.html#880cf07a-1788-4fda-b6dd-b5a6e5259625) tutorial for the rest of the configuration. @@ -190,7 +190,7 @@ No further configuration is necessary for Node.js. For Java, see the [Use SAP HA `cds deploy` lets you deploy _just the database parts_ of the project to an SAP HANA instance. The server application (the Node.js or Java part) still runs locally and connects to the remote database instance, allowing for fast development roundtrips. -Make sure that you're [logged in to Cloud Foundry](../deployment/to-cf#build-and-deploy) with the correct target, that is, org and space. +Make sure that you're [logged in to Cloud Foundry](../deploy/to-cf#build-and-deploy) with the correct target, that is, org and space. Then in the project root folder, just execute: ```sh @@ -216,7 +216,7 @@ cds deploy --to hana --profile hybrid Based on these profile settings, `cds deploy` executes `cds build` and also resolves additionally binding information. If a corresponding binding exists, its service name and service key are used. The development profile is used by default. [Learn more about the deployment using HDI.](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-developer-guide-for-cloud-foundry-multitarget-applications-sap-business-app-studio/sap-hdi-deployer?){.learn-more} -[Learn more about hybrid testing using service bindings to Cloud services.](../../advanced/hybrid-testing#run-with-service-bindings){.learn-more} +[Learn more about hybrid testing using service bindings to Cloud services.](../advanced/hybrid-testing#run-with-service-bindings){.learn-more} If you run into issues, see the [Troubleshooting](../../get-started/troubleshooting#hana) guide. @@ -244,7 +244,7 @@ This is equivalent to `cds deploy --to hana:myservice` and ignores information c ### Using `cf deploy` or `cf push` -See the [Deploying to Cloud Foundry](../deployment) guide for information about how to deploy the complete application to SAP Business Technology Platform, including a dedicated deployer application for the SAP HANA database. +See the [Deploying to Cloud](../deploy/index.md) guide for information about how to deploy the complete application to SAP Business Technology Platform, including a dedicated deployer application for the SAP HANA database. @@ -422,7 +422,7 @@ first_value(name order by price desc) Restriction: `COLLATE` isn't supported. -For other functions, where the syntax isn't supported by the compiler (for example, `xmltable(...)`), a native _.hdbview_ can be used. See [Using Native SAP HANA Artifacts](../../advanced/hana) for more details. +For other functions, where the syntax isn't supported by the compiler (for example, `xmltable(...)`), a native _.hdbview_ can be used. See [Using Native SAP HANA Artifacts](./hana-native) for more details. @@ -543,7 +543,7 @@ We recommend keeping _.hdbtable_ deployment for entities where you expect low da You can switch large-volume tables to _.hdbmigrationtable_ at any time, keeping in mind that the existing _.hdbtable_ design-time artifact needs to be undeployed. When choosing to use _.hdbmigrationtable_ for an entity with -[localized elements](../localized-data#localized-data) or [compositions of aspects](../../cds/cdl#managed-compositions), +[localized elements](../uis/localized-data#localized-data) or [compositions of aspects](../../cds/cdl#managed-compositions), the generated `.texts` and composition child entities are automatically handled via _.hdbmigrationtable_, too. If this is not desired, annotate these generated entities with `@cds.persistence.journal: false`. diff --git a/guides/databases/index.md b/guides/databases/index.md index 3edd9b5c23..7c11b4c78d 100644 --- a/guides/databases/index.md +++ b/guides/databases/index.md @@ -24,7 +24,7 @@ impl-variants: true ### Migrating to the `@cap-js/` Database Services? {.node} -With CDS 8, the [`@cap-js`](https://github.com/cap-js/cds-dbs) database services for SQLite, PostgreSQL, and SAP HANA are generally available. It's highly recommended to migrate. You can find instructions in the [migration guide](../databases/sqlite#migration). Although the guide is written in the context of the SQLite Service, the same hints apply to PostgreSQL and SAP HANA. +With CDS 8, the [`@cap-js`](https://github.com/cap-js/cds-dbs) database services for SQLite, PostgreSQL, and SAP HANA are generally available. It's highly recommended to migrate. You can find instructions in the [migration guide](./sqlite#migration). Although the guide is written in the context of the SQLite Service, the same hints apply to PostgreSQL and SAP HANA. ### Adding Database Packages {.node} @@ -32,9 +32,9 @@ Following are cds-plugin packages for CAP Node.js runtime that support the respe | Database | Package | Remarks | | ------------------------------ | ------------------------------------------------------------ | ---------------------------------- | -| **[SAP HANA Cloud](../databases/hana)** | [`@cap-js/hana`](https://www.npmjs.com/package/@cap-js/hana) | recommended for production | -| **[SQLite](../databases/sqlite)** | [`@cap-js/sqlite`](https://www.npmjs.com/package/@cap-js/sqlite) | recommended for development | -| **[PostgreSQL](../databases/postgres)** | [`@cap-js/postgres`](https://www.npmjs.com/package/@cap-js/postgres) | maintained by community + CAP team | +| **[SAP HANA Cloud](./hana)** | [`@cap-js/hana`](https://www.npmjs.com/package/@cap-js/hana) | recommended for production | +| **[SQLite](./sqlite)** | [`@cap-js/sqlite`](https://www.npmjs.com/package/@cap-js/sqlite) | recommended for development | +| **[PostgreSQL](./postgres)** | [`@cap-js/postgres`](https://www.npmjs.com/package/@cap-js/postgres) | maintained by community + CAP team | > Follow the preceding links to find specific information for each. @@ -56,7 +56,7 @@ npm add @cap-js/hana ::: details Prefer `cds add hana` ... -... which also does the equivalent of `npm add @cap-js/hana` but in addition cares for updating `mta.yaml` and other deployment resources as documented in the [deployment guide](../deployment/to-cf#_1-sap-hana-database). +... which also does the equivalent of `npm add @cap-js/hana` but in addition cares for updating `mta.yaml` and other deployment resources as documented in the [deployment guide](../deploy/to-cf#_1-sap-hana-database). ::: @@ -153,10 +153,10 @@ Database support is enabled by adding a Maven dependency to the JDBC driver, as | Database | JDBC Driver | Remarks | | ------------------------------ | ------------------------------------------------------------ | ---------------------------------- | -| **[SAP HANA Cloud](../databases/hana)** | `com.sap.cloud.db.jdbc:ngdbc` | Recommended for productive use | -| **[H2](h2-h2)** | `com.h2database:h2` | Recommended for development and CI | -| **[SQLite](../databases/sqlite)** | `org.xerial:sqlite-jdbc` | Supported for development and CI
Recommended for local MTX | -| **[PostgreSQL](../databases/postgres)** | `org.postgresql:postgresql` | Supported for productive use | +| **[SAP HANA Cloud](./hana)** | `com.sap.cloud.db.jdbc:ngdbc` | Recommended for productive use | +| **[H2](./h2)** | `com.h2database:h2` | Recommended for development and CI | +| **[SQLite](./sqlite)** | `org.xerial:sqlite-jdbc` | Supported for development and CI
Recommended for local MTX | +| **[PostgreSQL](./postgres)** | `org.postgresql:postgresql` | Supported for productive use | [Learn more about supported databases in CAP Java and their configuration](../../java/cqn-services/persistence-services#database-support){ .learn-more} @@ -231,7 +231,7 @@ ID,title,descr ::: danger On SAP HANA, only use CSV files for _configuration data_ that can't be changed by application users. -→ See [CSV data gets overridden in the SAP HANA guide for details](../databases/hana#csv-data-gets-overridden). +→ See [CSV data gets overridden in the SAP HANA guide for details](./hana#csv-data-gets-overridden). ::: ### Use `cds add data` @@ -306,7 +306,7 @@ cds: -Most queries to databases are constructed and executed from [generic event handlers of CRUD requests](../providing-services#serving-crud), so quite frequently there's nothing to do. The following is for the remaining cases where you have to provide custom logic, and as part of it execute database queries. +Most queries to databases are constructed and executed from [generic event handlers of CRUD requests](../services/providing-services#serving-crud), so quite frequently there's nothing to do. The following is for the remaining cases where you have to provide custom logic, and as part of it execute database queries. @@ -669,7 +669,7 @@ entity Bar as select from Foo; //> The SQL view will be generated ::: details On SAP HANA ... -If the respective entity is a user-defined function or a calculation view, one of the annotations `@cds.persistence.udf` or `@cds.persistence.calcview` also needs to be assigned. See [Calculated Views and User-Defined Functions](../../advanced/hana#calculated-views-and-user-defined-functions) for more details. +If the respective entity is a user-defined function or a calculation view, one of the annotations `@cds.persistence.udf` or `@cds.persistence.calcview` also needs to be assigned. See [Calculated Views and User-Defined Functions](./hana-native#calculated-views-and-user-defined-functions) for more details. ::: @@ -735,7 +735,7 @@ The following rules apply: * Both `@sql.prepend` and `@sql.append` are disallowed in SaaS extension projects. -If you use native database clauses in combination with `@cds.persistence.journal`, see [Schema Evolution Support of Native Database Clauses](../databases/hana#schema-evolution-native-db-clauses). +If you use native database clauses in combination with `@cds.persistence.journal`, see [Schema Evolution Support of Native Database Clauses](./hana#schema-evolution-native-db-clauses). @@ -772,7 +772,7 @@ Find here a collection of resources on selected databases and their reference do * [H2 Keywords/Reserved Words](https://www.h2database.com/html/advanced.html#keywords) * [PostgreSQL SQL Key Words](https://www.postgresql.org/docs/current/sql-keywords-appendix.html) -[There are also reserved words related to SAP Fiori.](../../advanced/fiori#reserved-words){.learn-more} +[There are also reserved words related to SAP Fiori.](../uis/fiori#reserved-words){.learn-more} @@ -884,7 +884,7 @@ entity Genres { ``` As a special case, a referential constraint with `delete cascade` is also generated -for the text table of a [localized entity](../localized-data#localized-data), +for the text table of a [localized entity](../uis/localized-data#localized-data), although no managed association is present in the `texts` entity. Add a localized element to entity `Books` from the previous example: @@ -1075,7 +1075,7 @@ In addition to the OData and SAP HANA standard functions, the **CAP runtime** pr - `search(x, y)` Checks whether `y` is contained in any element of `x` (fuzzy matching may apply). - See [Searching Data](../providing-services#searching-data) for more details. + See [Searching Data](../services/providing-services#searching-data) for more details. - `session_context()` Utilizes standard variable names to maintain session context. diff --git a/advanced/assets/native-hana-samples.zip b/guides/databases/native-hana-samples.zip similarity index 100% rename from advanced/assets/native-hana-samples.zip rename to guides/databases/native-hana-samples.zip diff --git a/guides/databases/postgres.md b/guides/databases/postgres.md index 738d5a1d56..fb08312e78 100644 --- a/guides/databases/postgres.md +++ b/guides/databases/postgres.md @@ -7,7 +7,7 @@ impl-variants: true
-This guide focuses on the new PostgreSQL Service provided through *[@cap-js/postgres](https://www.npmjs.com/package/@cap-js/postgres)*, which is based on the same new database services architecture as the new [SQLite Service](sqliteite). This architecture brings significantly enhanced feature sets and feature parity, as documented in the [*Features* section of the SQLite guidsqlite#featuresatures). +This guide focuses on the new PostgreSQL Service provided through *[@cap-js/postgres](https://www.npmjs.com/package/@cap-js/postgres)*, which is based on the same new database services architecture as the new [SQLite Service](./sqlite). This architecture brings significantly enhanced feature sets and feature parity, as documented in the [*Features* section of the SQLite guidsqlite#featuresatures). *Learn about migrating from the former `cds-pg` in the [Migration](#migration) chapter.*{.learn-more} @@ -352,7 +352,7 @@ cds add postgres ### Deploy -You can package and deploy that application, for example using [MTA-based deployment](../deployment/to-cf#add-mta-yaml). +You can package and deploy that application, for example using [MTA-based deployment](../deploy/to-cf#add-mta-yaml). ## Automatic Schema Evolution { #schema-evolution } @@ -651,6 +651,6 @@ When you have a SaaS application, upgrade all your tenants using the [deployer a ::: warning -[Multitenancy](../multitenancy) and [extensibility](../extensibility) aren't yet supported on PostgreSQL. +[Multitenancy](../multitenancy//index.md) and [extensibility](../extensibility/index.md) aren't yet supported on PostgreSQL. ::: diff --git a/guides/databases/sqlite.md b/guides/databases/sqlite.md index 4a487a7185..1172b64ff1 100644 --- a/guides/databases/sqlite.md +++ b/guides/databases/sqlite.md @@ -9,9 +9,8 @@ CAP provides extensive support for [SQLite](https://www.sqlite.org/index.html),
-::: tip New SQLite Service -This guide focuses on the new SQLite Service provided through *[@cap-js/sqlite](https://www.npmjs.com/package/@cap-js/sqlite)*, which has many advantages over the former one, as documented in the [*Features*](#features) section. To migrate from the old service, find instructions in the [*Migration*](#migration) section. -::: +> [!TIP] New SQLite Service +> This guide focuses on the new SQLite Service provided through *[@cap-js/sqlite](https://www.npmjs.com/package/@cap-js/sqlite)*, which has many advantages over the former one, as documented in the [*Features*](#features) section. To migrate from the old service, find instructions in the [*Migration*](#migration) section.
@@ -107,7 +106,7 @@ Configure the build to create an initial _schema.sql_ file for SQLite using `cds ::: -[Learn more about creating an initial database schema](/java/cqn-services/persistence-services#initial-database-schema-1){.learn-more} +[Learn more about creating an initial database schema](../../java/cqn-services/persistence-services#initial-database-schema-1){.learn-more}
@@ -299,7 +298,7 @@ CAP supports most of the major features on SQLite: * [Path Expressions](../../java/working-with-cql/query-api#path-expressions) & Filters * [Expands](../../java/working-with-cql/query-api#projections) -* [Localized Queries](../localized-data#read-operations) +* [Localized Queries](../uis/localized-data#read-operations) * [Comparison Operators](../../java/working-with-cql/query-api#comparison-operators) * [Predicate Functions](../../java/working-with-cql/query-api#predicate-functions) diff --git a/guides/deployment/assets/apps-cockpit.png b/guides/deploy/assets/apps-cockpit.png similarity index 100% rename from guides/deployment/assets/apps-cockpit.png rename to guides/deploy/assets/apps-cockpit.png diff --git a/guides/deployment/assets/deploy-kyma.drawio.svg b/guides/deploy/assets/deploy-kyma.drawio.svg similarity index 100% rename from guides/deployment/assets/deploy-kyma.drawio.svg rename to guides/deploy/assets/deploy-kyma.drawio.svg diff --git a/guides/deployment/assets/deploy-setps.drawio.svg b/guides/deploy/assets/deploy-setps.drawio.svg similarity index 100% rename from guides/deployment/assets/deploy-setps.drawio.svg rename to guides/deploy/assets/deploy-setps.drawio.svg diff --git a/guides/deployment/assets/github-deployment.png b/guides/deploy/assets/github-deployment.png similarity index 100% rename from guides/deployment/assets/github-deployment.png rename to guides/deploy/assets/github-deployment.png diff --git a/guides/deployment/assets/github-release.png b/guides/deploy/assets/github-release.png similarity index 100% rename from guides/deployment/assets/github-release.png rename to guides/deploy/assets/github-release.png diff --git a/guides/deployment/assets/microservices/app-instances.excalidraw.svg b/guides/deploy/assets/microservices/app-instances.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/app-instances.excalidraw.svg rename to guides/deploy/assets/microservices/app-instances.excalidraw.svg diff --git a/guides/deployment/assets/microservices/bookstore.excalidraw.svg b/guides/deploy/assets/microservices/bookstore.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/bookstore.excalidraw.svg rename to guides/deploy/assets/microservices/bookstore.excalidraw.svg diff --git a/guides/deployment/assets/microservices/complex.excalidraw.svg b/guides/deploy/assets/microservices/complex.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/complex.excalidraw.svg rename to guides/deploy/assets/microservices/complex.excalidraw.svg diff --git a/guides/deployment/assets/microservices/late-cut.excalidraw.svg b/guides/deploy/assets/microservices/late-cut.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/late-cut.excalidraw.svg rename to guides/deploy/assets/microservices/late-cut.excalidraw.svg diff --git a/guides/deployment/assets/microservices/modules.excalidraw.svg b/guides/deploy/assets/microservices/modules.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/modules.excalidraw.svg rename to guides/deploy/assets/microservices/modules.excalidraw.svg diff --git a/guides/deployment/assets/microservices/modulith.excalidraw.svg b/guides/deploy/assets/microservices/modulith.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/modulith.excalidraw.svg rename to guides/deploy/assets/microservices/modulith.excalidraw.svg diff --git a/guides/deployment/assets/microservices/monolith.excalidraw.svg b/guides/deploy/assets/microservices/monolith.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/monolith.excalidraw.svg rename to guides/deploy/assets/microservices/monolith.excalidraw.svg diff --git a/guides/deployment/assets/microservices/multiple-apps.excalidraw.svg b/guides/deploy/assets/microservices/multiple-apps.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/multiple-apps.excalidraw.svg rename to guides/deploy/assets/microservices/multiple-apps.excalidraw.svg diff --git a/guides/deployment/assets/microservices/multiple-dbs.excalidraw.svg b/guides/deploy/assets/microservices/multiple-dbs.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/multiple-dbs.excalidraw.svg rename to guides/deploy/assets/microservices/multiple-dbs.excalidraw.svg diff --git a/guides/deployment/assets/microservices/multiple-deployment-units.excalidraw.svg b/guides/deploy/assets/microservices/multiple-deployment-units.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/multiple-deployment-units.excalidraw.svg rename to guides/deploy/assets/microservices/multiple-deployment-units.excalidraw.svg diff --git a/guides/deployment/assets/microservices/true-microservices-full.excalidraw.svg b/guides/deploy/assets/microservices/true-microservices-full.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/true-microservices-full.excalidraw.svg rename to guides/deploy/assets/microservices/true-microservices-full.excalidraw.svg diff --git a/guides/deployment/assets/microservices/true-microservices.excalidraw.svg b/guides/deploy/assets/microservices/true-microservices.excalidraw.svg similarity index 100% rename from guides/deployment/assets/microservices/true-microservices.excalidraw.svg rename to guides/deploy/assets/microservices/true-microservices.excalidraw.svg diff --git a/guides/deployment/assets/overview.drawio.svg b/guides/deploy/assets/overview.drawio.svg similarity index 100% rename from guides/deployment/assets/overview.drawio.svg rename to guides/deploy/assets/overview.drawio.svg diff --git a/guides/deployment/custom-builds.md b/guides/deploy/build.md similarity index 55% rename from guides/deployment/custom-builds.md rename to guides/deploy/build.md index 771347dd7f..0ba983b32c 100644 --- a/guides/deployment/custom-builds.md +++ b/guides/deploy/build.md @@ -1,11 +1,6 @@ --- -breadcrumbs: - - Cookbook - - Deployment - - Custom Builds synopsis: > The guide provides an overview of custom build processes for CAP projects, explaining how to tailor the standard build process to specific project requirements. -# layout: cookbook status: released --- @@ -13,74 +8,70 @@ status: released [[toc]] -## Build Configurations {#build-config} + +## Automatic Build Tasks `cds build` runs _build tasks_ on your project folders to prepare them for deployment. Build tasks compile _source files_ (typically CDS sources) and create required artifacts, for example, EDMX files or SAP HANA design-time artifacts. +The following build tasks represent the default configuration dynamically determined by `cds build` for a minimal Node.js project when executing `cds build --production` or `cds build --profile production` : + +::: code-group +```json [package.json] +{ "cds": { + "build": { + "target": "gen", + "tasks": [ + { "for": "hana", "src": "db", "options": {"model": ["db","srv"] } }, + { "for": "nodejs", "src": "srv", "options": {"model": ["db","srv"] } } + ] + } +}} +``` +::: + Build tasks are derived from the CDS configuration and project context. By default, CDS models are resolved from these sources: -- _db/_, _srv/_, _app/_ — [default root folders](../../get-started/#project-structure) +- _db/_, _srv/_, _app/_ — [default root folders](../../get-started/index.md#project-structure) - _fts/_ and its subfolders when using [feature toggles](../extensibility/feature-toggles#enable-feature-toggles) - CDS model folders and files defined by [required services](../../node.js/cds-env#services), including built-in ones - Examples: [persistent queue](../../node.js/queue#persistent-queue) or [MTX-related services](../multitenancy/mtxs#mtx-services-reference) - Explicit `src` folder configured in the build task + Feature toggle folders and required built-in service models will also be added if user-defined models have been configured as a [`model` option](#build-task-properties) in your build tasks. [Learn more about `cds.resolve`](../../node.js/cds-compile#cds-resolve){.learn-more} -::: tip If custom build tasks are configured, those properties have precedence -For example, you want to configure the _src_ folder and add the default models. To achieve this, do not define the _model_ option in your build task: - -::: code-group - -```jsonc [package.json] -{ - "build": { - "target": "gen", - "tasks": [ - { - "for": "nodejs", - "src": "srv", - "options": { /* no "model" entry here */ } - } - ] - } -} -``` - - - This way, the model paths will still be dynamically determined, but the _src_ folder is taken from the build task configuration. You still benefit from the automatic determination of models – for example when adding a new external services or when CAP is changing any built-in service defaults. +::: tip The executed build tasks are logged to the command line +You can use them as a blue print – copy & paste them into your CDS configuration and adapt them to your needs. ::: -To control which tasks `cds build` executes, you can add them as part of your [project configuration](../../node.js/cds-env#project-settings) in _package.json_ or _.cdsrc.json_, as outlined [in the following chapter](#build-task-properties). -## Properties -### Build Task {#build-task-properties} +## Custom Build Tasks {#build-config} -The following build tasks represent the default configuration dynamically determined by `cds build` for a minimal Node.js project when executing `cds build --production` or `cds build --profile production` : +If custom build tasks are configured, those properties have precedence +For example, you want to configure the _src_ folder and add the default models. To achieve this, do not define the _model_ option in your build task: ::: code-group - -```json [package.json] -{ +```jsonc [package.json] +{ "cds": { "build": { - "target": "gen", - "tasks": [ - { "for": "hana", "src": "db", "options": {"model": ["db","srv"] } }, - { "for": "nodejs", "src": "srv", "options": {"model": ["db","srv"] } } + "target": "gen", + "tasks": [ + { "for": "nodejs", "src": "srv" } ] } -} +}} ``` - ::: -::: tip The executed build tasks are logged to the command line -You can use them as a blue print – copy & paste them into your CDS configuration and adapt them to your needs. -::: + This way, the model paths will still be dynamically determined, but the _src_ folder is taken from the build task configuration. You still benefit from the automatic determination of models – for example when adding a new external services or when CAP is changing any built-in service defaults. +To control which tasks `cds build` executes, you can add them as part of your [project configuration](../../node.js/cds-env#project-settings) in _package.json_ or _.cdsrc.json_, as outlined [in the following chapter](#build-task-properties). + + +## Build Task Types The `for` property defines the executed build task type creating its part of the deployment layout. Currently supported types are: @@ -88,7 +79,7 @@ The `for` property defines the executed build task type creating its part of the th { min-width: 160px; } -| Property | Description | +| Type | Description | |------------------|-----------------------------------------------------------------------------| | `hana` | SAP HANA Development Infrastructure (HDI) artifacts

[Learn more about **configuring SAP HANA**](../databases/hana#configure-hana){.learn-more} | | `nodejs` | Node.js applications | @@ -99,7 +90,9 @@ th { min-width: 160px; } Additional types may be supported by build plugin contributions. -#### Customization + +## Build Task Properties + Build tasks can be customized using the following properties: @@ -112,12 +105,15 @@ Build tasks can be customized using the following properties: **Note:** Alternatively you can execute build tasks and pass the described arguments to the command line. See also `cds build --help` for further details. -### Build Target Folder {#build-target-folder} -If you want to change the default target folder, use the cds.build.target=path/to/my/folder property. It is resolved based on the root folder of your project. +## Build Target Folder {#build-target-folder} + +If you want to change the default target folder, use the cds.build.target=path/to/my/folder property. It is resolved based on the root folder of your project. + + #### Node.js Node.js projects use the folder _./gen_ below the project root as build target folder by default.
@@ -178,171 +174,3 @@ Packaging of the tarball content is based on the rules of the [`npm pack`](https Java projects use the project's root folder _./_ as build target folder by default.
This causes `cds build` to create the build output below the individual source folders. For example, _db/src/gen_ contains the build output for the _db/_ folder. No source files are copied to _db/src/gen_ because they're assumed to be deployed from their original location, the _db/_ folder itself. - -## Implement a Build Plugin {#custom-build-plugins} - -CDS already offers build plugins to create deployment layouts for the most use cases. However, you will find cases where these plugins are not enough and you have to develop your own. This section shows how such a build plugin can be implemented and how it can be used in projects. - -Build plugins are run by `cds build` to generate the required deployment artifacts. Build tasks hold the actual project specific configuration. The task's `for` property value has to match the build plugin ID. - -The following description uses the [postgres build plugin](https://github.com/cap-js/cds-dbs/blob/55e511471743c0445d41e8297f5530abe167a270/postgres/cds-plugin.js#L9-L48) as reference implementation. It combines runtime and design-time integration in a single plugin `@cap-js/postgres`. - -### Add Build Logic - -A build plugin is a Node.js module complying to the [CDS plugin architecture](../../node.js/cds-plugins). -It must be registered to the CDS build system inside a top-level [cds-plugin.js](https://github.com/cap-js/cds-dbs/blob/main/postgres/cds-plugin.js) file: - -::: code-group - -```js [cds-plugin.js] -const cds = require('@sap/cds') -const { fs, path } = cds.utils; - -cds.build?.register?.('postgres', class PostgresBuildPlugin extends cds.build.Plugin { - static taskDefaults = { src: cds.env.folders.db } - static hasTask() { - return cds.requires.db?.kind === 'postgres'; - } - init() { - this.task.dest = path.join(this.task.dest, 'pg'); - } - async build() { - const model = await this.model(); - if (!model) return; - - await this.write(cds.compile.to.json(model)).to(path.join('db', 'csn.json')) - - if (fs.existsSync(path.join(this.task.src, 'data'))) { - await this.copy(data).to(path.join('db', 'data')) - } - . . . - } -}) -``` - -::: - -Notes: - -- The build plugin id has to be unique. In the previous snippet, the ID is `postgres`. -- `cds.build` will be `undefined` in non-build CLI scenarios or if the `@sap/cds-dk` package isn't installed (globally or locally as a `devDependency` of the project). - -CDS offers a base build plugin implementation, which you can extend to implement your own behavior. The following methods are called by the build system in this sequence: - -- `static taskDefaults` - defines default settings for build tasks of this type. For database related plugins the default `src` folder value cds.folders.db: db should be used, while for cds services related plugins cds.folders.srv: srv. -- `static hasTask()` - determines whether the plugin should be called for the running `cds build` command, returns _true_ by default. This will create a build task with default settings defined by `taskDefaults` and settings calculated by the framework. -- `init()` - can be used to initialize properties of the plugin, for example, changing the default build output directory defined by the property `dest`. -- `async clean` - deletes existing build output, folder `this.task.dest` is deleted by default. -- `async build` - performs the build. - -The CDS build system auto-detects all required build tasks by invoking the static method `hasTask` on each registered build plugin. - -The compiled CSN model can be accessed using the asynchronous methods `model()` or `basemodel()`. - -- The method `model()` returns a CSN model for the scope defined by the `options.model` setting. If [feature toggles](../extensibility/feature-toggles) are enabled, this model also includes any toggled feature enhancements. -- To get a CSN model without features, use the method `baseModel()` instead. The model can be used as input for further [model processing](../../node.js/cds-compile#cds-compile-to-xyz), like `to.edmx`, `to.hdbtable`, `for.odata`, etc. -- Use [`cds.reflect`](../../node.js/cds-reflect) to access advanced query and filter functionality on the CDS model. - -#### Add build task type to cds schema - -In addition you can also add a new build task type provided by your plugin. This build task type will then be part of code completion suggestions for `package.json` and `.cdsrc.json` files. - -[Learn more about schema contributions here.](../../node.js/cds-plugins#configuration-schema){.learn-more} - -#### Write Build Output - -The `cds.build.Plugin` class provides methods for copying or writing contents to the file system: - -::: code-group - -```js [postgres/lib/build.js] -await this.copy(path.join(this.task.src, 'package.json')).to('package.json'); -await this.write({ - dependencies: { '@sap/cds': '^9', '@cap-js/postgres': '^2' }, - scripts: { start: 'cds-deploy' } -}).to('package.json'); -``` - -::: - -These `copy` and `write` methods ensure that build output is consistently reported in the console log. Paths are relative to the build task's `dest` folder. - -#### Handle Errors - -Messages can be issued using the `pushMessage` method: - -::: code-group - -```js [postgres/lib/build.js] -const { Plugin } = cds.build -const { INFO, WARNING } = Plugin - -this.pushMessage('Info message', INFO); -this.pushMessage('Warning message', WARNING); -``` - -::: - -These messages are sorted and filtered according to the CLI parameter `log-level`. -They will be logged after the CDS build has been finished. A `BuildError` can be thrown in case of severe errors. -In case of any CDS compilation errors, the entire build process is aborted and a corresponding message is logged. -The `messages` object can be accessed using `this.messages`. When accessing the compiler API it should be passed as an option - otherwise compiler messages won't get reported. - -### Run the Plugin - -In the application's _package.json_, add a dependency to your plugin package to the list of `devDependencies`. -> Only use `dependencies` if the plugin also provides _runtime integration_, which is the case for the `@cap-js/postgres` plugin. - -::: code-group - -```jsonc [package.json] -"dependencies": { - "@cap-js/postgres": "^2" -} -``` - -::: - -The CDS build system by default auto-detects all required build tasks. Alternatively, users can run or configure required build tasks in the very same way as for the built-in tasks. - -```sh -cds build -cds build --for postgres -``` - -```json -"tasks": [ - { "for": "nodejs" }, - { "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: - -cd gen/srv && npx cds-serve -# or: -cd gen/srv && npm start -# or: -npx cds-serve -p gen/srv -``` - -
- -
- -Use the regular command to [start a Java application](../../java/getting-started#build-and-run): - -```sh -mvn spring-boot:run -``` - -
\ No newline at end of file diff --git a/guides/deployment/cicd.md b/guides/deploy/cicd.md similarity index 98% rename from guides/deployment/cicd.md rename to guides/deploy/cicd.md index d28cde448d..3a0f940f75 100644 --- a/guides/deployment/cicd.md +++ b/guides/deploy/cicd.md @@ -1,12 +1,6 @@ --- -breadcrumbs: - - Cookbook - - Deployment - - More Options -label: Deploy with CI/CD synopsis: > A comprehensive guide to implementing continuous integration and continuous deployment (CI/CD) for CAP projects using best practices, tools, and services. -# layout: cookbook status: released --- diff --git a/guides/deployment/health-checks.md b/guides/deploy/health-checks.md similarity index 97% rename from guides/deployment/health-checks.md rename to guides/deploy/health-checks.md index 39d2bb9f17..35de940d3b 100644 --- a/guides/deployment/health-checks.md +++ b/guides/deploy/health-checks.md @@ -1,11 +1,6 @@ --- -breadcrumbs: - - Cookbook - - Deployment - - Health Checks synopsis: > The guide provides an overview of health checks that are available on Cloud Foundry and Kubernetes, how to configure them, as well as the respective defaults of the two CAP stacks. -# layout: cookbook status: released --- diff --git a/guides/deployment/index.data.ts b/guides/deploy/index.data.ts similarity index 100% rename from guides/deployment/index.data.ts rename to guides/deploy/index.data.ts diff --git a/guides/deployment/index.md b/guides/deploy/index.md similarity index 54% rename from guides/deployment/index.md rename to guides/deploy/index.md index dd63d631ea..540a3229a6 100644 --- a/guides/deployment/index.md +++ b/guides/deploy/index.md @@ -1,22 +1,11 @@ --- -index: 80 -breadcrumbs: - - Cookbook - - Deployment -synopsis: > - Learn here about deployment options of a CAP application. status: released uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/29c25e504fdb4752b0383d3c407f52a6.html and https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/e4a7559baf9f4e4394302442745edcd9.html --- - - # Deployment -{{ $frontmatter.synopsis }} - - +Learn here about deployment options for CAP application. - + + diff --git a/guides/deployment/microservices.md b/guides/deploy/microservices.md similarity index 99% rename from guides/deployment/microservices.md rename to guides/deploy/microservices.md index 75a2b746ec..289a2195f6 100644 --- a/guides/deployment/microservices.md +++ b/guides/deploy/microservices.md @@ -218,7 +218,7 @@ Add initial multitarget application configuration for deployment to Cloud Foundr cds add mta ``` -[Learn more about **how to deploy to Cloud Foundry**.](../deployment/to-cf){.learn-more} +[Learn more about **how to deploy to Cloud Foundry**.](../deploy/to-cf){.learn-more} ### Database @@ -502,7 +502,7 @@ Enable messaging for the modules that use it: ### Destinations -Add [destination configuration](https://cap.cloud.sap/docs/guides/using-services#using-destinations) for connectivity between the apps: +Add [destination configuration](https://cap.cloud.sap/docs/guides/services/using-services#using-destinations) for connectivity between the apps: ```shell cds add destination diff --git a/guides/deployment/to-cf.md b/guides/deploy/to-cf.md similarity index 78% rename from guides/deployment/to-cf.md rename to guides/deploy/to-cf.md index 5483f66e1e..a70e6aa3b1 100644 --- a/guides/deployment/to-cf.md +++ b/guides/deploy/to-cf.md @@ -159,7 +159,7 @@ cds add xsuaa ``` ::: tip This will also generate an `xs-security.json` file -The roles/scopes are derived from authorization-related annotations in your CDS models. Ensure to rerun `cds compile --to xsuaa`, as documented in the [_Authorization_ guide](/guides/security/authorization#xsuaa-configuration) whenever there are changes to these annotations. +The roles/scopes are derived from authorization-related annotations in your CDS models. Ensure to rerun `cds compile --to xsuaa`, as documented in the [_Authorization_ guide](../security/authorization#xsuaa-configuration) whenever there are changes to these annotations. ::: [Learn more about SAP Authorization and Trust Management/XSUAA.](https://discovery-center.cloud.sap/serviceCatalog/authorization-and-trust-management-service?region=all){.learn-more} @@ -292,7 +292,7 @@ While `cds build` is already ran as part of `mbt build` in `cds up`, you can als cds build --production ``` -[Learn more about running and customizing `cds build`.](custom-builds){.learn-more} +[Learn more about running and customizing `cds build`.](build){.learn-more} ::: @@ -317,7 +317,7 @@ Share the generic App-Router URL with SaaS consumers for logging in as extension ::: ::: tip No index page and SAP Fiori preview in the cloud -The default index page and [SAP Fiori preview](../../advanced/fiori#sap-fiori-preview), that you are used to seeing during local development, are only meant for the development profile and not available in the cloud. For productive applications, you should add a proper SAP Fiori elements application through on of the [user interface options](#add-ui) outlined before. +The default index page and [SAP Fiori preview](../uis/fiori#sap-fiori-preview), that you are used to seeing during local development, are only meant for the development profile and not available in the cloud. For productive applications, you should add a proper SAP Fiori elements application through on of the [user interface options](#add-ui) outlined before. ::: ### Inspect Apps in BTP Cockpit @@ -333,7 +333,7 @@ In order to access the admin APIs you need to assign the _admin_ role required b [Got errors? See the troubleshooting guide.](../../get-started/troubleshooting#cflogs-recent){.learn-more} -## Keep Dependencies Up-to-date { #freeze-dependencies } +## Staying Up-to-date { #freeze-dependencies } Deployed applications should freeze all their dependencies, including transient ones. Therefore, on first execution, `cds up` creates a _package-lock.json_ file for all application modules. @@ -396,96 +396,3 @@ sed -i 's/org.springframework.boot.loader.JarLauncher/-Dloader.main=com.sap.cds. ``` ::: - -## Next Up... - -You would then [set up your CI/CD](../deployment/cicd) for automating deployments, for example after merging pull requests. - - - diff --git a/guides/deployment/to-kyma.md b/guides/deploy/to-kyma.md similarity index 99% rename from guides/deployment/to-kyma.md rename to guides/deploy/to-kyma.md index 95815a4180..e4406992bb 100644 --- a/guides/deployment/to-kyma.md +++ b/guides/deploy/to-kyma.md @@ -238,7 +238,7 @@ and [CAP for Java](https://github.com/SAP-samples/cloud-cap-samples-java) exampl ## Next Up... -You would then [set up your CI/CD](../deployment/cicd) for automating deployments, for example after merging pull requests. +You would then [set up your CI/CD](cicd) for automating deployments, for example after merging pull requests. {style="margin-top:11em"} diff --git a/guides/assets/domain-modeling/cds-fueling-generic-providers.drawio.svg b/guides/domain/cds-fueling-generic-providers.drawio.svg similarity index 100% rename from guides/assets/domain-modeling/cds-fueling-generic-providers.drawio.svg rename to guides/domain/cds-fueling-generic-providers.drawio.svg diff --git a/guides/domain-modeling.md b/guides/domain/modeling.md similarity index 92% rename from guides/domain-modeling.md rename to guides/domain/modeling.md index 0970d5167e..efdf89ada6 100644 --- a/guides/domain-modeling.md +++ b/guides/domain/modeling.md @@ -7,7 +7,7 @@ status: released # Domain Modeling -Domain Models capture the static, data-related aspects of a problem domain in terms of entity-relationship models. They serve as the basis for *[persistence models](./databases/index)* deployed to databases as well as for *[service definitions](./providing-services)*. +Domain Models capture the static, data-related aspects of a problem domain in terms of entity-relationship models. They serve as the basis for *[persistence models](../databases/index)* deployed to databases as well as for *[service definitions](../services/providing-services)*. [[toc]] @@ -28,7 +28,7 @@ entity Books : cuid, managed { } ``` -In that model we used the [pre-defined aspects](../cds/common.md) `cuid` and `managed`, as well as the [qualifier `localized`](./localized-data#declaring-localized-data) to capture generic aspects. We also used [managed associations](#associations). +In that model we used the [pre-defined aspects](../../cds/common.md) `cuid` and `managed`, as well as the [qualifier `localized`](../uis/localized-data#declaring-localized-data) to capture generic aspects. We also used [managed associations](#associations). In all these cases, we focus on capturing our intent, while leaving it to generic implementations to provide best-possible implementations. @@ -72,7 +72,7 @@ CDS Aspects and Annotations provide powerful means for **separation of concerns* As depicted in the illustration below, domain models serve as the sources for persistence models, deployed to databases, as well as the underlying model for services acting as API facades to access data. -![This graphic is explained in the accompanying text.](./assets/domain-modeling/cds-fueling-generic-providers.drawio.svg) +![This graphic is explained in the accompanying text.](cds-fueling-generic-providers.drawio.svg) The more we succeeded in capturing intent over imperative implementations, the more we can provide optimized generic implementations. @@ -208,7 +208,7 @@ In general always prefer conciseness, comprehensibility and readability, and avo ### Namespaces -You can use [namespaces](../cds/cdl#namespaces) to get to unique names without bloating your code with fully qualified names. For example: +You can use [namespaces](../../cds/cdl#namespaces) to get to unique names without bloating your code with fully qualified names. For example: ```cds namespace foo.bar; @@ -251,7 +251,7 @@ entity name { } ``` -[Learn more about entity definitions.](../cds/cdl.md#entities-type-definitions){.learn-more} +[Learn more about entity definitions.](../../cds/cdl.md#entities-type-definitions){.learn-more} @@ -265,7 +265,7 @@ entity ProjectedEntity as select from BaseEntity { }; ``` -[Learn more about views and projections.](../cds/cdl.md#views-projections){.learn-more} +[Learn more about views and projections.](../../cds/cdl.md#views-projections){.learn-more} @@ -299,7 +299,7 @@ Moreover, primary keys should be immutable, that means once assigned on creation #### Prefer Canonic Keys -We recommend using canonically named and typed primary keys, as promoted [by aspect `cuid` from @sap/cds/common](../cds/common.md#aspect-cuid). +We recommend using canonically named and typed primary keys, as promoted [by aspect `cuid` from @sap/cds/common](../../cds/common.md#aspect-cuid). ```cds // @sap/cds/common @@ -350,7 +350,7 @@ On the same note, converting UUID values obtained as strings from the database i [See also: Mapping UUIDs to OData](../advanced/odata#override-type-mapping) {.learn-more} -[See also: Mapping UUIDs to SQL](../advanced/hana#mapping-uuids-to-sql) {.learn-more} +[See also: Mapping UUIDs to SQL](../databases/hana-native#mapping-uuids-to-sql) {.learn-more} @@ -370,11 +370,11 @@ CDS comes with a small set of built-in types: - `String`, `LargeString` - `Binary`, `LargeBinary` -[See list of **Built-in Types** in the CDS reference docs.](../cds/types){.learn-more} +[See list of **Built-in Types** in the CDS reference docs.](../../cds/types){.learn-more} #### Common Reuse Types -In addition, a set of common reuse types and aspects is provided with package [_`@sap/cds/common`_](../cds/common.md), such as: +In addition, a set of common reuse types and aspects is provided with package [_`@sap/cds/common`_](../../cds/common.md), such as: - Types `Country`, `Currency`, `Language` with corresponding value list entities - Aspects `cuid`, `managed`, `temporal` @@ -390,7 +390,7 @@ entity Addresses : managed { //> using reuse aspect } ``` -[Learn more about reuse types provided by _`@sap/cds/common`_.](../cds/common.md){.learn-more} +[Learn more about reuse types provided by _`@sap/cds/common`_.](../../cds/common.md){.learn-more} ::: tip **Use common reuse types and aspects**... @@ -449,7 +449,7 @@ entity Authors { ... } ``` -[Learn more about Associations in the _CDS Language Reference_.](../cds/cdl#associations){ .learn-more} +[Learn more about Associations in the _CDS Language Reference_.](../../cds/cdl#associations){ .learn-more} #### Managed :1 Associations @@ -552,7 +552,7 @@ entity OrderItems { // to be accessed through Orders only } ``` -[Learn more about Compositions in the _CDS Language Reference_.](../cds/cdl#compositions){ .learn-more} +[Learn more about Compositions in the _CDS Language Reference_.](../../cds/cdl#compositions){ .learn-more} #### Composition of Aspects @@ -567,7 +567,7 @@ entity Orders { ... } ``` -[Learn more about Compositions of Aspects in the _CDS Language Reference_.](../cds/cdl#managed-compositions){ .learn-more} +[Learn more about Compositions of Aspects in the _CDS Language Reference_.](../../cds/cdl#managed-compositions){ .learn-more} Behind the scenes this will add an entity named `Orders.Items` with a backlink association named `up_`, so effectively generating the same model as above. You can annotate the inline composition with UI annotations as follows: @@ -582,7 +582,7 @@ annotate Orders.Items with @( ## Aspects -CDS's [Aspects](../cds/cdl.md#aspects) provide powerful mechanisms to separate concerns. It allows decomposing models and definitions into separate files with potentially different life cycles, contributed by different _people_. +CDS's [Aspects](../../cds/cdl.md#aspects) provide powerful mechanisms to separate concerns. It allows decomposing models and definitions into separate files with potentially different life cycles, contributed by different _people_. The basic mechanism use the `extend` or `annotate` directives to add secondary aspects to a core domain entity like so: @@ -611,7 +611,7 @@ We can also apply named aspects as **includes** in an inheritance-like syntax: entity Books : NamedAspect { ... } ``` -[Learn more about the usage of aspects in the _Aspect-oriented Modeling_ section.](../cds/aspects).{ .learn-more} +[Learn more about the usage of aspects in the _Aspect-oriented Modeling_ section.](../../cds/aspects).{ .learn-more} ::: tip Consumers always see effective models @@ -759,7 +759,7 @@ Essentially, this is also what CAP generates behind the scenes, plus many more t By generating `.texts` entities and associations behind the scenes, CAP's **out-of-the-box support** for `localized` data avoids polluting your models with doubled numbers of entities, and detrimental effects on comprehensibility. ::: -[Learn more in the **Localized Data** guide.](./localized-data){.learn-more} +[Learn more in the **Localized Data** guide.](../uis/localized-data){.learn-more} @@ -791,7 +791,7 @@ These **rules** apply: - Data *cannot* be filled in from external clients → payloads are cleansed - Data *can* be filled in from custom handlers or from `.csv` files -::: details Note the differences to [defaults](../cds/cdl#default-values)... +::: details Note the differences to [defaults](../../cds/cdl#default-values)... ... for example, given this model: @@ -817,14 +817,14 @@ In case of `UPSERT` operations, the handlers for `@cds.on.update` are executed, ### Aspect _`managed`_ {style="margin-top: 0;"} -You can also use the [pre-defined aspect `managed`](../cds/common#aspect-managed) from [@sap/cds/common](../cds/common) to get the very same as by the definition above: +You can also use the [pre-defined aspect `managed`](../../cds/common#aspect-managed) from [@sap/cds/common](../../cds/common) to get the very same as by the definition above: ```cds using { managed } from '@sap/cds/common'; entity Foo : managed { /*...*/ } ``` -[Learn more about `@sap/cds/common`.](../cds/common){.learn-more} +[Learn more about `@sap/cds/common`.](../../cds/common){.learn-more} With this we keep our core domain model clean and comprehensible. @@ -839,5 +839,5 @@ The pseudo variables used in the annotations above are resolved as follows: - `$user.` is replaced by the value of the respective attribute of the current user - `$uuid` is replaced by a version 4 UUID -[Learn more about **Authentication** in Node.js.](../node.js/authentication){.learn-more} -[Learn more about **Authentication** in Java.](../java/security#authentication){.learn-more} +[Learn more about **Authentication** in Node.js.](../../node.js/authentication){.learn-more} +[Learn more about **Authentication** in Java.](../../java/security#authentication){.learn-more} diff --git a/guides/temporal-data.md b/guides/domain/temporal-data.md similarity index 95% rename from guides/temporal-data.md rename to guides/domain/temporal-data.md index 1def8f7ba7..0946007783 100644 --- a/guides/temporal-data.md +++ b/guides/domain/temporal-data.md @@ -60,7 +60,7 @@ entity Departments { A set of sample data entries for this model, which only captures the latest state, can look like this: -![Alice has the job a a developer and consultant. Bob is a builder. Alice works in her roles for the departments core development and app development. Bob's work assignment is linked to the construction department.](assets/temporal-data/timeless-data.drawio.svg) +![Alice has the job a a developer and consultant. Bob is a builder. Alice works in her roles for the departments core development and app development. Bob's work assignment is linked to the construction department.](./timeless-data.drawio.svg) > Italic titles indicate to-one associations; actual names of the respective foreign key columns in SQL are `job1_ID`, `empl_ID`, and `dept_ID`. @@ -69,7 +69,7 @@ A set of sample data entries for this model, which only captures the latest stat _Temporal Entities_ represent _logical_ records of information for which we track changes over time by recording each change as individual _time slices_ in the database with valid from/to boundaries. For example, we could track the changes of Alice's primary work assignment _WA1_ over time: -![Alice progressed from developer to senior developer to architect.](assets/temporal-data/time-slices.drawio.svg) +![Alice progressed from developer to senior developer to architect.](./time-slices.drawio.svg) ::: tip Validity periods are expected to be **non-overlapping** and **closed-open** intervals; same as in SQL:2011. @@ -91,14 +91,14 @@ The annotation pair `@cds.valid.from/to` actually triggers the built-in mechanis ### Using Common Aspect `temporal` -Alternatively, use the predefined aspect [`temporal`](../cds/common#aspect-temporal) to declare temporal entities: +Alternatively, use the predefined aspect [`temporal`](../../cds/common#aspect-temporal) to declare temporal entities: ```cds using { temporal } from '@sap/cds/common'; entity WorkAssignments : temporal {/*...*/} ``` -Aspect [`temporal`](../cds/common#aspect-temporal) is defined in _[@sap/cds/common](../cds/common)_ as follows: +Aspect [`temporal`](../../cds/common#aspect-temporal) is defined in _[@sap/cds/common](../../cds/common)_ as follows: ```cds aspect temporal { @@ -127,7 +127,7 @@ entity WorkDetails : temporal { // temporal details entity The data situation would change as follows: -![Alice has two work assignments. Her first work assignment is stable but the roles in this assignment change over time. She progressed from developer to senior developer to architect. Each role has specific validity defined.](assets/temporal-data/temporal-details.drawio.svg) +![Alice has two work assignments. Her first work assignment is stable but the roles in this assignment change over time. She progressed from developer to senior developer to architect. Each role has specific validity defined.](./temporal-details.drawio.svg) ## Serving Temporal Data @@ -146,7 +146,7 @@ service HRService { ::: > You can omit composed entities like _WorkAssignments_ from the service, as they would get -[auto-exposed](providing-services#auto-exposed-entities) automatically. +[auto-exposed](../services/providing-services#auto-exposed-entities) automatically.
diff --git a/guides/assets/temporal-data/temporal-details.drawio.svg b/guides/domain/temporal-details.drawio.svg similarity index 100% rename from guides/assets/temporal-data/temporal-details.drawio.svg rename to guides/domain/temporal-details.drawio.svg diff --git a/guides/assets/temporal-data/time-slices.drawio.svg b/guides/domain/time-slices.drawio.svg similarity index 100% rename from guides/assets/temporal-data/time-slices.drawio.svg rename to guides/domain/time-slices.drawio.svg diff --git a/guides/assets/temporal-data/timeless-data.drawio.svg b/guides/domain/timeless-data.drawio.svg similarity index 100% rename from guides/assets/temporal-data/timeless-data.drawio.svg rename to guides/domain/timeless-data.drawio.svg diff --git a/guides/messaging/assets/api-specification.png b/guides/events/assets/api-specification.png similarity index 100% rename from guides/messaging/assets/api-specification.png rename to guides/events/assets/api-specification.png diff --git a/guides/messaging/assets/async.drawio.svg b/guides/events/assets/async.drawio.svg similarity index 100% rename from guides/messaging/assets/async.drawio.svg rename to guides/events/assets/async.drawio.svg diff --git a/guides/messaging/assets/business-partner-events.png b/guides/events/assets/business-partner-events.png similarity index 100% rename from guides/messaging/assets/business-partner-events.png rename to guides/events/assets/business-partner-events.png diff --git a/guides/messaging/assets/cap-samples.drawio.svg b/guides/events/assets/cap-samples.drawio.svg similarity index 100% rename from guides/messaging/assets/cap-samples.drawio.svg rename to guides/events/assets/cap-samples.drawio.svg diff --git a/guides/messaging/assets/capire-books.png b/guides/events/assets/capire-books.png similarity index 100% rename from guides/messaging/assets/capire-books.png rename to guides/events/assets/capire-books.png diff --git a/guides/messaging/assets/capire-reviews.png b/guides/events/assets/capire-reviews.png similarity index 100% rename from guides/messaging/assets/capire-reviews.png rename to guides/events/assets/capire-reviews.png diff --git a/guides/messaging/assets/composite1.drawio.svg b/guides/events/assets/composite1.drawio.svg similarity index 100% rename from guides/messaging/assets/composite1.drawio.svg rename to guides/events/assets/composite1.drawio.svg diff --git a/guides/messaging/assets/composite2.drawio.svg b/guides/events/assets/composite2.drawio.svg similarity index 100% rename from guides/messaging/assets/composite2.drawio.svg rename to guides/events/assets/composite2.drawio.svg diff --git a/guides/messaging/assets/composite3.drawio.svg b/guides/events/assets/composite3.drawio.svg similarity index 100% rename from guides/messaging/assets/composite3.drawio.svg rename to guides/events/assets/composite3.drawio.svg diff --git a/guides/messaging/assets/event-broker-test-integration-dependency.png b/guides/events/assets/event-broker-test-integration-dependency.png similarity index 100% rename from guides/messaging/assets/event-broker-test-integration-dependency.png rename to guides/events/assets/event-broker-test-integration-dependency.png diff --git a/guides/messaging/assets/event-broker-test-log-entry.png b/guides/events/assets/event-broker-test-log-entry.png similarity index 100% rename from guides/messaging/assets/event-broker-test-log-entry.png rename to guides/events/assets/event-broker-test-log-entry.png diff --git a/guides/messaging/assets/local.drawio.svg b/guides/events/assets/local.drawio.svg similarity index 100% rename from guides/messaging/assets/local.drawio.svg rename to guides/events/assets/local.drawio.svg diff --git a/guides/messaging/assets/remote.drawio.svg b/guides/events/assets/remote.drawio.svg similarity index 100% rename from guides/messaging/assets/remote.drawio.svg rename to guides/events/assets/remote.drawio.svg diff --git a/guides/messaging/assets/sync-async.drawio.svg b/guides/events/assets/sync-async.drawio.svg similarity index 100% rename from guides/messaging/assets/sync-async.drawio.svg rename to guides/events/assets/sync-async.drawio.svg diff --git a/guides/messaging/assets/sync.drawio.svg b/guides/events/assets/sync.drawio.svg similarity index 100% rename from guides/messaging/assets/sync.drawio.svg rename to guides/events/assets/sync.drawio.svg diff --git a/guides/events/core-concepts.md b/guides/events/core-concepts.md new file mode 100644 index 0000000000..b99d04c4ce --- /dev/null +++ b/guides/events/core-concepts.md @@ -0,0 +1,233 @@ +--- +title: Core Eventing in CAP +synopsis: > + This guides introduces CAP's intrinsic support for emitting and receiving events in the very core of the runtimes' processing models. +status: released +--- + +# Core Eventing in CAP + + +{{ $frontmatter.synopsis }} + +[[toc]] + + + +## Intrinsic Eventing in CAP + +As introduced in [About CAP](../../get-started/best-practices#events), everything happening at runtime is in response to events, and all service implementations take place in [event handlers](../services/providing-services#event-handlers). All CAP services intrinsically support emitting and reacting to events, as shown in this simple code snippet (you can copy & run it in `cds repl`): + +```js +let srv = new cds.Service +// Receiving Events +srv.on ('some event', msg => console.log('1st listener received:', msg)) +srv.on ('some event', msg => console.log('2nd listener received:', msg)) +// Emitting Events +await srv.emit ('some event', { foo:11, bar:'12' }) +``` + +::: tip Intrinsic support for events +The core of CAP's processing model: all services are event emitters. Events can be sent to them, emitted by them, and event handlers register with them to react to such events. +::: + +### Emitters and Receivers + +In contrast to the previous code sample, emitters and receivers of events are decoupled, in different services and processes. And as all active things in CAP are services, so are usually emitters and receivers of events. Typical patterns look like that: + +```js +class Emitter extends cds.Service { async someMethod() { + // inform unknown receivers about something happened + await this.emit ('some event', { some:'payload' }) +}} +``` + +```js +class Receiver extends cds.Service { async init() { + // connect to and register for events from Emitter + const Emitter = await cds.connect.to('Emitter') + Emitter.on ('some event', msg => {...}) +}} +``` + +::: tip Emitters vs Receivers +**Emitters** usually emit messages to *themselves* to inform *potential* listeners about certain events. +**Receivers** connect to *Emitters* to register handlers to such emitted events. +::: + + +### Ubiquitous Events + +A *Request* in CAP is actually a specialization of an *Event Message*. The same intrinsic mechanisms of sending and reacting to events are used for asynchronous communication in inverse order. A typical flow: + +![Clients send requests to services which are handled in event handlers.](assets/sync.drawio.svg) + +Asynchronous communication looks similar, just with reversed roles: + +![Services emit event. Receivers subscribe to events which are handled in event hanlders. ](assets/async.drawio.svg) + +::: tip Event Listeners vs Interceptors +Requests are handled the same ways as events, with one major difference: While `on` handlers for events are *listeners* (all are called), handlers for synchronous requests are *interceptors* (only the topmost is called by the framework). An interceptor then decides whether to pass down control to `next` handlers or not. +::: + +### Asynchronous APIs + +To sum up, handling events in CAP is done in the same way as you would handle requests in a service provider. Also, emitting event messages is similar to sending requests. The major difference is that the initiative is inverted: While *Consumers* connect to *Services* in synchronous communications, the *Receivers* connect to _Emitters_ in asynchronous ones; +_Emitters_ in turn don't know _Receivers_. + +![This graphic is explained in the accompanying text.](assets/sync-async.drawio.svg) + +::: tip Blurring the line between synchronous and asynchronous API +In essence, services receive events. The emitting service itself or other services can register handlers for those events in order to implement the logic of how to react to these events. +::: + + + + + +## Books Reviews Sample + +The following explanations walk us through a books review example from cap/samples: + +* **[@capire/bookshop](https://github.com/capire/bookshop)** provides the well-known basic bookshop app. +* **[@capire/reviews](https://github.com/capire/reviews)** provides an independent service to manage reviews. +* **[@capire/bookstore](https://github.com/capire/bookstore)** combines both into a composite application. + +![This graphic is explained in the accompanying text.](assets/cap-samples.drawio.svg) + +::: tip +Follow the instructions in [*cap/samples/readme*](https://github.com/capire/samples) for getting the samples and exercising the following steps. +::: + +### Declaring Events in CDS + +Package `@capire/reviews` provides a `ReviewsService` API, [declared like that](https://github.com/capire/reviews/tree/main/srv/reviews-api.cds): + +```cds +service ReviewsService @(path:'reviews/api') { + + /** + * Summary of average ratings per subject. + */ + @readonly entity AverageRatings as projection on my.Reviews { + key subject, + round(avg(rating),2) as rating : my.Rating, + count(*) as reviews : Integer, + } group by subject; + + /** + * Informs about changes in a subject's average rating. + */ + event AverageRatings.Changed : AverageRatings; // [!code focus] +} +``` + +[Learn more about declaring events in CDS.](../../cds/cdl#events){.learn-more} + +As we can read from the definition, the service's synchronous API allows to read average ratings per subject; the service's asynchronous API declares the `AverageRatings.Changed` event that shall be emitted whenever a subject's average rating changes. + +::: tip +**Services in CAP** combine **synchronous** *and* **asynchronous** APIs. Events are declared on conceptual level focusing on domain, instead of low-level wire protocols. +::: + +### Emitting Events + +Find the code to emit events in *[@capire/reviews/srv/reviews-service.js](https://github.com/capire/reviews/tree/main/srv/reviews-service.js#L32-L37)*: + +```js + // Inform API event subscribers about new avg ratings for reviewed subjects + const api = await cds.connect.to ('sap.capire.reviews.api.ReviewsService') + this.after (['CREATE','UPDATE','DELETE'], 'Reviews', async function(_,req) { + const { subject, rating, reviews } = await api.get ('AverageRatings', { subject: req.data.subject }) + return api.emit ('AverageRatings.Changed', { subject, rating, reviews }) // [!code focus] + }) +``` +[Learn more about `srv.emit()` in Node.js.](../../node.js/core-services#srv-emit-event){.learn-more} +[Learn more about `srv.emit()` in Java.](../../java/services#an-event-based-api){.learn-more} + +Method `srv.emit()` is used to emit event messages. As you can see, emitters usually emit messages to themselves, that is, `this`, to inform potential listeners about certain events. Emitters don't know the receivers of the events they emit. There might be none, there might be local ones in the same process, or remote ones in separate processes. + +::: tip Messaging on Conceptual Level +Simply use `srv.emit()` to emit events, and let the CAP framework care for wire protocols like CloudEvents, transports via message brokers, multitenancy handling, and so forth. +::: + +### Receiving Events + +Find the code to receive events in *[@capire/bookstore/srv/mashup.js](https://github.com/capire/bookstore/blob/main/srv/mashup.js#L49-L52)* (which is the basic bookshop app enhanced by reviews, hence integration with `ReviewsService`): + +```js + // Update Books' average ratings when ReviewsService signals updated reviews + ReviewsService.on ('AverageRatings.Changed', (msg) => { + console.debug ('> received:', msg.event, msg.data) + const { subject, count, rating } = msg.data + // ... + }) +``` + +[Learn more about registering event handlers in Node.js.](../../node.js/core-services#srv-on-before-after){.learn-more} +[Learn more about registering event handlers in Java.](../../java/event-handlers/index.md#introduction-to-event-handlers){.learn-more} + +The message payload is in the `data` property of the inbound `msg` object. + + +::: tip +To have more control over imported service definitions, you can set the `model` configuration of your external service to a cds file where you define the external service and only use the imported definitions your app needs. This way, plugins like [Open Resource Discovery (ORD)](../../plugins/index.md#ord-open-resource-discovery) know which parts of the external service you actually use in your application. +::: + + +## In-Process Eventing + +As emitting and handling events is an intrinsic feature of the CAP core runtimes, there's nothing else required when emitters and receivers live in the same process. + +![This graphic is explained in the accompanying text.](assets/local.drawio.svg) + +Let's see that in action... + +### 1. Run CAP Server + +Run the following command to start a reviews-enhanced bookshop as an all-in-one server process: + +```sh +cds watch bookstore +``` + +It produces a trace output like that: + +```log +[cds] - mocking ReviewsService { path: '/reviews', impl: '../reviews/srv/reviews-service.js' } +[cds] - mocking OrdersService { path: '/orders', impl: '../orders/srv/orders-service.js' } +[cds] - serving CatalogService { path: '/browse', impl: '../bookshop/srv/cat-service.js' } +[cds] - serving AdminService { path: '/admin', impl: '../bookshop/srv/admin-service.js' } + +[cds] - server listening on { url: 'http://localhost:4004' } +[cds] - launched at 5/25/2023, 4:53:46 PM, version: 7.0.0, in: 991.573ms +``` + +As apparent from the output, both, the two bookshop services `CatalogService` and `AdminService` as well as our new `ReviewsService`, are served in the same process (mocked, as the `ReviewsService` is configured as required service in _bookstore/package.json_). + +### 2. Add Reviews + +Now, open [http://localhost:4004/reviews](http://localhost:4004/reviews) to display the Vue.js UI that is provided with the reviews service sample: + +![A vue.js UI, showing the bookshop sample with the adding a review functionality](assets/capire-reviews.png) + +- Choose one of the reviews. +- Change the 5-star rating with the dropdown. +- Choose *Submit*. +- Enter *bob* to authenticate. + +→ In the terminal window you should see a server reaction like this: + +```log +[cds] - PATCH /reviews/Reviews/148ddf2b-c16a-4d52-b8aa-7d581460b431 +< emitting: reviewed { subject: '201', count: 2, rating: 4.5 } +> received: reviewed { subject: '201', count: 2, rating: 4.5 } +``` + +Which means the `ReviewsService` emitted a `reviewed` message that was received by the enhanced `CatalogService`. + +### 3. Check Ratings + +Open [http://localhost:4004/bookshop](http://localhost:4004/bookshop) to see the list of books served by `CatalogService` and refresh to see the updated average rating and reviews count: + +![A vue.js UI showing the pure bookhsop sample without additional features.](assets/capire-books.png) diff --git a/guides/messaging/event-broker.md b/guides/events/event-hub.md similarity index 93% rename from guides/messaging/event-broker.md rename to guides/events/event-hub.md index 7e7d85df66..20a7456f7b 100644 --- a/guides/messaging/event-broker.md +++ b/guides/events/event-hub.md @@ -1,10 +1,10 @@ --- -# # layout: cookbook -shorty: SAP Cloud Application Event Hub +synopsis: > + Using SAP Cloud Application Event Hub service on SAP Business Technology Platform (BTP) as a messaging channel in CAP applications. status: released --- -# Using SAP Cloud Application Event Hub in Cloud Foundry +# Messaging via SAP Cloud Application Event Hub [SAP Cloud Application Event Hub](https://help.sap.com/docs/event-broker) is the new default offering for messaging in SAP Business Technology Platform (SAP BTP). CAP provides out-of-the-box support for SAP Cloud Application Event Hub, and automatically handles many things behind the scenes, so that application coding stays agnostic and focused on conceptual messaging. @@ -28,7 +28,7 @@ Follow guides [Initial Setup](https://help.sap.com/docs/sap-cloud-application-ev ### Use `event-broker` in Node.js -Install plugin [`@cap-js/event-broker`](../../plugins/#event-hub): +Install plugin [`@cap-js/event-broker`](../../plugins/index.md#event-hub): ```sh npm add @cap-js/event-broker @@ -55,7 +55,7 @@ And add the following to your _package.json_ to use SAP Cloud Application Event ### Use `event-hub` in Java -Install plugin [`com.sap.cds:cds-feature-event-hub`](../../plugins/#event-hub) and add the following to your _application.yaml_ to use SAP Cloud Application Event Hub: +Install plugin [`com.sap.cds:cds-feature-event-hub`](../../plugins/index.md#event-hub) and add the following to your _application.yaml_ to use SAP Cloud Application Event Hub: ::: code-group ```xml [srv/pom.xml] @@ -88,10 +88,10 @@ Therefore we recommend to use a messaging service of kind [`local-messaging`](.. ## Prepare for MTA Deployment {#deploy} -A general description of how to deploy CAP applications to SAP BTP Cloud Foundry, can be found in the [Deploy to Cloud guide](../deployment/). +A general description of how to deploy CAP applications to SAP BTP Cloud Foundry, can be found in the [Deploy to Cloud guide](../deploy/). As documented there, MTA is frequently used to deploy to SAP BTP. -[Learn more about using MTA.](../deployment/){.learn-more} +[Learn more about using MTA.](../deploy/){.learn-more} Follow these steps to ensure proper binding of your deployed application to the SAP Cloud Application Event Hub instance. The guide makes use of the [@capire/incidents](https://github.com/cap-js/incidents-app) reference application. diff --git a/guides/messaging/event-mesh.md b/guides/events/event-mesh.md similarity index 92% rename from guides/messaging/event-mesh.md rename to guides/events/event-mesh.md index 82e3d711e8..9f27c52e41 100644 --- a/guides/messaging/event-mesh.md +++ b/guides/events/event-mesh.md @@ -1,10 +1,10 @@ --- -# # layout: cookbook -shorty: SAP Event Mesh +synopsis: > + Using SAP Event Mesh service on SAP Business Technology Platform (BTP) as a messaging channel in CAP applications. status: released --- -# Using SAP Event Mesh in Cloud Foundry +# Messaging via SAP Event Mesh CAP provides out-of-the-box support for [SAP Event Mesh](https://help.sap.com/docs/event-mesh), and automatically handles many things behind the scenes, so that application coding stays agnostic and focused on conceptual messaging. @@ -106,7 +106,7 @@ Before [deploying to the cloud](#deploy-to-the-cloud-with-mta), you may want to ``` - [Learn more about `cds bind` and hybrid testing.](../../advanced/hybrid-testing){.learn-more} + [Learn more about `cds bind` and hybrid testing.](../advanced/hybrid-testing){.learn-more} 5. Run your services in separate terminal shells with the `hybrid` profile: @@ -148,7 +148,7 @@ In both cases — automatically chosen queue names or explicitly configured ones ## Deploy to the Cloud (with MTA) -A general description of how to deploy CAP applications to SAP BTP's Cloud Foundry, can be found in the [Deploy to Cloud* guide](../deployment/). As documented there, MTA is frequently used to deploy to SAP BTP. Follow these steps to ensure binding of your deployed application to the SAP Event Mesh instance. +A general description of how to deploy CAP applications to SAP BTP's Cloud Foundry, can be found in the [Deploy to Cloud* guide](../deploy/). As documented there, MTA is frequently used to deploy to SAP BTP. Follow these steps to ensure binding of your deployed application to the SAP Event Mesh instance. ### 1. Specify Binding to SAP Event Mesh Instance @@ -170,7 +170,7 @@ resources: service-plan: ``` -[Learn more about using MTA.](../deployment/){.learn-more} +[Learn more about using MTA.](../deploy/){.learn-more} ::: warning Make sure to use the exact `name` and `service-plan` used at the time creating the service instance you want to use. diff --git a/guides/messaging/task-queues.md b/guides/events/event-queues.md similarity index 61% rename from guides/messaging/task-queues.md rename to guides/events/event-queues.md index 49953114bc..903eeba561 100644 --- a/guides/messaging/task-queues.md +++ b/guides/events/event-queues.md @@ -1,24 +1,31 @@ --- synopsis: > - Task Queues allow to schedule the processing of workloads in a resilient fashion. + Transactional Event Queues allow to schedule events and background tasks for asynchronous exactly once processing and withultimate resilience. status: released --- -# Task Queues +# Transactional Event Queues + +{{ $frontmatter.synopsis }} + +[[toc]] + + +## Event Queues: Concept + +The _Outbox Pattern_ is a reliable strategy used in distributed systems to ensure that messages or events are consistently recorded and delivered, even in the face of failures. _Event Queues_ not only apply this pattern to _outbound_ messages, but also to _inbound_ messages and to _internal_ background tasks. So, event queues can be used for four different use cases: + +* **Outbox** → for outbound calls to remote services +* **Inbox** → for asynchronously handling inbound requests +* **Background tasks** → e.g., scheduled periodically +* **Remote Callbacks** → implementing SAGA patterns -The _Outbox Pattern_ is a reliable strategy used in distributed systems to ensure that messages or events are consistently recorded and delivered, even in the face of failures. -This pattern, however, can not only be applied to outbound messages, but to inbound messages and server-internal background tasks as well. The core principle remains the same: -1. Persist the message (or _task_) in the database -- using the same transaction as the triggering action, if applicable -2. Process it asynchronously afterwards -- incl. retries, if necessary -Over the next months, CAP will evolve its outbox to generic _Task Queues_ with the following four components: -1. Outbox → for outbound calls to remote services -2. Inbox → for asynchronously handling inbound requests -3. Background tasks → e.g., scheduled periodically -4. Callbacks → implement SAGA patterns +Instead of being sent directy to receivers, event messages are persisted in an _Event Queue_ table in the database -- **within the same transaction** as the triggering action, if applicable. + +Later on, these event messages are read from the database and actually sent to the receiving services, hence **processed asynchronously** -- with retries, if necessary, so guaranteeing **ultimate resilience**. -This guide will grow with the functionality. diff --git a/guides/events/index.data.ts b/guides/events/index.data.ts new file mode 100644 index 0000000000..6b4139e330 --- /dev/null +++ b/guides/events/index.data.ts @@ -0,0 +1,11 @@ +import { basename } from 'node:path' +import { createContentLoader } from 'vitepress' +import filter from '../../.vitepress/theme/components/indexFilter.ts' + +const basePath = basename(__dirname) + +export default createContentLoader(`**/${basePath}/*.md`, { + transform(rawData) { + return filter(rawData, `/${basePath}/`) + } +}) diff --git a/guides/events/index.md b/guides/events/index.md new file mode 100644 index 0000000000..194d598898 --- /dev/null +++ b/guides/events/index.md @@ -0,0 +1,11 @@ +--- +synopsis: > + CAP provides intrinsic support for emitting and receiving events. + This is complemented by Messaging Services connecting to message brokers to exchange event messages across remote services. +status: released +--- + +# Events and Messaging + + + diff --git a/guides/events/is-aem.md b/guides/events/is-aem.md new file mode 100644 index 0000000000..15edb17f84 --- /dev/null +++ b/guides/events/is-aem.md @@ -0,0 +1,29 @@ +--- +synopsis: > + CAP provides out-of-the-box support for SAP Integration Suite, advanced event mesh, via CAP plugins for Node.js and Java. +status: released +--- + +# Messaging via SAP Integration Suite, Advanced Event Mesh + +[SAP Integration Suite, advanced event mesh](https://www.sap.com/products/technology-platform/integration-suite/advanced-event-mesh.html) allows you to, amongst others, integrate non-SAP systems into your event-driven architecture. CAP provides out-of-the-box support for SAP Integration Suite, advanced event mesh, via CAP plugins, available for: + + + + +[![Node.js logo](/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/advanced-event-mesh#readme) +[![Java logo](/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"}](https://github.com/cap-java/cds-feature-advanced-event-mesh#readme) + +[Learn more about _SAP Integration Suite, advanced event mesh_.](https://help.pubsub.em.services.cloud.sap){.learn-more} diff --git a/guides/events/messaging.md b/guides/events/messaging.md new file mode 100644 index 0000000000..79dd450715 --- /dev/null +++ b/guides/events/messaging.md @@ -0,0 +1,330 @@ +--- +synopsis: > + CAP provides intrinsic support for emitting and receiving events. + This is complemented by Messaging Services connecting to message brokers to exchange event messages across remote services. +status: released +--- + +# CAP-level Messaging + + + +{{ $frontmatter.synopsis }} + +[[toc]] + +## Why Using Messaging? + +Using messaging has two major advantages: + +::: tip Resilience +If a receiving service goes offline for a while, event messages are safely stored, and guaranteed to be delivered to the receiver as soon as it goes online again. +::: + +::: tip Decoupling +Emitters of event messages are decoupled from the receivers and don't need to know them at the time of sending. This way a service is able to emit events that other services can register on in the future, for example, to implement **extension** points. +::: + + +## Using Message Channels + +When emitters and receivers live in separate processes, you need to add a message channel to forward event messages. CAP provides messaging services, which take care for that message channel behind the scenes as illustrated in the following graphic: + +![The reviews service and the catalog service, each in a seperate process, are connected to the messaging service which holds the messaging channel behind the scenes.](assets/remote.drawio.svg) + + +::: tip Uniform, Agnostic Messaging +CAP provides messaging services, which transport messages behind the scenes using different messaging channels and brokers. All of this happens without the need to touch your code, which stays on conceptual level. +::: + + + +### 1. Use `file-based-messaging` in Development + +For quick tests during development, CAP provides a simple file-based messaging service implementation. Configure that as follows for the `[development]` profile: + +```jsonc +"cds": { + "requires": { + "messaging": { + "[development]": { "kind": "file-based-messaging" } + }, + } +} +``` + +[Learn more about `cds.env` profiles.](../../node.js/cds-env#profiles){.learn-more} + +In our samples, you find that in [@capire/reviews/package.json](https://github.com/capire/reviews/blob/main/package.json) as well as [@capire/bookstore/package.json](https://github.com/capire/bookstore/blob/main/package.json), which you'll run in the next step as separate processes. + + +### 2. Start the `reviews` Service and `bookstore` Separately + +First start the `reviews` service separately: + +```sh +cds watch reviews +``` + +The trace output should contain these lines, confirming that you're using `file-based-messaging`, and that the `ReviewsService` is served by that process at port 4005: + +```log +[cds] - connect to messaging > file-based-messaging { file: '~/.cds-msg-box' } +[cds] - serving ReviewsService { path: '/reviews', impl: '../reviews/srv/reviews-service.js' } + +[cds] - server listening on { url: 'http://localhost:4005' } +[cds] - launched at 5/25/2023, 4:53:46 PM, version: 7.0.0, in: 593.274ms +``` + +Then, in a separate terminal start the `bookstore` server as before: + +```sh +cds watch bookstore +``` + +This time the trace output is different to [when you started all in a single server](#start-single-server). The output confirms that you're using `file-based-messaging`, and that you now *connected* to the separately started `ReviewsService` at port 4005: + +```log +[cds] - connect to messaging > file-based-messaging { file: '~/.cds-msg-box' } +[cds] - mocking OrdersService { path: '/orders', impl: '../orders/srv/orders-service.js' } +[cds] - serving CatalogService { path: '/browse', impl: '../reviews/srv/cat-service.js' } +[cds] - serving AdminService { path: '/admin', impl: '../reviews/srv/admin-service.js' } +[cds] - connect to ReviewsService > odata { url: 'http://localhost:4005/reviews' } + +[cds] - server listening on { url: 'http://localhost:4004' } +[cds] - launched at 5/25/2023, 4:55:46 PM, version: 7.0.0, in: 1.053s +``` + +### 3. Add or Update Reviews {#add-or-update-reviews-2} + +Similar to before, open [http://localhost:4005/vue/index.html](http://localhost:4005/vue/index.html) to add or update reviews. + +→ In the terminal window for the `reviews` server you should see this: + +```log +[cds] - PATCH /reviews/Reviews/74191a20-f197-4829-bd47-c4676710e04a +< emitting: reviewed { subject: '251', count: 1, rating: 3 } +``` + +→ In the terminal window for the `bookstore` server you should see this: + +```log +> received: reviewed { subject: '251', count: 1, rating: 3 } +``` + +::: tip **Agnostic Messaging APIs** +Without touching any code the event emitted from the `ReviewsService` got transported via `file-based-messaging` channel behind the scenes and was received in the `bookstore` as before, when you used in-process eventing → which was to be shown (*QED*). +::: + +### 4. Shut Down and Restart Receiver → Resilience by Design + +You can simulate a server outage to demonstrate the value of messaging for resilience as follows: + +1. Terminate the `bookstore` server with Ctrl + C in the respective terminal. +2. Add or update more reviews as described before. +3. Restart the receiver with `cds watch bookstore`. + +→ You should see some trace output like that: + +```log +[cds] - server listening on { url: 'http://localhost:4004' } +[cds] - launched at 5/25/2023, 10:45:42 PM, version: 7.0.0, in: 1.023s +[cds] - [ terminate with ^C ] + +> received: reviewed { subject: '207', count: 1, rating: 2 } +> received: reviewed { subject: '207', count: 1, rating: 2 } +> received: reviewed { subject: '207', count: 1, rating: 2 } +``` + +::: tip **Resilience by Design** +All messages emitted while the receiver was down stayed in the messaging queue and are delivered when the server is back. +::: + + +### Have a Look Into _~/.cds-msg-box_ + +You can watch the messages flowing through the message queue by opening _~/.cds-msg-box_ in a text editor. When the receiver is down and therefore the message not already consumed, you can see the event messages emitted by the `ReviewsService` in entries like that: + +```json +ReviewsService.reviewed {"data":{"subject":"201","count":4,"rating":5}, "headers": {...}} +``` + + + +## Using Multiple Channels + +By default CAP uses a single message channel for all messages. + +For example: If you consume messages from SAP S/4HANA in an enhanced version of `bookstore`, as well as emit messages a customer could subscribe and react to in a customer extension, the overall topology would look like that: + +![The reviews service, bookstore, and the SAP S/4HANA system send events to a common message bus. The bookstore also receives events and customer extensions as well.](assets/composite1.drawio.svg) + +### Using Separate Channels + +Now, sometimes you want to use separate channels for different emitters or receivers. Let's assume you want to have a dedicated channel for all events from SAP S/4HANA, and yet another separate one for all outgoing events, to which customer extensions can subscribe too. This situation is illustrated in this graphic: + +![The graphic shows seperate message channels for each event emitter and its subscribers.](assets/composite2.drawio.svg) + +This is possible when using [low-level messaging](#low-level-messaging), but comes at the price of loosing all advantages of conceptual-level messaging as explained in the following. + +### Using `composite-messaging` Implementation + +To avoid falling back to low-level messaging, CAP provides the `composite-messaging` implementation, which basically acts like a transparent dispatcher for both, inbound and outbound messages. The resulting topology would look like that: + +![Each emitter and subscriber has its own message channel. In additon there's a composite message channel that dispatches to/from each of those seperate channels.](assets/composite3.drawio.svg) + + +::: tip **Transparent Topologies** +The `composite-messaging` implementation allows to flexibly change topologies of message channels at deployment time, without touching source code or models. +::: + +### Configuring Individual Channels and Routes + +You would configure this in `bookstore`'s _package.json_ as follows: + +```jsonc +"cds": { + "requires": { + "messaging": { + "kind": "composite-messaging", + "routes": { + "ChannelA": ["**/ReviewsService/*"], + "ChannelB": ["**/sap/s4/**"] + "ChannelC": ["**/bookshop/**"] + } + }, + "ChannelA": { + "kind": "enterprise-messaging", ... + }, + "ChannelB": { + "kind": "enterprise-messaging", ... + }, + "ChannelC": { + "kind": "enterprise-messaging", ... + } + } +} +``` + +In essence, you first configure a messaging service for each channel. In addition, you would configure the default `messaging` service to be of kind `composite-messaging`. + +In the `routes`, you can use the glob pattern to define filters for event names, that means: + +- `**` will match any number of characters. +- `*` will match any number of characters except `/` and `.`. +- `?` will match a single character. + +::: tip +You can also refer to events declared in CDS models, by using their fully qualified event name (unless annotation `@topic` is used on them). +::: + +## Low-Level Messaging + +In the previous sections it's documented how CAP promotes messaging on conceptual levels, staying agnostic to topologies and message brokers. While CAP strongly recommends staying on that level, CAP also offers lower-level messaging, which loses some of the advantages but still stays independent from specific message brokers. + +::: tip Messaging as Just Another CAP Service +All messaging implementations are provided through class `cds.MessagingService` and broker-specific subclasses of that. This class is in turn a standard CAP service, derived from `cds.Service`, hence it's consumed as any other CAP service, and can also be extended by adding event handlers as usual. +::: + +#### Configure Messaging Services + +As with all other CAP services, add an entry to `cds.requires` in your _package.json_ or _.cdsrc.json_ like that: + +```jsonc +"cds": { + "requires": { + "messaging": { + "kind": // ... + }, + } +} +``` + +[Learn more about `cds.env` and `cds.requires`.](../../node.js/cds-env#services){.learn-more} + +You're free how you name your messaging service. Could be `messaging` as in the previous example, or any other name you choose. You can also configure multiple messages services with different names. + +#### Connect to the Messaging Service + +Instead of connecting to an emitter service, connect to the messaging service: + +```js +const messaging = await cds.connect.to('messaging') +``` + +#### Emit Events to Messaging Service + +Instead of emitter services emitting to themselves, emit to the messaging service: + +```js +await messaging.emit ('ReviewsService.reviewed', { ... }) +``` + +#### Receive Events from Messaging Service + +Instead of registering event handlers with a concrete emitter service, register handlers on the messaging service: + +```js +messaging.on ('ReviewsService.reviewed', msg => console.log(msg)) +``` + +
+ +#### Declared Events and `@topic` Names + +When declaring events in CDS models, be aware that the fully qualified name of the event is used as topic names when emitting to message brokers. Based on the following model, the resulting topic name is `my.namespace.SomeEventEmitter.SomeEvent`. + +```cds +namespace my.namespace; +service SomeEventEmitter { + event SomeEvent { ... } +} +``` + +If you want to manually define the topic, you can use the `@topic` annotation: + +```cds +//... +@topic: 'some.very.different.topic-name' +event SomeEvent { ... } +``` + + + +#### Conceptual vs. Low-Level Messaging + +When looking at the previous code samples, you see that in contrast to conceptual messaging you need to provide fully qualified event names now. This is just one of the advantages you lose. Have a look at the following list of advantages you have using conceptual messaging and lose with low-level messaging. + +- Service-local event names (as already mentioned) +- Event declarations (as they go with individual services) +- Generated typed API classes for declared events +- Run in-process without any messaging service + +::: tip Always prefer conceptual-level API over low-level API variants. +Besides the things listed above, this allows you to flexibly change topologies, such as starting with co-located services in a single process, and moving single services out to separate micro services later on. +::: + + + +## CloudEvents Standard {#cloudevents} + +CAP messaging has built-in support for formatting event data compliant to the [CloudEvents](https://cloudevents.io/) standard. Enable this using the `format` config option as follows: + +```json +"cds": { + "requires": { + "messaging": { + "format": "cloudevents" + } + } +} +``` + +With this setting, all mandatory and some more basic header fields, like `type`, `source`, `id`, `datacontenttype`, `specversion`, `time` are filled in automatically. The event name is used as `type`. The message payload is in the `data` property anyways. + +::: tip CloudEvents is a wire protocol specification. +Application developers shouldn't have to care for such technical details. CAP ensures that for you, by filling in the respective fields behind the scenes. +::: diff --git a/guides/messaging/s4.md b/guides/events/s4.md similarity index 91% rename from guides/messaging/s4.md rename to guides/events/s4.md index 4330f0730d..b0289be438 100644 --- a/guides/messaging/s4.md +++ b/guides/events/s4.md @@ -1,4 +1,6 @@ --- +synopsis: > + Receiving events from SAP S/4HANA Cloud systems via SAP Event Mesh as well as SAP Cloud Application Event Hub. status: released --- @@ -14,7 +16,7 @@ This guide provides detailed information on that. ## Find & Import APIs -As documented in the [Service Consumption guide](../using-services#external-service-api), get, and `cds import` the API specification of an SAP S/4HANA service you want to receive events from. For example, for "BusinessPartner" using [SAP Business Accelerator Hub](https://api.sap.com/): +As documented in the [Service Consumption guide](../services/using-services#external-service-api), get, and `cds import` the API specification of an SAP S/4HANA service you want to receive events from. For example, for "BusinessPartner" using [SAP Business Accelerator Hub](https://api.sap.com/): 1. Find / open [Business Partner (A2X) API](https://api.sap.com/api/API_BUSINESS_PARTNER). 2. Choose button *"API Specification"*. @@ -25,7 +27,7 @@ As documented in the [Service Consumption guide](../using-services#external-serv ```sh cds import ``` -[Learn more about importing SAP S/4HANA service APIs.](../using-services#external-service-api){.learn-more} +[Learn more about importing SAP S/4HANA service APIs.](../services/using-services#external-service-api){.learn-more} ## Find Information About Events @@ -84,7 +86,7 @@ S4bupa.on ('BusinessPartner.Changed', msg => {...}) ## Configure CAP -To ease the pain of the afore-mentioned topic rewriting effects, CAP has built-in support for [SAP Event Mesh](./event-mesh) as well as [SAP Cloud Application Event Hub](./event-broker). +To ease the pain of the afore-mentioned topic rewriting effects, CAP has built-in support for [SAP Event Mesh](./event-mesh) as well as [SAP Cloud Application Event Hub](./event-hub). Configure the messaging service as follows, to let it automatically create correct technical topics to subscribe to SAP S/4HANA events: For SAP Event Mesh: @@ -136,7 +138,7 @@ extend service S4 with { ## Configure SAP S/4HANA As a prerequisite for consuming SAP S/4HANA events, the SAP S/4HANA system itself needs to be configured to send out specific event messages to a specific SAP Event Mesh or SAP Cloud Application Event Hub service instance. -How to create the necessary service instances and use them with a CAP application was already described in the previous sections [SAP Event Mesh](./event-mesh) and [SAP Cloud Application Event Hub](./event-broker), respectively. +How to create the necessary service instances and use them with a CAP application was already described in the previous sections [SAP Event Mesh](./event-mesh) and [SAP Cloud Application Event Hub](./event-hub), respectively. A description of how to configure an SAP S/4HANA system to send out specific events is out of scope of this documentation here. See [this documentation](https://help.sap.com/docs/SAP_S4HANA_CLOUD/0f69f8fb28ac4bf48d2b57b9637e81fa/82e97d5329044732af1efd996bfdc2ab.html) for more details. diff --git a/guides/extensibility/assets/customization-old.md b/guides/extensibility/assets/customization-old.md deleted file mode 100644 index 109434a65a..0000000000 --- a/guides/extensibility/assets/customization-old.md +++ /dev/null @@ -1,249 +0,0 @@ ---- -# layout: cookbook -shorty: Extensibility (Old) -title: Extending and Customizing SaaS Solutions (Old) -synopsis: > - This guide explains how subscribers of SaaS applications can extend these on tenant level, thereby customizing them for their specific needs. -breadcrumbs: - - Cookbook - - Extensibility - - SaaS Extensibility (Old) -status: released -search: false ---- - - -# Extending and Customizing SaaS Solutions (Old) - -{{ $frontmatter.synopsis }} - -::: warning -This guide assumes that the SaaS application is deployed using the _previous_ MTX services package `@sap/cds-mtx`. Projects working with the _new_ MTX version, see [the extensibility guide](../customization). - -Check if you can migrate to the _new_ package `@sap/cds-mtxs` with the help of our [migration guide](../../multitenancy/old-mtx-migration) and the [list of current limitations](https://github.tools.sap/cap/cds-tools/issues/317#issuecomment-1300295). -::: - - - -## Extend SaaS Applications { #extend-saas-applications} - -Subscribers (customers) of a SaaS application can extend data and service models in the context of their subscription (= tenant context = subaccount context). New fields can be added to SAP-provided database tables. Those fields can be added to UIs as well, if they have been built with SAP's Fiori Elements technology. - -The overall process is depicted in the following figure: - -![customization process](process_SAP_BTP.drawio.svg) - -## Platform Setup - -#### Set Up Tenant Landscape - -Using SAP Business Technology Platform (BTP) cockpit, an account administrator sets up a "landscape of tenants" (= multiple subaccounts) to enable a staged extension development scenario (for example, _development_ and _productive_ tenants). We recommend setting up at least a development tenant to test extended data, service, and UI models before activating these into the productive tenant. - -#### Subscribe to SaaS Application - -Using SAP BTP cockpit, a subaccount administrator subscribes to the SaaS application. During this subscription, the SaaS application automatically performs a tenant onboarding step, which (if using SAP HANA) allocates an SAP HANA persistence for this tenant (= subaccount) and deploys all database objects. - -> Extending CDS services and database entities is only possible if the SaaS application is using the SAP HANA database service. -> In addition, the SaaS application must have been enabled for extensibility by the SaaS provider. - -#### Authorize Extension Developer - -The extension is done by an extension developer (a customer role). The privilege to extend the base model of a tenant is linked to a scope of the SaaS application. Therefore, the security administrator of a subaccount has to grant this scope to the developer in SAP BTP cockpit. As a prerequisite, the developer has to be registered in the Identity Provider linked to the subaccount. - -There are two relevant scopes that can be assigned to extension developers: - -| Scope | | -| -------------- | ----------------------------------------- | -| ExtendCDS | Create extension projects and apply extension files. Not authorized to delete tables created by previous extensions | -| ExtendCDSdelete | In addition, enables deletion of tables created by previous extensions, which can cause data loss! | - -The SaaS application delivers role templates including these scopes. For more information, see the documentation of the SaaS application. - -### Start Extension Project - -Extension developers initialize an extension project on the file system. - -Prerequisites: - -+ The CDS command line tools must be installed. See [Getting Started > Setup](../../../get-started/#setup) for more details. -+ The Identity Provider linked to the tenant's subaccount must support the SAML standard. -+ We recommended using an Integrated Development Environment (IDE) with one of the available CDS editors for authoring extension CDS files. -+ Basic knowledge of the CDS language. - -> Use the regular `cds help` feature to learn more about command options. -> For instance, to see a description of the command `cds extend`, use `cds help extend`. - -The CDS client communicates with the SaaS application and fetches the "base model" (the not-yet-extended model) from there. An extension project folder is generated on the local file system. If an extension has already happened before, the last activated extension is fetched as well. - -As an extension developer, initialize an extension project with the following command: - -```sh -cds extend [-d ] [-s ] [-p ] -``` - -`` is specific to the SaaS application you're going to extend. This URL can be found in the documentation for the respective SaaS application. Usually, `` is the same URL visible on the subscriptions tab of SAP BTP cockpit, which is used to launch the application, enhanced with an additional URL path segment (for example, `/extend`). However, the SaaS application can decide to provide a different URL for working with extensions. - -`` is the folder on your local disk, which will contain the extension project files. -If omitted, the current working directory (or an existing subdirectory named as the subdomain) will be used. - -`` in a productive landscape is automatically derived as the string preceding the first dot '.'. -In other landscapes, find out the subdomain in the SAP BTP cockpit by navigating to the overview page for your tenant's subaccount. Then use the option `-s `. - -`` is a temporary authentication code, which is used to connect to the SaaS application. This passcode can be retrieved by opening a browser logon page. The URL of this browser page depends on SAP BTP landscape where the SaaS application is running, and the tenant that will be extended: - -```txt - = https://.authentication..hana.ondemand.com/passcode -``` - -A passcode can be used only once and within a limited period of time. When expired, a new passcode has to be generated and sent again. -If you omit the passcode, it will be queried interactively. - -As a result of `cds extend`, an extension project is created in the specified folder. As an example, the following file/folder structure is generated on the local disk: - -```sh -myextproject/ - package.json # extension project descriptor - srv/ - # will contain service and ui-related extension cds files - db/ - # will contain db-related extension cds files - node_modules/ - _base/ - ... # contains the base model provided by the SaaS application -``` - -The `node_modules` folder should be hidden when using an IDE, because it contains artifacts (the base CDS model of the SaaS application) that can't be changed. SaaS applications can provide templates to document how to do meaningful extensions of base entities and services. - -This project structure follows the same conventions as introduced for developing entire CDS applications. Model extension files, which are relevant for a database deployment, must be placed in the `db/` folder. Service extension files must be placed in the `srv/` folder. The base model is treated like a reuse model. You can refer to it in extension files simply by `using ... from '_base/...'` - -> Extension developers should drive extension projects similar to other development projects. We recommend using a version control system (for example, Git) to host the extension project sources. - -### Save an Authentication Token for a Simplified Workflow - -As an extension developer, you have the option to work more smoothly by authenticating only once. -This is achieved by using the command `cds login`, which will save authentication data to your local system. -Saved authentication data can be deleted using `cds logout`. - -The command fetches tokens and corresponding refresh tokens and saves them for later use in either a plain-text file or on the desktop keyring -(to be precise: libsecret on Linux, Keychain on macOS, or Credential Vault on Windows). - -Using the keyring has the advantage of increased security since, depending on the platform, you can lock and unlock it, and data saved by `cds login` can be inaccessible to other applications you run. - -`cds login` therefore uses the keyring by default. In order for this to succeed, you'll need to install an additional Node.js module, [_keytar_](https://www.npmjs.com/package/keytar): - -```sh -npm i -g keytar -``` - -Alternatively, you can request `cds login` to write to a plain-text file. - -::: warning _❗ Warning_ -Local storage of authentication data incurs a security risk: a malicious, locally running application might be able to perform all actions that you're authorized for with the SaaS app in the context of your tenant. -::: - -> In SAP Business Application Studio, plain-text storage is enforced since no desktop keyring is available. Don't worry - the plain-text file resides on an encrypted storage. - -Authentication data saved by `cds login` will be provided to `cds extend` and `cds activate` automatically, allowing you to call these commands later without providing a passcode. -For convenience, `cds login` also saves further settings for the current project, so you don't have to provide it again (including the app URL). - -Once a saved token has expired, it will be automatically renewed using a refresh token, if such has been provided with the token. -The validity of the original token and the refresh token can be configured by the SaaS-app provider. By default, the -refresh token expires much later, allowing you to work without re-entering passcodes for multiple successive days. - -Should you later want to extend another SaaS application, you can log in to it as well, and it won't affect your first login. -Logins are independent of each other, and both `cds extend` and `cds activate` will be authenticated according to the requested target. - -If you work with Cloud Foundry (CF), you can call `cds login` giving a passcode only. The command will then consult the Cloud Foundry command line client to determine suitable apps from the org and space currently logged into and will show you a list of apps and their respective URLs to choose from. - -To log in to the SaaS app with a passcode only, first change to the folder you want to use for your extension project. Then run: - -```sh -cds login -p -``` - -Alternatively, if you don't work with CF or already have the app URL at hand, you can log in quicker with: - -```sh -cds login -p -``` - -The tenant subdomain, unless explicitly given using `-s `, will also be determined using the CF client if available. - -To use a plain-text file instead of the keyring, append `--plain`. If you change your usage of this option, `cds login` will migrate any potentially pre-existing authentication data from the other storage to the requested storage. - -For a synopsis of all options, run `cds help login`. - -Once you've logged in to the SaaS app, you can omit the passcode, the app URL, and the tenant subdomain, so your development cycle might look like this: - -```sh -cds extend -# develop your extension -cds activate -# develop your extension -cds activate -# ... -``` - -To remove locally saved authentication data and optionally project settings, run: - -```sh -cds logout -``` - -inside your extension-project folder. -Again, `cds help logout` is available for more details. -::: tip -When your role-collection assignments have changed, run `cds logout` followed by `cds login` in order to fetch a token containing the new set of scopes. -::: - -### Develop and Activate Extensions { #about-extension-models} - -Developing CDS model files is supported by the CDS editor and CDS build tools. Within these files, you can reference base model files with `using ... from '_base/...'` statements. Entities and services can be extended using the [cds `extend` technique](../../../cds/cdl#aspects). The following example shows how to add two fields to a `Books` database table of a hypothetical Bookshop application. An _extension.cds_ file is created (the file name doesn't matter) within the `db`-folder: - -```cds -using sap.bookshop from '_base/db/datamodel'; - -extend entity bookshop.Books with { - GTIN: String(14); - rating: Integer; -} -``` - -The extension enhances the data model for this use case. Be aware that attributes of existing elements, such as type, key, and default cannot be modified. - -Extensions can be activated into a tenant using the following command: - -```sh -cds activate [] -``` - -If you omit the directory, the current directory, or a subdirectory named as the tenant subdomain, will be used. - -As outlined above, this command reuses a potentially saved authentication token for the target app URL and tenant subdomain. -If you don't want to save authentication data locally, you can use the `-p ` option as well as `-s ` and `--to ` to (re-)connect. - -Activating an existing project into a different tenant requires setting `` and `` appropriately. - -Run `cds help activate` for more details. - -> By using `cds activate`, it isn't possible to upload csv-files into the extended tenant. - -
- -#### Executing `cds extend` on an Existing Extension Project - -`cds extend` is used to create and initialize an extension project. Subsequent executions of `cds extend` must be done with the `--force` option to overwrite existing files (base model files and extension files). No files will be deleted. Features of a version control system should be used to detect and merge changes. - -#### Fetching Extension Templates from the SaaS Application - -SaaS applications can deliver template files, which demonstrate how to extend entities and services for this SaaS application. Such templates can be fetched from the server by using the `--templates` option of the `cds extend` command. As a result, a `tpl` folder will be generated containing the extension template files. - -
- -### Deploy Extensions to Production - -The productive tenant (the productive subaccount on SAP BTP) is technically treated the same way as any development tenant. Role-based authorization can restrict the access to the productive tenant to dedicated extension developers. An extension project, which has been generated by referencing a development tenant, can be activated into a productive tenant by using `cds activate` with the appropriate options. - -## [Old MTX Reference](../../multitenancy/old-mtx-apis) {.toc-redirect} - -[See Reference docs for former, 'old' MTX Services.](../../multitenancy/old-mtx-apis) diff --git a/guides/extensibility/composition.md b/guides/extensibility/composition.md index c04d25bdc5..272b8fd394 100644 --- a/guides/extensibility/composition.md +++ b/guides/extensibility/composition.md @@ -359,7 +359,7 @@ cds.once('bootstrap',(app)=>{ ``` ::: -[More about Vue.js in our _Getting Started in a Nutshell_](../../get-started/in-a-nutshell#uis){.learn-more} [Learn more about serving Fiori UIs.](../../advanced/fiori){.learn-more} +[More about Vue.js in our _Getting Started in a Nutshell_](../../get-started/in-a-nutshell#uis){.learn-more} [Learn more about serving Fiori UIs.](../uis/fiori){.learn-more} This ensures all static content for the app is served from the imported package. @@ -480,7 +480,7 @@ GET http://localhost:4004/browse/Books/201? ### Testing Remote Integration Locally {#testing-locally} -As a next step, following CAP's [Grow-as-you-go](../../about/#grow-as-you-go) philosophy, we can run the services as separate processes to test the remote integration, but still locally in a low-complexity setup. We use the [_automatic binding by `cds watch`_](#bindings-via-cds-watch) as follows: +As a next step, following CAP's [Grow-as-you-go](../../get-started/about#grow-as-you-go) philosophy, we can run the services as separate processes to test the remote integration, but still locally in a low-complexity setup. We use the [_automatic binding by `cds watch`_](#bindings-via-cds-watch) as follows: 1. Start the three servers separately, each in a separate shell (from within the root folder in your cloned projects): ```sh diff --git a/guides/extensibility/customization.md b/guides/extensibility/customization.md index 10d9ba1d9c..7d5d679b90 100644 --- a/guides/extensibility/customization.md +++ b/guides/extensibility/customization.md @@ -216,7 +216,7 @@ The name of the _.cds_ file can be freely chosen. Yet, for the build system to w ::: tip Keep it simple We recommend putting all extension files into `./app` and removing `./srv` and `./db` from extension projects. -You may want to consider [separating concerns](../domain-modeling#separation-of-concerns) by putting all Fiori annotations into a separate _./app/fiori.cds_. +You may want to consider [separating concerns](../domain/modeling#separation-of-concerns) by putting all Fiori annotations into a separate _./app/fiori.cds_. ::: #### Add Test Data @@ -288,7 +288,7 @@ Here's a rough checklist what this guide should cover: Before deploying your SaaS application to the cloud, you can [test-drive it locally](../multitenancy/#test-locally). Prepare this by going back to your app with `cd orders`. -With your application enabled and prepared for extensibility, you are ready to deploy the application as described in the [Deployment Guide](../deployment/). +With your application enabled and prepared for extensibility, you are ready to deploy the application as described in the [Deployment Guide](../deploy/). ## As a SaaS Customer {#prep-as-operator} @@ -299,7 +299,7 @@ All steps are based on our Orders Management sample which can be [started locall To extend a SaaS app deployed to BTP, you'll need to subscribe to it [through the BTP cockpit](../multitenancy/#subscribe). -Refer to the [Deployment Guide](../deployment/to-cf) for more details on remote deployments. +Refer to the [Deployment Guide](../deploy/to-cf) for more details on remote deployments. Also, you have to replace local URLs used in `cds` commands later with the URL of the deployed App Router. Use a passcode to authenticate and authorize you. @@ -662,7 +662,7 @@ entity x_Remarks : cuid, managed { ``` ::: tip -This example provides annotations for business logic handled automatically by CAP as documented in [_Providing Services_](../providing-services#input-validation). +This example provides annotations for business logic handled automatically by CAP as documented in [_Providing Services_](../services/providing-services#input-validation). ::: Learn more about the [basic syntax of the `annotate` directive](../../cds/cdl#annotate) {.learn-more} @@ -670,7 +670,7 @@ Learn more about the [basic syntax of the `annotate` directive](../../cds/cdl#an In the existing in `OrdersService`, the new entities `x_CustomerPostalAddresses` and `x_Remarks` are automatically included since they are targets of the corresponding _compositions_. -The new entities `x_Customers` and `x_SalesRegion` are [autoexposed](../providing-services#auto-exposed-entities) in a read-only way as [CodeLists](../../cds/common#aspect-codelist). Only if wanted to _change_ it, you would need to expose them explicitly: +The new entities `x_Customers` and `x_SalesRegion` are [autoexposed](../services/providing-services#auto-exposed-entities) in a read-only way as [CodeLists](../../cds/common#aspect-codelist). Only if wanted to _change_ it, you would need to expose them explicitly: ```cds using { OrdersService } from '@capire/fiori'; @@ -909,7 +909,7 @@ Properties files must be placed in the `i18n` folder. If an entry with the same > This feature is available with `@sap/cds` 6.3.0 or higher. -[Learn more about localization](../i18n){.learn-more} +[Learn more about localization](../uis/i18n){.learn-more} ## Simplify Your Workflow With `cds login` {#cds-login} @@ -969,7 +969,7 @@ Obtain these two from the `VCAP_SERVICES` environment variable in your deployed **Note:** The `key` and `clientsecret` properties are secrets that should not be stored in an unsafe location in productive scenarios! -[Learn more about environment variables / `VCAP_Services`.](/node.js/cds-connect#bindings-in-cloud-platforms){.learn-more} +[Learn more about environment variables / `VCAP_Services`.](../../node.js/cds-connect#bindings-in-cloud-platforms){.learn-more} If you leave out the respective secret (enclosed in square brackets above), you will be prompted to enter it interactively. This can be used to feed the secret from the environment to `cds login` via standard input, like so: diff --git a/guides/extensibility/index.md b/guides/extensibility/index.md index 79eab559d1..d227288fd4 100644 --- a/guides/extensibility/index.md +++ b/guides/extensibility/index.md @@ -14,7 +14,7 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ {{ $frontmatter.synopsis }} -Extensibility of CAP applications is greatly fueled by **CDS Aspects**, which allow to easily extend existing models with new fields, entities, relationships, or new or overridden annotations [→ Learn more about using CDS Aspects in the Domain Modeling guide](../domain-modeling#separation-of-concerns). +Extensibility of CAP applications is greatly fueled by **CDS Aspects**, which allow to easily extend existing models with new fields, entities, relationships, or new or overridden annotations [→ Learn more about using CDS Aspects in the Domain Modeling guide](../domain/modeling#separation-of-concerns). ![This screenshot is explained in the accompanying text.](assets/extensibility.drawio.svg) diff --git a/guides/index.md b/guides/index.md index 00e8c06701..6ff8fc6722 100644 --- a/guides/index.md +++ b/guides/index.md @@ -10,7 +10,7 @@ Guides and Recipes for Common Tasks The following figure illustrates a walkthrough of the most prominent tasks within CAP's universe of discourse (aka scope). The guides contained in this section provide details and instructions about each. -![The graphic groups topics into three phases: Development, Deploy, Use. The development phase covers topics like domain modeling, sing and providing services, databases and frontends. The deploy phase covers the deployment as well as CI/CD, monitoring and publishing APIs and packages for reuse. The use phase is about the subscription flow of multitenant applications and about customizing and extending those applications. ](assets/cookbook-overview.drawio.svg) +![The graphic groups topics into three phases: Development, Deploy, Use. The development phase covers topics like domain modeling, sing and providing services, databases and frontends. The deploy phase covers the deployment as well as CI/CD, monitoring and publishing APIs and packages for reuse. The use phase is about the subscription flow of multitenant applications and about customizing and extending those applications. ](cookbook.drawio.svg) - -
+ diff --git a/guides/security/overview.md b/guides/security/overview.md index 249401071a..e3892b118f 100644 --- a/guides/security/overview.md +++ b/guides/security/overview.md @@ -63,7 +63,7 @@ But there are still a few things to consider because exploited vulnerabilities c - Make sure that locally started HTTP endpoints are bound to `localhost`. - In case you run your service in hybrid mode with bindings to cloud service instances, -use [cds bind](../../advanced/hybrid-testing) instead of copying bindings manually to `default-env.json` file. +use [cds bind](../advanced/hybrid-testing) instead of copying bindings manually to `default-env.json` file. `cds bind` avoids materialization of secrets to local disc, which is inherently dangerous. - Don't write sensitive data to application logs, also not via debug logging. - Don't test with real business data, for example, copied from a productive system. diff --git a/guides/services/constraints.md b/guides/services/constraints.md index 6f130b2578..5a52a30457 100644 --- a/guides/services/constraints.md +++ b/guides/services/constraints.md @@ -6,9 +6,9 @@ status: released # Declarative Constraints -Declarative constraints allow you to express conditions using [CDS Expression Language (CXL)](../../cds/cxl) that are validated automatically whenever data is written. This greatly reduces the need for extensive custom code for input validation. +Declarative constraints allow you to express conditions using [CDS Expression Language (CXL)](../../cds/cxl.md) that are validated automatically whenever data is written. This greatly reduces the need for extensive custom code for input validation. -> [!note] +> [!note] > Don't confuse declarative constraints as discussed in here with [database constraints](../databases/index#database-constraints). Declarative constraints are meant for domain-specific input validation with error messages meant to be shown to end users, while database constraints are meant to prevent data corruption due to programming error, with error messages not intended for end users. @@ -59,7 +59,8 @@ annotate TravelService.Travels with { ::: -> [!tip] BEST PRACTICES +> [!tip] +> **BEST PRACTICES** applied here > > **Separation of Concerns** – always put secondary concerns, such as constraints in this case, into separate files as in the example, instead of polluting your core service definitions. > @@ -116,7 +117,8 @@ SELECT from TravelService.Travels { -> [!tip] BEST PRACTICES +> [!tip] +> **BEST PRACTICES** applied here > > **Push down to the database** is a general principle applied in CAP. Applied to input validation with declarative constraints it means that instead of reading a lot of related data into the service layer to do the checks there, we push down the respective checks to where the data is (in the database). > @@ -130,7 +132,7 @@ SELECT from TravelService.Travels { For Fiori UIs as clients the error messages will be automatically be equiped with relevant `target` properties to attach them to the respective fields on the UIs. For example a Fiori UI for the sample above, would display returned errors like that: -![image-20251219115646302](./assets/constraints/fiori-errors.png) +![image-20251219115646302](./fiori-errors.png) ::: details Behind the scenes ... @@ -225,7 +227,7 @@ annotate TravelService.Bookings with { ``` -We can also do checks with sets of related data using path expressions which navigate along **to-many associations** or compositions, combined with SQL's `exists` quantifier, and optional [infix filters](../..//cds/cql#with-infix-filters), as shown in this example: +We can also do checks with sets of related data using path expressions which navigate along **to-many associations** or compositions, combined with SQL's `exists` quantifier, and optional [infix filters](../../cds/cql#with-infix-filters), as shown in this example: ```cds annotate TravelService.Travels with { @@ -387,7 +389,7 @@ Elements annotated with `@readonly`, as well as [_calculated elements_](../../cd By default [`virtual` elements](../../cds/cdl#virtual-elements) are also _calculated_. ::: tip -The same applies for fields with the [OData Annotations](../../advanced/odata#annotations) `@FieldControl.ReadOnly` (static), `@Core.Computed`, or `@Core.Immutable` (the latter only on UPDATEs). +The same applies for fields with the [OData Annotations](../advanced/odata#annotations) `@FieldControl.ReadOnly` (static), `@Core.Computed`, or `@Core.Immutable` (the latter only on UPDATEs). ::: ::: warning Not allowed on keys @@ -455,7 +457,7 @@ entity Person : cuid { ### Localized Messages -Whenever you specify an error message with the annotations above, i.e., in the `then` part of an `@assert: ()` or in `@mandatory.message`, `@assert.format.message`, or `@assert.range.message`, you can either specify a plain text, or a [I18n text bundle key](../i18n#externalizing-texts-bundles). +Whenever you specify an error message with the annotations above, i.e., in the `then` part of an `@assert: ()` or in `@mandatory.message`, `@assert.format.message`, or `@assert.range.message`, you can either specify a plain text, or a [I18n text bundle key](../uis/i18n#externalizing-texts-bundles). Actually, we saw this already in the [sample in the introduction](#introduction): @@ -494,7 +496,7 @@ annotate TravelService.Travels with { If you use a message key, the message is automatically looked up in the message bundle of the service with the current user's preferred locale. -[Learn more about localized messages.](../i18n){.learn-more} +[Learn more about localized messages.](../uis/i18n){.learn-more} @@ -534,7 +536,7 @@ Use the `@UI.Hidden` annotation to hide fields in Fiori UIs. You can also use it @UI.Hidden: (status <> 'visible') ``` -[Learn more about that in the *OData guide*](../../advanced/odata#expression-annotations) {.learn-more} +[Learn more about that in the *OData guide*](../advanced/odata#expression-annotations) {.learn-more} diff --git a/guides/services/assets/constraints/fiori-errors.png b/guides/services/fiori-errors.png similarity index 100% rename from guides/services/assets/constraints/fiori-errors.png rename to guides/services/fiori-errors.png diff --git a/guides/services/status-flows.md b/guides/services/flows.md similarity index 97% rename from guides/services/status-flows.md rename to guides/services/flows.md index 9f62684e67..79678678ec 100644 --- a/guides/services/status-flows.md +++ b/guides/services/flows.md @@ -32,7 +32,7 @@ In CAP Node.js support for flows is built-in and available out of the box. For C The following example is taken from the [@capire/xtravels](https://github.com/capire/xtravels) sample application, in which we want to model a status flow for travel requests as depicted below: -![A flow diagram showing three status states connected by arrows. The leftmost oval contains the word Open. An arrow labeled accept points from Open to an oval containing Accepted at the top right. Another arrow labeled reject points from Open to an oval containing Canceled at the bottom right.](../assets/flows/xtravels-flow-simple.svg) +![A flow diagram showing three status states connected by arrows. The leftmost oval contains the word Open. An arrow labeled accept points from Open to an oval containing Accepted at the top right. Another arrow labeled reject points from Open to an oval containing Canceled at the bottom right.](./xtravels-flow-simple.svg) We can easily model this flow in CDS as follows: @@ -136,7 +136,7 @@ Use the target state `$flow.previous` to return a previous state from a current The following example introduces a `Blocked` state with two possible previous states, `Open` and `InReview`, and an `unblock` action that restores the previous state. -![The graphic is explained in the accompanying text.](../assets/flows/xtravels-flow-previous.svg) +![The graphic is explained in the accompanying text.](./xtravels-flow-previous.svg) ::: code-group ```cds [srv/flow-previous.cds] diff --git a/guides/providing-services.md b/guides/services/providing-services.md similarity index 91% rename from guides/providing-services.md rename to guides/services/providing-services.md index 4a7d947a16..a1f66448df 100644 --- a/guides/providing-services.md +++ b/guides/services/providing-services.md @@ -15,7 +15,7 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ [[toc]] -## Intro: Core Concepts {#introduction} +## Intro: Core Concepts The following sections give a brief overview of CAP's core concepts. @@ -23,13 +23,13 @@ The following sections give a brief overview of CAP's core concepts. A CAP application commonly provides services defined in CDS models and served by the CAP runtimes. Every active thing in CAP is a service. They embody the behavioral aspects of a domain in terms of exposed entities, actions, and events. -![This graphic is explained in the accompanying text.](./assets/providing-services/service-centric-paradigm.drawio.svg) +![This graphic is explained in the accompanying text.](./service-centric-paradigm.drawio.svg) ### Ubiquitous Events At runtime, everything happening is in response to events. CAP features a ubiquitous notion of events, which represent both, *requests* coming in through **synchronous** APIs, as well as **asynchronous** *event messages*, blurring the line between both worlds. -![This graphic shows that consumers send events to services and that there are hooks, so that event handlers can react on those events.](assets/providing-services/services-events.drawio.svg) +![This graphic shows that consumers send events to services and that there are hooks, so that event handlers can react on those events.](./services-events.drawio.svg) ### Event Handlers @@ -69,7 +69,7 @@ service BookshopService { This definition effectively defines the API served by `BookshopService`. -![This graphic is explained in the accompanying text.](assets/providing-services/service-apis.drawio.svg) +![This graphic is explained in the accompanying text.](./service-apis.drawio.svg) Simple service definitions like that are all we need to run full-fledged servers out of the box, served by CAP's generic runtimes, without any implementation coding required. @@ -88,14 +88,14 @@ service BookshopService { This way, services become facades to encapsulated domain data, exposing different aspects tailored to respective use cases. -![This graphic is explained in the accompanying text.](assets/providing-services/service-as-facades.drawio.svg) +![This graphic is explained in the accompanying text.](./service-as-facades.drawio.svg) ### Denormalized Views Instead of exposing access to underlying data in a 1:1 fashion, services frequently expose denormalized views, tailored to specific use cases. -For example, the following service definition, undiscloses information about maintainers from end users and also [marks the entities as `@readonly`](services/constraints#readonly): +For example, the following service definition, undiscloses information about maintainers from end users and also [marks the entities as `@readonly`](constraints#readonly): ```cds using { sap.capire.bookshop as my } from '../db/schema'; @@ -115,7 +115,7 @@ service CatalogService @(path:'/browse') { } ``` -[Learn more about **CQL** the language used for `projections`.](../cds/cql){.learn-more} +[Learn more about **CQL** the language used for `projections`.](../../cds/cql){.learn-more} [See also: Prefer Single-Purposed Services!](#single-purposed-services){.learn-more} [Find above sources in **capire/bookshop**.](https://github.com/capire/bookshop/blob/main/srv/cat-service.cds){ .learn-more} @@ -134,7 +134,7 @@ service Zoo { @cds.autoexpose entity SomeCodeList {...} ``` -[Learn more about Auto-Exposed Entities in the CDS reference docs.](../cds/cdl#auto-expose){.learn-more} +[Learn more about Auto-Exposed Entities in the CDS reference docs.](../../cds/cdl#auto-expose){.learn-more} ### Redirected Associations @@ -149,20 +149,20 @@ service AdminService { } ``` -[Learn more about Redirected Associations in the CDS reference docs.](../cds/cdl#auto-redirect){.learn-more} +[Learn more about Redirected Associations in the CDS reference docs.](../../cds/cdl#auto-redirect){.learn-more} ## Generic Providers -The CAP runtimes for [Node.js](../node.js/) and [Java](../java/) provide a wealth of generic implementations, which serve most requests automatically, with out-of-the-box solutions to recurring tasks such as search, pagination, or input validation — the majority of this guide focuses on these generic features. +The CAP runtimes for [Node.js](../../node.js/index) and [Java](../../java/index) provide a wealth of generic implementations, which serve most requests automatically, with out-of-the-box solutions to recurring tasks such as search, pagination, or input validation — the majority of this guide focuses on these generic features. In effect, a service definition [as introduced above](#service-definitions) is all we need to run a full-fledged server out of the box. The need for coding reduces to real custom logic specific to a project's domain → section [Custom Logic](#custom-logic) picks that up. ### Serving CRUD Requests {#serving-crud} -The CAP runtimes for [Node.js](../node.js/) and [Java](../java/) provide generic handlers, which automatically serve all CRUD requests to entities for CDS-modelled services on top of a default [primary database](databases/index). +The CAP runtimes for [Node.js](../../node.js/index) and [Java](../../java/index) provide generic handlers, which automatically serve all CRUD requests to entities for CDS-modelled services on top of a default [primary database](../databases/index). This comprises read and write operations like that: @@ -202,7 +202,7 @@ SELECT.from ('Orders', o => { }) }) ``` -[Learn more about `cds.ql`](../node.js/cds-ql){.learn-more} +[Learn more about `cds.ql`](../../node.js/cds-ql){.learn-more} ::: Both would return an array of nested structures as follows: @@ -368,7 +368,7 @@ That would basically search for occurrences of `"Heights"` in all text fields of #### The `@cds.search` Annotation {#cds-search} -By default search is limited to the elements of type `String` of an entity that aren't [calculated](../cds/cdl#calculated-elements) or [virtual](../cds/cdl#virtual-elements). Yet, sometimes you may want to deviate from this default and specify a different set of searchable elements, or to extend the search to associated entities. Use the `@cds.search` annotation to do so. The general usage is: +By default search is limited to the elements of type `String` of an entity that aren't [calculated](../../cds/cdl#calculated-elements) or [virtual](../../cds/cdl#virtual-elements). Yet, sometimes you may want to deviate from this default and specify a different set of searchable elements, or to extend the search to associated entities. Use the `@cds.search` annotation to do so. The general usage is: ```cds @cds.search: { @@ -381,7 +381,7 @@ By default search is limited to the elements of type `String` of an entity that entity E { } ``` -[Learn more about the syntax of annotations.](../cds/cdl#annotations){.learn-more} +[Learn more about the syntax of annotations.](../../cds/cdl#annotations){.learn-more} #### Including Fields @@ -453,7 +453,7 @@ To illustrate the above: #### Fuzzy Search on SAP HANA Cloud {#fuzzy-search} -> Prerequisite: For CAP Java, you need to run in [`HEX` optimization mode](../java/cqn-services/persistence-services#sql-optimization-mode) on SAP HANA Cloud and enable cds.sql.hana.search.fuzzy = true +> Prerequisite: For CAP Java, you need to run in [`HEX` optimization mode](../../java/cqn-services/persistence-services#sql-optimization-mode) on SAP HANA Cloud and enable cds.sql.hana.search.fuzzy = true Fuzzy search is a fault-tolerant search feature of SAP HANA Cloud, which returns records even if the search term contains additional characters, is missing characters, or has typographical errors. @@ -541,7 +541,7 @@ The reliable pagination is available with following limitations: Don't use reliable pagination if an entity set is sorted by elements that contain sensitive information, the skip token could reveal the values of these elements. ::: -The feature can be enabled with the following [configuration options](../node.js/cds-env#project-settings) set to `true`: +The feature can be enabled with the following [configuration options](../../node.js/cds-env#project-settings) set to `true`: - Java: cds.query.limit.reliablePaging.enabled: true - Node.js: cds.query.limit.reliablePaging: true @@ -549,7 +549,7 @@ The feature can be enabled with the following [configuration options](../node.js #### Paging Limits -You can configure default and maximum page size limits in your [project configuration](../node.js/cds-env#project-settings) as follows: +You can configure default and maximum page size limits in your [project configuration](../../node.js/cds-env#project-settings) as follows: ```json "cds": { @@ -698,7 +698,7 @@ annotate Foo with { modifiedAt @odata.etag } ``` > The value of an ETag element should uniquely change with each update per row. -> The `modifiedAt` element from the [pre-defined `managed` aspect](../cds/common#aspect-managed) is a good candidate, as this is automatically updated. +> The `modifiedAt` element from the [pre-defined `managed` aspect](../../cds/common#aspect-managed) is a good candidate, as this is automatically updated. > You could also use update counters or UUIDs, which are recalculated on each update. You use ETags when updating, deleting, or invoking the action bound to an entity by using the ETag value in an `If-Match` or `If-None-Match` header. @@ -762,9 +762,9 @@ Here's an overview table: | exclusive lock | passes | waits | waits | -[Learn more about using the `SELECT ... FOR UPDATE` statement in the Node.js runtime.](../node.js/cds-ql#forupdate){.learn-more} +[Learn more about using the `SELECT ... FOR UPDATE` statement in the Node.js runtime.](../../node.js/cds-ql#forupdate){.learn-more} -[Learn more about using the `Select.lock()` method in the Java runtime.](../java/working-with-cql/query-api#write-lock){.learn-more} +[Learn more about using the `Select.lock()` method in the Java runtime.](../../java/working-with-cql/query-api#write-lock){.learn-more} ::: warning Restrictions @@ -781,7 +781,7 @@ The remaining cases that need custom handlers, reduce to real custom logic, spec - Domain-specific programmatic [Validations](#input-validation) - Augmenting result sets, for example to add computed fields for frontends -- Programmatic [Authorization Enforcements](/guides/security/authorization#enforcement) +- Programmatic [Authorization Enforcements](../../guides/security/authorization#enforcement) - Triggering follow-up actions, for example calling other services or emitting outbound events in response to inbound events - And more... In general, all the things not (yet) covered by generic handlers @@ -793,19 +793,19 @@ CAP supports various declarative techniques to express custom logic without codi #### Status Transition Flows -- [Status-Transition Flows](./services/status-flows.md) ensure transitions are explicitly modeled, validated, and executed in a controlled and reliable way, thereby eliminating the need for extensive custom coding. +- [Status-Transition Flows](./flows) ensure transitions are explicitly modeled, validated, and executed in a controlled and reliable way, thereby eliminating the need for extensive custom coding. #### Input Validation -- [Declarative Constraints](./services/constraints) allow to annotate your models and have the respective checks still be executed and enforced by generic runtimes, with the following annotations: +- [Declarative Constraints](./constraints) allow to annotate your models and have the respective checks still be executed and enforced by generic runtimes, with the following annotations: - - [`@assert`](./services/constraints#assert-constraint), incl. derivates: - - [`@assert.format`](./services/constraints#assert-format) - - [`@assert.range`](./services/constraints#assert-range) - - [`@assert.target`](./services/constraints#assert-target) - - [`@mandatory`](./services/constraints#mandatory) - - [`@readonly`](./services/constraints#readonly) + - [`@assert`](./constraints#assert-constraint), incl. derivates: + - [`@assert.format`](./constraints#assert-format) + - [`@assert.range`](./constraints#assert-range) + - [`@assert.target`](./constraints#assert-target) + - [`@mandatory`](./constraints#mandatory) + - [`@readonly`](./constraints#readonly) > [!tip] @@ -824,7 +824,7 @@ CAP supports various declarative techniques to express custom logic without codi ... ``` -[Learn more about providing service implementations in Node.js.](../node.js/core-services#implementing-services){.learn-more} +[Learn more about providing service implementations in Node.js.](../../node.js/core-services#implementing-services){.learn-more} **In Java**, you'd assign `EventHandler` classes using dependency injection as follows: @@ -834,7 +834,7 @@ CAP supports various declarative techniques to express custom logic without codi public class FooServiceImpl implements EventHandler {...} ``` -[Learn more about Event Handler classes in Java.](../java/event-handlers/#handlerclasses){.learn-more} +[Learn more about Event Handler classes in Java.](../../java/event-handlers/index.md#handlerclasses){.learn-more} @@ -865,9 +865,9 @@ public class BookshopServiceImpl implements EventHandler { ::: -[Learn more about **adding event handlers in Node.js**.](../node.js/core-services#srv-on-before-after){.learn-more} +[Learn more about **adding event handlers in Node.js**.](../../node.js/core-services#srv-on-before-after){.learn-more} -[Learn more about **adding event handlers in Java**.](../java/event-handlers/#handlerclasses){.learn-more} +[Learn more about **adding event handlers in Java**.](../../java/event-handlers/index.md#handlerclasses){.learn-more} @@ -895,13 +895,13 @@ Event handlers all get a uniform _Request_/_Event Message_ context object as the - The `event` name — that is, a CRUD method name, or a custom-defined one - The `target` entity, if any -- The `query` in [CQN](../cds/cqn) format, for CRUD requests +- The `query` in [CQN](../../cds/cqn) format, for CRUD requests - The `data` payload - The `user`, if identified/authenticated - The `tenant` using your SaaS application, if enabled -[Learn more about **implementing event handlers in Node.js**.](../node.js/events#cds-request){.learn-more} -[Learn more about **implementing event handlers in Java**.](../java/event-handlers/#eventcontext){.learn-more} +[Learn more about **implementing event handlers in Node.js**.](../../node.js/events#cds-request){.learn-more} +[Learn more about **implementing event handlers in Java**.](../../java/event-handlers/index.md#eventcontext){.learn-more} @@ -929,7 +929,7 @@ service Sue { } ``` -[Learn more about modeling actions and functions in CDS.](../cds/cdl#actions){.learn-more} +[Learn more about modeling actions and functions in CDS.](../../cds/cdl#actions){.learn-more} @@ -1124,7 +1124,7 @@ entity Authors { //... } ``` -[Learn more about the syntax of annotations.](../cds/cdl#annotations){.learn-more} +[Learn more about the syntax of annotations.](../../cds/cdl#annotations){.learn-more} ::: warning In case you rename the properties holding the media type or content disposition information in a projection, you need to update the annotation's value as well. @@ -1152,7 +1152,7 @@ GET ../Authors(201)/image > The media data is streamed automatically. -[Learn more about returning a custom streaming object (Node.js - beta).](../node.js/best-practices#custom-streaming-beta){.learn-more} +[Learn more about returning a custom streaming object (Node.js - beta).](../../node.js/best-practices#custom-streaming-beta){.learn-more} ### Creating a Media Resource diff --git a/guides/assets/using-services/risk-mgmt.drawio.svg b/guides/services/risk-mgmt.drawio.svg similarity index 100% rename from guides/assets/using-services/risk-mgmt.drawio.svg rename to guides/services/risk-mgmt.drawio.svg diff --git a/guides/assets/providing-services/service-apis.drawio.svg b/guides/services/service-apis.drawio.svg similarity index 100% rename from guides/assets/providing-services/service-apis.drawio.svg rename to guides/services/service-apis.drawio.svg diff --git a/guides/assets/providing-services/service-as-facades.drawio.svg b/guides/services/service-as-facades.drawio.svg similarity index 100% rename from guides/assets/providing-services/service-as-facades.drawio.svg rename to guides/services/service-as-facades.drawio.svg diff --git a/guides/assets/providing-services/service-centric-paradigm.drawio.svg b/guides/services/service-centric-paradigm.drawio.svg similarity index 100% rename from guides/assets/providing-services/service-centric-paradigm.drawio.svg rename to guides/services/service-centric-paradigm.drawio.svg diff --git a/guides/assets/providing-services/services-events.drawio.svg b/guides/services/services-events.drawio.svg similarity index 100% rename from guides/assets/providing-services/services-events.drawio.svg rename to guides/services/services-events.drawio.svg diff --git a/guides/using-services.md b/guides/services/using-services.md similarity index 97% rename from guides/using-services.md rename to guides/services/using-services.md index d4cd4de100..8e8e038977 100644 --- a/guides/using-services.md +++ b/guides/services/using-services.md @@ -67,13 +67,10 @@ You have all your answers and know your scenario, go on reading about [external #### Sample Scenario from End-to-End Tutorial - +![A graphic showing the flow for one possible scenario. A user can either view risks or view the suppliers. The suppliers master data is already available from a system and is consumed in an application that enables the user to add the risks. From the maintained risks the user can get information about the supplier connected to a risk. From the supplier view, it's also possible to get details about a risk that is associated with a supplier. The user can block/unblock suppliers from the risk view.](./risk-mgmt.drawio.svg){style="width: 500px"} -![A graphic showing the flow for one possible scenario. A user can either view risks or view the suppliers. The suppliers master data is already available from a system and is consumed in an application that enables the user to add the risks. From the maintained risks the user can get information about the supplier connected to a risk. From the supplier view, it's also possible to get details about a risk that is associated with a supplier. The user can block/unblock suppliers from the risk view.](./assets/using-services/risk-mgmt.drawio.svg){style="width: 500px"} - -::: info _User Story_ -A company wants to ensure that goods are only sourced from suppliers with acceptable risks. There shall be a software system, that allows a clerk to maintain risks for suppliers and their mitigations. The system shall block the supplier used if risks can't be mitigated. -::: +> [!info] _User Story_ +> A company wants to ensure that goods are only sourced from suppliers with acceptable risks. There shall be a software system, that allows a clerk to maintain risks for suppliers and their mitigations. The system shall block the supplier used if risks can't be mitigated. The application is an extension for SAP S/4HANA. It deals with _risks_ and _mitigations_ that are local entities in the application and _suppliers_ that are stored in SAP S/4HANA Cloud. The application helps to reduce risks associated with suppliers by automatically blocking suppliers with a high risk using a [remote API Call](#execute-queries). @@ -205,7 +202,7 @@ When importing the specification files, the `kind` is set according to the follo | OpenAPI | `rest` | | AsyncAPI | `odata` | -[Learn more about type mappings from OData to CDS and vice versa.](../tools/apis/cds-import#odata-type-mappings){.learn-more} +[Learn more about type mappings from OData to CDS and vice versa.](../../tools/apis/cds-import#odata-type-mappings){.learn-more} ::: tip Always use OData V4 (`odata`) when calling another CAP service. @@ -239,7 +236,7 @@ To work with remote services, add the following dependency to your Maven project ``` -[Learn about all `cds.remote.services` configuration possibilities.](../java/developing-applications/properties#cds-remote-services){.learn-more} +[Learn about all `cds.remote.services` configuration possibilities.](../../java/developing-applications/properties#cds-remote-services){.learn-more}
@@ -479,7 +476,7 @@ Connect to the service before sending a request, as usual in CAP: const bupa = await cds.connect.to('API_BUSINESS_PARTNER'); ``` -Then execute your queries using the [Querying API](../node.js/core-services#srv-run-query): +Then execute your queries using the [Querying API](../../node.js/core-services#srv-run-query): ```js const { A_BusinessPartner } = bupa.entities; @@ -514,7 +511,7 @@ You can use dependency injection to get access to the remote service: CqnService bupa; ``` -Then execute your queries using the [Querying API](../java/working-with-cql/query-execution): +Then execute your queries using the [Querying API](../../java/working-with-cql/query-execution): ```java CqnSelect select = Select.from(ABusinessPartner_.class).limit(100); @@ -584,7 +581,7 @@ bupa.send({ }) ``` -[Learn more about the `send` API.](../node.js/core-services#srv-send-request){.learn-more} +[Learn more about the `send` API.](../../node.js/core-services#srv-send-request){.learn-more} ### Building Custom Requests with Java {.java} @@ -1029,7 +1026,7 @@ cds: suffix: "/sap/opu/odata/sap" ``` ::: -[Learn more about configuring destinations for Java.](../java/cqn-services/remote-services#destination-based-scenarios){.learn-more} +[Learn more about configuring destinations for Java.](../../java/cqn-services/remote-services#destination-based-scenarios){.learn-more} #### Use Application Defined Destinations { #app-defined-destinations} @@ -1173,7 +1170,7 @@ cds: name: "reviews-destination" ``` ::: -[Learn more about programmatic destination registration.](../java/cqn-services/remote-services#programmatic-destination-registration){.learn-more} [See examples for different authentication types.](../java/cqn-services/remote-services#programmatic-destinations){.learn-more} +[Learn more about programmatic destination registration.](../../java/cqn-services/remote-services#programmatic-destination-registration){.learn-more} [See examples for different authentication types.](../../java/cqn-services/remote-services#programmatic-destinations){.learn-more} ### Connect to Remote Services Locally @@ -1339,7 +1336,7 @@ With Istio, you can further secure the communication [by configuring authenticat Your micro service needs bindings to the **XSUAA** and **Destination** service to access destinations on SAP BTP. If you want to access an on-premise service using **Cloud Connector**, then you need a binding to the **Connectivity** service as well. -[Learn more about deploying CAP applications.](deployment/){.learn-more} +[Learn more about deploying CAP applications.](../deploy/index){.learn-more} [Learn more about deploying an application using the end-to-end tutorial.](https://developers.sap.com/group.btp-app-cap-deploy.html){.learn-more} - ### [MTX Reference](guides/multitenancy/mtxs) - ### [MTX Migration](guides/multitenancy/old-mtx-migration) -## [Extensibility](guides/extensibility/) +## [Intrinsic Extensibility](guides/extensibility) - ### [Extend SaaS Apps](guides/extensibility/customization) + ### [Extending SaaS Apps](guides/extensibility/customization) ### [Feature Toggles](guides/extensibility/feature-toggles) - ### [Reuse & Compose](guides/extensibility/composition) -## [Performance](advanced/performance-modeling) - -# [CDS](cds/) - -## [Definition Language (CDL)](cds/cdl) - ### [Keywords & Identifiers](cds/cdl#keywords-identifiers) - ### [Built-in Types & Literals](cds/cdl#built-in-types) - ### [Entities & Type Definitions](cds/cdl#entities-type-definitions) - ### [Views & Projections](cds/cdl#views-projections) - ### [Associations](cds/cdl#associations) - ### [Annotations](cds/cdl#annotations) - ### [Aspects](cds/cdl#aspects) - ### [Services](cds/cdl#services) -## [Schema Notation (CSN)](cds/csn) -## [Query Language (CQL)](cds/cql) -## [Query Notation (CQN)](cds/cqn) -## [Expression Language (CXL)](cds/cxl) -## [Expression Notation (CXN)](cds/cxn) -## [Core / Built-in Types](cds/types) -## [Common Reuse Types](cds/common) -## [Common Annotations](cds/annotations) -## [Compiler Messages](../cds/compiler/messages) -## [Aspect-oriented Modelling](cds/aspects) -## [The Nature of CDS Models](cds/models) - -# [Node](node.js/_menu.md) +## [Advanced Topics](guides/advanced) + ### [Hybrid Testing w/ cds bind](guides/advanced/hybrid-testing) + ### [Reuse & Compose](guides/extensibility/composition) + ### [Performance](guides/advanced/performance-modeling) + +# [Deploy](guides/deploy/) + + ## [Multi-tenant SaaS Applications](guides/multitenancy/) + ## [Deploy to Cloud Foundry](guides/deploy/to-cf) + ## [Deploy to Kyma/K8s](guides/deploy/to-kyma) + ## [Deploy with CI/CD](guides/deploy/cicd) + ## [Deploy with Confidence](../guides/deploy/dwc) + ## [Custom Build Tasks](guides/deploy/build) + ## [Health Checks](guides/deploy/health-checks) + ## [Microservice Layouts](guides/deploy/microservices) + ## [MTX Services Reference](guides/multitenancy/mtxs) + +# [CDS](cds/_menu.md) +# [Node.js](node.js/_menu.md) # [Java](java/_menu.md) - -# [Tools](tools/) - -## [CDS Command Line Interface](tools/cds-cli) -## [CDS Editors & IDEs](tools/cds-editors) -## [CDS Lint](tools/cds-lint/) - ### [Rules Reference](tools/cds-lint/rules/_menu.md) -## [CDS Typer](tools/cds-typer) -## [CAP Notebooks](tools/cds-editors#cap-vscode-notebook) -## [Hybrid Testing w/ cds bind](advanced/hybrid-testing) -## [CDS Design Time APIs](tools/apis/) - ### [cds. add()](tools/apis/cds-add) - ### [cds. import()](tools/apis/cds-import) - ### [cds. build()](../guides/deployment/custom-builds#custom-build-plugins) -## [CAP Console](tools/console) - -# [Plugins](plugins/) - -## [OData v2 Adapter](plugins/#odata-v2-proxy) -## [WebSocket](plugins/#websocket) -## [UI5 Dev Server](plugins/#ui5-dev-server) -## [GraphQL Adapter](plugins/#graphql-adapter) -## [Attachments](plugins/#attachments) -## [SAP Document Management](plugins/#@cap-js/sdm) -## [Audit Logging](plugins/#audit-logging) -## [Change Tracking](plugins/#change-tracking) -## [Notifications](plugins/#notifications) -## [Telemetry](plugins/#telemetry) -## [Open Resource Discovery](plugins/#ord-open-resource-discovery) -## [CAP Operator for K8s](plugins/#cap-operator-plugin) -## [SAP Cloud Appl. Event Hub](plugins/#event-hub) -## [Advanced Event Mesh](plugins/#advanced-event-mesh) +# [Tools](tools/_menu.md) +# [Plugins](plugins/_menu.md) diff --git a/node.js/_menu.md b/node.js/_menu.md index f019e188a7..45f7113782 100644 --- a/node.js/_menu.md +++ b/node.js/_menu.md @@ -62,4 +62,4 @@ # [Testing](cds-test) # [TypeScript](typescript) # [Best Practices](best-practices) -# [Integrate with UCL](ucl) +# [Integrate with UCL](../../node.js/ucl) diff --git a/node.js/app-services.md b/node.js/app-services.md index d75233442c..0c05b2edfd 100644 --- a/node.js/app-services.md +++ b/node.js/app-services.md @@ -9,7 +9,7 @@ status: released ## Class `cds.ApplicationService` -Class `cds.ApplicationService` is the default service provider implementation, adding generic handlers as introduced in the Cookbook guides on [Providing Services](../guides/providing-services), [Localized Data](../guides/localized-data.md) and [Temporal Data](../guides/temporal-data.md). +Class `cds.ApplicationService` is the default service provider implementation, adding generic handlers as introduced in the Cookbook guides on [Providing Services](../guides/services/providing-services), [Localized Data](../guides/uis/localized-data.md) and [Temporal Data](../guides/domain/temporal-data.md). Take this service definition for example: @@ -80,52 +80,52 @@ This method is adding request handlers for initial authorization checks, as docu ### _static_ handle_etags() {.method} -This method is adding request handlers for out-of-the-box concurrency control using ETags, as documented in the [Providing Services guide](../guides/providing-services#concurrency-control). +This method is adding request handlers for out-of-the-box concurrency control using ETags, as documented in the [Providing Services guide](../guides/services/providing-services#concurrency-control). ### _static_ handle_validations() {.method} -This method is adding request handlers for input validation based in `@assert` annotations, and other, as documented in the [Providing Services guide](../guides/providing-services#input-validation). +This method is adding request handlers for input validation based in `@assert` annotations, and other, as documented in the [Providing Services guide](../guides/services/providing-services#input-validation). ### _static_ handle_temporal_data() {.method} -This method is adding request handlers for handling temporal data, as documented in the [Temporal Data guide](../guides/temporal-data.md). +This method is adding request handlers for handling temporal data, as documented in the [Temporal Data guide](../guides/domain/temporal-data.md). ### _static_ handle_localized_data() {.method} -This method is adding request handlers for handling localized data, as documented in the [Localized Data guide](../guides/localized-data.md). +This method is adding request handlers for handling localized data, as documented in the [Localized Data guide](../guides/uis/localized-data.md). ### _static_ handle_managed_data() {.method} -This method is adding request handlers for handling managed data, as documented in the [Providing Services guide](../guides/domain-modeling#managed-data). +This method is adding request handlers for handling managed data, as documented in the [Providing Services guide](../guides/domain/modeling#managed-data). ### _static_ handle_paging() {.method} -This method is adding request handlers for paging & implicit sorting, as documented in the [Providing Services guide](../guides/providing-services#pagination-sorting). +This method is adding request handlers for paging & implicit sorting, as documented in the [Providing Services guide](../guides/services/providing-services#pagination-sorting). ### _static_ handle_fiori() {.method} -This method is adding request handlers for handling Fiori Drafts and other Fiori-specifics, as documented in the [Serving Fiori guide](../advanced/fiori.md). +This method is adding request handlers for handling Fiori Drafts and other Fiori-specifics, as documented in the [Serving Fiori guide](../guides/uis/fiori.md). ### _static_ handle_crud() {.method} -This method is adding request handlers for all CRUD operations including *deep* CRUD, as documented in the [Providing Services guide](../guides/providing-services#generic-providers). +This method is adding request handlers for all CRUD operations including *deep* CRUD, as documented in the [Providing Services guide](../guides/services/providing-services#generic-providers). diff --git a/node.js/authentication.md b/node.js/authentication.md index 338219f766..776464216b 100644 --- a/node.js/authentication.md +++ b/node.js/authentication.md @@ -430,7 +430,7 @@ export default function custom_auth(req: Req, res: Response, next: NextFunction) } ``` -[If you want to customize the user ID, please also have a look at this example.](/node.js/cds-serve#customization-of-cds-context-user){.learn-more} +[If you want to customize the user ID, please also have a look at this example.](cds-serve#customization-of-cds-context-user){.learn-more} ## Authentication in Production @@ -611,7 +611,7 @@ The resulting JWT token is sent to the application where it's used to enforce au ``` ::: - [Learn more about `cds bind --exec`.](../advanced/hybrid-testing#cds-bind-exec){.learn-more} + [Learn more about `cds bind --exec`.](../guides/advanced/hybrid-testing#cds-bind-exec){.learn-more} This starts an [App Router](https://help.sap.com/docs/HANA_CLOUD_DATABASE/b9902c314aef4afb8f7a29bf8c5b37b3/0117b71251314272bfe904a2600e89c0.html) instance on [http://localhost:5000](http://localhost:5000) with the credentials for the XSUAA service that you have bound using `cds bind`. diff --git a/node.js/best-practices.md b/node.js/best-practices.md index 536f2e7db0..df586738b4 100644 --- a/node.js/best-practices.md +++ b/node.js/best-practices.md @@ -201,7 +201,7 @@ If a CSRF token is cached, it can potentially be reused in multiple requests, de #### Using App Router -The _App Router_ is configured to require a _CSRF_ token by default for all protected routes and all HTTP requests methods except _HEAD_ and _GET_. Thus, by using an _App Router_ as described in the [_Deployment_ guide](../guides/deployment/to-cf#add-ui), endpoints are CSRF protected. +The _App Router_ is configured to require a _CSRF_ token by default for all protected routes and all HTTP requests methods except _HEAD_ and _GET_. Thus, by using an _App Router_ as described in the [_Deployment_ guide](../guides/deploy/to-cf#add-ui), endpoints are CSRF protected. [Learn more about CSRF protection with the **App Router**](https://help.sap.com/docs/BTP/65de2977205c403bbc107264b8eccf4b/c19f165084d742e096c5d1625cecd2d4.html?q=csrf#loioc19f165084d742e096c5d1625cecd2d4__section_xj4_pcg_2z){.learn-more} @@ -278,7 +278,7 @@ cds.on('bootstrap', app => app.use ((req, res, next) => { #### Configuring CORS in App Router -The _App Router_ has full support for CORS. Thus, by adding the _App Router_ as described in the [_Deployment_ guide](../guides/deployment/to-cf#add-ui), CORS can be configured in the _App Router_ configuration. +The _App Router_ has full support for CORS. Thus, by adding the _App Router_ as described in the [_Deployment_ guide](../guides/deploy/to-cf#add-ui), CORS can be configured in the _App Router_ configuration. [Learn more about CORS handling with the **App Router**](https://help.sap.com/docs/BTP/65de2977205c403bbc107264b8eccf4b/ba527058dc4d423a9e0a69ecc67f4593.html?q=allowedOrigin#loioba527058dc4d423a9e0a69ecc67f4593__section_nt3_t4k_sz){.learn-more} @@ -385,7 +385,7 @@ Internally the [timestamp](events#timestamp) is a JavaScript `Date` object, that ## Custom Streaming { #custom-streaming-beta } -[Media Data](../guides/providing-services#serving-media-data) can be served from custom handlers of the type `READ`, `action`, or `function`. +[Media Data](../guides/services/providing-services#serving-media-data) can be served from custom handlers of the type `READ`, `action`, or `function`. Actions and functions support the same set of `media data` annotations. ```cds @(Core.MediaType: 'text/csv', Core.ContentDisposition.Filename: 'Books.csv') @@ -480,4 +480,3 @@ srv.on('READ', 'Books', function (req) { return resultSet }) ``` - diff --git a/node.js/cds-connect.md b/node.js/cds-connect.md index 1b0a817cb8..47392b3c64 100644 --- a/node.js/cds-connect.md +++ b/node.js/cds-connect.md @@ -644,7 +644,7 @@ For example, you can enable it in the _package.json_ file for your production pr ``` ::: warning -This is a backward compatibility feature.
It might be removed in a next [major CAP version](../releases/schedule#yearly-major-releases). +This is a backward compatibility feature.
It might be removed in a next [major CAP version](/releases/schedule#yearly-major-releases). ::: Each service that has credentials and a `vcap.label` property is put into the `VCAP_SERVICES` env variable. All properties from the service's `vcap` object will be taken over to the service binding. @@ -742,7 +742,7 @@ The resulting `VCAP_SERVICES` env variable looks like this: ### Through _.cdsrc-private.json_ File for Hybrid Testing -[Learn more about hybrid testing using _.cdsrc-private.json_.](../advanced/hybrid-testing#bind-to-cloud-services) +[Learn more about hybrid testing using _.cdsrc-private.json_.](../guides/advanced/hybrid-testing#bind-to-cloud-services) ```json { diff --git a/node.js/cds-env.md b/node.js/cds-env.md index 1321c66709..115964cf3e 100644 --- a/node.js/cds-env.md +++ b/node.js/cds-env.md @@ -238,7 +238,7 @@ CDS_REQUIRES_DB_KIND=sql cds run ### In _./default-env.json_ -The use of _default-env.json_ is deprecated. Please use [`cds bind`](../advanced/hybrid-testing#run-with-service-bindings). +The use of _default-env.json_ is deprecated. Please use [`cds bind`](../guides/advanced/hybrid-testing#run-with-service-bindings). ### In `./.env` diff --git a/node.js/cds-facade.md b/node.js/cds-facade.md index 71366a97c3..415c3f122c 100644 --- a/node.js/cds-facade.md +++ b/node.js/cds-facade.md @@ -183,7 +183,7 @@ Known values for `cds.cli.command` are `add`, `build`, `compile`, `deploy`, `imp ### cds. entities {.property} -Is a shortcut to `cds.model.entities`. Used as a function, you can [specify a namespace](/node.js/cds-reflect#entities). +Is a shortcut to `cds.model.entities`. Used as a function, you can [specify a namespace](cds-reflect#entities). ### cds. env {.property} diff --git a/node.js/cds-i18n.md b/node.js/cds-i18n.md index 6c32988efe..1965160183 100644 --- a/node.js/cds-i18n.md +++ b/node.js/cds-i18n.md @@ -19,7 +19,7 @@ There are two standard i18n bundles available through these static properties: ### Localized (Fiori) UIs -The former, that is [`cds.i18n.labels`](#labels), is used automatically when generating OData `$metadata` documents for SAP Fiori elements to look up translations for respective [`{i18n>...}` placeholders](../guides/i18n#externalizing-texts-bundles). For example, localized texts for annotations like that will be looked up from `cds.i18n.labels`: +The former, that is [`cds.i18n.labels`](#labels), is used automatically when generating OData `$metadata` documents for SAP Fiori elements to look up translations for respective [`{i18n>...}` placeholders](../guides/uis/i18n#externalizing-texts-bundles). For example, localized texts for annotations like that will be looked up from `cds.i18n.labels`: ::: code-group @@ -114,7 +114,7 @@ cap/samples/bookshop/ ### `.labels` {.property} -The I18n bundle used for UI labels, such as `CreatedAt` or `CreatedBy`, referenced from respective [Fiori annotations](../guides/i18n#externalizing-texts-bundles). Translations are loaded from properties with base name `i18n`, like that in the [*bookstore* sample](https://github.com/capire/bookstore/tree/main/_i18n): {.indent} +The I18n bundle used for UI labels, such as `CreatedAt` or `CreatedBy`, referenced from respective [Fiori annotations](../guides/uis/i18n#externalizing-texts-bundles). Translations are loaded from properties with base name `i18n`, like that in the [*bookstore* sample](https://github.com/capire/bookstore/tree/main/_i18n): {.indent} ```zsh cap/samples/bookshop/ diff --git a/node.js/cds-reflect.md b/node.js/cds-reflect.md index d20fcdb085..dbaf4bdb53 100644 --- a/node.js/cds-reflect.md +++ b/node.js/cds-reflect.md @@ -382,12 +382,12 @@ Their values are [`LinkedDefinitions`]. ### . texts {.property} -If the entity has *[localized](../guides/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 `.texts` entity. If not, this property is undefined {.indent} ### . drafts {.property} -If draft is enabled, a definition to easily refer to *[draft](../advanced/fiori#draft-support)* data for the current entity is returned. +If draft is enabled, a definition to easily refer to *[draft](../guides/uis/fiori#draft-support)* data for the current entity is returned. {.indent} diff --git a/node.js/cds-test.md b/node.js/cds-test.md index df4c233af1..f33b2562eb 100644 --- a/node.js/cds-test.md +++ b/node.js/cds-test.md @@ -580,7 +580,7 @@ describe(() => { cds.test(...) }) ``` ::: -[Learn how to setup integration tests with `cds bind`.](../advanced/hybrid-testing#integration-tests){.learn-more} +[Learn how to setup integration tests with `cds bind`.](../guides/advanced/hybrid-testing#integration-tests){.learn-more} ## Using `cds.test` in REPL diff --git a/node.js/core-services.md b/node.js/core-services.md index 0dd8836796..e430e2c3bd 100644 --- a/node.js/core-services.md +++ b/node.js/core-services.md @@ -33,7 +33,7 @@ service CatalogService { } ``` -[Learn more about defining services using CDS](../guides/providing-services) {.learn-more} +[Learn more about defining services using CDS](../guides/services/providing-services) {.learn-more} @@ -258,7 +258,7 @@ await srv.read ('GET','/Books/206') await srv.send ('submitOrder', { book:206, quantity:1 }) ``` -[Using typed APIs for actions and functions](../guides/providing-services#calling-actions-functions): +[Using typed APIs for actions and functions](../guides/services/providing-services#calling-actions-functions): ```js await srv.submitOrder({ book:206, quantity:1 }) @@ -802,7 +802,7 @@ Use this method to send synchronous requests to a service for execution. - `method` is an HTTP method - `path` can be an arbitrary URL, starting with a leading `'/'`, it is passed to a service without any modification as a string -To call bound / unbound actions and functions from the service, further variants of `srv.send` are additionally supported, as described in the section [Calling Actions / Functions](../guides/providing-services#calling-actions-functions). Basically, use the action or function name instead of the HTTP method. +To call bound / unbound actions and functions from the service, further variants of `srv.send` are additionally supported, as described in the section [Calling Actions / Functions](../guides/services/providing-services#calling-actions-functions). Basically, use the action or function name instead of the HTTP method. Examples: @@ -879,7 +879,7 @@ return this.dispatch(msg) All *cds.Services* are intrinsically events & messaging-enabled. The core implementation provides local in-process messaging, while [*cds.MessagingService*](messaging) plugs in to that to extend it to cross-process messaging via common message brokers. -[**⇨ Read the Messaging Guide**](../guides/messaging/index) for the complete story. +[**⇨ Read the Messaging Guide**](../guides/events/index) for the complete story. ::: diff --git a/node.js/events.md b/node.js/events.md index 4add035ad7..99a68963b0 100644 --- a/node.js/events.md +++ b/node.js/events.md @@ -110,7 +110,7 @@ On outgoing HTTP messages, it's propagated as `x-correlation-id` header. ### . locale {.property} -The current user's preferred locale, taken from the HTTP Accept-Language header of incoming requests and resolved to [_normalized_](../guides/i18n#normalized-locales). +The current user's preferred locale, taken from the HTTP Accept-Language header of incoming requests and resolved to [_normalized_](../guides/uis/i18n#normalized-locales). @@ -127,7 +127,7 @@ A unique string identifying the current tenant, or `undefined` if not in multite A constant timestamp for the current request being processed, as an instance of [`Date`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date). The CAP framework uses that to fill in values for the CDS pseudo variable `$now`, with the guaranteed same value. -[Learn more in the **Managed Data** guide.](../guides/domain-modeling#managed-data){.learn-more} +[Learn more in the **Managed Data** guide.](../guides/domain/modeling#managed-data){.learn-more} @@ -629,4 +629,3 @@ For the following annotations/error codes, the runtime provides default translat (1) Falls back to error code `ASSERT_NOT_NULL` if provided in custom translations. These can be overridden by the known technique of providing [custom i18n messages](cds-i18n#localized-messages). - diff --git a/node.js/fiori.md b/node.js/fiori.md index 77a81782f0..94ee6c1813 100644 --- a/node.js/fiori.md +++ b/node.js/fiori.md @@ -5,7 +5,7 @@ status: released # Fiori Support -See [Cookbook > Serving UIs > Draft Support](../advanced/fiori#draft-support) for an overview on SAP Fiori Draft support in CAP. +See [Cookbook > Serving UIs > Draft Support](../guides/uis/fiori#draft-support) for an overview on SAP Fiori Draft support in CAP. [[toc]] diff --git a/node.js/index.md b/node.js/index.md index caf697ba59..c8429434c2 100644 --- a/node.js/index.md +++ b/node.js/index.md @@ -12,7 +12,7 @@ Reference Documentation As an application developer you'd primarily use the Node.js APIs documented herein to implement **domain-specific custom logic** along these lines: -1. Define services in CDS → see [Cookbook > Providing & Consuming Services](../guides/providing-services#service-definitions) +1. Define services in CDS → see [Cookbook > Providing & Consuming Services](../guides/services/providing-services#service-definitions) 2. Add service implementations → [`cds.Service` > Implementations](./core-services#implementing-services) 3. Register custom event handlers in which → [`srv.on`/`before`/`after`](./core-services#srv-on-before-after) 4. Read/write data from other services in which → [`srv.run`](./core-services#srv-run-query) + [`cds.ql`](./cds-ql) diff --git a/node.js/messaging.md b/node.js/messaging.md index 74a18b65bb..3be3cb41ef 100644 --- a/node.js/messaging.md +++ b/node.js/messaging.md @@ -157,7 +157,7 @@ messaging.on('*', async msg => { /*...*/ }) ``` ::: tip -In general, messages do not contain user information but operate with a technical user. As a consequence, the user of the message processing context (`cds.context.user`) is set to [`cds.User.privileged`](/node.js/authentication#privileged-user) and, hence, any necessary authorization checks must be done in custom handlers. +In general, messages do not contain user information but operate with a technical user. As a consequence, the user of the message processing context (`cds.context.user`) is set to [`cds.User.privileged`](/@external/node.js/authentication#privileged-user) and, hence, any necessary authorization checks must be done in custom handlers. ::: ### Inbox @@ -242,7 +242,7 @@ Example: -#### [SAP Event Mesh](../guides/messaging/#sap-event-mesh) +#### [SAP Event Mesh](../guides/events/#sap-event-mesh) If you specify your format to be `cloudevents`, the following default prefixes are set: @@ -269,13 +269,13 @@ To safely send and receive messages between applications, you need a message bro In CDS, you can configure one of the available broker services in your [`requires` section](cds-connect#cds-env-requires). -According to our [grow as you go principle](../about/#grow-as-you-go), it makes sense to first test your application logic without a message broker and enable it later. Therefore, we provide support for [local messaging](#local-messaging) (if everything is inside one Node.js process) as well as [file-based messaging](#file-based). +According to our [grow as you go principle](../get-started/about#grow-as-you-go), it makes sense to first test your application logic without a message broker and enable it later. Therefore, we provide support for [local messaging](#local-messaging) (if everything is inside one Node.js process) as well as [file-based messaging](#file-based). ### Configuring Message Brokers You must provide all necessary credentials by [binding](https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/296cd5945fd84d7d91061b2b2bcacb93.html) the message broker to your app. -For local environments, use [`cds bind`](../advanced/hybrid-testing#cds-bind-usage) in a [hybrid setup](../guides/messaging/event-mesh#run-tests-in-hybrid-setup). +For local environments, use [`cds bind`](../guides/advanced/hybrid-testing#cds-bind-usage) in a [hybrid setup](../guides/events/event-mesh#run-tests-in-hybrid-setup). ::: tip For local testing use [`kind`: `enterprise-messaging-shared`](#event-mesh-shared) to avoid the complexity of HTTP-based messaging. diff --git a/node.js/queue.md b/node.js/queue.md index 40a24f8e04..5a8a2f2b9a 100644 --- a/node.js/queue.md +++ b/node.js/queue.md @@ -129,7 +129,7 @@ There is only one active message processor per service, tenant, app instance, an This ensures that no duplicate emits happen, except in the highly unlikely case of an app crash right after successful processing but before the message could be deleted. ::: tip Unrecoverable errors -Some errors during the emit are identified as unrecoverable, for example in [SAP Event Mesh](../guides/messaging/event-mesh) if the used topic is forbidden. +Some errors during the emit are identified as unrecoverable, for example in [SAP Event Mesh](../guides/events/event-mesh) if the used topic is forbidden. The respective message is then updated and the `attempts` field is set to `maxAttempts` to prevent further processing. [Programming errors](./best-practices#error-types) crash the server instance and must be fixed. To mark your own errors as unrecoverable, you can set `unrecoverable = true` on the error object. diff --git a/node.js/remote-services.md b/node.js/remote-services.md index 284bbaaaca..fbbf93daa0 100644 --- a/node.js/remote-services.md +++ b/node.js/remote-services.md @@ -1,14 +1,14 @@ --- label: Remote Services synopsis: > - Class `cds.RemoteService` is a service proxy class to consume remote services via different [protocols](/node.js/cds-serve#cds-protocols), like OData or plain REST. + Class `cds.RemoteService` is a service proxy class to consume remote services via different [protocols](cds-serve#cds-protocols), like OData or plain REST. # layout: node-js status: released --- # Remote Services -Class `cds.RemoteService` is a service proxy class to consume remote services via different [protocols](/node.js/cds-serve#cds-protocols), like OData or plain REST. +Class `cds.RemoteService` is a service proxy class to consume remote services via different [protocols](cds-serve#cds-protocols), like OData or plain REST. [[toc]] @@ -97,7 +97,7 @@ The `requestTimeout` setting in the `cds.RemoteService` configuration specifies ``` ::: tip -See [Using Destinations](../guides/using-services#using-destinations) for more details on destination configuration. +See [Using Destinations](../guides/services/using-services#using-destinations) for more details on destination configuration. ::: ## More to Come diff --git a/node.js/typescript.md b/node.js/typescript.md index 0fa37dbb01..12d802f48e 100644 --- a/node.js/typescript.md +++ b/node.js/typescript.md @@ -157,7 +157,7 @@ cds build # to create the js files cd gen/srv && npm start ``` -[Learn more on running a project from build results.](../guides/deployment/custom-builds#test-run){.learn-more} +[Learn more on running a project from build results.](../guides/deploy/build.md){.learn-more} ## TypeScript APIs in `@sap/cds` diff --git a/package-lock.json b/package-lock.json index ecc8bf27d6..f9e8cd5258 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@cap-js/cds-typer": "^0", "@cap-js/cds-types": "^0", "@sap/cds": "^9", - "@shikijs/vitepress-twoslash": "^2.0.0", + "@shikijs/vitepress-twoslash": "^3", "@types/adm-zip": ">=0.5.0", "@types/express": "^4.17.21", "@typescript-eslint/parser": "^8.0.0", @@ -29,16 +29,16 @@ } }, "node_modules/@algolia/abtesting": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.4.0.tgz", - "integrity": "sha512-N0blWT/C0KOZ/OJ9GXBX66odJZlrYjMj3M+01y8ob1mjBFnBaBo7gOCyHBDQy60+H4pJXp3pSGlJOqJIueBH+A==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.12.1.tgz", + "integrity": "sha512-Y+7e2uPe376OH5O73OB1+vR40ZhbV2kzGh/AR/dPCWguoBOp1IK0o+uZQLX+7i32RMMBEKl3pj6KVEav100Kvg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" @@ -94,41 +94,41 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.38.0.tgz", - "integrity": "sha512-15d6zv8vtj2l9pnnp/EH7Rhq3/snCCHRz56NnX6xIUPrbJl5gCsIYXAz8C2IEkwOpoDb0r5G6ArY2gKdVMNezw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.46.1.tgz", + "integrity": "sha512-5SWfl0UGuKxMBYlU2Y9BnlIKKEyhFU5jHE9F9jAd8nbhxZNLk0y7fXE+AZeFtyK1lkVw6O4B/e6c3XIVVCkmqw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.38.0.tgz", - "integrity": "sha512-jJIbYAhYvTG3+gEAP5Q5Dp6PFJfUR+atz5rsqm5KjAKK+faLFdHJbM2IbOo0xdyGd+SH259MzfQKLJ9mZZ27dQ==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.46.1.tgz", + "integrity": "sha512-496K6B1l/0Jvyp3MbW/YIgmm1a6nkTrKXBM7DoEy9YAOJ8GywGpa2UYjNCW1UrOTt+em1ECzDjRx7PIzTR9YvA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.38.0.tgz", - "integrity": "sha512-aMCXzVPGJTeQnVU3Sdf30TfMN2+QyWcjfPTCCHyqVVgjPipb6RnK40aISGoO+rlYjh9LunDsNVFLwv+JEIF8bQ==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.46.1.tgz", + "integrity": "sha512-3u6AuZ1Kiss6V5JPuZfVIUYfPi8im06QBCgKqLg82GUBJ3SwhiTdSZFIEgz2mzFuitFdW1PQi3c/65zE/3FgIw==", "dev": true, "license": "MIT", "engines": { @@ -136,151 +136,151 @@ } }, "node_modules/@algolia/client-insights": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.38.0.tgz", - "integrity": "sha512-4c3FbpMiJX+VcaAj0rYaQdTLS/CkrdOn4hW+5y1plPov7KC7iSHai/VBbirmHuAfW1hVPCIh1w/4erKKTKuo+Q==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.46.1.tgz", + "integrity": "sha512-LwuWjdO35HHl1rxtdn48t920Xl26Dl0SMxjxjFeAK/OwK/pIVfYjOZl/f3Pnm7Kixze+6HjpByVxEaqhTuAFaw==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.38.0.tgz", - "integrity": "sha512-FzLs6c8TBL4FSgNfnH2NL7O33ktecGiaKO4ZFG51QYORUzD5d6YwB9UBteaIYu/sgFoEdY57diYU4vyBH8R6iA==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.46.1.tgz", + "integrity": "sha512-6LvJAlfEsn9SVq63MYAFX2iUxztUK2Q7BVZtI1vN87lDiJ/tSVFKgKS/jBVO03A39ePxJQiFv6EKv7lmoGlWtQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.38.0.tgz", - "integrity": "sha512-7apiahlgZLvOqrh0+hAYAp/UWjqz6AfSJrCwnsoQNzgIT09dLSPIKREelkuQeUrKy38vHWWpSQE3M0zWSp/YrA==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.46.1.tgz", + "integrity": "sha512-9GLUCyGGo7YOXHcNqbzca82XYHJTbuiI6iT0FTGc0BrnV2N4OcrznUuVKic/duiLSun5gcy/G2Bciw5Sav9f9w==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.38.0.tgz", - "integrity": "sha512-PTAFMJOpVtJweExEYYgdmSCC6n4V/R+ctDL3fRQy77ulZM/p+zMLIQC9c7HCQE1zqpauvVck3f2zYSejaUTtrw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.46.1.tgz", + "integrity": "sha512-NL76o/BoEgU4ObY5oBEC3o6KSPpuXsnSta00tAxTm1iKUWOGR34DQEKhUt8xMHhMKleUNPM/rLPFiIVtfsGU8w==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.38.0.tgz", - "integrity": "sha512-qGSUGgceJHGyJLZ06bFLwVe2Tpf9KwabmoBjFvFscVmMmU5scKya6voCYd9bdX7V0Xy1qya9MGbmTm4zlLuveQ==", + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.46.1.tgz", + "integrity": "sha512-52Nc8WKC1FFXsdlXlTMl1Re/pTAbd2DiJiNdYmgHiikZcfF96G+Opx4qKiLUG1q7zp9e+ahNwXF6ED0XChMywg==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.38.0.tgz", - "integrity": "sha512-VnCtAUcHirvv/dDHg9jK1Z5oo4QOC5FKDxe40x8qloru2qDcjueT34jiAsB0gRos3VWf9v4iPSYTqMIFOcADpQ==", + "version": "1.46.1", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.46.1.tgz", + "integrity": "sha512-1x2/2Y/eqz6l3QcEZ8u/zMhSCpjlhePyizJd3sXrmg031HjayYT5+IxikjpqkdF7TU/deCTd/TFUcxLJ2ZHXiQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.38.0.tgz", - "integrity": "sha512-fqgeU9GqxQorFUeGP4et1MyY28ccf9PCeciHwDPSbPYYiTqBItHdUIiytsNpjC5Dnc0RWtuXWCltLwSw9wN/bQ==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.46.1.tgz", + "integrity": "sha512-SSd3KlQuplxV3aRs5+Z09XilFesgpPjtCG7BGRxLTVje5hn9BLmhjO4W3gKw01INUt44Z1r0Fwx5uqnhAouunA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/client-common": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.38.0.tgz", - "integrity": "sha512-nAUKbv4YQIXbpPi02AQvSPisD5FDDbT8XeYSh9HFoYP0Z3IpBLLDg7R4ahPvzd7gGsVKgEbXzRPWESXSji5yIg==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.46.1.tgz", + "integrity": "sha512-3GfCwudeW6/3caKSdmOP6RXZEL4F3GiemCaXEStkTt2Re8f7NcGYAAZnGlHsCzvhlNEuDzPYdYxh4UweY8l/2w==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0" + "@algolia/client-common": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.38.0.tgz", - "integrity": "sha512-bkuAHaadC6OxJd3SVyQQnU1oJ9G/zdCqua7fwr1tJDrA/v7KzeS5np4/m6BuRUpTgVgFZHSewGnMcgj9DLBoaQ==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.46.1.tgz", + "integrity": "sha512-JUAxYfmnLYTVtAOFxVvXJ4GDHIhMuaP7JGyZXa/nCk3P8RrN5FCNTdRyftSnxyzwSIAd8qH3CjdBS9WwxxqcHQ==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0" + "@algolia/client-common": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.38.0.tgz", - "integrity": "sha512-yHDKZTnMPR3/4bY0CVC1/uRnnbAaJ+pctRuX7G/HflBkKOrnUBDEGtQQHzEfMz2FHZ/tbCL+Q9r6mvwTSGp8nw==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.46.1.tgz", + "integrity": "sha512-VwbhV1xvTGiek3d2pOS6vNBC4dtbNadyRT+i1niZpGhOJWz1XnfhxNboVbXPGAyMJYz7kDrolbDvEzIDT93uUA==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/client-common": "5.38.0" + "@algolia/client-common": "5.46.1" }, "engines": { "node": ">= 14.0.0" @@ -297,9 +297,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, "license": "MIT", "engines": { @@ -307,13 +307,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.4.tgz", - "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.4" + "@babel/types": "^7.28.5" }, "bin": { "parser": "bin/babel-parser.js" @@ -323,14 +323,14 @@ } }, "node_modules/@babel/types": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.4.tgz", - "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1" + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" @@ -510,9 +510,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-aws": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.16.tgz", - "integrity": "sha512-a681zShZbtTo947NvTYGLer95ZDQw1ROKvIFydak1e0OlfFCsNdtcYTupn0nbbYs53c9AO7G2DU8AcNEAnwXPA==", + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-aws/-/dict-aws-4.0.17.tgz", + "integrity": "sha512-ORcblTWcdlGjIbWrgKF+8CNEBQiLVKdUOFoTn0KPNkAYnFcdPP0muT4892h7H4Xafh3j72wqB4/loQ6Nti9E/w==", "dev": true, "license": "MIT" }, @@ -527,9 +527,9 @@ } }, "node_modules/@cspell/dict-companies": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.7.tgz", - "integrity": "sha512-fEyr3LmpFKTaD0LcRhB4lfW1AmULYBqzg4gWAV0dQCv06l+TsA+JQ+3pZJbUcoaZirtgsgT3dL3RUjmGPhUH0A==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@cspell/dict-companies/-/dict-companies-3.2.9.tgz", + "integrity": "sha512-y5GdU+LnuMhUE/WYwOYt7GcJdrpmV4KXE1oFb5toEsnGa2KzffUbS6lwPpeRBocQoqZj8jJYFtxoQ+2KVg++/A==", "dev": true, "license": "MIT" }, @@ -548,44 +548,44 @@ "license": "MIT" }, "node_modules/@cspell/dict-csharp": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.7.tgz", - "integrity": "sha512-H16Hpu8O/1/lgijFt2lOk4/nnldFtQ4t8QHbyqphqZZVE5aS4J/zD/WvduqnLY21aKhZS6jo/xF5PX9jyqPKUA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@cspell/dict-csharp/-/dict-csharp-4.0.8.tgz", + "integrity": "sha512-qmk45pKFHSxckl5mSlbHxmDitSsGMlk/XzFgt7emeTJWLNSTUK//MbYAkBNRtfzB4uD7pAFiKgpKgtJrTMRnrQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-css": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.18.tgz", - "integrity": "sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==", + "version": "4.0.19", + "resolved": "https://registry.npmjs.org/@cspell/dict-css/-/dict-css-4.0.19.tgz", + "integrity": "sha512-VYHtPnZt/Zd/ATbW3rtexWpBnHUohUrQOHff/2JBhsVgxOrksAxJnLAO43Q1ayLJBJUUwNVo+RU0sx0aaysZfg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-dart": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.1.tgz", - "integrity": "sha512-xoiGnULEcWdodXI6EwVyqpZmpOoh8RA2Xk9BNdR7DLamV/QMvEYn8KJ7NlRiTSauJKPNkHHQ5EVHRM6sTS7jdg==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-dart/-/dict-dart-2.3.2.tgz", + "integrity": "sha512-sUiLW56t9gfZcu8iR/5EUg+KYyRD83Cjl3yjDEA2ApVuJvK1HhX+vn4e4k4YfjpUQMag8XO2AaRhARE09+/rqw==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-data-science": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.12.tgz", - "integrity": "sha512-vI/mg6cI28IkFcpeINS7cm5M9HWemmXSTnxJiu3nmc4VAGx35SXIEyuLGBcsVzySvDablFYf4hsEpmg1XpVsUQ==", + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@cspell/dict-data-science/-/dict-data-science-2.0.13.tgz", + "integrity": "sha512-l1HMEhBJkPmw4I2YGVu2eBSKM89K9pVF+N6qIr5Uo5H3O979jVodtuwP8I7LyPrJnC6nz28oxeGRCLh9xC5CVA==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-django": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.5.tgz", - "integrity": "sha512-AvTWu99doU3T8ifoMYOMLW2CXKvyKLukPh1auOPwFGHzueWYvBBN+OxF8wF7XwjTBMMeRleVdLh3aWCDEX/ZWg==", + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/@cspell/dict-django/-/dict-django-4.1.6.tgz", + "integrity": "sha512-SdbSFDGy9ulETqNz15oWv2+kpWLlk8DJYd573xhIkeRdcXOjskRuxjSZPKfW7O3NxN/KEf3gm3IevVOiNuFS+w==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-docker": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.16.tgz", - "integrity": "sha512-UiVQ5RmCg6j0qGIxrBnai3pIB+aYKL3zaJGvXk1O/ertTKJif9RZikKXCEgqhaCYMweM4fuLqWSVmw3hU164Iw==", + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-docker/-/dict-docker-1.1.17.tgz", + "integrity": "sha512-OcnVTIpHIYYKhztNTyK8ShAnXTfnqs43hVH6p0py0wlcwRIXe5uj4f12n7zPf2CeBI7JAlPjEsV0Rlf4hbz/xQ==", "dev": true, "license": "MIT" }, @@ -604,30 +604,30 @@ "license": "MIT" }, "node_modules/@cspell/dict-en_us": { - "version": "4.4.24", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.24.tgz", - "integrity": "sha512-JE+/H2YicHJTneRmgH4GSI21rS+1yGZVl1jfOQgl8iHLC+yTTMtCvueNDMK94CgJACzYAoCsQB70MqiFJJfjLQ==", + "version": "4.4.26", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.26.tgz", + "integrity": "sha512-rpjM87n2e3PN3mx9SbzQOIniEWUKewZj0xFA796Pzeu3gJlYsHsSkZZC6Jxdea2992EfrzJZYwJb+mjxa3gWGg==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-en-common-misspellings": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.8.tgz", - "integrity": "sha512-vDsjRFPQGuAADAiitf82z9Mz3DcqKZi6V5hPAEIFkLLKjFVBcjUsSq59SfL59ElIFb76MtBO0BLifdEbBj+DoQ==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-common-misspellings/-/dict-en-common-misspellings-2.1.10.tgz", + "integrity": "sha512-+S10oo15G3Axz1W4FGmYNq9u0xxS6OhNl9dXY3qjYBOqhzfF3l1oM/TpkfH/1NH31r3GneuPVXKXT7y16qwJYA==", "dev": true, "license": "CC BY-SA 4.0" }, "node_modules/@cspell/dict-en-gb-mit": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.14.tgz", - "integrity": "sha512-b+vEerlHP6rnNf30tmTJb7JZnOq4WAslYUvexOz/L3gDna9YJN3bAnwRJ3At3bdcOcMG7PTv3Pi+C73IR22lNg==", + "version": "3.1.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.15.tgz", + "integrity": "sha512-iF1KPSULjpAbtmPFTzyykytQPliBw5Qc7EVt5a/cdpJ/WBnosjBKHj0/svESc+enQoxq7bMcmhL9qJeGHQAWyQ==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-filetypes": { - "version": "3.0.14", - "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.14.tgz", - "integrity": "sha512-KSXaSMYYNMLLdHEnju1DyRRH3eQWPRYRnOXpuHUdOh2jC44VgQoxyMU7oB3NAhDhZKBPCihabzECsAGFbdKfEA==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@cspell/dict-filetypes/-/dict-filetypes-3.0.15.tgz", + "integrity": "sha512-uDMeqYlLlK476w/muEFQGBy9BdQWS0mQ7BJiy/iQv5XUWZxE2O54ZQd9nW8GyQMzAgoyg5SG4hf9l039Qt66oA==", "dev": true, "license": "MIT" }, @@ -674,9 +674,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-golang": { - "version": "6.0.24", - "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.24.tgz", - "integrity": "sha512-rY7PlC3MsHozmjrZWi0HQPUl0BVCV0+mwK0rnMT7pOIXqOe4tWCYMULDIsEk4F0gbIxb5badd2dkCPDYjLnDgA==", + "version": "6.0.25", + "resolved": "https://registry.npmjs.org/@cspell/dict-golang/-/dict-golang-6.0.25.tgz", + "integrity": "sha512-Q0mkUj1mFN1P5LZoKBeTLOQehlHMYv62K0Px9FS7qykSvZjBz44bhCezJuepTPCiCFqmwQgT2fc3Ixw+fhO6pQ==", "dev": true, "license": "MIT" }, @@ -695,16 +695,16 @@ "license": "MIT" }, "node_modules/@cspell/dict-html": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.13.tgz", - "integrity": "sha512-vHzk2xfqQYPvoXtQtywa6ekIonPrUEwe2uftjry3UNRNl89TtzLJVSkiymKJ3WMb+W/DwKXKIb1tKzcIS8ccIg==", + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-html/-/dict-html-4.0.14.tgz", + "integrity": "sha512-2bf7n+kS92g+cMKV0wr9o/Oq9n8JzU7CcrB96gIh2GHgnF+0xDOqO2W/1KeFAqOfqosoOVE48t+4dnEMkkoJ2Q==", "dev": true, "license": "MIT" }, "node_modules/@cspell/dict-html-symbol-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.4.tgz", - "integrity": "sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@cspell/dict-html-symbol-entities/-/dict-html-symbol-entities-4.0.5.tgz", + "integrity": "sha512-429alTD4cE0FIwpMucvSN35Ld87HCyuM8mF731KU5Rm4Je2SG6hmVx7nkBsLyrmH3sQukTcr1GaiZsiEg8svPA==", "dev": true, "license": "MIT" }, @@ -765,22 +765,22 @@ "license": "MIT" }, "node_modules/@cspell/dict-markdown": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.13.tgz", - "integrity": "sha512-rFeGikf+lVlywEp7giATUfi8myFeee6jqgbUgtdIdl/OBmRBPe5m7mKNk7yMItMZe8ICrwMxFwJy5OeTnrr6QA==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@cspell/dict-markdown/-/dict-markdown-2.0.14.tgz", + "integrity": "sha512-uLKPNJsUcumMQTsZZgAK9RgDLyQhUz/uvbQTEkvF/Q4XfC1i/BnA8XrOrd0+Vp6+tPOKyA+omI5LRWfMu5K/Lw==", "dev": true, "license": "MIT", "peerDependencies": { - "@cspell/dict-css": "^4.0.18", - "@cspell/dict-html": "^4.0.13", - "@cspell/dict-html-symbol-entities": "^4.0.4", + "@cspell/dict-css": "^4.0.19", + "@cspell/dict-html": "^4.0.14", + "@cspell/dict-html-symbol-entities": "^4.0.5", "@cspell/dict-typescript": "^3.2.3" } }, "node_modules/@cspell/dict-monkeyc": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.11.tgz", - "integrity": "sha512-7Q1Ncu0urALI6dPTrEbSTd//UK0qjRBeaxhnm8uY5fgYNFYAG+u4gtnTIo59S6Bw5P++4H3DiIDYoQdY/lha8w==", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@cspell/dict-monkeyc/-/dict-monkeyc-1.0.12.tgz", + "integrity": "sha512-MN7Vs11TdP5mbdNFQP5x2Ac8zOBm97ARg6zM5Sb53YQt/eMvXOMvrep7+/+8NJXs0jkp70bBzjqU4APcqBFNAw==", "dev": true, "license": "MIT" }, @@ -792,9 +792,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.25", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.25.tgz", - "integrity": "sha512-jxhVxM3+ilxbum/N2ejAvVuvet1OrGeW1fD7GagAkHU/2zlzINZkJLDtXk6v1WHUjigfhiAsois3puobv/2A1A==", + "version": "5.2.27", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.27.tgz", + "integrity": "sha512-REy2vRQ9BJkjoW8cEr8ewoJAZ0DsTh+TimJ58KgIG1d81caanNgdvKLSgDkPd8OlGxPfLKHe7o2TJuk/l7VqhA==", "dev": true, "license": "MIT" }, @@ -820,13 +820,13 @@ "license": "MIT" }, "node_modules/@cspell/dict-python": { - "version": "4.2.23", - "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.23.tgz", - "integrity": "sha512-c0C//tmG4PZWeONtTBPXa6q0ylfz3/BgEcHAR1L0BPWjNUIzTyx9J+hEIUCPYf7eAPeYjaDuTvYlg11igXXE4Q==", + "version": "4.2.24", + "resolved": "https://registry.npmjs.org/@cspell/dict-python/-/dict-python-4.2.24.tgz", + "integrity": "sha512-B1oXYTa0+3sKOvx/svwxFaT3MrkHJ7ZLWpA1N7ZyHoET7IJhLCwcfAu7DCTq1f24Wnd4t+ARJvPEmFbMx65VBw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/dict-data-science": "^2.0.12" + "@cspell/dict-data-science": "^2.0.13" } }, "node_modules/@cspell/dict-r": { @@ -844,9 +844,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-rust": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.0.12.tgz", - "integrity": "sha512-z2QiH+q9UlNhobBJArvILRxV8Jz0pKIK7gqu4TgmEYyjiu1TvnGZ1tbYHeu9w3I/wOP6UMDoCBTty5AlYfW0mw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.1.0.tgz", + "integrity": "sha512-ysFxxKc3QjPWtPacbwxzz8sDOACHNShlhQpnBsDXAHN3LogmuBsQtfyuU30APqFjCOg9KwGciKYC/hcGxJCbiA==", "dev": true, "license": "MIT" }, @@ -865,9 +865,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-software-terms": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.15.tgz", - "integrity": "sha512-93VqazVvVtHuKY7seGxbfdtrnPBgZ/hZ/NmFFkBRhkRL6NavaQ6U2QsHpnlVEZN5km3DmaQy1X4ZcvNoSTK/ZQ==", + "version": "5.1.18", + "resolved": "https://registry.npmjs.org/@cspell/dict-software-terms/-/dict-software-terms-5.1.18.tgz", + "integrity": "sha512-+RUM+DnRnGzDjnJrAEiEQnopPGBXQ5kUY9t38WdTVYVgkpIE0/dcMX+s5uAp7vvKezhU6gW+CGW5K5xdF2KKiw==", "dev": true, "license": "MIT" }, @@ -1439,9 +1439,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, "license": "MIT", "engines": { @@ -1514,9 +1514,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1526,7 +1526,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -1678,9 +1678,9 @@ } }, "node_modules/@iconify-json/simple-icons": { - "version": "1.2.53", - "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.53.tgz", - "integrity": "sha512-8GEW5mshsPAZpVAJmkBG/niR2qn8t4U03Wmz6aSD9R4VMZKTECqbOxH3z4inA0JfZOoTvP4qoK9T2VXAx2Xg5g==", + "version": "1.2.63", + "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.63.tgz", + "integrity": "sha512-xZl2UWCwE58VlqZ+pDPmaUhE2tq8MVSTJRr4/9nzzHlDdjJ0Ud1VxNXPrwTSgESKY29iCQw3S0r2nJTSNNngHw==", "dev": true, "license": "CC0-1.0", "dependencies": { @@ -2035,9 +2035,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.2.tgz", - "integrity": "sha512-o3pcKzJgSGt4d74lSZ+OCnHwkKBeAbFDmbEm5gg70eA8VkyCuC/zV9TwBnmw6VjDlRdF4Pshfb+WE9E6XY1PoQ==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz", + "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==", "cpu": [ "arm" ], @@ -2049,9 +2049,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.2.tgz", - "integrity": "sha512-cqFSWO5tX2vhC9hJTK8WAiPIm4Q8q/cU8j2HQA0L3E1uXvBYbOZMhE2oFL8n2pKB5sOCHY6bBuHaRwG7TkfJyw==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz", + "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==", "cpu": [ "arm64" ], @@ -2063,9 +2063,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.2.tgz", - "integrity": "sha512-vngduywkkv8Fkh3wIZf5nFPXzWsNsVu1kvtLETWxTFf/5opZmflgVSeLgdHR56RQh71xhPhWoOkEBvbehwTlVA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz", + "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==", "cpu": [ "arm64" ], @@ -2077,9 +2077,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.2.tgz", - "integrity": "sha512-h11KikYrUCYTrDj6h939hhMNlqU2fo/X4NB0OZcys3fya49o1hmFaczAiJWVAFgrM1NCP6RrO7lQKeVYSKBPSQ==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz", + "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==", "cpu": [ "x64" ], @@ -2091,9 +2091,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.2.tgz", - "integrity": "sha512-/eg4CI61ZUkLXxMHyVlmlGrSQZ34xqWlZNW43IAU4RmdzWEx0mQJ2mN/Cx4IHLVZFL6UBGAh+/GXhgvGb+nVxw==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz", + "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==", "cpu": [ "arm64" ], @@ -2105,9 +2105,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.2.tgz", - "integrity": "sha512-QOWgFH5X9+p+S1NAfOqc0z8qEpJIoUHf7OWjNUGOeW18Mx22lAUOiA9b6r2/vpzLdfxi/f+VWsYjUOMCcYh0Ng==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz", + "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==", "cpu": [ "x64" ], @@ -2119,9 +2119,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.2.tgz", - "integrity": "sha512-kDWSPafToDd8LcBYd1t5jw7bD5Ojcu12S3uT372e5HKPzQt532vW+rGFFOaiR0opxePyUkHrwz8iWYEyH1IIQA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz", + "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==", "cpu": [ "arm" ], @@ -2133,9 +2133,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.2.tgz", - "integrity": "sha512-gKm7Mk9wCv6/rkzwCiUC4KnevYhlf8ztBrDRT9g/u//1fZLapSRc+eDZj2Eu2wpJ+0RzUKgtNijnVIB4ZxyL+w==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz", + "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==", "cpu": [ "arm" ], @@ -2147,9 +2147,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.2.tgz", - "integrity": "sha512-66lA8vnj5mB/rtDNwPgrrKUOtCLVQypkyDa2gMfOefXK6rcZAxKLO9Fy3GkW8VkPnENv9hBkNOFfGLf6rNKGUg==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz", + "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==", "cpu": [ "arm64" ], @@ -2161,9 +2161,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.2.tgz", - "integrity": "sha512-s+OPucLNdJHvuZHuIz2WwncJ+SfWHFEmlC5nKMUgAelUeBUnlB4wt7rXWiyG4Zn07uY2Dd+SGyVa9oyLkVGOjA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz", + "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==", "cpu": [ "arm64" ], @@ -2175,9 +2175,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.2.tgz", - "integrity": "sha512-8wTRM3+gVMDLLDdaT6tKmOE3lJyRy9NpJUS/ZRWmLCmOPIJhVyXwjBo+XbrrwtV33Em1/eCTd5TuGJm4+DmYjw==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz", + "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==", "cpu": [ "loong64" ], @@ -2189,9 +2189,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.2.tgz", - "integrity": "sha512-6yqEfgJ1anIeuP2P/zhtfBlDpXUb80t8DpbYwXQ3bQd95JMvUaqiX+fKqYqUwZXqdJDd8xdilNtsHM2N0cFm6A==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz", + "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==", "cpu": [ "ppc64" ], @@ -2203,9 +2203,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.2.tgz", - "integrity": "sha512-sshYUiYVSEI2B6dp4jMncwxbrUqRdNApF2c3bhtLAU0qA8Lrri0p0NauOsTWh3yCCCDyBOjESHMExonp7Nzc0w==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz", + "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==", "cpu": [ "riscv64" ], @@ -2217,9 +2217,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.2.tgz", - "integrity": "sha512-duBLgd+3pqC4MMwBrKkFxaZerUxZcYApQVC5SdbF5/e/589GwVvlRUnyqMFbM8iUSb1BaoX/3fRL7hB9m2Pj8Q==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz", + "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==", "cpu": [ "riscv64" ], @@ -2231,9 +2231,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.2.tgz", - "integrity": "sha512-tzhYJJidDUVGMgVyE+PmxENPHlvvqm1KILjjZhB8/xHYqAGeizh3GBGf9u6WdJpZrz1aCpIIHG0LgJgH9rVjHQ==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz", + "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==", "cpu": [ "s390x" ], @@ -2245,9 +2245,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.2.tgz", - "integrity": "sha512-opH8GSUuVcCSSyHHcl5hELrmnk4waZoVpgn/4FDao9iyE4WpQhyWJ5ryl5M3ocp4qkRuHfyXnGqg8M9oKCEKRA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz", + "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==", "cpu": [ "x64" ], @@ -2259,9 +2259,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.2.tgz", - "integrity": "sha512-LSeBHnGli1pPKVJ79ZVJgeZWWZXkEe/5o8kcn23M8eMKCUANejchJbF/JqzM4RRjOJfNRhKJk8FuqL1GKjF5oQ==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz", + "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==", "cpu": [ "x64" ], @@ -2273,9 +2273,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.2.tgz", - "integrity": "sha512-uPj7MQ6/s+/GOpolavm6BPo+6CbhbKYyZHUDvZ/SmJM7pfDBgdGisFX3bY/CBDMg2ZO4utfhlApkSfZ92yXw7Q==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz", + "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==", "cpu": [ "arm64" ], @@ -2287,9 +2287,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.2.tgz", - "integrity": "sha512-Z9MUCrSgIaUeeHAiNkm3cQyst2UhzjPraR3gYYfOjAuZI7tcFRTOD+4cHLPoS/3qinchth+V56vtqz1Tv+6KPA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz", + "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==", "cpu": [ "arm64" ], @@ -2301,9 +2301,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.2.tgz", - "integrity": "sha512-+GnYBmpjldD3XQd+HMejo+0gJGwYIOfFeoBQv32xF/RUIvccUz20/V6Otdv+57NE70D5pa8W/jVGDoGq0oON4A==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz", + "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==", "cpu": [ "ia32" ], @@ -2315,9 +2315,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.2.tgz", - "integrity": "sha512-ApXFKluSB6kDQkAqZOKXBjiaqdF1BlKi+/eqnYe9Ee7U2K3pUDKsIyr8EYm/QDHTJIM+4X+lI0gJc3TTRhd+dA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz", + "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==", "cpu": [ "x64" ], @@ -2329,9 +2329,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.2.tgz", - "integrity": "sha512-ARz+Bs8kY6FtitYM96PqPEVvPXqEZmPZsSkXvyX19YzDqkCaIlhCieLLMI5hxO9SRZ2XtCtm8wxhy0iJ2jxNfw==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz", + "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==", "cpu": [ "x64" ], @@ -2375,9 +2375,9 @@ } }, "node_modules/@sap/cds-compiler": { - "version": "6.3.6", - "resolved": "https://registry.npmjs.org/@sap/cds-compiler/-/cds-compiler-6.3.6.tgz", - "integrity": "sha512-4fiABVwuwUiZh0QpdQGor7e5Ld2SBOABvBHg8oqM2JsEtAcmnvTfStewETpgEBW63u8jRltcSEA6s59JH+qWwQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@sap/cds-compiler/-/cds-compiler-6.6.0.tgz", + "integrity": "sha512-cttVQhuzobLsnaGjmCz6gOXdUdHRawTbUK8UsUPnOIOboAOJRvLbrX4RF/iY6VxewpupDcx+FhfDCbAupO3EwQ==", "dev": true, "license": "SEE LICENSE IN LICENSE", "bin": { @@ -2390,114 +2390,70 @@ } }, "node_modules/@sap/cds-fiori": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@sap/cds-fiori/-/cds-fiori-2.0.1.tgz", - "integrity": "sha512-KZVLWXndydgqdlao8OL1gtgd/XMgBdiKBmmgwGpBL1y4S21FOXglnWh6d3bnSZL/qwR3z50D+0PoGghjhayF0Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@sap/cds-fiori/-/cds-fiori-2.1.1.tgz", + "integrity": "sha512-X+4v4LBAT8HIt0zr28/kJNS15nlNlcM97vAMW+agLrmK134nyBiMwUMcp8BMhxlG9B2PykrnAKH56D9O3tfoBg==", "dev": true, "license": "SEE LICENSE IN LICENSE", "peerDependencies": { "@sap/cds": ">=8", - "express": ">=4" + "express": "^4" } }, "node_modules/@shikijs/core": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.13.0.tgz", - "integrity": "sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.20.0.tgz", + "integrity": "sha512-f2ED7HYV4JEk827mtMDwe/yQ25pRiXZmtHjWF8uzZKuKiEsJR7Ce1nuQ+HhV9FzDcbIo4ObBCD9GPTzNuy9S1g==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.13.0", + "@shikijs/types": "3.20.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": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.5.0.tgz", - "integrity": "sha512-VjnOpnQf8WuCEZtNUdjjwGUbtAVKuZkVQ/5cHy/tojVVRIRtlWMYVjyWhxOmIq05AlSOv72z7hRNRGVBgQOl0w==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.20.0.tgz", + "integrity": "sha512-OFx8fHAZuk7I42Z9YAdZ95To6jDePQ9Rnfbw9uSRTSbBhYBp1kEOKv/3jOimcj3VRUKusDYM6DswLauwfhboLg==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "2.5.0", + "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^3.1.0" - } - }, - "node_modules/@shikijs/engine-javascript/node_modules/@shikijs/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", - "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "oniguruma-to-es": "^4.3.4" } }, "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==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.20.0.tgz", + "integrity": "sha512-Yx3gy7xLzM0ZOjqoxciHjA7dAt5tyzJE3L4uQoM83agahy+PlW244XJSrmJRSBvGYELDhYXPacD4R/cauV5bzQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "2.5.0", + "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2" } }, - "node_modules/@shikijs/engine-oniguruma/node_modules/@shikijs/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", - "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, "node_modules/@shikijs/langs": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", - "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.20.0.tgz", + "integrity": "sha512-le+bssCxcSHrygCWuOrYJHvjus6zhQ2K7q/0mgjiffRbkhM4o1EWu2m+29l0yEsHDbWaWPNnDUTRVVBvBBeKaA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/langs/node_modules/@shikijs/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", - "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "@shikijs/types": "3.20.0" } }, "node_modules/@shikijs/themes": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", - "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.20.0.tgz", + "integrity": "sha512-U1NSU7Sl26Q7ErRvJUouArxfM2euWqq1xaSrbqMu2iqa+tSp0D1Yah8216sDYbdDHw4C8b75UpE65eWorm2erQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "2.5.0" - } - }, - "node_modules/@shikijs/themes/node_modules/@shikijs/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", - "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" + "@shikijs/types": "3.20.0" } }, "node_modules/@shikijs/transformers": { @@ -2526,6 +2482,29 @@ "hast-util-to-html": "^9.0.4" } }, + "node_modules/@shikijs/transformers/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/@shikijs/transformers/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" + } + }, "node_modules/@shikijs/transformers/node_modules/@shikijs/types": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", @@ -2537,46 +2516,37 @@ "@types/hast": "^3.0.4" } }, - "node_modules/@shikijs/twoslash": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.13.0.tgz", - "integrity": "sha512-OmNKNoZ8Hevt4VKQHfJL+hrsrqLSnW/Nz7RMutuBqXBCIYZWk80HnF9pcXEwRmy9MN0MGRmZCW2rDDP8K7Bxkw==", + "node_modules/@shikijs/transformers/node_modules/oniguruma-to-es": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.13.0", - "@shikijs/types": "3.13.0", - "twoslash": "^0.3.4" - }, - "peerDependencies": { - "typescript": ">=5.5.0" + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" } }, - "node_modules/@shikijs/twoslash/node_modules/twoslash": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.4.tgz", - "integrity": "sha512-RtJURJlGRxrkJmTcZMjpr7jdYly1rfgpujJr1sBM9ch7SKVht/SjFk23IOAyvwT1NLCk+SJiMrvW4rIAUM2Wug==", + "node_modules/@shikijs/twoslash": { + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.20.0.tgz", + "integrity": "sha512-fZz6vB9a0M8iuVF/ydIV4ToC09sbOh/TqxXZFWAh5J8bLiPsyQGtygKMDQ9L0Sdop3co0TIC/JsrLmsbmZwwsw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript/vfs": "^1.6.1", - "twoslash-protocol": "0.3.4" + "@shikijs/core": "3.20.0", + "@shikijs/types": "3.20.0", + "twoslash": "^0.3.4" }, "peerDependencies": { - "typescript": "^5.5.0" + "typescript": ">=5.5.0" } }, - "node_modules/@shikijs/twoslash/node_modules/twoslash-protocol": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.3.4.tgz", - "integrity": "sha512-HHd7lzZNLUvjPzG/IE6js502gEzLC1x7HaO1up/f72d8G8ScWAs9Yfa97igelQRDl5h9tGcdFsRp+lNVre1EeQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@shikijs/types": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.13.0.tgz", - "integrity": "sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.20.0.tgz", + "integrity": "sha512-lhYAATn10nkZcBQ0BlzSbJA3wcmL5MXUUF8d2Zzon6saZDlToKaiRX60n2+ZaHJCmXEcZRWNzn+k9vplr8Jhsw==", "dev": true, "license": "MIT", "dependencies": { @@ -2585,21 +2555,25 @@ } }, "node_modules/@shikijs/vitepress-twoslash": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-2.5.0.tgz", - "integrity": "sha512-q/HUykPsvOOfaa+eWucu2/wFT/+hpIbBEYMneeR/VInBT05dDU3WlBb3ioEkUAmL7gyH9UiVK8e6u14zZNefeA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-3.20.0.tgz", + "integrity": "sha512-MuQJ8BrJv0q5nbgNVby2QjEy7EDMMChFE915wAh9EjtfsCiZ3oqkkJWvZZjPjp04udGnp4EDhWPwCn6BEw3tkg==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/twoslash": "", + "@shikijs/twoslash": "3.20.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", "mdast-util-gfm": "^3.1.0", - "mdast-util-to-hast": "^13.2.0", - "shiki": "2.5.0", - "twoslash": "^0.2.12", - "twoslash-vue": "^0.2.12", - "vue": "^3.5.13" + "mdast-util-to-hast": "^13.2.1", + "ohash": "^2.0.11", + "shiki": "3.20.0", + "twoslash": "^0.3.4", + "twoslash-vue": "^0.3.4", + "vue": "^3.5.25" } }, "node_modules/@shikijs/vscode-textmate": { @@ -2671,9 +2645,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "version": "4.19.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz", + "integrity": "sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==", "dev": true, "license": "MIT", "dependencies": { @@ -2764,13 +2738,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz", - "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.12.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/qs": { @@ -2788,26 +2762,36 @@ "license": "MIT" }, "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "dev": true, "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/unist": { @@ -2967,9 +2951,9 @@ } }, "node_modules/@typescript/vfs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.1.tgz", - "integrity": "sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@typescript/vfs/-/vfs-1.6.2.tgz", + "integrity": "sha512-hoBwJwcbKHmvd2QVebiytN1aELvpk9B74B4L1mFm/XT1Q/VOYAWl2vQ9AWRFtQq8zmz6enTpfTV8WRc4ATjW/g==", "dev": true, "license": "MIT", "dependencies": { @@ -3001,105 +2985,107 @@ } }, "node_modules/@volar/language-core": { - "version": "2.4.23", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.23.tgz", - "integrity": "sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==", + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.27.tgz", + "integrity": "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==", "dev": true, "license": "MIT", "dependencies": { - "@volar/source-map": "2.4.23" + "@volar/source-map": "2.4.27" } }, "node_modules/@volar/source-map": { - "version": "2.4.23", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.23.tgz", - "integrity": "sha512-Z1Uc8IB57Lm6k7q6KIDu/p+JWtf3xsXJqAX/5r18hYOTpJyBn0KXUR8oTJ4WFYOcDzWC9n3IflGgHowx6U6z9Q==", + "version": "2.4.27", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.27.tgz", + "integrity": "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==", "dev": true, "license": "MIT" }, "node_modules/@vue/compiler-core": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.22.tgz", - "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.26.tgz", + "integrity": "sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.4", - "@vue/shared": "3.5.22", - "entities": "^4.5.0", + "@babel/parser": "^7.28.5", + "@vue/shared": "3.5.26", + "entities": "^7.0.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz", + "integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/@vue/compiler-dom": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", - "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.26.tgz", + "integrity": "sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.22", - "@vue/shared": "3.5.22" + "@vue/compiler-core": "3.5.26", + "@vue/shared": "3.5.26" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", - "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.26.tgz", + "integrity": "sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.4", - "@vue/compiler-core": "3.5.22", - "@vue/compiler-dom": "3.5.22", - "@vue/compiler-ssr": "3.5.22", - "@vue/shared": "3.5.22", + "@babel/parser": "^7.28.5", + "@vue/compiler-core": "3.5.26", + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26", "estree-walker": "^2.0.2", - "magic-string": "^0.30.19", + "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", - "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.26.tgz", + "integrity": "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.22", - "@vue/shared": "3.5.22" - } - }, - "node_modules/@vue/compiler-vue2": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", - "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", - "dev": true, - "license": "MIT", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" + "@vue/compiler-dom": "3.5.26", + "@vue/shared": "3.5.26" } }, "node_modules/@vue/devtools-api": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", - "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.9.tgz", + "integrity": "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-kit": "^7.7.7" + "@vue/devtools-kit": "^7.7.9" } }, "node_modules/@vue/devtools-kit": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", - "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.9.tgz", + "integrity": "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-shared": "^7.7.7", + "@vue/devtools-shared": "^7.7.9", "birpc": "^2.3.0", "hookable": "^5.5.3", "mitt": "^3.0.1", @@ -3109,9 +3095,9 @@ } }, "node_modules/@vue/devtools-shared": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", - "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "version": "7.7.9", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.9.tgz", + "integrity": "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==", "dev": true, "license": "MIT", "dependencies": { @@ -3119,82 +3105,73 @@ } }, "node_modules/@vue/language-core": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.1.10.tgz", - "integrity": "sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.1.tgz", + "integrity": "sha512-g6oSenpnGMtpxHGAwKuu7HJJkNZpemK/zg3vZzZbJ6cnnXq1ssxuNrXSsAHYM3NvH8p4IkTw+NLmuxyeYz4r8A==", "dev": true, "license": "MIT", "dependencies": { - "@volar/language-core": "~2.4.8", + "@volar/language-core": "2.4.27", "@vue/compiler-dom": "^3.5.0", - "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.5.0", - "alien-signals": "^0.2.0", - "minimatch": "^9.0.3", + "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "path-browserify": "^1.0.1", + "picomatch": "^4.0.2" } }, "node_modules/@vue/reactivity": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.22.tgz", - "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.26.tgz", + "integrity": "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==", "dev": true, "license": "MIT", "dependencies": { - "@vue/shared": "3.5.22" + "@vue/shared": "3.5.26" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.22.tgz", - "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.26.tgz", + "integrity": "sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.22", - "@vue/shared": "3.5.22" + "@vue/reactivity": "3.5.26", + "@vue/shared": "3.5.26" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz", - "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.26.tgz", + "integrity": "sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.22", - "@vue/runtime-core": "3.5.22", - "@vue/shared": "3.5.22", - "csstype": "^3.1.3" + "@vue/reactivity": "3.5.26", + "@vue/runtime-core": "3.5.26", + "@vue/shared": "3.5.26", + "csstype": "^3.2.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.22.tgz", - "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.26.tgz", + "integrity": "sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.22", - "@vue/shared": "3.5.22" + "@vue/compiler-ssr": "3.5.26", + "@vue/shared": "3.5.26" }, "peerDependencies": { - "vue": "3.5.22" + "vue": "3.5.26" } }, "node_modules/@vue/shared": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.22.tgz", - "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.26.tgz", + "integrity": "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==", "dev": true, "license": "MIT" }, @@ -3370,35 +3347,35 @@ } }, "node_modules/algoliasearch": { - "version": "5.38.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.38.0.tgz", - "integrity": "sha512-8VJKIzheeI9cjuVJhU1hYEVetOTe7LvA+CujAI7yqvYsPtZfVEvv1pg9AeFNtHBg/ZoSLGU5LPijhcY5l3Ea9g==", + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.46.1.tgz", + "integrity": "sha512-39ol8Ulqb3MntofkXHlrcXKyU8BU0PXvQrXPBIX6eXj/EO4VT7651mhGVORI2oF8ydya9nFzT3fYDoqme/KL6w==", "dev": true, "license": "MIT", "dependencies": { - "@algolia/abtesting": "1.4.0", - "@algolia/client-abtesting": "5.38.0", - "@algolia/client-analytics": "5.38.0", - "@algolia/client-common": "5.38.0", - "@algolia/client-insights": "5.38.0", - "@algolia/client-personalization": "5.38.0", - "@algolia/client-query-suggestions": "5.38.0", - "@algolia/client-search": "5.38.0", - "@algolia/ingestion": "1.38.0", - "@algolia/monitoring": "1.38.0", - "@algolia/recommend": "5.38.0", - "@algolia/requester-browser-xhr": "5.38.0", - "@algolia/requester-fetch": "5.38.0", - "@algolia/requester-node-http": "5.38.0" + "@algolia/abtesting": "1.12.1", + "@algolia/client-abtesting": "5.46.1", + "@algolia/client-analytics": "5.46.1", + "@algolia/client-common": "5.46.1", + "@algolia/client-insights": "5.46.1", + "@algolia/client-personalization": "5.46.1", + "@algolia/client-query-suggestions": "5.46.1", + "@algolia/client-search": "5.46.1", + "@algolia/ingestion": "1.46.1", + "@algolia/monitoring": "1.46.1", + "@algolia/recommend": "5.46.1", + "@algolia/requester-browser-xhr": "5.46.1", + "@algolia/requester-fetch": "5.46.1", + "@algolia/requester-node-http": "5.46.1" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/alien-signals": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.2.2.tgz", - "integrity": "sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.1.tgz", + "integrity": "sha512-ogkIWbVrLwKtHY6oOAXaYkAxP+cTH7V5FZ5+Tm4NZFd8VDZ6uNMDrfzqctTZ42eTMCSR3ne3otpcxmqSnFfPYA==", "dev": true, "license": "MIT" }, @@ -3461,9 +3438,9 @@ "license": "MIT" }, "node_modules/birpc": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.6.1.tgz", - "integrity": "sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.9.0.tgz", + "integrity": "sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==", "dev": true, "license": "MIT", "funding": { @@ -3471,25 +3448,25 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "bytes": "3.1.2", + "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.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "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" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -3759,9 +3736,9 @@ } }, "node_modules/comment-json": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.4.1.tgz", - "integrity": "sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/comment-json/-/comment-json-4.5.0.tgz", + "integrity": "sha512-aKl8CwoMKxVTfAK4dFN4v54AEvuUh9pzmgVIBeK6gBomLwMgceQUKKWHzJdW1u1VQXQuwnJ7nJGWYYMTl5U4yg==", "dev": true, "license": "MIT", "dependencies": { @@ -3806,9 +3783,9 @@ } }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", "peer": true, @@ -3817,24 +3794,24 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "dev": true, "license": "MIT", "peer": true }, "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-4.0.5.tgz", + "integrity": "sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==", "dev": true, "license": "MIT", "dependencies": { - "is-what": "^4.1.8" + "is-what": "^5.2.0" }, "engines": { - "node": ">=12.13" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/mesqueeb" @@ -4058,16 +4035,9 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, "license": "MIT" }, @@ -4605,41 +4575,41 @@ } }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "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", + "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", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -4692,9 +4662,9 @@ "license": "MIT" }, "node_modules/fast-equals": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.3.3.tgz", - "integrity": "sha512-/boTcHZeIAQ2r/tL11voclBHDeP9WPxLt+tyAbVSyyXuUFyh0Tne7gJZTqGbxnvj79TjLdCXLOY7UIPhyG5MTw==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", + "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==", "dev": true, "license": "MIT", "engines": { @@ -4768,9 +4738,9 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, "license": "MIT", "peer": true, @@ -4778,9 +4748,9 @@ "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -4865,13 +4835,13 @@ } }, "node_modules/focus-trap": { - "version": "7.6.5", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.5.tgz", - "integrity": "sha512-7Ke1jyybbbPZyZXFxEftUtxFGLMpE2n6A+z//m4CRDlj0hW+o3iYSmh8nFlYMurOiJVDmJRilUQtJr08KfIxlg==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.7.0.tgz", + "integrity": "sha512-DJJDHpEgoSbP8ZE1MNeU2IzCpfFyFdNZZRilqmfH2XiQsPK6PtD8AfJqWzEBudUQB2yHwZc5iq54rjTaGQ+ljw==", "dev": true, "license": "MIT", "dependencies": { - "tabbable": "^6.2.0" + "tabbable": "^6.3.0" } }, "node_modules/forwarded": { @@ -5158,16 +5128,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, "node_modules/hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", @@ -5187,21 +5147,25 @@ } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/iconv-lite": { @@ -5229,9 +5193,9 @@ } }, "node_modules/immutable": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.3.tgz", - "integrity": "sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.4.tgz", + "integrity": "sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==", "dev": true, "license": "MIT" }, @@ -5418,13 +5382,13 @@ } }, "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", + "integrity": "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.13" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/mesqueeb" @@ -5489,9 +5453,9 @@ } }, "node_modules/katex": { - "version": "0.16.22", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", - "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", + "version": "0.16.27", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.27.tgz", + "integrity": "sha512-aeQoDkuRWSqQN6nSvVCEFvfXdqo1OQiCmmW1kc9xSdjutPv7BGO7pqY9sQRJpMOGrEdfDgF2TfRXe5eUAD2Waw==", "dev": true, "funding": [ "https://opencollective.com/katex", @@ -5593,10 +5557,20 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { - "version": "0.30.19", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", - "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5716,6 +5690,19 @@ "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", @@ -5941,9 +5928,9 @@ } }, "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "dev": true, "license": "MIT", "dependencies": { @@ -6791,6 +6778,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==", + "dev": true, + "license": "MIT" + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -6805,14 +6799,21 @@ "node": ">= 0.8" } }, + "node_modules/oniguruma-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz", + "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==", + "dev": true, + "license": "MIT" + }, "node_modules/oniguruma-to-es": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-3.1.1.tgz", - "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex-xs": "^1.0.0", + "oniguruma-parser": "^0.12.1", "regex": "^6.0.1", "regex-recursion": "^6.0.2" } @@ -7010,9 +7011,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", - "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -7024,9 +7025,9 @@ } }, "node_modules/preact": { - "version": "10.27.2", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz", - "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==", + "version": "10.28.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.28.0.tgz", + "integrity": "sha512-rytDAoiXr3+t6OIP3WGlDd0ouCUG1iCWzkcY3++Nreuoi17y6T5i/zRhe6uYfoVcxq6YU+sBtJouuRDsq8vvqA==", "dev": true, "license": "MIT", "funding": { @@ -7091,14 +7092,14 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -7119,17 +7120,17 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -7150,9 +7151,9 @@ } }, "node_modules/regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/regex/-/regex-6.0.1.tgz", - "integrity": "sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/regex/-/regex-6.1.0.tgz", + "integrity": "sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==", "dev": true, "license": "MIT", "dependencies": { @@ -7194,9 +7195,9 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.52.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.2.tgz", - "integrity": "sha512-I25/2QgoROE1vYV+NQ1En9T9UFB9Cmfm2CJ83zZOlaDpvz29wGQSZXWKw7MiNXau7wYgB/T9fVIdIuEQ+KbiiA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz", + "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==", "dev": true, "license": "MIT", "dependencies": { @@ -7210,28 +7211,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.52.2", - "@rollup/rollup-android-arm64": "4.52.2", - "@rollup/rollup-darwin-arm64": "4.52.2", - "@rollup/rollup-darwin-x64": "4.52.2", - "@rollup/rollup-freebsd-arm64": "4.52.2", - "@rollup/rollup-freebsd-x64": "4.52.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.52.2", - "@rollup/rollup-linux-arm-musleabihf": "4.52.2", - "@rollup/rollup-linux-arm64-gnu": "4.52.2", - "@rollup/rollup-linux-arm64-musl": "4.52.2", - "@rollup/rollup-linux-loong64-gnu": "4.52.2", - "@rollup/rollup-linux-ppc64-gnu": "4.52.2", - "@rollup/rollup-linux-riscv64-gnu": "4.52.2", - "@rollup/rollup-linux-riscv64-musl": "4.52.2", - "@rollup/rollup-linux-s390x-gnu": "4.52.2", - "@rollup/rollup-linux-x64-gnu": "4.52.2", - "@rollup/rollup-linux-x64-musl": "4.52.2", - "@rollup/rollup-openharmony-arm64": "4.52.2", - "@rollup/rollup-win32-arm64-msvc": "4.52.2", - "@rollup/rollup-win32-ia32-msvc": "4.52.2", - "@rollup/rollup-win32-x64-gnu": "4.52.2", - "@rollup/rollup-win32-x64-msvc": "4.52.2", + "@rollup/rollup-android-arm-eabi": "4.54.0", + "@rollup/rollup-android-arm64": "4.54.0", + "@rollup/rollup-darwin-arm64": "4.54.0", + "@rollup/rollup-darwin-x64": "4.54.0", + "@rollup/rollup-freebsd-arm64": "4.54.0", + "@rollup/rollup-freebsd-x64": "4.54.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.54.0", + "@rollup/rollup-linux-arm-musleabihf": "4.54.0", + "@rollup/rollup-linux-arm64-gnu": "4.54.0", + "@rollup/rollup-linux-arm64-musl": "4.54.0", + "@rollup/rollup-linux-loong64-gnu": "4.54.0", + "@rollup/rollup-linux-ppc64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-musl": "4.54.0", + "@rollup/rollup-linux-s390x-gnu": "4.54.0", + "@rollup/rollup-linux-x64-gnu": "4.54.0", + "@rollup/rollup-linux-x64-musl": "4.54.0", + "@rollup/rollup-openharmony-arm64": "4.54.0", + "@rollup/rollup-win32-arm64-msvc": "4.54.0", + "@rollup/rollup-win32-ia32-msvc": "4.54.0", + "@rollup/rollup-win32-x64-gnu": "4.54.0", + "@rollup/rollup-win32-x64-msvc": "4.54.0", "fsevents": "~2.3.2" } }, @@ -7282,9 +7283,9 @@ "peer": true }, "node_modules/sass": { - "version": "1.97.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.0.tgz", - "integrity": "sha512-KR0igP1z4avUJetEuIeOdDlwaUDvkH8wSx7FdSjyYBS3dpyX3TzHfAMO0G1Q4/3cdjcmi3r7idh+KCmKqS+KeQ==", + "version": "1.97.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.97.1.tgz", + "integrity": "sha512-uf6HoO8fy6ClsrShvMgaKUn14f2EHQLQRtpsZZLeU/Mv0Q1K5P0+x2uvH6Cub39TVVbWNSrraUhDAoFph6vh0A==", "dev": true, "license": "MIT", "dependencies": { @@ -7338,9 +7339,9 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, "license": "MIT", "peer": true, @@ -7348,16 +7349,16 @@ "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" @@ -7382,21 +7383,10 @@ "license": "MIT", "peer": true }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, "license": "MIT", "peer": true, @@ -7404,7 +7394,7 @@ "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" @@ -7442,44 +7432,18 @@ } }, "node_modules/shiki": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", - "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "2.5.0", - "@shikijs/engine-javascript": "2.5.0", - "@shikijs/engine-oniguruma": "2.5.0", - "@shikijs/langs": "2.5.0", - "@shikijs/themes": "2.5.0", - "@shikijs/types": "2.5.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/shiki/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/shiki/node_modules/@shikijs/types": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", - "integrity": "sha512-ygl5yhxki9ZLNuNpPitBWvcy9fsSKKaRuO4BAlMyagszQidxcpLAr0qiW/q43DtSIDxO6hEbtYLiFZNXO/hdGw==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.20.0.tgz", + "integrity": "sha512-kgCOlsnyWb+p0WU+01RjkCH+eBVsjL1jOwUYWv0YDWkM2/A46+LDKVs5yZCUXjJG6bj4ndFoAg5iLIIue6dulg==", "dev": true, "license": "MIT", "dependencies": { + "@shikijs/core": "3.20.0", + "@shikijs/engine-javascript": "3.20.0", + "@shikijs/engine-oniguruma": "3.20.0", + "@shikijs/langs": "3.20.0", + "@shikijs/themes": "3.20.0", + "@shikijs/types": "3.20.0", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } @@ -7565,9 +7529,9 @@ } }, "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==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.6.0.tgz", + "integrity": "sha512-4zemZi0HvTnYwLfrpk/CF9LOd9Lt87kAt50GnqhMpyF9U3poDAP2+iukq2bZsO/ufegbYehBkqINbsWxj4l4cw==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -7616,9 +7580,9 @@ "license": "BSD-3-Clause" }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, "license": "MIT", "peer": true, @@ -7698,13 +7662,13 @@ } }, "node_modules/superjson": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", - "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.6.tgz", + "integrity": "sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==", "dev": true, "license": "MIT", "dependencies": { - "copy-anything": "^3.0.2" + "copy-anything": "^4" }, "engines": { "node": ">=16" @@ -7724,9 +7688,9 @@ } }, "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.3.0.tgz", + "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==", "dev": true, "license": "MIT" }, @@ -7797,42 +7761,42 @@ } }, "node_modules/twoslash": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.2.12.tgz", - "integrity": "sha512-tEHPASMqi7kqwfJbkk7hc/4EhlrKCSLcur+TcvYki3vhIfaRMXnXjaYFgXpoZRbT6GdprD4tGuVBEmTpUgLBsw==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash/-/twoslash-0.3.6.tgz", + "integrity": "sha512-VuI5OKl+MaUO9UIW3rXKoPgHI3X40ZgB/j12VY6h98Ae1mCBihjPvhOPeJWlxCYcmSbmeZt5ZKkK0dsVtp+6pA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript/vfs": "^1.6.0", - "twoslash-protocol": "0.2.12" + "@typescript/vfs": "^1.6.2", + "twoslash-protocol": "0.3.6" }, "peerDependencies": { - "typescript": "*" + "typescript": "^5.5.0" } }, "node_modules/twoslash-protocol": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.2.12.tgz", - "integrity": "sha512-5qZLXVYfZ9ABdjqbvPc4RWMr7PrpPaaDSeaYY55vl/w1j6H6kzsWK/urAEIXlzYlyrFmyz1UbwIt+AA0ck+wbg==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash-protocol/-/twoslash-protocol-0.3.6.tgz", + "integrity": "sha512-FHGsJ9Q+EsNr5bEbgG3hnbkvEBdW5STgPU824AHUjB4kw0Dn4p8tABT7Ncg1Ie6V0+mDg3Qpy41VafZXcQhWMA==", "dev": true, "license": "MIT" }, "node_modules/twoslash-vue": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/twoslash-vue/-/twoslash-vue-0.2.12.tgz", - "integrity": "sha512-kxH60DLn2QBcN2wjqxgMDkyRgmPXsytv7fJIlsyFMDPSkm1/lMrI/UMrNAshNaRHcI+hv8x3h/WBgcvlb2RNAQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/twoslash-vue/-/twoslash-vue-0.3.6.tgz", + "integrity": "sha512-HXYxU+Y7jZiMXJN4980fQNMYflLD8uqKey1qVW5ri8bqYTm2t5ILmOoCOli7esdCHlMq4/No3iQUWBWDhZNs9w==", "dev": true, "license": "MIT", "dependencies": { - "@vue/language-core": "~2.1.6", - "twoslash": "0.2.12", - "twoslash-protocol": "0.2.12" + "@vue/language-core": "^3.2.0", + "twoslash": "0.3.6", + "twoslash-protocol": "0.3.6" }, "funding": { "url": "https://github.com/sponsors/antfu" }, "peerDependencies": { - "typescript": "*" + "typescript": "^5.5.0" } }, "node_modules/type-check": { @@ -7864,9 +7828,9 @@ } }, "node_modules/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -7886,16 +7850,16 @@ "license": "MIT" }, "node_modules/undici-types": { - "version": "7.12.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", - "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "dev": true, "license": "MIT", "dependencies": { @@ -7951,9 +7915,9 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8046,9 +8010,9 @@ } }, "node_modules/vite": { - "version": "5.4.20", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.20.tgz", - "integrity": "sha512-j3lYzGC3P+B5Yfy/pfKNgVEg4+UtcIJcVRt2cDjIOmhLourAqPqf8P7acgxeiSgUB7E3p2P8/3gNIgDLpwzs4g==", + "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": { @@ -8162,6 +8126,49 @@ "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" + } + }, + "node_modules/vitepress/node_modules/@shikijs/langs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.5.0.tgz", + "integrity": "sha512-Qfrrt5OsNH5R+5tJ/3uYBBZv3SuGmnRPejV9IlIbFH3HTGLDlkqgHymAlzklVmKBjAaVmkPkyikAV/sQ1wSL+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, + "node_modules/vitepress/node_modules/@shikijs/themes": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.5.0.tgz", + "integrity": "sha512-wGrk+R8tJnO0VMzmUExHR+QdSaPUl/NKs+a4cQQRWyoc3YFbUzuLEi/KWK1hj+8BfHRKm2jNhhJck1dfstJpiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "2.5.0" + } + }, "node_modules/vitepress/node_modules/@shikijs/types": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.5.0.tgz", @@ -8173,6 +8180,35 @@ "@types/hast": "^3.0.4" } }, + "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", + "integrity": "sha512-bUH8SDvPkH3ho3dvwJwfonjlQ4R80vjyvrU8YpxuROddv55vAEJrTuCuCVUhhsHbtlD9tGGbaNApGQckXhS8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex-xs": "^1.0.0", + "regex": "^6.0.1", + "regex-recursion": "^6.0.2" + } + }, + "node_modules/vitepress/node_modules/shiki": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.5.0.tgz", + "integrity": "sha512-mI//trrsaiCIPsja5CNfsyNOqgAZUb6VpJA+340toL42UpzQlXpwRV9nch69X6gaUxrr9kaOOa6e3y3uAkGFxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/core": "2.5.0", + "@shikijs/engine-javascript": "2.5.0", + "@shikijs/engine-oniguruma": "2.5.0", + "@shikijs/langs": "2.5.0", + "@shikijs/themes": "2.5.0", + "@shikijs/types": "2.5.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, "node_modules/vscode-languageserver-textdocument": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", @@ -8188,17 +8224,17 @@ "license": "MIT" }, "node_modules/vue": { - "version": "3.5.22", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.22.tgz", - "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", + "version": "3.5.26", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.26.tgz", + "integrity": "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.22", - "@vue/compiler-sfc": "3.5.22", - "@vue/runtime-dom": "3.5.22", - "@vue/server-renderer": "3.5.22", - "@vue/shared": "3.5.22" + "@vue/compiler-dom": "3.5.26", + "@vue/compiler-sfc": "3.5.26", + "@vue/runtime-dom": "3.5.26", + "@vue/server-renderer": "3.5.26", + "@vue/shared": "3.5.26" }, "peerDependencies": { "typescript": "*" diff --git a/plugins/_menu.md b/plugins/_menu.md new file mode 100644 index 0000000000..cc3dfb47c0 --- /dev/null +++ b/plugins/_menu.md @@ -0,0 +1,16 @@ + +# [Overview](index.md) +# [OData v2 Adapter](index#odata-v2-proxy) +# [WebSocket](index#websocket) +# [UI5 Dev Server](index#ui5-dev-server) +# [GraphQL Adapter](index#graphql-adapter) +# [Attachments](index#attachments) +# [SAP Document Management](index#@cap-js/sdm) +# [Audit Logging](index#audit-logging) +# [Change Tracking](index#change-tracking) +# [Notifications](index#notifications) +# [Telemetry](index#telemetry) +# [Open Resource Discovery](index#ord-open-resource-discovery) +# [CAP Operator for K8s](index#cap-operator-plugin) +# [SAP Cloud Appl. Event Hub](index#event-hub) +# [Advanced Event Mesh](index#advanced-event-mesh) diff --git a/plugins/index.md b/plugins/index.md index 912373ae17..0f17dd5b4e 100644 --- a/plugins/index.md +++ b/plugins/index.md @@ -34,7 +34,7 @@ The `@cap-js`-scoped plugins are created and maintained in close collaboration a ## As _cds-plugins_ for Node.js -For Node.js all these plugins are implemented using the [`cds-plugin`](../node.js/cds-plugins) technique, which features minimalistic setup and **plug & play** experience. Usually usage is as simple as that, like for the [Audit Logging](../guides/data-privacy/audit-logging) plugin: +For Node.js all these plugins are implemented using the [`cds-plugin`](../node.js/cds-plugins) technique, which features minimalistic setup and **plug & play** experience. Usually usage is as simple as that, like for the [Audit Logging](../guides/security/dpp-audit-logging.md) plugin: 1. Add the plugin: @@ -96,7 +96,7 @@ Use one of the support channels below, in this order: This applies to all plugins, especially those without public repositories. Or if you're not quite sure that the problem is caused by the plugin. -3. Open incidents through [SAP Support Portal](/resources/#support-channels). +3. Open incidents through [SAP Support Portal](/resources/index#support-channels). Note that plugins by external parties, like the [CAP JS](https://github.com/cap-js-community/) community, are out of scope for incidents. @@ -119,10 +119,10 @@ OData V2 has been deprecated. Use the plugin only if you need to support existin Available for: -[![Node.js](../assets/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js-community/odata-v2-adapter#readme) -[![Java](../assets/logos/java.svg 'Link to the documentation of the OData feature.'){style="height:3em; display:inline; margin:0 0.2em;"}](../java/migration#v2adapter) +[![Node.js](/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js-community/odata-v2-adapter#readme) +[![Java](/logos/java.svg 'Link to the documentation of the OData feature.'){style="height:3em; display:inline; margin:0 0.2em;"}](../java/migration#v2adapter) -See also [Cookbook > Protocols/APIs > OData APIs > V2 Support](../advanced/odata#v2-support) {.learn-more} +See also [Cookbook > Protocols/APIs > OData APIs > V2 Support](../guides/advanced/odata#v2-support) {.learn-more} ## WebSocket @@ -140,7 +140,7 @@ service ChatService { Available for: -[![Node.js](../assets/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js-community/websocket#readme) +[![Node.js](/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js-community/websocket#readme) ## UI5 Dev Server @@ -149,7 +149,7 @@ The UI5 Dev Server is a CDS server plugin that enables the integration of UI5 (U Available for: -[![Node.js](../assets/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/ui5-community/ui5-ecosystem-showcase/tree/main/packages/cds-plugin-ui5#cds-plugin-ui5) +[![Node.js](/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/ui5-community/ui5-ecosystem-showcase/tree/main/packages/cds-plugin-ui5#cds-plugin-ui5) ## GraphQL Adapter @@ -161,7 +161,7 @@ The GraphQL Adapter is a protocol adapter that generically generates a GraphQL s Available for: -[![Node.js](../assets/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/graphql#readme) +[![Node.js](/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/graphql#readme) @@ -200,8 +200,8 @@ Features: Available for: -[![Node.js logo](../assets/logos/nodejs.svg 'Link to the repository for cap-js attachments.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/attachments#readme) -[![Java](../assets/logos/java.svg 'Link to the repository for cap-java-attachments.'){style="height:3em; display:inline; margin:0 0.2em;"}](https://github.com/cap-java/cds-feature-attachments#readme) +[![Node.js logo](/logos/nodejs.svg 'Link to the repository for cap-js attachments.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/attachments#readme) +[![Java](/logos/java.svg 'Link to the repository for cap-java-attachments.'){style="height:3em; display:inline; margin:0 0.2em;"}](https://github.com/cap-java/cds-feature-attachments#readme) @@ -236,8 +236,8 @@ Outlook: Available for: -[![Node.js logo](../assets/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/sdm/#readme) -[![Java](../assets/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"}](https://github.com/cap-java/sdm/#readme) +[![Node.js logo](/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/sdm/#readme) +[![Java](/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"}](https://github.com/cap-java/sdm/#readme) @@ -268,10 +268,10 @@ Features: Available for: -[![Node.js logo](../assets/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/audit-logging#readme) -![Java](../assets/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"} +[![Node.js logo](/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/audit-logging#readme) +![Java](/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"} -Learn more about audit logging in [Node.js](../guides/data-privacy/audit-logging) and in [Java](../java/auditlog) {.learn-more} +Learn more about audit logging in [Node.js](../guides/security/dpp-audit-logging.md) and in [Java](../java/auditlog) {.learn-more} ## Change Tracking @@ -291,8 +291,8 @@ annotate my.Incidents { Available for: -[![Node.js](../assets/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/change-tracking#readme) -[![Java](../assets/logos/java.svg 'Link to the documentation of the change-tracking feature.'){style="height:3em; display:inline; margin:0 0.2em;"}](../java/change-tracking) +[![Node.js](/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/change-tracking#readme) +[![Java](/logos/java.svg 'Link to the documentation of the change-tracking feature.'){style="height:3em; display:inline; margin:0 0.2em;"}](../java/change-tracking) ## Notifications @@ -320,7 +320,7 @@ Features: Available for: -[![Node.js](../assets/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/notifications#readme) +[![Node.js](/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/notifications#readme) ## Telemetry @@ -347,8 +347,8 @@ Telemetry data can be exported to [SAP Cloud Logging](https://help.sap.com/docs/ Available for: -[![Node.js](../assets/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/telemetry#readme) -[![Java](../assets/logos/java.svg 'Link to the documentation of the telemetry feature.'){style="height:3em; display:inline; margin:0 0.2em;"}](../java/operating-applications/observability#open-telemetry) +[![Node.js](/logos/nodejs.svg 'Link to the plugins repository.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/telemetry#readme) +[![Java](/logos/java.svg 'Link to the documentation of the telemetry feature.'){style="height:3em; display:inline; margin:0 0.2em;"}](../java/operating-applications/observability#open-telemetry) ## ORD (Open Resource Discovery) @@ -362,8 +362,8 @@ You can get the ORD document in multiple ways, see the readme of the plugin. Available for: -[![Link to the repository for cap-js ORD](../assets/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/ord) -[![Java](../assets/logos/java.svg 'Link to the documentation of the telemetry feature.'){style="height:3em; display:inline; margin:0 0.2em;"}](https://javadoc.io/doc/com.sap.cds/cds-feature-ord/latest/index.html) +[![Link to the repository for cap-js ORD](/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/ord) +[![Java](/logos/java.svg 'Link to the documentation of the telemetry feature.'){style="height:3em; display:inline; margin:0 0.2em;"}](https://javadoc.io/doc/com.sap.cds/cds-feature-ord/latest/index.html) ## CAP Operator for Kubernetes {#cap-operator-plugin} @@ -374,8 +374,8 @@ This is where the CAP Operator **plugin** is very useful, as it provides an easy Available for: -[![Node.js logo](../assets/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/cap-operator-plugin#readme) -![Java logo](../assets/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"} +[![Node.js logo](/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/cap-operator-plugin#readme) +![Java logo](/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"} ## SAP Cloud Application Event Hub {#event-hub} @@ -389,12 +389,12 @@ S4bupa.on ('BusinessPartner.Changed', msg => {...})
-For more details, please see [Events and Messaging → Using SAP Cloud Application Event Hub](../guides/messaging/#sap-event-broker). +For more details, please see [Events and Messaging → Using SAP Cloud Application Event Hub](../guides/events/#sap-event-broker). Available for: -[![Node.js logo](../assets/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/event-broker#readme) -[![Java logo](../assets/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"}](https://github.com/cap-java/cds-feature-event-hub#readme) +[![Node.js logo](/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/event-broker#readme) +[![Java logo](/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"}](https://github.com/cap-java/cds-feature-event-hub#readme) ## SAP Integration Suite, Advanced Event Mesh {#advanced-event-mesh} @@ -403,8 +403,8 @@ Available for: Available for: -[![Node.js logo](../assets/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/advanced-event-mesh#readme) -[![Java logo](../assets/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"}](https://github.com/cap-java/cds-feature-advanced-event-mesh#readme) +[![Node.js logo](/logos/nodejs.svg){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://github.com/cap-js/advanced-event-mesh#readme) +[![Java logo](/logos/java.svg){style="height:3em; display:inline; margin:0 0.2em;"}](https://github.com/cap-java/cds-feature-advanced-event-mesh#readme) ## ABAP RFC @@ -414,7 +414,7 @@ ABAP systems and to call these functions in your custom code. Available for: -[![Node.js](../assets/logos/nodejs.svg 'Link to the plugin page.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://www.npmjs.com/package/@sap/cds-rfc) +[![Node.js](/logos/nodejs.svg 'Link to the plugin page.'){style="height:2.5em; display:inline; margin:0 0.2em;"}](https://www.npmjs.com/package/@sap/cds-rfc)
@@ -423,4 +423,3 @@ Available for:
- diff --git a/public/cap-logo.png b/public/cap-logo.png deleted file mode 100644 index 38d87526ceb3428677d9cc1063c7358cb01c306a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28534 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 NlNMJHs}V5_{y)2`l5qe4 diff --git a/public/logos/cap.png b/public/logos/cap.png new file mode 100644 index 0000000000000000000000000000000000000000..bb00da5d8e02d8be134f09f07a0b094635d0d99f GIT binary patch literal 19822 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 literal 0 HcmV?d00001 diff --git a/public/cap-logo.svg b/public/logos/cap.svg similarity index 100% rename from public/cap-logo.svg rename to public/logos/cap.svg diff --git a/assets/logos/express.svg b/public/logos/express.svg similarity index 100% rename from assets/logos/express.svg rename to public/logos/express.svg diff --git a/assets/logos/github.svg b/public/logos/github.svg similarity index 100% rename from assets/logos/github.svg rename to public/logos/github.svg diff --git a/assets/logos/java.svg b/public/logos/java.svg similarity index 100% rename from assets/logos/java.svg rename to public/logos/java.svg diff --git a/assets/logos/nodejs.svg b/public/logos/nodejs.svg similarity index 100% rename from assets/logos/nodejs.svg rename to public/logos/nodejs.svg diff --git a/public/sap-logo.svg b/public/logos/sap.svg similarity index 100% rename from public/sap-logo.svg rename to public/logos/sap.svg diff --git a/assets/logos/spring.svg b/public/logos/spring.svg similarity index 100% rename from assets/logos/spring.svg rename to public/logos/spring.svg diff --git a/redirects.md b/redirects.md new file mode 100644 index 0000000000..531c632cdf --- /dev/null +++ b/redirects.md @@ -0,0 +1,102 @@ +## Getting Started Guides + +- [get-started/dev-tools](tools) +- [get-started/tools](tools) +- [get-started/samples](get-started/learning-sources) +- [get-started/using-typescript](node.js/typescript) +- [get-started/jumpstart](get-started/about#jumpstarting-projects) +- [get-started/hello-world](get-started/in-a-nutshell) +- [about](get-started/about) +- [about/glossary](get-started/about) +- [get-started/grow-as-you-go](get-started/about#growing-as-you-go) + +## Cookbook Guides + +- [guides/analytics](advanced/analytics) +- [guides/as-saas](guides/multitenancy) +- [guides/authorization](guides/security/authorization) +- [guides/consuming-services](guides/services/using-services) +- [guides/data-privacy/introduction](guides/security/data-privacy.md) +- [guides/deploy-to-cloud](guides/deploy/index.md) +- [guides/deploy/deploy-to-kyma](guides/deploy/to-kyma) +- [guides/deploy/mtx-apis](guides/multitenancy/old-mtx-apis) +- [guides/domain-models](guides/domain/modeling) +- [guides/fiori](guides/uis/fiori) +- [guides/generic](guides/services/providing-services) +- [guides/reuse-and-compose](guides/extensibility/composition) +- [guides/services/providing-services](guides/services/providing-services) +- [guides/services/using-services](guides/services/using-services) +- [guides/services](guides/services/providing-services) +- [guides/media-data](guides/services/providing-services#serving-media-data) +- [guides/services/flows](guides/services/flows) + +## Advanced Guides + +- [security/](guides/security) +- [security/aspects](guides/security/data-protection) +- [security/data-protection-privacy](guides/security/data-privacy) +- [security/overview](guides/security/overview) + +- [advanced/fiori](guides/uis/fiori) +- [advanced/asyncapi](advanced/publishing-apis/asyncapi) +- [advanced/deploy-to-cloud](guides/deploy/index) +- [advanced/deploy-to-kyma](guides/deploy/to-kyma) +- [advanced/enable-mtx](guides/extensibility) +- [advanced/extensibility](guides/extensibility) +- [advanced/mtx](guides/extensibility) +- [advanced/openapi](advanced/publishing-apis/openapi) +- [advanced/troubleshooting](get-started/troubleshooting) + +## CDS + +- [cds/js-api](node.js/cds-compile) +- [cds/odata-annotations](advanced/odata) +- [releases/compiler-v2](cds/compiler/v2) + +## Java + +- [java/advanced](java/cqn-services/persistence-services) +- [java/advanced#multitenancy](java/multitenancy) +- [java/application-services](java/cqn-services/application-services) +- [java/architecture](java/developing-applications/building) +- [java/cds-ql](java/working-with-cql/query-api) +- [java/cds-reflect](java/reflection-api) +- [java/cds4j/datastore](java/cqn-services/persistence-services) +- [java/cds4j/static-model](java/cqn-services/persistence-services) +- [java/cds4j/typed-access](java/cqn-services/persistence-services) +- [java/changeset-contexts](java/event-handlers/changeset-contexts) +- [java/consumption-api](java/services) +- [java/data](java/cds-data) +- [java/development](java/developing-applications) +- [java/development/](java/developing-applications) +- [java/development/properties](java/developing-applications/properties) +- [java/indicating-errors](java/event-handlers/indicating-errors) +- [java/messaging-foundation](java/messaging) +- [java/observability](java/operating-applications/observability) +- [java/observability#profiling](java/operating-applications/optimizing) +- [java/overview](java/getting-started) +- [java/persistence-services](java/cqn-services/persistence-services) +- [java/provisioning-api](java/event-handlers) +- [java/query-api](java/working-with-cql/query-api) +- [java/query-execution](java/working-with-cql/query-execution) +- [java/query-introspection](java/working-with-cql/query-introspection) +- [java/remote-services](java/cqn-services/remote-services) +- [java/request-contexts](java/event-handlers/request-contexts) +- [java/result-handling](java/services) +- [java/srv-impl](java/event-handlers) +- [java/srv-run](java/services) + +## Node.js + +- [node.js/cds-dk](tools/apis/cds-import) +- [node.js/middlewares](node.js/cds-serve) +- [node.js/outbox](node.js/queue) +- [node.js/protocols](node.js/cds-serve) +- [node.js/requests](node.js/events) +- [node.js/services](node.js/core-services) +- [node.js/transactions](node.js/cds-tx) + +## Miscellaneous + +- [resources/ask-question-vscode](https://community.sap.com/t5/forums/postpage/choose-node/true/product-id/9f13aee1-834c-4105-8e43-ee442775e5ce/board-id/technology-questions) +- [resources/troubleshooting](get-started/troubleshooting) diff --git a/tools/_menu.md b/tools/_menu.md new file mode 100644 index 0000000000..ee85c44d7c --- /dev/null +++ b/tools/_menu.md @@ -0,0 +1,12 @@ + +# [Command Line Interface](cds-cli) +# [Editors & IDEs](cds-editors) +# [CDS 2 TypeScript](cds-typer) + +# [Design Time APIs](apis/) + + ## [cds. add()](apis/cds-add) + ## [cds. import()](apis/cds-import) + ## [cds. build()](apis/cds-build) + +# [CAP Console](console) diff --git a/tools/apis/cds-add.md b/tools/apis/cds-add.md index 3743042886..f05aeacb48 100644 --- a/tools/apis/cds-add.md +++ b/tools/apis/cds-add.md @@ -82,8 +82,8 @@ Our `cds add postgres` will: 1. Register with `cds-dk` 2. Add a Dockerfile to start a PostgreSQL instance for development -3. Integrate with `cds add mta` for [Cloud Foundry](../../guides/deployment/to-cf) deployment -4. Integrate with `cds add kyma` for [Kyma](../../guides/deployment/to-kyma) deployment +3. Integrate with `cds add mta` for [Cloud Foundry](../../guides/deploy/to-cf) deployment +4. Integrate with `cds add kyma` for [Kyma](../../guides/deploy/to-kyma) deployment 5. Integrate with `cds help` Starting with 1, register the plugin: diff --git a/tools/apis/cds-build.md b/tools/apis/cds-build.md new file mode 100644 index 0000000000..2e5d139fa9 --- /dev/null +++ b/tools/apis/cds-build.md @@ -0,0 +1,169 @@ +--- +synopsis: > + The guide provides an overview of custom build processes for CAP projects, explaining how to tailor the standard build process to specific project requirements. +status: released +--- + +# Implement Build Plugins + +CDS already offers build plugins to create deployment layouts for the most use cases. However, you will find cases where these plugins are not enough and you have to develop your own. This section shows how such a build plugin can be implemented and how it can be used in projects. + +Build plugins are run by `cds build` to generate the required deployment artifacts. Build tasks hold the actual project specific configuration. The task's `for` property value has to match the build plugin ID. + +The following description uses the [postgres build plugin](https://github.com/cap-js/cds-dbs/blob/55e511471743c0445d41e8297f5530abe167a270/postgres/cds-plugin.js#L9-L48) as reference implementation. It combines runtime and design-time integration in a single plugin `@cap-js/postgres`. +## Add Build Logic + +A build plugin is a Node.js module complying to the [CDS plugin architecture](../../node.js/cds-plugins). +It must be registered to the CDS build system inside a top-level [cds-plugin.js](https://github.com/cap-js/cds-dbs/blob/main/postgres/cds-plugin.js) file: + +::: code-group + +```js [cds-plugin.js] +const cds = require('@sap/cds') +const { fs, path } = cds.utils; + +cds.build?.register?.('postgres', class PostgresBuildPlugin extends cds.build.Plugin { + static taskDefaults = { src: cds.env.folders.db } + static hasTask() { + return cds.requires.db?.kind === 'postgres'; + } + init() { + this.task.dest = path.join(this.task.dest, 'pg'); + } + async build() { + const model = await this.model(); + if (!model) return; + + await this.write(cds.compile.to.json(model)).to(path.join('db', 'csn.json')) + + if (fs.existsSync(path.join(this.task.src, 'data'))) { + await this.copy(data).to(path.join('db', 'data')) + } + . . . + } +}) +``` + +::: + +Notes: + +- The build plugin id has to be unique. In the previous snippet, the ID is `postgres`. +- `cds.build` will be `undefined` in non-build CLI scenarios or if the `@sap/cds-dk` package isn't installed (globally or locally as a `devDependency` of the project). + +CDS offers a base build plugin implementation, which you can extend to implement your own behavior. The following methods are called by the build system in this sequence: + +- `static taskDefaults` - defines default settings for build tasks of this type. For database related plugins the default `src` folder value cds.folders.db: db should be used, while for cds services related plugins cds.folders.srv: srv. +- `static hasTask()` - determines whether the plugin should be called for the running `cds build` command, returns _true_ by default. This will create a build task with default settings defined by `taskDefaults` and settings calculated by the framework. +- `init()` - can be used to initialize properties of the plugin, for example, changing the default build output directory defined by the property `dest`. +- `async clean` - deletes existing build output, folder `this.task.dest` is deleted by default. +- `async build` - performs the build. + +The CDS build system auto-detects all required build tasks by invoking the static method `hasTask` on each registered build plugin. + +The compiled CSN model can be accessed using the asynchronous methods `model()` or `basemodel()`. + +- The method `model()` returns a CSN model for the scope defined by the `options.model` setting. If [feature toggles](../../guides/extensibility/feature-toggles) are enabled, this model also includes any toggled feature enhancements. +- To get a CSN model without features, use the method `baseModel()` instead. The model can be used as input for further [model processing](../../node.js/cds-compile#cds-compile-to-xyz), like `to.edmx`, `to.hdbtable`, `for.odata`, etc. +- Use [`cds.reflect`](../../node.js/cds-reflect) to access advanced query and filter functionality on the CDS model. + +## Add build task type to cds schema + +In addition you can also add a new build task type provided by your plugin. This build task type will then be part of code completion suggestions for `package.json` and `.cdsrc.json` files. + +[Learn more about schema contributions here.](../../node.js/cds-plugins#configuration-schema){.learn-more} + +## Write Build Output + +The `cds.build.Plugin` class provides methods for copying or writing contents to the file system: + +::: code-group + +```js [postgres/lib/build.js] +await this.copy(path.join(this.task.src, 'package.json')).to('package.json'); +await this.write({ + dependencies: { '@sap/cds': '^9', '@cap-js/postgres': '^2' }, + scripts: { start: 'cds-deploy' } +}).to('package.json'); +``` + +::: + +These `copy` and `write` methods ensure that build output is consistently reported in the console log. Paths are relative to the build task's `dest` folder. + +## Handle Errors + +Messages can be issued using the `pushMessage` method: + +::: code-group + +```js [postgres/lib/build.js] +const { Plugin } = cds.build +const { INFO, WARNING } = Plugin + +this.pushMessage('Info message', INFO); +this.pushMessage('Warning message', WARNING); +``` + +::: + +These messages are sorted and filtered according to the CLI parameter `log-level`. +They will be logged after the CDS build has been finished. A `BuildError` can be thrown in case of severe errors. +In case of any CDS compilation errors, the entire build process is aborted and a corresponding message is logged. +The `messages` object can be accessed using `this.messages`. When accessing the compiler API it should be passed as an option - otherwise compiler messages won't get reported. +## Run the Plugin + +In the application's _package.json_, add a dependency to your plugin package to the list of `devDependencies`. +> Only use `dependencies` if the plugin also provides _runtime integration_, which is the case for the `@cap-js/postgres` plugin. + +::: code-group + +```jsonc [package.json] +"dependencies": { + "@cap-js/postgres": "^2" +} +``` + +::: + +The CDS build system by default auto-detects all required build tasks. Alternatively, users can run or configure required build tasks in the very same way as for the built-in tasks. + +```sh +cds build +cds build --for postgres +``` + +```json +"tasks": [ + { "for": "nodejs" }, + { "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: + +cd gen/srv && npx cds-serve +# or: +cd gen/srv && npm start +# or: +npx cds-serve -p gen/srv +``` + +
+ +
+ +Use the regular command to [start a Java application](../../java/getting-started#build-and-run): + +```sh +mvn spring-boot:run +``` + +
\ No newline at end of file diff --git a/tools/apis/cds-import.md b/tools/apis/cds-import.md index 46b7bad562..db0e6f6fae 100644 --- a/tools/apis/cds-import.md +++ b/tools/apis/cds-import.md @@ -110,7 +110,7 @@ module.exports = async (srv) => { ## OData Type Mappings -The following mapping is used during the import of an external service API, see [Using Services](../../guides/using-services#external-service-api). In addition, the [Mapping of CDS Types](../../advanced/odata#type-mapping) shows import-related mappings. +The following mapping is used during the import of an external service API, see [Using Services](../../guides/services/using-services#external-service-api). In addition, the [Mapping of CDS Types](../../guides//advanced/odata#type-mapping) shows import-related mappings. | OData | CDS Type | |--------------------------------------------------------|------------------------------------------------------------------------------| diff --git a/tools/cds-cli.md b/tools/cds-cli.md index 68370ccdc8..1b74853d4d 100644 --- a/tools/cds-cli.md +++ b/tools/cds-cli.md @@ -167,7 +167,7 @@ The facets built into `@sap/cds-dk` provide you with a large set of standard fea ### sample {.add} -Creates a bookshop application including custom code (Node.js or Java) and a UI with [SAP Fiori Elements](../advanced/fiori). +Creates a bookshop application including custom code (Node.js or Java) and a UI with [SAP Fiori Elements](../guides/uis/fiori). ```sh cds add sample @@ -260,7 +260,7 @@ The result could look like this for a typical _Books_ entity from the _Bookshop_ - Data for _compositions_, like the `texts` composition to `Books.texts`, is always created. - A random unique number for each record, _29894036_ here, is added to each string property, to help you correlate properties more easily. - Data for elements annotated with a regular expression using [`assert.format`](../guides/services/constraints#assert-format) can be generated using the NPM package [randexp](https://www.npmjs.com/package/randexp), which you need to installed manually. -- Other constraints like [type formats](../cds/types), [enums](../cds/cdl#enums), and [validation constraints](../guides/providing-services#input-validation) are respected as well, in a best effort way. +- Other constraints like [type formats](../cds/types), [enums](../cds/cdl#enums), and [validation constraints](../guides/services/providing-services#input-validation) are respected as well, in a best effort way. ::: #### Interactively in VS Code @@ -619,7 +619,7 @@ There a couple of shortcuts and convenience functions: ::: tip Repl for Java `cds repl` does not run Java code, but can still be useful: -For example, if you work on Node.js things like [building plugins](../guides/deployment/custom-builds#custom-build-plugins) that make use of Node.js APIs. +For example, if you work on Node.js things that make use of Node.js APIs. ::: @@ -724,7 +724,7 @@ Make sure the port matches to what the debug tunnel uses (see the message in the > [!NOTE] SapMachine is required > SapMachine is required as Java runtime environment for this feature to work.
-> There is nothing to do if you set up your MTA deployment descriptors with [`cds add mta`](../guides/deployment/to-cf#add-mta-yaml) or CAP project wizards. +> There is nothing to do if you set up your MTA deployment descriptors with [`cds add mta`](../guides/deploy/to-cf#add-mta-yaml) or CAP project wizards. > See the [documentation of SapMachine](https://help.sap.com/docs/btp/sap-business-technology-platform/sapmachine) for how to configure this manually. #### Local Applications diff --git a/tools/cds-lint/rules/start-elements-lowercase/index.md b/tools/cds-lint/rules/start-elements-lowercase/index.md index 0756434010..2d703ce874 100644 --- a/tools/cds-lint/rules/start-elements-lowercase/index.md +++ b/tools/cds-lint/rules/start-elements-lowercase/index.md @@ -14,7 +14,7 @@ status: released ## Rule Details -According to our [naming conventions](../../../../guides/domain-modeling#naming-conventions), to easily distinguish entity names from element names we recommend starting elements with a *lowercase* letter, which this rule ensures. +According to our [naming conventions](../../../../guides/domain/modeling#naming-conventions), to easily distinguish entity names from element names we recommend starting elements with a *lowercase* letter, which this rule ensures. ## Examples diff --git a/tools/cds-lint/rules/start-entities-uppercase/index.md b/tools/cds-lint/rules/start-entities-uppercase/index.md index 05a7e636eb..96f7db9193 100644 --- a/tools/cds-lint/rules/start-entities-uppercase/index.md +++ b/tools/cds-lint/rules/start-entities-uppercase/index.md @@ -15,7 +15,7 @@ status: released ## Rule Details -According to our [naming conventions](../../../../guides/domain-modeling#naming-conventions), to easily distinguish entity names from element names we recommend starting entity names with *capital* letters, which this rule ensures. +According to our [naming conventions](../../../../guides/domain/modeling#naming-conventions), to easily distinguish entity names from element names we recommend starting entity names with *capital* letters, which this rule ensures. ## Examples diff --git a/tools/cds-typer.md b/tools/cds-typer.md index 1e75cbcb86..6c4deb1db8 100644 --- a/tools/cds-typer.md +++ b/tools/cds-typer.md @@ -282,7 +282,7 @@ Note that (iii) through (v) are specific to TypeScript, while (i) and (ii) can a ## Fine Tuning ### Singular/ Plural -The generated types offer both a singular and plural form for convenience. The derivation of these names uses a heuristic that assumes entities are named with an English noun in plural form, following the [best practice guide](../guides/domain-modeling#naming-conventions). +The generated types offer both a singular and plural form for convenience. The derivation of these names uses a heuristic that assumes entities are named with an English noun in plural form, following the [best practice guide](../guides/domain/modeling#naming-conventions). Naturally, this best practice can't be enforced on every model. Even for names that do follow best practices, the heuristic can fail. If you find that you would like to specify custom identifiers for singular or plural forms, you can do so using the `@singular` or `@plural` annotations. @@ -352,7 +352,7 @@ Make sure to add the quotes around the asterisk so your shell environment does n ## Integrate Into Your Build Process Having `cds-typer` present as dependency provides the `typescript` build task. If your project also depends on the `typescript` package, this build task is automatically included when you run `cds build`. -If you are [customizing your build task](../guides/deployment/custom-builds), you can add it after the `nodejs` build task: +If you are [customizing your build task](../guides/deploy/build.md), you can add it after the `nodejs` build task: ```json {3} "tasks": [ From 60c97af412b059e5bf02bea42b4af92cc0dc1ad9 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 22 Dec 2025 13:12:27 +0100 Subject: [PATCH 161/439] Removing extra voodoo for native-hana-samples.zip --- .vitepress/config.js | 6 ------ guides/databases/hana-native.md | 2 -- guides/databases/native-hana-samples.zip | Bin 15309 -> 0 bytes 3 files changed, 8 deletions(-) delete mode 100644 guides/databases/native-hana-samples.zip diff --git a/.vitepress/config.js b/.vitepress/config.js index d1fe43d546..f028af56d7 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -207,12 +207,6 @@ config.buildEnd = async ({ outDir, site }) => { // disabled by default to avoid online fetches during local build if (process.env.VITE_CAPIRE_EXTRA_ASSETS) { - // zip assets aren't copied automatically, and `vite.assetInclude` doesn't work either - const archive = 'advanced/assets/native-hana-samples.zip' - await fs.mkdir(path.dirname(path.join(outDir, archive)), {recursive: true}) - console.debug('✓ copying HANA assets to ', path.join(outDir, archive)) // eslint-disable-line no-console - - await fs.copyFile(path.join(__dirname, '..', archive), path.join(outDir, archive)) await cdsMavenSite.copySiteAssets(path.join(outDir, 'java/assets/cds-maven-plugin-site'), site) } } diff --git a/guides/databases/hana-native.md b/guides/databases/hana-native.md index 3f8660d00f..6f32abdf35 100644 --- a/guides/databases/hana-native.md +++ b/guides/databases/hana-native.md @@ -525,8 +525,6 @@ By default, `cds` maps UUIDs to `nvarchar(36)` in SQL databases. The length is t > If the client side needs to work with the UUID, VARBINARY would lead to CAST operations or binary array handling at the client side. Here **NVARCHAR would be the data type of choice** to avoid handling binary arrays on the client side. ### Example Index -> [Download from here](native-hana-samples.zip) a fully fledged model with even more examples. - | What | Database Object | Mapping Object | Facade Entity | | --- | --- | --- | --- | | | | | data.model.Bookshop... | diff --git a/guides/databases/native-hana-samples.zip b/guides/databases/native-hana-samples.zip deleted file mode 100644 index 1511ca0613b5aba6f47b6188e7a9f46c4e656d76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15309 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 Date: Mon, 22 Dec 2025 13:28:40 +0100 Subject: [PATCH 162/439] Removed bad practices guide --- get-started/about.md | 5 +- get-started/bad-practices.md | 196 ------------------ get-started/best-practices.md | 2 - get-started/index.md | 5 +- get-started/initial-setup.md | 175 ++++++++++++++++ .../{learning-sources.md => learn-more.md} | 10 +- menu.md | 5 +- redirects.md | 10 +- 8 files changed, 190 insertions(+), 218 deletions(-) delete mode 100644 get-started/bad-practices.md create mode 100644 get-started/initial-setup.md rename get-started/{learning-sources.md => learn-more.md} (91%) diff --git a/get-started/about.md b/get-started/about.md index 809468b1c8..baf5b46947 100644 --- a/get-started/about.md +++ b/get-started/about.md @@ -131,8 +131,6 @@ In general, we always propose that approach: > 3. loosely coupled, coarse-grained subsystems with separate lifecycles > - **False** reasons are: distributed development, modularization, isolation, ... → there are well established and proven better ways to address these things, without the pain which comes with microservices. -[See also the anti pattern of *Microservices Mania*](bad-practices#microservices-mania) {.learn-more} - ### Parallelized Workflows @@ -349,7 +347,6 @@ Of course, we also make mistakes and errors in CAP, but ... - And this effect increases with steadily growing adoption of CAP that we see, ... - And with the open culture we established successfully, for example, **open issue reports** in GitHub, that is, the standard out there, instead of private support tickets — a relict of the past. -> Note that all of this is in contrast to code generators, where you can't fix code generated in the past → see also [*Avoid Code Generators*](bad-practices#code-generators) in the anti patterns guide. ### Minimized Lock-Ins @@ -378,7 +375,7 @@ Keeping pace with a rapidly changing world of volatile cloud technologies and pl - AI provides tremendous boosts to productivity → for example: - **Coding Assists** → for example, by [GitHub Copilot](https://github.com/features/copilot) in `.cds`, `.js`, even `.md` sources - - **Code Analysis** → detecting [bad practices](bad-practices) → guiding to [best practices](best-practices) + - **Code Analysis** → detecting bad practices → guiding to [best practices](best-practices) - **Code Generation** → for example, for tests, test data, ... - **Project Scaffolding** → for quick head starts - **Search & Learning Assists** → like SAP Joule, ... diff --git a/get-started/bad-practices.md b/get-started/bad-practices.md deleted file mode 100644 index 7085ead92d..0000000000 --- a/get-started/bad-practices.md +++ /dev/null @@ -1,196 +0,0 @@ ---- -status: released ---- - -# Bad Practices - -[[toc]] - - - -## Questionable Prior Arts - -### DAOs, DTOs, Active Records - -- → see [Best Practices / Passive Data](best-practices#data) - -### Object-Relational Mappers - -- → see [Best Practices / Querying](best-practices#querying) - -### BO-centric Frameworks - -... which bypass or are in conflict with CAP's [key design principles](bad-practices.md), for example: - -- ORM techniques like Spring repositories -- Active Records, DAOs - -These would be in conflict with CAP's focus on stateless services processing passive data, as well as with the querying-based approach to read and write data. - -### Determinations & Validations - -- This might be a special thing if you come from a background where these terms were prominently positioned, accompanied by corresponding frameworks. -- Quite likely that is an SAP background, as we didn't find the term "determination" used outside of these SAP circles in that context. -- CAP is actually an offspring of a performance firefighting taskforce project, which identified such frameworks and their overly fragmented and fine-granular element level approach as one of a few root causes for framework-induced performance overheads. -- Hence CAP intentionally does not offer element-level call-level validation or determination framework, and strongly discourages combining your use of CAP with such. -- CAP does provide declarative element-level validations though → these are advisable, as we can optimize the implementations behind the scenes, which is just not possible in the imperative call-level frameworks. -- - -### Sticking to DIY (or NIH) - -Such as... - -- Low-level http or OData requests -- Low-level integration with message brokers -- Database-specific things without need -- Non-CAP client libraries for BTP services - -Doing so would spoil the party, for example regarding rapid local development at minimized costs, fast test pipelines, and late-cut µ services. -It would also expose your projects to risks of disruptions by changes in those rather volatile technologies. - -### Always done it this way - -- and CAP is different... for a reason, or more... ;-) - - - -## Abstracting from CAP - -- CAP already provides abstractions from the underlying database, the protocols, the deployment target, the client technology, and more. -- CAP is also an implementation of Hexagonal Architecture, which is an abstraction of the same kind. -- So, abstracting from CAP would be abstracting from an abstraction, which is a bad idea in general, and certainly will ensure that you won't benefit from the full power of CAP, any longer. - -### Squared Hexagons - -- As documented in the best practices guide, CAP is not only very much in line with Hexagonal Architecture, it actually *is an implementation* of it. -- So there's little need to invest into the outer hexagon → focus on the inner one -- Yet, we saw projects insisting on doing Hexagonal Architecture their own way, or maybe the very way that was discussed in some other paper, done with some other framework ... -- ... Hexagonal Arch ** 2 = ? - -### Same for DDD... - -- Focus on Domain is exactly what domain-driven design is also striving for... and there are some many commonalities in concepts and approaches. -- Yet, we saw projects insisting on doing DDD a very specific way, for example using Active Records, Spring repositories, etc.... → things [we list as bad practices above](#daos-dtos-active-records) - - - - -## Code Generators - -### The Swagger Textbook - -Alternative frameworks or toolsets follow code generation approaches. Swagger does so for example: One write OpenAPI documents in YAML in the [Swagger Editor](https://editor.swagger.io), and have a server package generated, for example for Node.js, which, as the included readme tells us *"... leverages the mega-awesome [swagger-tools](https://github.com/apigee-127/swagger-tools) middleware which does most all the work."* → it does so as follows: - - - -| Feature | Swagger | CAP | -|--------------------------------------|:--------------------:|:---------------------:| -| Lines of code for service definition | **~555**{.h3}{.red} | **~11**{.h3} {.green} | -| Lines of code for implementation | **~500**{.h3} {.red} | **0**{.h3} {.green} | -| Size of framework library | 16 MB {.red} | 10 MB {.green} | -| CRUDQ served on DB, including... | | ✓ | -| Deep Reads & Writes | | ✓ | -| Deep Hierarchies | | ✓ | -| Aggregations | | ✓ | -| Pagination | | ✓ | -| Sorting | | ✓ | -| Search | | ✓ | -| Filtering | | ✓ | -| Primary Keys | | ✓ | -| Access Control | | ✓ | -| Localized Data | | ✓ | -| Managed Data | | ✓ | -| Media Data | | ✓ | -| Temporal Data | | ✓ | -| Fiori Draft Handling | | ✓ | -| Exclusive Locking | | ✓ | -| Conflict Detection (via ETags) | | ✓ | -| Data Replication (upcoming) | | ✓ | -| Data Privacy | | ✓ | -| ... | | ✓ | - - - -While code generators also have you writing less code yourself, the code is still there (to cover all that CAP covers, we could extrapolate the 500 lines of code to end up in ~5,000, maybe 50,000 ...?). To mention only the most critical consequence out of this: **No single points to fix**, as you simply can't fix code generated in the past. - -::: details CDS-based service definitions vs OpenAPI documents ... - -Even if we'd ignore all the other things, there still remains the difference between writing ~11 lines of concise and comprehensible CDS declarations, or ~333 lines of YAML. While the former allows to involve and closely collaborate with domain experts, the latter certainly doesn't. (And technocratic approaches like Hexagonal Architecture or Domain-Driven Design the way it's frequently done by developers don't really help either.) - -::: - -### Code-Generating AI - -- Don't confuse "[*Generative AI*](https://en.wikipedia.org/wiki/Generative_artificial_intelligence)" with '*Code-generating AI*' ... -- Even though it's AI-generated the usual drawbacks for generated code apply: - - **No single points to fix** all that code that was generated last year - - One off approach → doesn't help much in evolutionary, iterative development - - ... - -- There's a different between a GPT-generated one-off thesis and long-lived enterprise software, which needs to adapt and scale to new requirements. - -## Overly Generic Approaches - -### The 'ODatabase' Anti Pattern - -- Assume you have a domain model with 123 entities -- Then the easiest thing is to add a single service with 123 1:1 projections...? -- As all the rest can be done by CAP's and OData's powerful query languages, right? -- → that service is the exact opposite of a use case-oriented facade -- if you want that, don't use CAP, don't use any layered architecture at all ...s -- just connect your client directly to a SQL database in a two tier model ;-) - - - -### Tons of Glue Code - -- as stated, while CAP cares about the vast majority of non-functional requirements, qualities, wire protocols, low-level stuff... so that you, as an application developer should be able to put primary focus on domain. -- if you still find yourself lost in a high ratio of glue code, something has certainly gone wrong - - - - -## Microservices Mania - -Avoid eager fragmentation into microservices. Instead, start with a monolith and cut out microservices later, when you really need them. This is what we call "late-cut microservices". - -See also... - -- [Microservices Mania: Are Moduliths the Saner Path to Scalable Architecture?](https://blog.payara.fish/microservices-mania-are-moduliths-the-saner-path-to-scalable-architecture) -- [Mainstream Microservices Mania Challenges Increasing with Adoption](https://www.f5.com/de_de/company/blog/mainstream-microservices-mania-challenges-increasing-with-adoption) -- [What is Better: Modular Monolith vs. Microservices](https://medium.com/codex/what-is-better-modular-monolith-vs-microservices-994e1ec70994) -- [Architecture Style: Modulith vs. Microservices](https://dzone.com/articles/architecture-style-modulith-vs-microservices) -- [Death by a Thousand Microservices](https://www.reddit.com/r/programming/comments/18crnmz/death_by_a_thousand_microservices/). - - - -## Ignorance - -When writing these guides we frequently wonder whether it is worth the effort, because we likely have to understand and to accept that we're living in times of ... - -- Too long; didn't read (TL;DR) -- Too busy (→ an [anti pattern on it's own](./assets/too-busy) \;-) -- Not required, as we've AI now -- I don't need to read that, as I already know (better) ... - -If against all odds you are indeed just reading these lines, please leave a trace about that in [blue sky](https://bsky.app) with this content (including link): - -*[I read it! ☺️](#ignorance)
-#sapcap* -{.indent} - -... to let the others out there know that there's hope, and some hi, left... \:-) - -And in case you are just reading these lines, because of these posts, we strongly encourage you to read these new guides, even if (you think) you already know CAP: - -- *[Introduction – What is CAP?](about) → Value Propositions* -- *[Best Practices](best-practices) → Key Concepts & Rationales* -- *[Anti Patterns](bad-practices) → Do's and **don'ts*** - -And after you did that, would be great if you'd leave another trace about that in [blue sky](https://bsky.app) with this content (including link): - -*[I really read it! 🤓](#ignorance)
-#sapcap* -{.indent} - -... as a motivation for us to keep on writing, and that it is worth the effort. diff --git a/get-started/best-practices.md b/get-started/best-practices.md index 33671ec0dc..8740a02338 100644 --- a/get-started/best-practices.md +++ b/get-started/best-practices.md @@ -280,7 +280,6 @@ Don't confuse CAP services with Microservices: CAP services are important for how you *design* and *implement* your applications in clean and modularized ways on a fine-granular use case-oriented level. The primary focus of Microservices is on how to cut your whole application into independent coarse-grained(!) deployment units, to release and scale them independently. -[Learn more about that in the *Anti Patterns* section on Microservices](bad-practices#microservices-mania) {.learn-more} ## Events @@ -636,7 +635,6 @@ Not only do we address the very same goals, we can also identify several symmetr > > CAP is very much in line with both, the intent and goals of Hexagonal Architecture, as well as with the fundamental concepts. Actually, CAP *is an implementation* of Hexagonal Architecture, in particular with respect to the [*Adapters*](#protocol-adapters) in the outer hexagon, but also regarding [*Application Models*](#application-domain) and [*(Core) Domain Models*](#application-domain) in the inner hexagon. -[Also take notice of the *Squared Hexagons* section in the Anti Patterns guide](bad-practices#squared-hexagons) {.learn-more} diff --git a/get-started/index.md b/get-started/index.md index 95c5361f75..00db3c16ae 100644 --- a/get-started/index.md +++ b/get-started/index.md @@ -155,8 +155,7 @@ After the [initial setup](#setup), we recommend continuing as follows while you | 1 | [Introduction – What is CAP?](about) | Learn about key benefits and value propositions. | | 2 | [Bookshop by capire](in-a-nutshell) | Build your first CAP application within 4-44 minutes. | | 3 | [Best Practices](best-practices) | Key concepts & rationales to understand → *must read*. | -| 4 | [Anti Patterns](bad-practices) | Misconceptions & bad practices to avoid → *must read*. | -| 5 | [Learn More](learning-sources) | Find samples, videos, blogs, tutorials, and so on. | +| 4 | [Learn More](learn-more) | Find samples, videos, blogs, tutorials, and so on. | @@ -173,4 +172,4 @@ After these getting started-level introductions, you would continuously revisit | 10 | [Resources](/resources/) | About support channels, community, ... | -This also reflects the overall structure of [this documentation](./learning-sources.md#this-documentation). +This also reflects the overall structure of [this documentation](./learn-more#this-documentation). diff --git a/get-started/initial-setup.md b/get-started/initial-setup.md new file mode 100644 index 0000000000..dcaeeb9869 --- /dev/null +++ b/get-started/initial-setup.md @@ -0,0 +1,175 @@ +--- +status: released +--- + +# Getting Started +Your First Steps {.subtitle} + +Welcome to CAP, and to *capire*, its one-stop documentation. + +[**CAP** [ˈkap(m)] — (unofficial) abbreviation for the *"SAP Cloud Application Programming Model"*](https://translate.google.com/details?sl=en&text=cap){.learn-more .dict} + +[**capire** [ca·pì·re] — Italian for _"understand"_](https://translate.google.com/details?sl=it&tl=en&text=capire){.learn-more .dict} + + + + + + +## Initial Setup {#setup} + +Follow the steps after this for a minimalistic local setup. Alternatively, you can use CAP in [SAP Build Code](https://pages.community.sap.com/topics/build-code), or other cloud-based setups, such as GitHub codespaces. + + + +### Prerequisites + +- [Node.js](https://nodejs.org) — required for installing the `cds` command line interface +- [SQLite](https://sqlite.org) — included in macOS and Linux → [install it](https://sqlite.org/download.html) on Windows +- **A Terminal**{style="font-weight: 500"} — for using the `cds` command line interface (CLI) +- **A Text Editor**{style="font-weight: 500"} → we recommend [VS Code](https://code.visualstudio.com) with [CDS plugin](../tools/cds-editors#vscode) + + +### Installation + +- With the prerequisites met, install the [`cds` toolkit](../tools/cds-cli) *globally*: + + ```sh + npm add -g @sap/cds-dk + ``` + + [Visit the _Troubleshooting_ guide](troubleshooting) if you encounter any errors. {.learn-more} + +- Run `cds` to check whether installation was successful: + + ```sh + cds + ``` + + You see some output like that: + + ```sh + USAGE + + cds [] + cds = cds compile + cds = cds help + + COMMANDS + + i | init jump-start cds-based projects + a | add add a feature to an existing project + c | compile compile cds models to different outputs + s | serve run your services in local server + w | watch run and restart on file changes + r | repl read-eval-event loop + e | env inspect effective configuration + b | build prepare for deployment + d | deploy deploy to databases or cloud + v | version get detailed version information + ? | help get detailed usage information + + Learn more about each command using: + cds help or + cds --help + + ``` + + + +### Optional + +- [Java](https://sapmachine.io) & [Maven](https://maven.apache.org/download.cgi) — if you're going for Java development → [see instructions](../java/getting-started#local). +- [git](https://git-scm.com) — if you go for more than just some quick trials. + + + +## Starting Projects + +- Use `cds init` to start a CAP project, and then open it in VS Code: + + ```sh + cds init bookshop + ``` + + ```sh + code bookshop + ``` + [Assumes you activated the `code` command on macOS as documented](../tools/cds-editors#vscode) {.learn-more} + + + +## Project Structure + +The default file structure of CAP projects is as follows: + +```zsh +bookshop/ # Your project's root folder +├─ app/ # UI-related content +├─ srv/ # Service-related content +├─ db/ # Domain models and database-related content +├─ package.json # Configuration for cds + cds-dk +└─ readme.md # A readme placeholder +``` + +CAP has defaults for many things that you'd have to configure in other frameworks. The goal is that things should just work out of the box, with zero configuration, whenever possible. You can override these defaults by a specific configuration if you need to do so. + +::: details See an example for configuring custom project layouts... + +::: code-group + +```json [package.json] +{ ... + "cds": { + "folders": { + "db": "database/", + "srv": "services/", + "app": "uis/" + } + } +} +``` + +```sh [Explore the defaults in your project] +cds env ls defaults +``` + +[Learn more about project-specific configuration.](../node.js/cds-env){.learn-more} +::: + +::: tip Convention over configuration +We recommend sticking to CAP's way of [Convention over Configuration](https://en.wikipedia.org/wiki/Convention_over_configuration) to benefit from things just working out of the box. Only override the defaults if you really need to do so. +::: + + + + +## Learning More {#next-steps} + +After the [initial setup](#setup), we recommend continuing as follows while you grow as you go...: + +| # | Guide | Description | +|---|-------------------------------------------|--------------------------------------------------------| +| 1 | [Introduction – What is CAP?](about) | Learn about key benefits and value propositions. | +| 2 | [Bookshop by capire](in-a-nutshell) | Build your first CAP application within 4-44 minutes. | +| 3 | [Best Practices](best-practices) | Key concepts & rationales to understand → *must read*. | +| 4 | [Learn More](learn-more) | Find samples, videos, blogs, tutorials, and so on. | + + + +## Grow as you go... + +After these getting started-level introductions, you would continuously revisit these guides to deepen your understanding and as reference docs: + +| # | Guides & References | Description | +|---:|---------------------------------------------------------------------------------------|------------------------------------------------| +| 6 | [Cookbook](../guides) | Walkthroughs for the most common tasks. | +| 7 | [CDS](../cds)
[Java](../java)
[Node.js](../node.js)
[Tools](../tools) | The reference docs for these respective areas. | +| 8 | [Plugins](../plugins) | Curated list of recommended Calesi plugins. | +| 9 | [Releases](../releases) | Your primary source to stay up to date. | +| 10 | [Resources](/resources/) | About support channels, community, ... | + + +This also reflects the overall structure of [this documentation](./learn-more#this-documentation). diff --git a/get-started/learning-sources.md b/get-started/learn-more.md similarity index 91% rename from get-started/learning-sources.md rename to get-started/learn-more.md index bb577ce1a3..6b042b54cd 100644 --- a/get-started/learning-sources.md +++ b/get-started/learn-more.md @@ -19,10 +19,10 @@ It's organized as follows: | Section | Description | |------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------| -| [Getting Started](./)
[Cookbook](../guides/))
[Advanced](../guides/advanced/) | **Task-oriented guides** that walk you through the most common tasks and advanced topics in CAP-based development. | -| [CDS](../cds/)
[Java](../java/)
[Node](../node.js/)
[Tools](../tools/) | **Reference docs** for respective areas. | -| [Plugins](../plugins/) | **Curated list of plugins** that extend the capabilities of the CAP framework. | -| [Releases](../releases/) | The place where you can stay up to date with the most recent information about new features and changes in CAP. | +| [Getting Started](./index)
[Cookbook](../guides))
[Advanced](../guides/advanced) | **Task-oriented guides** that walk you through the most common tasks and advanced topics in CAP-based development. | +| [CDS](../cds)
[Java](../java)
[Node](../node.js)
[Tools](../tools) | **Reference docs** for respective areas. | +| [Plugins](../plugins) | **Curated list of plugins** that extend the capabilities of the CAP framework. | +| [Releases](../releases) | The place where you can stay up to date with the most recent information about new features and changes in CAP. | ### Feature Status Badges @@ -93,7 +93,7 @@ In here, we collected several interesting sample projects for you. Not all of th > [![]()](https://github.com/sap-samples/cloud-cap-samples-java){.java} > [![]()](https://github.com/capire/bookshop){.node} -The bookshop sample is our original sample provided by the CAP team and featured in the [getting started guides](../get-started/in-a-nutshell). +The bookshop sample is our original sample provided by the CAP team and featured in the [getting started guides](./in-a-nutshell). It's available in both Node.js and Java. The Node.js variant contains additional samples besides bookshop that demonstrate various features of CAP. diff --git a/menu.md b/menu.md index fe65046ad5..28ab8266f9 100644 --- a/menu.md +++ b/menu.md @@ -4,9 +4,8 @@ ## [Introduction — What is CAP?](get-started/about) ## [Bookshop by capire](get-started/in-a-nutshell) ## [Best Practices](get-started/best-practices) - ## [Anti Patterns](get-started/bad-practices) ## [Next Steps](get-started/index#next-steps) - ## [Learn More](get-started/learning-sources) + ## [Learn More](get-started/learn-more) ## [Features Matrix](get-started/features) ## [Troubleshooting](get-started/troubleshooting) @@ -103,7 +102,7 @@ -## [Intrinsic Extensibility](guides/extensibility) +## [Intrinsic Extensibility](guides/extensibility/) ### [Extending SaaS Apps](guides/extensibility/customization) ### [Feature Toggles](guides/extensibility/feature-toggles) diff --git a/redirects.md b/redirects.md index 531c632cdf..02dfd98c33 100644 --- a/redirects.md +++ b/redirects.md @@ -2,7 +2,7 @@ - [get-started/dev-tools](tools) - [get-started/tools](tools) -- [get-started/samples](get-started/learning-sources) +- [get-started/samples](get-started/learn-more) - [get-started/using-typescript](node.js/typescript) - [get-started/jumpstart](get-started/about#jumpstarting-projects) - [get-started/hello-world](get-started/in-a-nutshell) @@ -12,7 +12,7 @@ ## Cookbook Guides -- [guides/analytics](advanced/analytics) +- [guides/analytics](guides/advanced/analytics) - [guides/as-saas](guides/multitenancy) - [guides/authorization](guides/security/authorization) - [guides/consuming-services](guides/services/using-services) @@ -38,19 +38,19 @@ - [security/overview](guides/security/overview) - [advanced/fiori](guides/uis/fiori) -- [advanced/asyncapi](advanced/publishing-apis/asyncapi) +- [advanced/asyncapi](guides/advanced/publishing-apis/asyncapi) - [advanced/deploy-to-cloud](guides/deploy/index) - [advanced/deploy-to-kyma](guides/deploy/to-kyma) - [advanced/enable-mtx](guides/extensibility) - [advanced/extensibility](guides/extensibility) - [advanced/mtx](guides/extensibility) -- [advanced/openapi](advanced/publishing-apis/openapi) +- [advanced/openapi](guides/advanced/publishing-apis/openapi) - [advanced/troubleshooting](get-started/troubleshooting) ## CDS - [cds/js-api](node.js/cds-compile) -- [cds/odata-annotations](advanced/odata) +- [cds/odata-annotations](guides/advanced/odata) - [releases/compiler-v2](cds/compiler/v2) ## Java From 95b07f74e7c873679341f4f54dba848af42f56a0 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 22 Dec 2025 13:33:25 +0100 Subject: [PATCH 163/439] fixed links --- get-started/initial-setup.md | 10 +++++----- get-started/learn-more.md | 13 +++++++------ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/get-started/initial-setup.md b/get-started/initial-setup.md index dcaeeb9869..563b463def 100644 --- a/get-started/initial-setup.md +++ b/get-started/initial-setup.md @@ -165,11 +165,11 @@ After these getting started-level introductions, you would continuously revisit | # | Guides & References | Description | |---:|---------------------------------------------------------------------------------------|------------------------------------------------| -| 6 | [Cookbook](../guides) | Walkthroughs for the most common tasks. | -| 7 | [CDS](../cds)
[Java](../java)
[Node.js](../node.js)
[Tools](../tools) | The reference docs for these respective areas. | -| 8 | [Plugins](../plugins) | Curated list of recommended Calesi plugins. | -| 9 | [Releases](../releases) | Your primary source to stay up to date. | -| 10 | [Resources](/resources/) | About support channels, community, ... | +| 6 | [Cookbook](../guides/) | Walkthroughs for the most common tasks. | +| 7 | [CDS](../cds/)
[Java](../java/)
[Node.js](../node.js/)
[Tools](../tools/) | The reference docs for these respective areas. | +| 8 | [Plugins](../plugins/) | Curated list of recommended Calesi plugins. | +| 9 | [Releases](../releases/) | Your primary source to stay up to date. | +| 10 | [Resources](/resources/index) | About support channels, community, ... | This also reflects the overall structure of [this documentation](./learn-more#this-documentation). diff --git a/get-started/learn-more.md b/get-started/learn-more.md index 6b042b54cd..293c94b41a 100644 --- a/get-started/learn-more.md +++ b/get-started/learn-more.md @@ -17,12 +17,13 @@ This documentation — named _'capire'_, italian for understand — is the prima It's organized as follows: -| Section | Description | -|------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------| -| [Getting Started](./index)
[Cookbook](../guides))
[Advanced](../guides/advanced) | **Task-oriented guides** that walk you through the most common tasks and advanced topics in CAP-based development. | -| [CDS](../cds)
[Java](../java)
[Node](../node.js)
[Tools](../tools) | **Reference docs** for respective areas. | -| [Plugins](../plugins) | **Curated list of plugins** that extend the capabilities of the CAP framework. | -| [Releases](../releases) | The place where you can stay up to date with the most recent information about new features and changes in CAP. | +| Section | Description | +| --------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | +| [Getting Started](./index)
[Cookbook](../guides/))
[Advanced](../guides/advanced/) | **Task-oriented guides** that walk you through the most common tasks and advanced topics in CAP-based development. | +| [CDS](../cds/)
[Java](../java/)
[Node](../node.js/)
[Tools](../tools/) | **Reference docs** for respective areas. | +| [Plugins](../plugins/) | **Curated list of plugins** that extend the capabilities of the CAP framework. | +| [Releases](../releases/) | The place where you can stay up to date with the most recent information about new features and changes in CAP. | +| | | ### Feature Status Badges From 8facd5e73e1c994b40f481c207accf6fb8504c5a Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 22 Dec 2025 17:49:40 +0100 Subject: [PATCH 164/439] Fixed links for blc test --- cds/_menu.md | 2 +- cds/cdl.md | 3 +-- get-started/best-practices.md | 10 +++++----- get-started/troubleshooting.md | 2 +- guides/databases/hana.md | 4 ++-- guides/databases/postgres.md | 2 +- guides/deploy/build.md | 2 +- guides/events/core-concepts.md | 2 +- guides/events/event-mesh.md | 2 +- guides/events/messaging.md | 6 +++--- guides/events/s4.md | 2 +- guides/extensibility/customization.md | 8 ++++---- guides/multitenancy/index.md | 6 +++--- guides/multitenancy/mtxs.md | 2 +- guides/uis/fiori.md | 2 +- java/cqn-services/persistence-services.md | 2 +- java/developing-applications/running.md | 3 +-- java/messaging.md | 4 ++-- node.js/index.md | 18 ++++++++---------- node.js/messaging.md | 4 ++-- plugins/index.md | 2 +- 21 files changed, 42 insertions(+), 46 deletions(-) diff --git a/cds/_menu.md b/cds/_menu.md index 625131b184..2b0b726016 100644 --- a/cds/_menu.md +++ b/cds/_menu.md @@ -18,6 +18,6 @@ # [Core / Built-in Types](types) # [Common Reuse Types](common) # [Common Annotations](annotations) -# [Compiler Messages](../compiler/messages) +# [Compiler Messages](/cds/compiler/messages) # [Aspect-oriented Modelling](aspects) # [The Nature of CDS Models](models) diff --git a/cds/cdl.md b/cds/cdl.md index 937915ef80..eb78e11132 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -1575,8 +1575,7 @@ rewritten to `@Common.Text: (descr)`. ::: info -There may be situations where automatic rewriting doesn't work, resulting in the compiler error -[`anno-missing-rewrite`](https://cap.cloud.sap/docs/cds/compiler/messages#anno-missing-rewrite). +There may be situations where automatic rewriting doesn't work, resulting in a compiler error, with message ID `anno-missing-rewrite`. In these cases you can overwrite the annotation with the correct expression in the new location. ::: diff --git a/get-started/best-practices.md b/get-started/best-practices.md index 8740a02338..4ce90f6d67 100644 --- a/get-started/best-practices.md +++ b/get-started/best-practices.md @@ -22,15 +22,15 @@ The CAP framework features a mix of proven and broadly adopted open-source and S The major building blocks are as follows: -- [**Core Data Services** (CDS)](../cds/index.md) — CAP's universal modeling language, and the very backbone of everything; used to capture domain knowledge, generating database schemas, translating to and from various API languages, and most important: fueling generic runtimes to automatically serve request out of the box. +- [**Core Data Services** (CDS)](../cds/) — CAP's universal modeling language, and the very backbone of everything; used to capture domain knowledge, generating database schemas, translating to and from various API languages, and most important: fueling generic runtimes to automatically serve request out of the box. -- [**Service Runtimes**](../guides/services/providing-services.md) for [Node.js](../node.js) and [Java](../java/index.md) — providing the core frameworks for services, generic providers to serve requests automatically, database support for SAP HANA, SQLite, and PostgreSQL, and protocol adaptors for REST, OData, GraphQL, ... +- [**Service Runtimes**](../guides/services/providing-services.md) for [Node.js](../node.js/) and [Java](../java/) — providing the core frameworks for services, generic providers to serve requests automatically, database support for SAP HANA, SQLite, and PostgreSQL, and protocol adaptors for REST, OData, GraphQL, ... -- [**Platform Integrations**](../plugins/index.md) — providing CAP-level service interfaces (*'[Calesi](#the-calesi-pattern)'*) to cloud platform services in platform-agnostic ways, as much as possible. Some of these are provided out of the box, others as plugins. +- [**Platform Integrations**](../plugins/) — providing CAP-level service interfaces (*'[Calesi](#the-calesi-pattern)'*) to cloud platform services in platform-agnostic ways, as much as possible. Some of these are provided out of the box, others as plugins. -- [**Command-Line Interface** (CLI)](../tools/index.md) — the Swiss army knife on the tools and development kit front, complemented by integrations and support in [*SAP Build Code*](https://www.sap.com/germany/products/technology-platform/developer-tools.html), *Visual Studio Code*, *IntelliJ*, and *Eclipse*. +- [**Command-Line Interface** (CLI)](../tools/) — the Swiss army knife on the tools and development kit front, complemented by integrations and support in [*SAP Build Code*](https://www.sap.com/germany/products/technology-platform/developer-tools.html), *Visual Studio Code*, *IntelliJ*, and *Eclipse*. -In addition, there's a fast-growing number of [plugins](../plugins/index.md) contributed by open-source and inner-source [communities](/resources/index#public-resources) that enhance CAP in various ways, and integrate with additional tools and environments; the [*Calesi* plugins](about.md#the-calesi-effect) are among them. +In addition, there's a fast-growing number of [plugins](../plugins/) contributed by open-source and inner-source [communities](/resources/index#public-resources) that enhance CAP in various ways, and integrate with additional tools and environments; the [*Calesi* plugins](about.md#the-calesi-effect) are among them. diff --git a/get-started/troubleshooting.md b/get-started/troubleshooting.md index 3075b6ab1f..dd8a66055a 100644 --- a/get-started/troubleshooting.md +++ b/get-started/troubleshooting.md @@ -276,7 +276,7 @@ To fix this, either switch the Node.js version using a Node version manager, or ``` -[Learn more about the install-node goal.](../java/assets/cds-maven-plugin-site/install-node-mojo.html){.learn-more target="_blank"} +[Learn more about the install-node goal.](/java/assets/cds-maven-plugin-site/install-node-mojo.html){.learn-more target="_blank"} ### How can I expose custom REST APIs with CAP? diff --git a/guides/databases/hana.md b/guides/databases/hana.md index bda7c2cffb..14313fffe4 100644 --- a/guides/databases/hana.md +++ b/guides/databases/hana.md @@ -202,7 +202,7 @@ cds deploy --to hana Behind the scenes, `cds deploy` does the following: * Compiles the CDS model to SAP HANA files (usually in _gen/db_, or _db/src/gen_) -* Generates _[.hdbtabledata](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-deployment-infrastructure-hdi-reference/table-data-hdbtabledata)_ files for the [CSV files](#providing-initial-data) in the project. If a _[.hdbtabledata](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-deployment-infrastructure-hdi-reference/table-data-hdbtabledata)_ file is already present next to the CSV files, no new file is generated. +* Generates _[.hdbtabledata](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-deployment-infrastructure-hdi-reference/table-data-hdbtabledata)_ files for the CSV files in the project. If a _[.hdbtabledata](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-deployment-infrastructure-hdi-reference/table-data-hdbtabledata)_ file is already present next to the CSV files, no new file is generated. * Creates a Cloud Foundry service of type `hdi-shared`, which creates an HDI container. Also, you can explicitly specify the name like so: `cds deploy --to hana:`. * Starts `@sap/hdi-deploy` locally. If you need a tunnel to access the database, you can specify its address with `--tunnel-address `. * Stores the binding information with profile `hybrid` in the _.cdsrc-private.json_ file of your project. You can use a different profile with parameter `--for`. With this information, `cds watch`/`run` can fetch the SAP HANA credentials at runtime, so that the server can connect to it. @@ -557,7 +557,7 @@ CDS build performs rudimentary checks on generated _.hdmigrationtable_ files: - CDS build fails if manual resolution comments starting with `>>>>>` exist in one of the generated _.hdbmigrationtable_ files. This ensures that manual resolution is performed before deployment. ### Native Database Clauses {#schema-evolution-native-db-clauses} -Not all clauses supported by SQL can directly be written in CDL syntax. To use native database clauses also in a CAP CDS model, you can provide arbitrary SQL snippets with the annotations [`@sql.prepend` and `@sql.append`](#sql-prepend-append). In this section, we're focusing on schema evolution specific details. +Not all clauses supported by SQL can directly be written in CDL syntax. To use native database clauses also in a CAP CDS model, you can provide arbitrary SQL snippets with the annotations [`@sql.prepend` and `@sql.append`](index#sql-prepend-append). In this section, we're focusing on schema evolution specific details. Schema evolution requires that any changes are applied by corresponding ALTER statements. See [ALTER TABLE statement reference](https://help.sap.com/docs/hana-cloud-database/sap-hana-cloud-sap-hana-database-sql-reference-guide/alter-table-statement-data-definition?version=2024_1_QRC) for more information. A new migration version is generated whenever an `@sql.append` or `@sql.prepend` annotation is added, changed, or removed. ALTER statements define the individual changes that create the final database schema. This schema has to match the schema defined by the TABLE statement in the _.hdbmigrationtable_ artifact. Please note that the compiler doesn't evaluate or process these SQL snippets. Any snippet is taken as is and inserted into the TABLE statement and the corresponding ALTER statement. The deployment fails in case of syntax errors. diff --git a/guides/databases/postgres.md b/guides/databases/postgres.md index fb08312e78..9c9a8a23d1 100644 --- a/guides/databases/postgres.md +++ b/guides/databases/postgres.md @@ -618,7 +618,7 @@ If the changes in the model could lead to data loss, an error is raised. ## Migration { .node } -Thanks to CAP's database-agnostic cds.ql API, we're confident that the new PostgreSQL service comes without breaking changes. Nevertheless, please check the instructions in the [SQLite Migration guide](sqlite#migrationion), with by and large applies also to the new PostgreSQL service. +Thanks to CAP's database-agnostic cds.ql API, we're confident that the new PostgreSQL service comes without breaking changes. Nevertheless, please check the instructions in the [SQLite Migration guide](sqlite#migration), with by and large applies also to the new PostgreSQL service. ### `cds deploy --model-only` diff --git a/guides/deploy/build.md b/guides/deploy/build.md index 0ba983b32c..0dfd2f787d 100644 --- a/guides/deploy/build.md +++ b/guides/deploy/build.md @@ -48,7 +48,7 @@ You can use them as a blue print – copy & paste them into your CDS configurati -## Custom Build Tasks {#build-config} +## Custom Build Tasks If custom build tasks are configured, those properties have precedence For example, you want to configure the _src_ folder and add the default models. To achieve this, do not define the _model_ option in your build task: diff --git a/guides/events/core-concepts.md b/guides/events/core-concepts.md index b99d04c4ce..b57b009496 100644 --- a/guides/events/core-concepts.md +++ b/guides/events/core-concepts.md @@ -183,7 +183,7 @@ As emitting and handling events is an intrinsic feature of the CAP core runtimes Let's see that in action... -### 1. Run CAP Server +### 1. Run CAP Server {#start-server} Run the following command to start a reviews-enhanced bookshop as an all-in-one server process: diff --git a/guides/events/event-mesh.md b/guides/events/event-mesh.md index 9f27c52e41..6f74069fd5 100644 --- a/guides/events/event-mesh.md +++ b/guides/events/event-mesh.md @@ -119,7 +119,7 @@ Before [deploying to the cloud](#deploy-to-the-cloud-with-mta), you may want to [Learn more about `cds.env` profiles.](../../node.js/cds-env#profiles){.learn-more} -6. Test your app [as described in the messaging guide](./#add-or-update-reviews). +6. Test your app [as described in the messaging guide](messaging#add-or-update-reviews). ### CAP Automatically Creates Queues and Subscriptions diff --git a/guides/events/messaging.md b/guides/events/messaging.md index 79dd450715..907fbdb9a4 100644 --- a/guides/events/messaging.md +++ b/guides/events/messaging.md @@ -61,7 +61,7 @@ For quick tests during development, CAP provides a simple file-based messaging s In our samples, you find that in [@capire/reviews/package.json](https://github.com/capire/reviews/blob/main/package.json) as well as [@capire/bookstore/package.json](https://github.com/capire/bookstore/blob/main/package.json), which you'll run in the next step as separate processes. -### 2. Start the `reviews` Service and `bookstore` Separately +### 2. Start the `reviews` Service and `bookstore` Separately First start the `reviews` service separately: @@ -85,7 +85,7 @@ Then, in a separate terminal start the `bookstore` server as before: cds watch bookstore ``` -This time the trace output is different to [when you started all in a single server](#start-single-server). The output confirms that you're using `file-based-messaging`, and that you now *connected* to the separately started `ReviewsService` at port 4005: +This time the trace output is different to [when you started all in a single server](./core-concepts#start-server). The output confirms that you're using `file-based-messaging`, and that you now *connected* to the separately started `ReviewsService` at port 4005: ```log [cds] - connect to messaging > file-based-messaging { file: '~/.cds-msg-box' } @@ -98,7 +98,7 @@ This time the trace output is different to [when you started all in a single ser [cds] - launched at 5/25/2023, 4:55:46 PM, version: 7.0.0, in: 1.053s ``` -### 3. Add or Update Reviews {#add-or-update-reviews-2} +### 3. Add or Update Reviews {#add-or-update-reviews} Similar to before, open [http://localhost:4005/vue/index.html](http://localhost:4005/vue/index.html) to add or update reviews. diff --git a/guides/events/s4.md b/guides/events/s4.md index b0289be438..c78626f68d 100644 --- a/guides/events/s4.md +++ b/guides/events/s4.md @@ -68,7 +68,7 @@ extend service S4 with { ``` ::: tip -If using SAP Event Mesh, please see [CloudEvents Standard](./index.md#cloudevents) and [Node - Messaging - CloudEvents Protocol](../../node.js/messaging.md#cloudevents-protocol) to learn about `format: 'cloudevents'`, `publishPrefix` and `subscribePrefix`. +If using SAP Event Mesh, please see [CloudEvents Standard](messaging#cloudevents) and [Node - Messaging - CloudEvents Protocol](../../node.js/messaging#cloudevents-protocol) to learn about `format: 'cloudevents'`, `publishPrefix` and `subscribePrefix`. :::
diff --git a/guides/extensibility/customization.md b/guides/extensibility/customization.md index 7d5d679b90..a0cdffd118 100644 --- a/guides/extensibility/customization.md +++ b/guides/extensibility/customization.md @@ -285,7 +285,7 @@ Here's a rough checklist what this guide should cover: ### 5. Deploy Application -Before deploying your SaaS application to the cloud, you can [test-drive it locally](../multitenancy/#test-locally). +Before deploying your SaaS application to the cloud, you can [test-drive it locally](../multitenancy/index#test-drive-locally). Prepare this by going back to your app with `cd orders`. With your application enabled and prepared for extensibility, you are ready to deploy the application as described in the [Deployment Guide](../deploy/). @@ -293,11 +293,11 @@ With your application enabled and prepared for extensibility, you are ready to d ## As a SaaS Customer {#prep-as-operator} The following sections provide step-by-step instructions on adding extensions. -All steps are based on our Orders Management sample which can be [started locally for testing](../multitenancy/#test-locally). +All steps are based on our Orders Management sample which can be [started locally for testing](../multitenancy/index#test-drive-locally). ::: details On BTP… -To extend a SaaS app deployed to BTP, you'll need to subscribe to it [through the BTP cockpit](../multitenancy/#subscribe). +To extend a SaaS app deployed to BTP, you'll need to subscribe to it [through the BTP cockpit](../multitenancy/index#subscribe-via-btp-cockpit). Refer to the [Deployment Guide](../deploy/to-cf) for more details on remote deployments. @@ -456,7 +456,7 @@ annotate OrdersService.Orders with @UI.LineItem: [ Make sure **no syntax errors** are shown in the [CDS editor](../../tools/cds-editors#vscode) before going on to the next steps. ::: -### 7. Test-Drive Locally {#test-locally } +### 7. Test-Drive Locally {#test-locally} To conduct an initial test of your extension, run it locally with `cds watch`: diff --git a/guides/multitenancy/index.md b/guides/multitenancy/index.md index 86321aeb38..a7f59c2b67 100644 --- a/guides/multitenancy/index.md +++ b/guides/multitenancy/index.md @@ -245,7 +245,7 @@ In case of **CAP Java** projects, the `cds add multitenancy` command... You can always inspect the _effective_ configuration with `cds env`. ::: -## Test-Drive Locally {#test-locally} +## Test-Drive Locally Before deploying to the cloud, you can test-drive common SaaS operations with your app locally, including SaaS startup, subscribing tenants, and upgrading tenants. @@ -565,7 +565,7 @@ In order to get your multitenant application deployed, follow this excerpt from :::tip For manual setups, ensure the metadata container (`t0`) is unique -If you’re not running `cds-mtx upgrade *` as a [Cloud Foundry hook](#run-as-cloud-foundry-hook) (as set up by `cds add multitenancy`) and instead use a custom setup, deploy the MTX sidecar with a single instance for the initial rollout. This avoids conflicts when `t0` is created. +If you’re not running [`cds-mtx upgrade *`](#update-database-schema) as a Cloud Foundry hook (as set up by `cds add multitenancy`) and instead use a custom setup, deploy the MTX sidecar with a single instance for the initial rollout. This avoids conflicts when `t0` is created. ::: @@ -735,7 +735,7 @@ Each time you update your model or any SAP HANA source file, you need repeat the > Make sure to stop any running CAP servers left over from local testing. -By passing `--profile hybrid` you can now run the app with cloud bindings and interact with it as you would while [testing your app locally](#test-locally). Run this in your project root: +By passing `--profile hybrid` you can now run the app with cloud bindings and interact with it as you would while [testing your app locally](#test-drive-locally). Run this in your project root: ```sh cds watch mtx/sidecar --profile hybrid diff --git a/guides/multitenancy/mtxs.md b/guides/multitenancy/mtxs.md index b63c1126df..e6578a80dc 100644 --- a/guides/multitenancy/mtxs.md +++ b/guides/multitenancy/mtxs.md @@ -151,7 +151,7 @@ cds watch --profile local-multitenancy ### Testing With Minimal Setup -When designing test suites that run frequently in CI/CD pipelines, you can shorten runtimes and reduce costs. First run a set of functional tests which use MTX in minimized setups – that is, with local servers and in-memory databases as introduced in the [_Multitenancy_ guide](../multitenancy/#test-locally). +When designing test suites that run frequently in CI/CD pipelines, you can shorten runtimes and reduce costs. First run a set of functional tests which use MTX in minimized setups – that is, with local servers and in-memory databases as introduced in the [_Multitenancy_ guide](../multitenancy/index#test-drive-locally). Only in the second and third phases, you would then run the more advanced hybrid tests. These hybrid tests could include testing tenant subscriptions with SAP HANA, or integration tests with the full set of required cloud services. diff --git a/guides/uis/fiori.md b/guides/uis/fiori.md index aa4a076f97..c81b77837b 100644 --- a/guides/uis/fiori.md +++ b/guides/uis/fiori.md @@ -480,7 +480,7 @@ CAP generates side-effect annotations in the EDMX to instruct UI5 to fetch state annotate MyService.MyEntity with @Common.SideEffects #alwaysFetchMessages: null; ``` -For this feature to work correctly, CAP adds additional elements to your draft-enabled entities and [`DraftAdministrativeData`](/@external/guides/security/data-privacy#personal-data-stored-by-cap) to store and serve the state messages. CAP runtimes persist (error) messages for draft-enabled entities. +For this feature to work correctly, CAP adds additional elements to your draft-enabled entities and [`DraftAdministrativeData`](../security/data-privacy#personal-data-stored-by-cap) to store and serve the state messages. CAP runtimes persist (error) messages for draft-enabled entities. ::: warning Requires Schema Update This feature initiates a database schema update, as it adds an additional element to `DraftAdministrativeData`. diff --git a/java/cqn-services/persistence-services.md b/java/cqn-services/persistence-services.md index 7b4aee62ab..90656f9eb7 100644 --- a/java/cqn-services/persistence-services.md +++ b/java/cqn-services/persistence-services.md @@ -408,7 +408,7 @@ At runtime you need to ensure to access the tenant-dependent entities through th #### Local Development and Testing with MTX -In case you are testing your multitenant application locally with the setup described in [Local Development and Testing](../../guides/multitenancy/#test-locally), you need to perform additional steps to create an in-memory tenant-independent datasource. +In case you are testing your multitenant application locally with the setup described in [Local Development and Testing](../../guides/multitenancy/index#test-drive-locally), you need to perform additional steps to create an in-memory tenant-independent datasource. To create an in-memory datasource, initialized with the SQL schema, add the following configuration to your Spring Boot application: diff --git a/java/developing-applications/running.md b/java/developing-applications/running.md index 3087cbec8e..f6426ea994 100644 --- a/java/developing-applications/running.md +++ b/java/developing-applications/running.md @@ -105,7 +105,7 @@ Spring Boot Devtools only detects changes to .class files. You need to enable th ## Multitenant Applications With the streamlined MTX, you can run your multitenant application locally along with the MTX sidecar and use SQLite as the database. -See [the _Multitenancy_ guide](../../guides/multitenancy/#test-locally) for more information. +See [the _Multitenancy_ guide](../../guides/multitenancy/index#test-drive-locally) for more information. ## Debugging @@ -126,4 +126,3 @@ Once this is added, you can use the restart capabilities of the Spring Boot Devt * Configuration files (for example, _application.yaml_) * Artifacts generated from CDS (schema.sql, CSN, EDMX) * Any other static resource - diff --git a/java/messaging.md b/java/messaging.md index e1733784c0..d7de9cb9a9 100644 --- a/java/messaging.md +++ b/java/messaging.md @@ -88,7 +88,7 @@ In section [CDS-Declared Events](#cds-declared-events), we show how to declare e The messages are sent once the transaction is successful. Per default, an in-memory outbox is used, but there's also support for a [persistent outbox](./outbox#persistent). You can configure a [custom outbox](./outbox#custom-outboxes) for a messaging service by setting the property -`cds.messaging.services..outbox.name` to the name of the custom outbox. This specifically makes sense when [using multiple channels](../guides/events/#using-multiple-channels). +`cds.messaging.services..outbox.name` to the name of the custom outbox. This specifically makes sense when [using multiple channels](../guides/events/messaging#using-multiple-channels). ::: @@ -877,6 +877,6 @@ private void ratingChanged(ReviewedContext context) { } ``` -[Learn more about **CloudEvents**.](../guides/events/#cloudevents){.learn-more} +[Learn more about **CloudEvents**.](../guides/events/messaging#cloudevents){.learn-more} diff --git a/node.js/index.md b/node.js/index.md index c8429434c2..49a77d0abf 100644 --- a/node.js/index.md +++ b/node.js/index.md @@ -8,18 +8,16 @@ Reference Documentation { .subtitle} - - As an application developer you'd primarily use the Node.js APIs documented herein to implement **domain-specific custom logic** along these lines: 1. Define services in CDS → see [Cookbook > Providing & Consuming Services](../guides/services/providing-services#service-definitions) -2. Add service implementations → [`cds.Service` > Implementations](./core-services#implementing-services) -3. Register custom event handlers in which → [`srv.on`/`before`/`after`](./core-services#srv-on-before-after) -4. Read/write data from other services in which → [`srv.run`](./core-services#srv-run-query) + [`cds.ql`](./cds-ql) -5. ..., that is from your primary database → [`cds.DatabaseService`](./databases) -5. ..., that is from other connected services → [`cds.RemoteService`](./remote-services) -6. Emit and handle asynchronous events → [`cds.MessagingService`](./messaging) +2. Add service implementations → [`cds.Service` > Implementations](core-services#implementing-services) +3. Register custom event handlers in which → [`srv.on`/`before`/`after`](core-services#srv-on-before-after) +4. Read/write data from other services in which → [`srv.run`](core-services#srv-run-query) + [`cds.ql`](cds-ql) +5. ..., that is from your primary database → [`cds.DatabaseService`](databases) +5. ..., that is from other connected services → [`cds.RemoteService`](remote-services) +6. Emit and handle asynchronous events → [`cds.MessagingService`](messaging) All the rest is largely handled by the CAP runtime framework behind the scenes. -This especially applies to bootstrapping the [`cds.server`](./cds-serve) and the generic features -provided through [`cds.ApplicationService`](./app-services). +This especially applies to bootstrapping the [`cds.server`](cds-serve) and the generic features +provided through [`cds.ApplicationService`](app-services). diff --git a/node.js/messaging.md b/node.js/messaging.md index 3be3cb41ef..7df395aaa2 100644 --- a/node.js/messaging.md +++ b/node.js/messaging.md @@ -157,7 +157,7 @@ messaging.on('*', async msg => { /*...*/ }) ``` ::: tip -In general, messages do not contain user information but operate with a technical user. As a consequence, the user of the message processing context (`cds.context.user`) is set to [`cds.User.privileged`](/@external/node.js/authentication#privileged-user) and, hence, any necessary authorization checks must be done in custom handlers. +In general, messages do not contain user information but operate with a technical user. As a consequence, the user of the message processing context (`cds.context.user`) is set to [`cds.User.privileged`](authentication#privileged-user) and, hence, any necessary authorization checks must be done in custom handlers. ::: ### Inbox @@ -242,7 +242,7 @@ Example: -#### [SAP Event Mesh](../guides/events/#sap-event-mesh) +#### [SAP Event Mesh](../guides/events/event-mesh) If you specify your format to be `cloudevents`, the following default prefixes are set: diff --git a/plugins/index.md b/plugins/index.md index 0f17dd5b4e..ce408e8805 100644 --- a/plugins/index.md +++ b/plugins/index.md @@ -389,7 +389,7 @@ S4bupa.on ('BusinessPartner.Changed', msg => {...})
-For more details, please see [Events and Messaging → Using SAP Cloud Application Event Hub](../guides/events/#sap-event-broker). +For more details, please see [Events and Messaging → Using SAP Cloud Application Event Hub](../guides/events/event-hub). Available for: From 71c35ad33a950e00b1980b11257093e16b6cb302 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 26 Dec 2025 09:30:48 +0100 Subject: [PATCH 165/439] Improved scroll-to-top and shortcut keys --- .vitepress/theme/Layout.vue | 13 +---- .vitepress/theme/components/ScrollToTop.vue | 56 ++++++++++++------- .../theme/components/ScrollToTopSimple.vue | 12 ---- .vitepress/theme/components/ShortcutsList.vue | 26 +++++---- .vitepress/theme/components/StatusBadge.vue | 2 +- 5 files changed, 53 insertions(+), 56 deletions(-) delete mode 100644 .vitepress/theme/components/ScrollToTopSimple.vue diff --git a/.vitepress/theme/Layout.vue b/.vitepress/theme/Layout.vue index 3c4f1bcf77..47c52e4b6f 100644 --- a/.vitepress/theme/Layout.vue +++ b/.vitepress/theme/Layout.vue @@ -1,36 +1,29 @@ + + + + \ No newline at end of file diff --git a/.vitepress/theme/components/ScrollToTopSimple.vue b/.vitepress/theme/components/ScrollToTopSimple.vue deleted file mode 100644 index 7999c3862a..0000000000 --- a/.vitepress/theme/components/ScrollToTopSimple.vue +++ /dev/null @@ -1,12 +0,0 @@ - - - + + {{ archiveVersion }}
Archive +
+ DEV PREVIEW
See cap.cloud.sap
- - {{ archiveVersion }}
Archive -
From fe0a70fc7d0a2995e184559637e3d989828f10fc Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Wed, 28 Jan 2026 17:09:51 +0100 Subject: [PATCH 362/439] Cleanup --- .vitepress/theme/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts index 51c6232e9e..18433e6ad3 100644 --- a/.vitepress/theme/index.ts +++ b/.vitepress/theme/index.ts @@ -10,7 +10,6 @@ import Gamma from './components/Gamma.vue'; import Concept from './components/Concept.vue' import Since from './components/Since.vue'; import UnderConstruction from './components/UnderConstruction.vue'; -// import ScrollToTop from './components/ScrollToTop.vue' import CfgInspect from './components/ConfigInspect.vue'; import TwoslashFloatingVue from '@shikijs/vitepress-twoslash/client' @@ -36,7 +35,6 @@ export default { ctx.app.component('Concept', Concept) ctx.app.component('Since', Since) ctx.app.component('UnderConstruction', UnderConstruction) - // ctx.app.component('ScrollToTop', ScrollToTop) ctx.app.use(TwoslashFloatingVue) } } \ No newline at end of file From ad8cd3382faba7fc1e331e508dc98e605ff78965 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 28 Jan 2026 19:26:14 +0100 Subject: [PATCH 363/439] Update calesi.md --- guides/integration/calesi.md | 100 +++++++++++++++++++++++------------ 1 file changed, 67 insertions(+), 33 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index cc78832aa2..9cf14ab1f7 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -618,14 +618,14 @@ namespace sap.capire.xflights; ::: ::: code-group ```cds :line-numbers [apis/capire/s4.cds] -using { API_BUSINESS_PARTNER as s4 } from '@capire/s4'; +using { API_BUSINESS_PARTNER as S4 } from '@capire/s4'; namespace sap.capire.s4; -@federated entity Customers as projection on s4.A_BusinessPartner { +@federated entity Customers as projection on S4.A_BusinessPartner { BusinessPartner as ID, PersonFullName as Name, LastChangeDate as modifiedAt, -} +} where BusinessPartnerCategory == 1; // 1 = Person ``` ::: @@ -885,14 +885,14 @@ MaxListeners is 10. Use emitter.setMaxListeners() to increase limit So, let's go on and fill this gap with required custom code... -#### Service-level Data Federation +### CAP-level Data Federation Displaying external data in lists UIs commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on on server, and lacking all resilience. Instead, we need to replicate the required data from remote services into local replica tables, which can then be accessed fast and reliably by UIs using good old SQL JOINs. We did implement a simple, yet quite effective, solution in `srv/data-federation.js` in the Xtravels app as shown below: ::: code-group -```js:line-numbers {16,24,25,26} [srv/data-federation.js] +```js:line-numbers {9,16,24,25,26} [srv/data-federation.js] const cds = require ('@sap/cds') const feed = [] @@ -924,53 +924,87 @@ async function replicate_entity (req) { ``` ::: -The actual replication is accomplished by the highlighted lines – extracted below –, which implement a simple polling-based data federation mechanism, based on `modifiedAt` timestamps: +This is a generic solution which automatically replicates all entities annotated with `@federated`, as we did in the [consumption views](#consumption-views) before, for example: -```js - const remote = await cds.connect.to (each.remote) // done once +```cds :line-numbers=4 +@federated entity Customers as projection on S4.A_BusinessPartner { ... } ``` -```js - let { t0 } = await SELECT.one `max(modifiedAt) as t0` .from (entity) - let rows = await remote.read (entity) .where `modifiedAt > ${t0}` - if (rows.length) await UPSERT (rows) .into (entity); else return + +These entities are detected, and, unless mocked, turned into tables to serve as local persistence for replicated data (line 9 in the code above). + +> [!tip] Stay Intentional -> What, not how +> By default, consumption views on top of remote entities are virtual and do not have local persistence. By setting the `@cds.persistence.table` annotation to `true`, we instruct the CAP database layer to create actual database tables for these entities, which can then be used to store replicated data locally. +> +> Yet, you as an application developer stay intentional about **_what_** you want to achieve (-> `@federated` tags), and **avoid any eager assumptions** about **_how_** this is actually implemented. => This allows CAP runtimes – or you own _generic_ framework plugins, as with the code above – to choose the best possible implementation strategy for the given environment and use case, which may differ between development, testing, and production environments. + +The actual replication is accomplished by the highlighted lines 16 and 24-26, which implement a simple polling-based data federation mechanism, based on `modifiedAt` timestamps. Let's break that down line by line: + +```js :line-numbers=16 +const remote = await cds.connect.to (each.remote) // done once +``` +Establishes a connection to the remote service (like the S/4 Business Partner service or XFlights service). + +```js :line-numbers=24 +let { t0 } = await SELECT.one `max(modifiedAt) as t0` .from (entity) ``` -#### Delegation to Remote Services +Queries the local replica table to find the timestamp of the most recently modified record. +This determines the "last sync point" - only newer data needs to be fetched. +```js :line-numbers=25 +let rows = await remote.read (entity) .where `modifiedAt > ${t0}` +``` +Fetches only records from the remote service that have been modified since the last sync. +On an initial run, when no data exists locally, all records are fetched automatically, as `t0` will be `null`. -#### Event-Driven Integration +```js :line-numbers=26 +if (rows.length) await UPSERT (rows) .into (entity) +``` +For all received rows, `UPSERT` automatically inserts new records or updates existing ones in the local replica table. +Noteworthy: -#### Claude says... +- `SELECT` and `UPSERT` commands are part of CAP Node.js' [`cds.ql`](../../node.js/cds-ql) and and create [_CQL_](../../cds/cql) query objects. When `await`ed as in line 24 and 26, they are executed against the local database, translated to database-native SQL under the hood. -##### 3. **Service Implementation** +- `remote.read` on the other hand executes queries against the connected remote service, translating them to the connected service's remote protocol, like OData or HCQL. It's actually a convenience shorthand for: + ```js + remote.run (SELECT.from(entity) .where `modifiedAt > ${t0}`) + ``` -- **Line 22**: Runtime integration - - Subscribes to `Flights.Updated` events from the external XFlights service - - Updates local replica data when occupied seats change - - Emits `Booking.Created` events back to XFlights when new bookings are made - - Implements bidirectional data synchronization +- In both/all cases we work with database-agnostic and protocol-agnostic queries constructed using [`cds.ql`](../../node.js/cds-ql), while CAP runtimes handle the protocol and dialect translations under the hood. -##### 4. **Data Federation** +> [!tip] Agnostic Querying, ... as if they were local +> Both, queries executed against local databases, as well as queries executed against remote services using, are **database-agnostic** and **protocol-agnostic**, respectively. CAP runtimes handle all necessary translations under the hood, allowing us to write code that works regardless of where the data actually resides – be it with mocked data, replicated data, or real remote data. We can even switch between different integration and federation strategies later on. -The `@federated` annotation on the Flights entity triggers automatic replication: -- Creates local replica tables for offline access -- Schedules periodic synchronization (every 3 seconds in development) -- Replicates changes based on `modifiedAt` timestamps +### Requests to Remote -##### Architecture Pattern +In addition to replication, there are also use cases where we need to send requests directly to the remote services. For example, when creating new bookings, we need to inform the external xflights service so it can reduce its records of free seats. This is accomplished by the following code in `srv/travel-service.js`: + +::: code-group +```js :line-numbers=28 [srv/travel-service.js] +const xflights = await cds.connect.to ('sap.capire.flights.data') +this.after ('SAVE', Travels, ({ Bookings=[] }) => Promise.all ( + Bookings.map (({ Flight_ID: flight, Flight_date: date }) => { + return xflights.send ('POST', 'BookingCreated', { flight, date }) + }) +)) +``` +> Note: `this` is an instance of `TravelService`. -This implements a **federated data architecture**: -- External Flights data is consumed via projection -- Local replicas enable offline/cached access -- Event-driven sync keeps both sides consistent -- The domain model integrates external data seamlessly with local entities +#### Delegating Value Help Requests +Another example is delegating value help requests to remote services, which we implemented like this in `srv/travel-service.js` for `Customers` -> S/4 Business Partners: +::: code-group +```js :line-numbers=24 [srv/travel-service.js] +const s4 = await cds.connect.to ('S4BusinessPartnerService') +this.on ('READ', Customers, req => s4.run (req.query)) +``` +::: -### Agnostic Service APIs +This intercepts all `READ` requests to the `Customers` entity, and simply delegates the original request's query to the connected S/4 service. This ensures we support all kind of select clauses, and where clauses, as they are fully preserved. The CAP runtime handles the necessary protocol translations under the hood, including mapping all projections to entities known to the remote service. ## Service Bindings From 11386b08b6e2199d54045b10a6d93fc6999d757b Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 29 Jan 2026 08:13:42 +0100 Subject: [PATCH 364/439] ai-supported edit for simpler formulations --- get-started/get-help.md | 36 +++++++++++++++++------------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/get-started/get-help.md b/get-started/get-help.md index c8d86870cd..f645b6d5f1 100644 --- a/get-started/get-help.md +++ b/get-started/get-help.md @@ -34,7 +34,7 @@ To start VS Code via the `code` CLI, users on macOS must first run a command (*S ### Check the Node.js version { #node-version} -Verify that you run the latest long-term support (LTS) version of Node.js with an even number like `20`, `22`, `24`, and so on. Refrain from using odd versions, for which some modules with native parts will have no support and thus might even fail to install. Check version with: +Run the latest LTS version of Node.js (even numbers: 20, 22, 24). Avoid odd versions, as some modules with native parts may not install. Check version with: ```sh node -v @@ -48,7 +48,7 @@ For [Cloud Foundry](https://docs.cloudfoundry.org/buildpacks/node/index.html#run ### Check access permissions on macOS or Linux -In case you get error messages like `Error: EACCES: permission denied, mkdir '/usr/local/...'` when installing a global module like `@sap/cds-dk`, configure `npm` to use a different directory for global modules: +If you get error messages like `Error: EACCES: permission denied, mkdir '/usr/local/...'` when installing a global module like `@sap/cds-dk`, configure `npm` to use a different directory for global modules: ```sh mkdir ~/.npm-global ; npm set prefix '~/.npm-global' @@ -72,7 +72,7 @@ Verify that your `PATH`-environment variable contains this path. In addition, set the variable `NODE_PATH` to:
``C:\Users\\AppData\Roaming\npm\node_modules``. -### How to consume a new version of CDS? { #cds-versions} +### Updating CDS Versions { #cds-versions} * Design time tools like `cds init`: @@ -136,9 +136,9 @@ cds.on('served', async ()=>{ ### Why does my app not show up in Dynatrace? -Make sure that: -- Your app's start script is `cds-serve` instead of `npx cds run`. -- You have the dependency `@dynatrace/oneagent-sdk` in your _package.json_. +Requirements: +- App start script is `cds-serve` (not `npx cds run`) +- Dependency `@dynatrace/oneagent-sdk` is in _package.json_ ### Why are requests rejected with HANA timeout errors? @@ -234,8 +234,8 @@ module.exports = cds.server | _Solution 2_ | Try `npm rebuild` or add `@cap-js/cds-types` in your _tsconfig.json_. | -#### Install package as dev dependency -The type definitions for `@sap/cds` are maintained in a separate package `@cap-js/cds-types` and have to be explicitly installed as a dev dependency. This can be done by adding the `typescript` facet: +#### Install as dev dependency +Install type definitions by adding the `typescript` facet: ::: code-group ```sh [facet] @@ -250,7 +250,7 @@ npm i -D @cap-js/cds-types Installing `@cap-js/cds-types` leverages VS Code's automatic type resolution mechanism by symlinking the package in `node_modules/@types/sap__cds` in a postinstall script. If you find that this symlink is missing, try `npm rebuild` to trigger the postinstall script again. -If the symlink still does not persist, you can explicitly point the type resolution mechanism to `@cap-js/cds-types` in your _tsconfig.json_: +If the symlink doesn't persist, explicitly configure _tsconfig.json_: ::: code-group ```json [tsconfig.json] @@ -262,30 +262,27 @@ If the symlink still does not persist, you can explicitly point the type resolut ``` ::: -If you find that the types are still incomplete, open a bug report in [the `@cap-js/cds-types` repository](https://github.com/cap-js/cds-types/issues/new/choose). +For incomplete types, report issues in [the `@cap-js/cds-types` repository](https://github.com/cap-js/cds-types/issues/new/choose). ### How to fix "`tar: Error is not recoverable: exiting now`"? -If you get the error `tar: Error is not recoverable: exiting now` (for example, when building MTX resources) -you can try installing the tar library for better compatibility with Windows systems. - -Add it to your devDependencies like so: +If you get this error (for example, when building MTX resources), install the tar library for better Windows compatibility: ```sh npm add -D tar ``` -On macOS and Linux, the built-in implementation will continue to be used. +On macOS and Linux, the built-in implementation continues to be used. ## Java -### How can I make sure that a user passes all authorization checks? +### How to bypass authorization checks? -A new option `privilegedUser()` can be leveraged when [defining](../java/event-handlers/request-contexts#defining-requestcontext) your own `RequestContext`. Adding this introduces a user, which passes all authorization restrictions. This is useful for scenarios, where a restricted service should be called through the [local service consumption API](../java/services) either in a request thread regardless of the original user's authorizations or in a background thread. +Use `privilegedUser()` when [defining](../java/event-handlers/request-contexts#defining-requestcontext) your own `RequestContext`. This introduces a user that passes all authorization restrictions. Useful when calling a restricted service through the [local service consumption API](../java/services) regardless of the original user's authorizations or in a background thread. ### Why do I get a "User should not exist" error during build time? @@ -319,8 +316,9 @@ To fix this, either switch the Node.js version using a Node version manager, or ### How can I expose custom REST APIs with CAP? -You might want to expose additional REST APIs in your CAP application that aren't covered through CAP's existing protocol adapters (for example, OData V4). A common example is a CSV file upload or another type of custom REST endpoint. -In that case, you can leverage the powerful capabilities of Spring Web MVC by implementing your own RestController. From within your RestController implementation, you can fully leverage all CAP Java APIs. Most commonly you'll be interacting with your services and the database through the [local service consumption API](../java/services). To learn more about Spring Web MVC, see the [Spring docs](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc), [Spring Boot docs](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc), and this [tutorial](https://spring.io/guides/gs/serving-web-content/). +To expose additional REST APIs not covered by CAP's protocol adapters (for example, OData V4), implement your own Spring Web MVC RestController. Common examples include CSV file uploads or custom REST endpoints. + +Your RestController can fully leverage CAP Java APIs. You'll typically interact with services and the database through the [local service consumption API](../java/services). Learn more: [Spring docs](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc), [Spring Boot docs](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-spring-mvc), and this [tutorial](https://spring.io/guides/gs/serving-web-content/). ### How can I build a CAP Java application without SQL database? From 586cf5b910542c794dd81faf733978566f9d7efd Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Thu, 29 Jan 2026 09:27:29 +0100 Subject: [PATCH 365/439] ai-supported edit --- guides/databases/cdl-to-ddl.md | 10 +++++----- guides/databases/cql-to-sql.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/guides/databases/cdl-to-ddl.md b/guides/databases/cdl-to-ddl.md index b92ca05e8e..9a91b3ec1c 100644 --- a/guides/databases/cdl-to-ddl.md +++ b/guides/databases/cdl-to-ddl.md @@ -439,9 +439,9 @@ CREATE TABLE Books ( ### Invalid Names -When you use names in your CDS models that conflict with reserved words of underlying databases, or names that contain non-ASCII characters, special characters, or spaces, these names are considered invalid in many databases, and are therefore escaped by CAP in the generated DDL, and all queries sent to the database. +When you use names in your CDS models that conflict with reserved words of underlying databases, or names that contain non-ASCII characters, special characters, or spaces, these names are considered invalid in many databases. CAP escapes these names in the generated DDL and all queries sent to the database. -For example, the following is a valid CDS model, with all database-invalid named elements, so the generated DDL will escape them accordingly with double quotes: +For example, the following is a valid CDS model with database-invalid named elements. The generated DDL escapes them with double quotes: ::: code-group ```cds [CDS Source] @@ -491,7 +491,7 @@ If a constraint violation occurs, the error messages coming from the database ar ### Primary Key Constraints -Primary keys defined in CDS entities are translated into SQL `PRIMARY KEY` constraints in the generated DDL. For example: +The compiler translates primary keys defined in CDS entities into SQL `PRIMARY KEY` constraints in the generated DDL. For example: ::: code-group ```cds [CDS Source] @@ -567,7 +567,7 @@ annotate OrderItems with @assert.unique.someOtherConstraint: [ ... ]; - The argument is expected to be an array of flat [element references](../../cds/cdl#annotation-values) referring to elements in the entity. These elements may have the following types: - - scalar types, i.e., `String`, `Integer`, etc. + - scalar types - `String`, `Integer`, and so on - structured types – **not** elements _within_ structs. - _managed_ associations – **not** _unmanaged_ associations. @@ -626,7 +626,7 @@ entity Books { #### Deferred Enforcement -Referential integrity is enforced at the time of transaction commit by using the databases [deferred foreign key constraints](https://www.sqlite.org/foreignkeys.html), which is supported by most relational databases, including SAP HANA, SQLite, and PostgreSQL, but not for H2, hence: +Referential integrity is enforced at the time of transaction commit. This uses the database's [deferred foreign key constraints](https://www.sqlite.org/foreignkeys.html), which are supported by most relational databases, including SAP HANA, SQLite, and PostgreSQL. However, H2 does not support deferred constraints: > [!note] Database constraints are not supported for H2 diff --git a/guides/databases/cql-to-sql.md b/guides/databases/cql-to-sql.md index 51810f94cb..d28be92848 100644 --- a/guides/databases/cql-to-sql.md +++ b/guides/databases/cql-to-sql.md @@ -1,6 +1,6 @@ # CDS Compilation to Database-Specific SQL -CAP supports a number of portable functions and operators in CQL, which are automatically translated to the best-possible database-specific native SQL equivalents. These can safely be used in CDS view definitions as well as in runtime queries expressed in CQL. +CAP supports a number of portable functions and operators in CQL. The compiler automatically translates these to the best-possible database-specific native SQL equivalents. You can safely use these in CDS view definitions and runtime queries expressed in CQL. {.abstract} [[toc]] @@ -19,7 +19,7 @@ In addition, CQL provides some extended operators as described below. ### Bivalent `==` and `!=` Operators -CQL supports `==` and `!=` operators as bivalent logic variants for SQL's three-valued logic `=` and `<>`. In essence, the differences are as follows: +CQL supports `==` and `!=` operators as bivalent logic variants for SQL's three-valued logic `=` and `<>`. The differences are as follows: ::: code-group ```SQL [CQL's Two-Valued Logic Operators] @@ -52,7 +52,7 @@ The result set includes all books where genre is not 'Science Fiction', includin The CQL behavior is consistent with common programming languages like JavaScript and Java, as well as with OData semantics. It is implemented in database by, the translation of `!=` to `IS NOT` in SQLite, or to `IS DISTINCT FROM` in standard SQL, and to an equivalent polyfill in SAP HANA. > [!tip] Prefer == and != -> Prefer using `==` and `!=` in the very most cases to avoid unexpected `null` results. Only use `=` and `<>` if you _really_ want SQL's three-valued logic behavior. +> Prefer using `==` and `!=` in most cases to avoid unexpected `null` results. Only use `=` and `<>` if you _really_ want SQL's three-valued logic behavior. ### Ternary `?:` Operator @@ -74,14 +74,14 @@ FROM Books; ``` ::: -This operator is translated to the best-possible equivalent in the target database, for example to `CASE WHEN ... THEN ... ELSE ... END` in standard SQL, or to `IF(..., ..., ...)` in SAP HANA. +The compiler translates this operator to the best-possible equivalent in the target database: `CASE WHEN ... THEN ... ELSE ... END` in standard SQL, or `IF(..., ..., ...)` in SAP HANA. ## Functions ### Portable Functions -Following are portable functions guaranteed by CAP. These can safely be used in CDS view definitions as well as in runtime queries expressed in CQL, and are translated to the best-possible database-specific native SQL equivalents. +Following are portable functions supported by CAP. You can safely use these in CDS view definitions and runtime queries expressed in CQL. The compiler translates them to the best-possible database-specific native SQL equivalents. String functions: From 0f2417a23aee9f2add43eee7d2df5490c223daa0 Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Thu, 29 Jan 2026 10:28:02 +0100 Subject: [PATCH 366/439] Remove non-existing commands, add xsuaa/ias (#2349) --- get-started/index.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/get-started/index.md b/get-started/index.md index 1dd96e90f5..a08b38b9f3 100644 --- a/get-started/index.md +++ b/get-started/index.md @@ -216,29 +216,36 @@ Use `cds add` to grow your project as you go: cds add data cds add nodejs cds add java +``` + -Use `cds add` to add deployment options +Use `cds add` to add deployment options: ```shell -cds add multitenancy cds add hana +cds add xsuaa +cds add ias +cds add multitenancy cds add mta cds add kyma cds add github-actions ``` ### `cds up` + Use `cds up` to build and deploy your project in one go: ```shell cds up -cds up --to hana cds up --to cf cds up --to kyma ``` + ## Stay up to Date! From 02d8a5073b7df7c2b41310c41af0d47c85a91b03 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 11:36:15 +0100 Subject: [PATCH 367/439] chore(deps): update cap java sdk to v4.6.2 (#2348) 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.cds:cds-services-api](https://cap.cloud.sap/docs/java) | `4.6.1` → `4.6.2` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.sap.cds:cds-services-api/4.6.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.sap.cds:cds-services-api/4.6.1/4.6.2?slim=true) | | [com.sap.cds:cds4j-api](http://www.sap.com) ([source](https://cap.cloud.sap/docs/java/)) | `4.6.0` → `4.6.2` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.sap.cds:cds4j-api/4.6.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.sap.cds:cds4j-api/4.6.0/4.6.2?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 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> --- .vitepress/config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index f04e9d3c95..c1a97ff141 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -116,8 +116,8 @@ const siteURL = new URL(process.env.SITE_HOSTNAME || 'http://localhost:4173/docs if (!siteURL.pathname.endsWith('/')) siteURL.pathname += '/' config.themeConfig.capire = { versions: { - java_services: '4.6.1', - java_cds4j: '4.6.0' + java_services: '4.6.2', + java_cds4j: '4.6.2' }, gotoLinks: [], siteURL From b00f66e5f454d75294bae0713b1f001da6295e17 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 10:39:38 +0000 Subject: [PATCH 368/439] chore(deps): update dependency @mdit/plugin-dl to v0.22.3 (#2346) 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.22.2` → `0.22.3`](https://renovatebot.com/diffs/npm/@mdit%2fplugin-dl/0.22.2/0.22.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@mdit%2fplugin-dl/0.22.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@mdit%2fplugin-dl/0.22.2/0.22.3?slim=true) | --- ### Release Notes
mdit-plugins/mdit-plugins (@​mdit/plugin-dl) ### [`v0.22.3`](https://redirect.github.com/mdit-plugins/mdit-plugins/blob/HEAD/packages/dl/CHANGELOG.md#0223-2026-01-28) [Compare Source](https://redirect.github.com/mdit-plugins/mdit-plugins/compare/@mdit/plugin-dl@0.22.2...@mdit/plugin-dl@0.22.3) **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> Co-authored-by: Steffen Waldmann --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 29b9697a72..598a5d2c0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1748,9 +1748,9 @@ "license": "MIT" }, "node_modules/@mdit/plugin-dl": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/@mdit/plugin-dl/-/plugin-dl-0.22.2.tgz", - "integrity": "sha512-PIQhOCMbotJlepPzzwCdQJT9blWLyQ1dtIteMCDwF4n3s94TOfmeMJO/XnrrzACphaXeWtarwspfyhzaWTXzlg==", + "version": "0.22.3", + "resolved": "https://registry.npmjs.org/@mdit/plugin-dl/-/plugin-dl-0.22.3.tgz", + "integrity": "sha512-h+eQHXAh3oq8WnBUNkZwwjOptqEhjAVvEWWBOrF3I8X4mJ45+DC2KIDkainpygeJqDtDBQaNY61U2cAvGRjtSA==", "dev": true, "license": "MIT", "dependencies": { From 0b51630598eee3df897068f771f96bab42efde7c Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Thu, 29 Jan 2026 11:40:44 +0100 Subject: [PATCH 369/439] =?UTF-8?q?Fix=20`cds=20up=20--to=20kyma`=20?= =?UTF-8?q?=E2=86=92=20`cds=20up=20--to=20k8s`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Can consider offering a `kyma` alias in the future, too late for this release. --- get-started/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/get-started/index.md b/get-started/index.md index a08b38b9f3..83ac703895 100644 --- a/get-started/index.md +++ b/get-started/index.md @@ -241,7 +241,7 @@ Use `cds up` to build and deploy your project in one go: ```shell cds up cds up --to cf -cds up --to kyma +cds up --to k8s ``` -```js -bupa.send({ - method: 'PATCH', - path: A_BusinessPartner, - data: { - BusinessPartner: 1004155, - BusinessPartnerIsBlocked: true - } -}) -``` - -[Learn more about the `send` API.](../../node.js/core-services#srv-send-request){.learn-more} - -### Building Custom Requests with Java - -For Java, you can use the `HttpClient` API to implement your custom requests. The API is enhanced by the SAP Cloud SDK to support destinations. - -[Learn more about using the HttpClient Accessor.](https://sap.github.io/cloud-sdk/docs/java/features/connectivity/http-client){.learn-more} - -[Learn more about using destinations.](#use-destinations-with-java){.learn-more} - -## Integrate and Extend - -By creating projections on remote service entities and using associations, you can create services that combine data from your local service and remote services. - -What you need to do depends on the scenarios and how your remote services should be integrated into, as well as extended by your local services. - ### Expose Remote Services To expose a remote service entity, you add a projection on it to your CAP service: From ddce8664c32ea1bdd23f766abe45bfdebd438987 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 30 Jan 2026 10:19:09 +0100 Subject: [PATCH 373/439] Splitted overly lengthy calesi guide --- guides/databases/_menu.md | 22 +- guides/integration/_menu.md | 2 + guides/integration/calesi.md | 615 ++++++------------------ guides/integration/data-federation.md | 213 ++++++++ guides/integration/inner-loops.md | 265 ++++++++++ guides/integration/service-bindings.md | 85 ++++ guides/services/consuming-services--.md | 238 +-------- 7 files changed, 733 insertions(+), 707 deletions(-) create mode 100644 guides/integration/inner-loops.md create mode 100644 guides/integration/service-bindings.md diff --git a/guides/databases/_menu.md b/guides/databases/_menu.md index d19dcd105d..18ce5ff004 100644 --- a/guides/databases/_menu.md +++ b/guides/databases/_menu.md @@ -1,12 +1,12 @@ - -# [CDL Compiled to DDL](cdl-to-ddl) -# [CQL Compiled to SQL](cql-to-sql) -# [Adding Initial Data](initial-data.md) + +# [ Mocked Out of the Box ](cql-to-sql) +# [ CDL Compiled to DDL ](cdl-to-ddl) +# [ Adding Initial Data ](initial-data.md) # Deployed to ... - ## [SAP HANA](hana.md) - ### [SAP HANA Native](hana-native.md) - ## [SQLite](sqlite.md) - ## [H2 (Java)](h2.md) - ## [PostgreSQL](postgres.md) -# [Schema Evolution](schema-evolution.md) -# [Performance Guide](performance.md) + ## [ SAP HANA ](hana.md) + ### [ SAP HANA Native ](hana-native.md) + ## [ SQLite ](sqlite.md) + ## [ H2 (Java) ](h2.md) + ## [ PostgreSQL ](postgres.md) +# [ Schema Evolution ](schema-evolution.md) +# [ Performance Guide ](performance.md) diff --git a/guides/integration/_menu.md b/guides/integration/_menu.md index 3a1ae9d259..1e14a70cab 100644 --- a/guides/integration/_menu.md +++ b/guides/integration/_menu.md @@ -1,7 +1,9 @@ # [ CAP-level Service Integration ](calesi.md) # [ CAP-level Data Federation ](data-federation.md) +# [ Inner Loop Development ](inner-loops.md) # [ Reuse & Compose ](reuse-and-compose.md) +# [ Service Bindings ](service-bindings.md) # Platform Services diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index 79e67a9f6d..b9e783a39a 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -22,7 +22,9 @@ Integrating remote services – from other applications, third-party services, o -## As if they were local +## Introduction & Overview + +### As if they were local Service integration is much about consuming remote services from other applications, third-party services, or platform services. CAP greatly simplifies this by allowing to call remote services _as if they were local_. Let's see how that looks in practice: @@ -76,7 +78,7 @@ and covers all the aspects of CAP-level service integration in detail. -## The XTravels Sample +### The XTravels Sample In this guide we'll use the _XTravels_ sample application as our running example for CAP-level service integration. It is an modernized adaptation of the reknown [ABAP Flight reference sample](https://help.sap.com/docs/abap-cloud/abap-rap/abap-flight-reference-scenario), reimplemented using CAP, as well as split into two microservices as follows: @@ -94,7 +96,7 @@ The resulting entity-relationship model looks like that: From a service integration perspective, this sample mainly shows a data federation scenario, where data is consumed from different upstream systems (XFlights and S/4HANA) – most frequently in a readonly fashion – to be displayed together with an application's local data. -## Workflow Overview +### Workflow Overview The graphic below shows the flow of essential steps for service integration, which the following sections will walk you through in detail. @@ -114,7 +116,7 @@ git clone https://github.com/capire/xtravels ``` -## Providing APIs +## Providing CAP-level APIs In case of CAP service providers, as for [*@capire/xflights*](https://github.com/capire/xflights) in our [sample scenario](#the-xtravels-sample), you define [CAP services](../services/index) for all inbound interfaces, which includes (private) interfaces to your application's UIs, as well as public APIs to any other remote consumers. @@ -588,10 +590,14 @@ npm add @capire/s4 -## Consuming APIs +## Integrating Models Given the imported APIs we next use the definitions within our own models. For example, in the XTravels application we want to combine customer data obtained from SAP S/4HANA with travels, and flights data from xflights with respective bookings, like a [mashup of own and imported entities](#mashed-up-models). With the integrated models given, we can already run the integrated application, as most integrations are [mocked out of the box](#mocked-out-of-the-box) by CAP runtimes. For the real non-mocked integration, [custom code is required](#required-custom-code), of course, which we'll deep dive in in the last secion of this chapter. +> [!tip] AI Agents 'capire' CAP +> We can use AI agents to help us analysing and understanding our models. Actually, the following sections are based on a response by *Claude Sonnet* to the question: *"Find and explain all references"*, with the entity definition for the `Flights` consumption view selected as context. + + ### Consumption Views Imported APIs frequently contain much more entities and elements than we actually need. So as a next step we first declare so-called *Consumption Views*, to capture what we really want to use from them, with focus on these entities and elements we need in close access. @@ -650,15 +656,10 @@ Noteworthy aspects here are: -### Mashed up Models +### Associations to Remote With the consumption views in place, we can now refer to them from our own models in any way we like, _as if they were local_, thus creating mashups of definitions from imported APIs and local definitions. -> [!tip] AI Agents 'capire' CAP -> We can use AI agents to help us analysing and understanding our models. Actually, the following sections are based on a response by *Claude Sonnet* to the question: *"Find and explain all references"*, with the entity definition for the `Flights` consumption view selected as context. - - -#### Domain Model Mashups ::: code-group ```cds :line-numbers=1 [db/schema.cds] @@ -670,12 +671,21 @@ With the consumption views in place, we can now refer to them from our own model Flight : Association to x.Flights; } ``` +- Line 26 – Each _Booking_ references a _Flight_ from the external xflights service, which allows us to display flight details alongside bookings. + +#### Associations from Remote + + ::: code-group + ```cds :line-numbers=1 [db/schema.cds] + using { sap.capire.xflights as x } from '../apis/capire/xflights'; + ``` + ::: ```cds :line-numbers=73 extend x.Flights with columns { Bookings : Association to many Bookings on Bookings.Flight = $self } ``` -- Line 26 – Each _Booking_ references a _Flight_ from the external xflights service, which allows us to display flight details alongside bookings. + - Line 74 – Adds a backlink from _Flights_ to _Bookings_ for bidirectional traversal. @@ -683,24 +693,8 @@ With the consumption views in place, we can now refer to them from our own model Extensions to remote entities, as shown above, are only possible for elements which would not require changes to the remote service's actual data. This is the case for _virtual_ elements and _calculated_ fields, as well as **_unmanaged_** associations, as all foreign keys are local. It's not possible for regular elements or _managed_ associations, though. ::: -#### Service Exposure - -::: code-group -```cds :line-numbers=1 [srv/travel-service.cds] -using { sap.capire.xflights as x } from '../apis/capire/xflights'; -``` -::: -```cds :line-numbers=16 -@fiori service TravelService { ... - @readonly entity Flights as projection on x.Flights; -} -``` - -- Line 17 – Exposes the _Flights_ entity in the _TravelService_ for UI consumption. -This is required as associations to non-exposed entities would be cut off, which would apply to the _Bookings_ -> _x.Flights_ association if we did not expose _x.Flights_. - -#### Field Constraints +### Field Constraints ::: code-group ```cds :line-numbers=44 [srv/travel-constraints.cds] @@ -718,6 +712,23 @@ annotate TravelService.Bookings with { ... - Line 46 – Adds a constraint to the _Flight.date_ element to ensure that the flight date of a booked _Flight_ falls within the travel period of the associated _Travel_. +### Serving to Fiori UIs + +::: code-group +```cds :line-numbers=1 [srv/travel-service.cds] +using { sap.capire.xflights as x } from '../apis/capire/xflights'; +``` +::: +```cds :line-numbers=16 +@fiori service TravelService { ... + @readonly entity Flights as projection on x.Flights; +} +``` + +- Line 17 – Exposes the _Flights_ entity in the _TravelService_ for UI consumption. +This is required as associations to non-exposed entities would be cut off, which would apply to the _Bookings_ -> _x.Flights_ association if we did not expose _x.Flights_. + + #### Fiori Annotations On top of the mashed up models we can add Fiori annotations as usual to serve Fiori UIs – again: _as if they were local_. For example, following are excerpts of Fiori annotations referring to the `A_BusinessPartner` entity imported from S/4 (via the `Customers` consumption view, and the association to that from the local `Travels` entity). @@ -768,79 +779,61 @@ There are similar references to `Flights` entity from xflights in other parts of With the mashed up models in place, we can already run consuming applications in _'airplane mode'_ – i.e. without the upstream services running and connected –, as the imported services are mocked out of the box by CAP runtimes, _in-process_ and with mock data in the same _in-memory_ database, next to our own data. -Start the xtravels application locally using `cds watch` as usual, and note the output about the `sap.capire.flights.data` service, as well as the `S4BusinessPartnerService` being mocked automatically: +1. Start the xtravels application locally using `cds watch` as usual, and note the output about the integrated services being mocked automatically: -```shell -cds watch -``` -```zsh -[cds] - mocking sap.capire.flights.data { - at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], - decl: 'xflights/apis/data-service/services.csn:3' -} -``` -```zsh -[cds] - mocking S4BusinessPartnerService { - at: [ '/odata/v4/s4-business-partner' ], - decl: 's4/external/API_BUSINESS_PARTNER.csn:7' -} -``` + ```shell + cds watch + ``` + ```zsh + [cds] - mocking sap.capire.flights.data { + at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], + decl: 'xflights/apis/data-service/services.csn:3' + } + ``` + ```zsh + [cds] - mocking S4BusinessPartnerService { + at: [ '/odata/v4/s4-business-partner' ], + decl: 's4/external/API_BUSINESS_PARTNER.csn:7' + } + ``` -When we open the Fiori UI in the browser, we see it displays data from both, local and imported entities, seamlessly integrated as shown in the screenshot below (the data highlighted in green is mocked data from `@capire/s4`). +2. Open the Fiori UI in the browser -> it displays data from both, local and imported entities, seamlessly integrated as shown in the screenshot below (the data highlighted in green is mocked data from `@capire/s4`). ![XTravels Fiori list view showing a table of travel requests, with the Customer highlighted in green.](assets/xtravels-list.png) +We'll learn more about mocking and inner loop development in the [next chapter](#inner-loop-development). -#### Providing Mock Data - -There are different options to provide initial data, test data, and mock data: - -- In case of `@capire/xflights-data`, we generated the package content using `cds export --data` option, which added `.csv` files next to the `.cds` files. -- In case of `@capire/s4`, we explicitly added `.csv` files next to the `.cds` files. -- In addition, we could add `.csv` files for imported entities in the consuming apps `db/data` or `test/data` folders. -In all cases, the `.csv` files are placed next to the `.cds` files, and hence they are automatically detected and loaded into the in-memory database. +#### Integration Logic Required -For Java, make sure to add the `--with-mocks` option to the `cds deploy` command used to generate the `schema.sql` in `srv/pom.xml`. This ensures that tables for the mocked remote entities are created in the database. +While everything just works nicely when mocked in-process and with a shared in-memory database, let's get a bit more realistic and use `cds mock` to run the services in separate processes. -[Learn more about *Adding Initial Data*](../databases/initial-data) {.learn-more} +1. First run these commands **in two separate terminals**: -> [!tip] Mocking for Inner-Loop Development -> A service definition is all we need to serve fully functional OData services. Hence, service APIs imported via `cds import` are automatically mocked by CAP runtimes during development. This allows us to develop and test integrated applications in fast inner loops, without the need to connect to real remote services.\ -> See also: [_Inner-Loop Development_](#inner-loop-development) section further below. - - - -### Required Custom Code - -When it comes to real non-mocked integration with external services, custom code is required to handle the actual data integration. For a more realistic test, lets use `cds mock` to run the mocked services in separate processes. Run these commands **in separate terminals**: - -```shell -cds mock apis/capire/s4.cds -``` -```shell -cds mock apis/capire/xflights.cds -``` -```shell -cds watch -``` - -In the log output of the xtravels app server we now see that it connects to the two other services instead of mocking them: + ```shell + cds mock apis/capire/s4.cds + ``` + ```shell + cds mock apis/capire/xflights.cds + ``` -```zsh -[cds] - connect to S4BusinessPartnerService > odata { - url: 'http://localhost:54476/odata/v4/s4-business-partner' -} -``` -```zsh -[cds] - connect to sap.capire.flights.data > hcql { - url: 'http://localhost:54475/hcql/data' -} -``` +2. Start the xtravels server as usual **in a third terminal**, and note that it now _connects_ to the other services instead of mocking them: -This is because the CAP runtime now detected that services with that name are served by different processes within our local binding environment now, so we don't mock them in-process any longer. + ```shell + cds watch + ``` + ```zsh + [cds] - connect to S4BusinessPartnerService > odata { + url: 'http://localhost:54476/odata/v4/s4-business-partner' + } + ``` + ```zsh + [cds] - connect to sap.capire.flights.data > hcql { + url: 'http://localhost:54475/hcql/data' + } + ``` -When we open the Fiori UI in the browser again, we see the data from the S/4 service is missing now, as we have not yet implemented the required custom code for the actual data integration, the same applies to the flight data from _xflights_: +2. Open the Fiori UI in the browser again -> data from the S/4 service is missing now, as we have not yet implemented the required custom code for the actual data integration, the same applies to the flight data from _xflights_: ![XTravels Fiori list view showing a table of travel requests, with the Customer column empty.](assets/xtravels-list-.png) @@ -883,20 +876,74 @@ In addition, when we again look into the log output, we see some bulk requests l [odata] - > GET /Travels(ID=4105,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } [odata] - > GET /Travels(ID=4104,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } ``` -```zsh -(node:37548) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. -11 shutdown listeners added to [cds]. -MaxListeners is 10. Use emitter.setMaxListeners() to increase limit -(Use `node --trace-warnings ...` to show where the warning was created) -``` -So, let's go on and fill this gap with required custom code... +We see there are specific implementions required, to actually integrate remote services at runtime. We deep dive into one possible solution for that next. + + +## Integration Logic + +To actually integrate remote services at runtime, custom code is required. In the xtravels sample we implemented that in `srv/travel-service.js`, which is automatically picked up by the CAP runtime as service implementation for the `TravelService` defined in `srv/travel-service.cds`. + +### Connecting to Remote Services + +### Querying Remote Data + +### Delegating Queries + +Value helps are common use cases where delegation of requests is needed, which we implemented like this in `srv/travel-service.js` for the `Customers` entity: + +::: code-group +```js :line-numbers=24 [srv/travel-service.js] +const s4 = await cds.connect.to ('S4BusinessPartnerService') +this.on ('READ', Customers, req => s4.run (req.query)) +``` +::: + +The event handler intercepts all `READ` requests to the `Customers` entity, and simply delegates the incoming query as-is to the connected S/4 service (line 26). + +Noteworthy: The incoming request refers to: + +- the `TravelService.Customers` entity, which is a view on + - the `Customers` entity, which in turn is a consumption view on + - the remote `A_BusinessPartner` entity. + +The CAP runtime is aware of that and automatically translates the query into a query to the underlying entity, known to the remote service. Thereby, all select clauses, and where clauses, are fully preserved, translated, and delegated. +### Navigation & Expands -### CAP-level Data Federation +### Calling Remote Actions -Displaying external data in lists commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on server, and a nightmare regarding resilience. Instead, we somehow need to ensure that all required data is available locally, so that it can be accessed fast and reliably by UIs, using good old SQL JOINs. +In addition to replication, there are also use cases where we need to send requests directly to the remote services. For example, when creating new bookings, we need to inform the external xflights service so it can reduce its records of free seats. This is accomplished by the following code in `srv/travel-service.js`: + +::: code-group +```js :line-numbers=28 [srv/travel-service.js] +const xflights = await cds.connect.to ('sap.capire.flights.data') // [!code focus] +this.after ('SAVE', Travels, ({ Bookings=[] }) => Promise.all ( + Bookings.map (({ Flight_ID, Flight_date }) => { + return xflights.BookingCreated (Flight_ID, Flight_date) // [!code focus] + }) +)) +``` +::: + +### Sending Arbitratry Requests + + + +### Events-based Integration + +#### Emitting Events + +#### Subscribing to Events + +### Generic Integration Logic + +### Generic Data Federation + +**Motivation** – Displaying external data in lists commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on server, and a nightmare regarding resilience. Instead, we somehow need to ensure that all required data is available locally, so that it can be accessed fast and reliably by UIs, using good old SQL JOINs. + +#### Federated Consumption Views In the xtravels app we accomplished that with a simple, yet quite effective data replication solution, which automatically replicates data for all [consumption views](#consumption-views) tagged with the `@federated` annotation, for example: @@ -911,6 +958,8 @@ If a remote service is detected, these entities are turned into tables to serve > By tagging entities with `@federated` we stay _intentional_ about **_what_** we want to achieve, and avoid any premature assumptions about **_how_** things are actually implemented. => This allows CAP runtimes – or your own _generic_ solutions, as in this case – to choose the best possible implementation strategies for the given environment and use case, which may differ between development, testing, and production environments, or might need to evolve over time. +#### Generic Implementation + Here's the complete code, placed in file `srv/data-federation.js`: ::: code-group @@ -1029,374 +1078,16 @@ Finally, open the Fiori UI in the browser again, and see that customer data from ![XTravels Fiori details view showing a travel requests, now with flight data again.](assets/xtravels-bookings.png) +### On-demand Replication -### Delegating Requests - -Value helps are common use cases where delegation of requests is needed, which we implemented like this in `srv/travel-service.js` for the `Customers` entity: - -::: code-group -```js :line-numbers=24 [srv/travel-service.js] -const s4 = await cds.connect.to ('S4BusinessPartnerService') -this.on ('READ', Customers, req => s4.run (req.query)) -``` -::: - -The event handler intercepts all `READ` requests to the `Customers` entity, and simply delegates the incoming query as-is to the connected S/4 service (line 26). - -Noteworthy: The incoming request refers to: - -- the `TravelService.Customers` entity, which is a view on - - the `Customers` entity, which in turn is a consumption view on - - the remote `A_BusinessPartner` entity. - -The CAP runtime is aware of that and automatically translates the query into a query to the underlying entity, known to the remote service. Thereby, all select clauses, and where clauses, are fully preserved, translated, and delegated. - - -### Requests to Remote - -In addition to replication, there are also use cases where we need to send requests directly to the remote services. For example, when creating new bookings, we need to inform the external xflights service so it can reduce its records of free seats. This is accomplished by the following code in `srv/travel-service.js`: - -::: code-group -```js :line-numbers=28 [srv/travel-service.js] -const xflights = await cds.connect.to ('sap.capire.flights.data') // [!code focus] -this.after ('SAVE', Travels, ({ Bookings=[] }) => Promise.all ( - Bookings.map (({ Flight_ID, Flight_date }) => { - return xflights.BookingCreated (Flight_ID, Flight_date) // [!code focus] - }) -)) -``` -::: - - -## Service Bindings - -Service bindings configure connectivity to remote services. They are injected respective connection points configure in CAP through `cds.requires.` configurations, which are defined like this: - -```tsx -cds.requires. = { - kind?: 'odata' | 'odata-v2' | 'rest' | 'hcql' | 'graphql' , - model?: '', - credentials: { - url?: '', - username?: '', - password?: '', - token?: '', - } -} -``` - - -They are added to consuming applications' _package.json_ files, either manually, or automatically when using `cds import` as we saw earlier. - -### CAP Node.js - -Service bindings configure connectivity to remote services. They are added to consuming applications' _package.json_ files, either manually, or automatically when using `cds import` as we saw earlier. -Service bindings have this general form: - -```sh -cds.requires. = { kind: '' , ... } -``` - -::: code-group -```json [package.json] -{ ... - "cds": { - "requires": { - "API_BUSINESS_PARTNER": { - "kind": "odata-v2", - "model": "srv/external/API_BUSINESS_PARTNER" - } - } - } -} -``` -::: - -### CAP Java - -You need to configure remote services in Spring Boot's _application.yaml_: -::: code-group - -```yaml [srv/src/main/resources/application.yaml] -spring: - config.activate.on-profile: cloud -cds: - remote.services: - API_BUSINESS_PARTNER: - type: "odata-v2" -``` - -::: -To work with remote services, add the following dependency to your Maven project: - -```xml - - com.sap.cds - cds-feature-remote-odata - runtime - -``` - -[Learn about all `cds.remote.services` configuration possibilities.](../../java/developing-applications/properties){.learn-more} - - -### Local Binding Environment - - -### Cloud Foundry - -### Kyma / K8s - -### Destinations - - -## Inner-Loop Development - -### Mocked Out of the Box - -In same process ... - -```shell -cds watch -``` - -```zsh -... -[cds] - mocking sap.capire.flights.data { - at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], - decl: '@capire/xflights-data/services.csn:3' -} -... -``` - -Open UI → flights data displayed - -> [!tip] Decoupled Inner-Loop Development -> CAP runtimes automatically mock imported service APIs during development, allowing us to develop and test integrated applications in fast inner loops, without the need to connect to real remote services. This decouples inner-loop development from external dependencies, speeding up development and increasing resilience. - - - -### Using `cds mock` - -Run this in terminal 1: - -```shell -cds mock db/xflights.cds -``` - -```zsh -... -[cds] - mocking sap.capire.flights.data { - at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], - decl: '@capire/xflights-data/services.csn:3' -} -... -``` - -Run this in terminal 2: - -```shell -cds watch -``` - -```zsh -[cds] - connect to sap.capire.flights.data > hcql { - url: 'http://localhost:56350/hcql/data' -} -``` - -Open UI → flights data missing - - - -### Test in `cds repl` - - - -```shell -cds repl ./ -``` - -```js -const xflights = await cds.connect.to ('sap.capire.flights.data') -await xflights.read `Flights { - ID, date, departure, - origin.name as ![from], - destination.name as ![to] -}` -``` - -⇒ equally works for both, xflights api mocked locally, as well as running remotely - - - - -### Using Workspaces - -Instead of exercising a workflow like that again and again: - -- ( *develop* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) - -... we can use *npm workspaces* technique to work locally and speed up things as follows: - -```shell -mkdir -p cap/works; cd cap/works -git clone https://github.com/capire/xflights -git clone https://github.com/capire/xtravels -echo '{"workspaces":["xflights","xtravels"]}' > package.json -``` - -Add a link to the local `@capire/xflights-data` API package, enclosed with the cloned xflights sources: - -```shell -npm add ./xflights/apis/data-service -``` - -Check the installation using `npm ls`, which would yield output as below, showing that `@capire/xtravel`'s dependency to `@capire/xflights-data` is nicely fulfilled by a local link to `./xflights/apis/data-service`: - -```shell -npm ls @capire/xflights-data -``` - -```zsh -works@ ~/cap/works -├── @capire/xflights-data@0.1.11 -> ./xflights/apis/data-service -└─┬ @capire/xtravels@1.0.0 -> ./xtravels - └── @capire/xflights-data@0.1.11 deduped -> ./xflights/apis/data-service -``` - -Start the xtravels application → and note the sources loaded from *./xflights/apis/data-service*, and the information further below about the `sap.capire.flights.data` service mocked automatically: - -```shell -cds watch xtravels -``` - -```zsh -[cds] - loaded model from 20 file(s): - - xtravels/srv/travel-service.cds - xtravels/db/schema.cds - xtravels/db/xflights.cds - xflights/apis/data-service/index.cds - xflights/apis/data-service/services.csn - ... -``` - -```zsh -[cds] - mocking sap.capire.flights.data { - at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], - decl: 'xflights/apis/data-service/services.csn:3', -} -``` - - - -### Using Proxy Packages - -The usage of *npm workspaces* technique as described above streamlined our workflows as follows: - -- Before: ( *develop* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) -- After: ( *develop* → *export* ) → ( *consume* ) - -We can even more streamline that by eliminating the export step as follows... - -Create a new subfolder `xflights-api-shortcut` in which we add two files as follows: - -```shell -mkdir xflights-api-shortcut -``` - -Add a `package.json` file in there with that content: - -```json -{ - "name": "@capire/xflights-data", - "dependencies": { - "@capire/xflights": "*" - } -} -``` - -And an `index.cds` file with that content: - -```cds -using from '@capire/xflights/srv/data-service'; -``` - -
Using the shell's "here document" technique - - You can also create those two files from the command line as follows: - ```shell - cat > xflights-api-shortcut/package.json << EOF - { - "name": "@capire/xflights-data", - "dependencies": { - "@capire/xflights": "*" - } - } - EOF - ``` - - Take the same approach for the `index.cds` file: - ```shell - cat > xflights-api-shortcut/index.cds << EOF - using from '@capire/xflights/srv/data-service'; - EOF - ``` - -
-With that in place, change our API package dependency in the workspace root as follows: - -```shell -npm add ./xflights-api-shortcut -``` - -Check the effect of that → note how `@capire/xflights-data` dependencies now link to `./xflights-api-shortcut`: - -```shell -npm ls @capire/xflights-data -``` - -```zsh -works@ ~/cap/works -├── @capire/xflights-data@ -> ./xflights-api-shortcut -└─┬ @capire/xtravels@1.0.0 -> ./xtravels - └── @capire/xflights-data@ deduped -> ./xflights-api-shortcut≤ -``` - -Start the *xtravels* application → and note the sources loaded from *./xflights-api-shortcut*, and the information further below about the `sap.capire.flights.data` service now being _served_, not _mocked_ anymore: - -```shell -cds watch xtravels -``` - -```zsh -[cds] - loaded model from 20 file(s): - - xtravels/srv/travel-service.cds - xtravels/db/schema.cds - xtravels/db/xflights.cds - xflights-api-shortcut/index.cds - xflights/srv/data-service.cds - xflights/db/schema.cds - ... -``` - -```zsh -[cds] - serving sap.capire.flights.data { - at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], - decl: 'xflights/apis/data-service/services.csn:3', -} -``` - -Which means we've streamlined our workflows as follows: -- Before: ( *change* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) -- Step 1: ( *change* → *export* ) → ( *consume* ) -- Step 2: ( *change* ) → ( *consume* ) +### Resilience Out of the Box +## Learn More +- [CAP-level Data Federation](data-federation) – Explore different patterns and strategies for data federation in CAP applications. +- [Inner Loop Development](inner-loops) – Understand how to develop and test integrated applications efficiently using CAP's inner loop development features. -## Intrinsic Extensibility +- [Service Bindings](service-bindings) – Learn how to configure connections to external services in a declarative way using service bindings. diff --git a/guides/integration/data-federation.md b/guides/integration/data-federation.md index 77118ad130..12fd24f4de 100644 --- a/guides/integration/data-federation.md +++ b/guides/integration/data-federation.md @@ -4,6 +4,219 @@ CAP applications can integrate and federate data from multiple external data sou {.abstract} +## Introduction + +Displaying external data in lists commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on server, and a nightmare regarding resilience. Instead, we somehow need to ensure that all required data is available locally, so that it can be accessed fast and reliably by UIs, using good old SQL JOINs. + +For example, we saw the need for that already in the [CAP-level Service Integration](calesi.md#coding-required) guide, where the `Customer` field in the travel requests list is populated from the remote S/4 Business Partner service, but missing when running the services separately: + +1. First run these commands **in two separate terminals**: + + ```shell + cds mock apis/capire/s4.cds + ``` + ```shell + cds mock apis/capire/xflights.cds + ``` + +2. Start the xtravels server as usual **in a third terminal**, and note that it now _connects_ to the other services instead of mocking them: + + ```shell + cds watch + ``` + ```zsh + [cds] - connect to S4BusinessPartnerService > odata { + url: 'http://localhost:54476/odata/v4/s4-business-partner' + } + ``` + ```zsh + [cds] - connect to sap.capire.flights.data > hcql { + url: 'http://localhost:54475/hcql/data' + } + ``` + +2. Open the Fiori UI in the browser again -> data from the S/4 service is missing now, as we have not yet implemented the required custom code for the actual data integration, the same applies to the flight data from _xflights_: + +![XTravels Fiori list view showing a table of travel requests, with the Customer column empty.](assets/xtravels-list-.png) + +![XTravels Fiori details view showing a travel requests, with the flights data missing](assets/xtravels-bookings-.png) + +In addition, when we again look into the log output, we see some bulk requests like shown below, which indicates that the Fiori client is desparately trying to fetch the missing customer data. If we'd scroll the list in the UI this would repeat like crazy. + + + +```js +[odata] - POST /odata/v4/travel/$batch +[odata] - > GET /Travels(ID=4133,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4132,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4131,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4130,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4129,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4128,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4127,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4126,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4125,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4124,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4123,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4122,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4121,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4120,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4119,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4118,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4117,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4116,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4115,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4114,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4113,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4112,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4111,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4110,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4109,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4108,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4107,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4106,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4105,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +[odata] - > GET /Travels(ID=4104,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } +``` + + +In the xtravels app we accomplished that with a simple, yet quite effective data replication solution, which automatically replicates data as follows... + + +## Federated Consumption Views + +Tag [consumption views](calesi#consumption-views) with the `@federated` annotation, to express your intent to have that data federated, i.e. in close access locally, for example: + +```cds :line-numbers=4 +@federated entity Customers as projection on S4.A_BusinessPartner { ... } +``` + +> [!tip] Stay Intentional -> What, not how! -> Minimal Assumptions +> +> By tagging entities with `@federated` we stay _intentional_ about **_what_** we want to achieve, and avoid any premature assumptions about **_how_** things are actually implemented. => This allows CAP runtimes – or your own _generic_ solutions, as in this case – to choose the best possible implementation strategies for the given environment and use case, which may differ between development, testing, and production environments, or might need to evolve over time. + + +## Generic Implementation + +Here's the complete code, placed in file `srv/data-federation.js`: + +::: code-group +```js:line-numbers [srv/data-federation.js] +const PROD = process.env.NODE_ENV === 'production' /* eslint-disable no-console */ +const cds = require ('@sap/cds') +const feed = [] + +// Collect all entities to be federated, and prepare replica tables +PROD || cds.on ('loaded', csn => { + for (let e of cds.linked(csn).entities) { + if (e['@federated']) { + let srv = remote_srv4(e) + if (is_remote(srv)) { + e['@cds.persistence.table'] = true //> turn into table for replicas + feed.push ({ entity: e.name, remote: srv }) + } + } + } +}) + +// Setup and schedule replications for all collected entities +PROD || cds.once ('served', () => Promise.all (feed.map (async each => { + const srv = await cds.connect.to (each.remote) + srv._once ??=! srv.on ('replicate', replicate) + await srv.schedule ('replicate', each) .every ('3 seconds') +}))) + +// Event handler for replicating single entities +async function replicate (req) { + let { entity } = req.data, remote = this + let { latest } = await SELECT.one `max(modifiedAt) as latest` .from (entity) + let rows = await remote.run ( + SELECT.from (entity) .where `modifiedAt > ${latest}` + ) + if (rows.length) await UPSERT (rows) .into (entity); else return + console.log ('Replicated', rows.length, 'entries', { for: entity, via: this.kind }) +} + +// Helpers to identify remote services, and check whether they are connected +const remote_srv4 = entity => entity.__proto__._service?.name +const is_remote = srv => cds.requires[srv]?.credentials?.url +``` +::: + +Let's have a closer look at this code, which handles these main tasks: + +1. **Prepare Persistence** – When the model is `loaded`, before it's deployed to the database, we collect all to be `@federated` entities, check whether their respective services are remote, and if so, turn them into tables for local replicas (line 11). + +2. **Setup Replication** – Later when all services are `served`, we connect to each remote one (line 20), register a handler for replication (line 21), and schedule it to be invoked every three seconds (line 22). + +3. **Replicate Data** – Finally, the `replicate` handler implements a simple polling-based data federation strategy, based on `modifiedAt` timestamps (lines 28-32), with the actual call to remote happening on line 29. + +> [!tip] CAP-level Querying -> agnostic to databases & protocols +> We work with **database-agnostic** and **protocol-agnostic** [CQL queries](../../cds/cql) both for interacting with the local database as well as for querying remote services. In effect, we got a fully generic solution for replication, i.e., it works for **_any_** remote service that supports OData, or HCQL. + + +### Test Drive Locally + +Let's see the outcome in action: to activate the above data federation code, edit `srv/server.js` file and uncomment the single line of code in there like this: + +::: code-group +```js :line-numbers [srv/server.js] +process.env.NODE_ENV || require ('./data-federation') +``` +::: + +Restart the Xtravels app, and see these lines in the log output: + +```zsh +Replicated 49 entries { for: 'sap.capire.xflights.Supplements', via: 'hcql' } +Replicated 44 entries { for: 'sap.capire.xflights.Flights', via: 'hcql' } +Replicated 727 entries { for: 'sap.capire.s4.Customers', via: 'odata' } +``` + +The S/4 Business Partner service in terminal 1 shows the incoming OData request(s): + +```zsh +[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { + '$select': 'BusinessPartner,PersonFullName,LastChangeDate', + '$filter': 'LastChangeDate gt 2024-12-31' +} +``` + +While the xflights service in terminal 2 shows its incoming HCQL requests like that: + +```zsh +[hcql] - GET /hcql/data/ { + SELECT: { + from: { ref: [ 'sap.capire.flights.data.Flights' ] }, + columns: [ + { ref: [ 'ID' ], as: 'ID' }, + { ref: [ 'date' ], as: 'date' }, + { ref: [ 'departure' ], as: 'departure' }, + { ref: [ 'arrival' ], as: 'arrival' }, + { ref: [ 'free_seats' ], as: 'free_seats' }, + { ref: [ 'modifiedAt' ], as: 'modifiedAt' }, + { ref: [ 'airline', 'icon' ], as: 'icon' }, + { ref: [ 'airline', 'name' ], as: 'airline' }, + { ref: [ 'origin', 'name' ], as: 'origin' }, + { ref: [ 'destination', 'name' ], as: 'destination' } + ], + where: [ + { ref: [ 'modifiedAt' ] }, + '>', + { val: '2026-01-28T17:38:28.929Z' } + ] + } +} +``` + +Finally, open the Fiori UI in the browser again, and see that customer data from S/4 as well as flight data from xflights is now displayed properly, thanks to the data federation implemented above. + +![XTravels Fiori list view showing tarvel requests, now with customer names again.](assets/xtravels-list.png) + +![XTravels Fiori details view showing a travel requests, now with flight data again.](assets/xtravels-bookings.png) + + + ## Service-level Replication ### Initial Loads diff --git a/guides/integration/inner-loops.md b/guides/integration/inner-loops.md new file mode 100644 index 0000000000..b8cecaa97c --- /dev/null +++ b/guides/integration/inner-loops.md @@ -0,0 +1,265 @@ + +# Inner-Loop Development + +## Mocked Out of the Box + +In same process ... + +```shell +cds watch +``` + +```zsh +... +[cds] - mocking sap.capire.flights.data { + at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], + decl: '@capire/xflights-data/services.csn:3' +} +... +``` + +Open UI → flights data displayed + +> [!tip] Mocking for Inner-Loop Development +> A service definition is all we need to serve fully functional OData services. Hence, service APIs imported via `cds import` are automatically mocked by CAP runtimes during development. This allows us to develop and test integrated applications in fast inner loops, without the need to connect to real remote services.\ +> See also: [_Inner-Loop Development_](#inner-loop-development) section further below. + +> [!tip] Decoupled Inner-Loop Development +> CAP runtimes automatically mock imported service APIs during development, allowing us to develop and test integrated applications in fast inner loops, without the need to connect to real remote services. This decouples inner-loop development from external dependencies, speeding up development and increasing resilience. + + + +## Providing Mock Data + +There are different options to provide initial data, test data, and mock data: + +- In case of `@capire/xflights-data`, we generated the package content using `cds export --data` option, which added `.csv` files next to the `.cds` files. +- In case of `@capire/s4`, we explicitly added `.csv` files next to the `.cds` files. +- In addition, we could add `.csv` files for imported entities in the consuming apps `db/data` or `test/data` folders. + +In all cases, the `.csv` files are placed next to the `.cds` files, and hence they are automatically detected and loaded into the in-memory database. + +For Java, make sure to add the `--with-mocks` option to the `cds deploy` command used to generate the `schema.sql` in `srv/pom.xml`. This ensures that tables for the mocked remote entities are created in the database. + +[Learn more about *Adding Initial Data*](../databases/initial-data) {.learn-more} + +## Using `cds mock` + +Run this in terminal 1: + +```shell +cds mock db/xflights.cds +``` + +```zsh +... +[cds] - mocking sap.capire.flights.data { + at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], + decl: '@capire/xflights-data/services.csn:3' +} +... +``` + +Run this in terminal 2: + +```shell +cds watch +``` + +```zsh +[cds] - connect to sap.capire.flights.data > hcql { + url: 'http://localhost:56350/hcql/data' +} +``` + +Open UI → flights data missing + +This is because the CAP runtime now detected that services with that name are served by different processes within our local binding environment now, so we don't mock them in-process any longer. + + + +## Test in `cds repl` + + + +```shell +cds repl ./ +``` + +```js +const xflights = await cds.connect.to ('sap.capire.flights.data') +await xflights.read `Flights { + ID, date, departure, + origin.name as ![from], + destination.name as ![to] +}` +``` + +⇒ equally works for both, xflights api mocked locally, as well as running remotely + + + + +## Using Workspaces + +Instead of exercising a workflow like that again and again: + +- ( *develop* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) + +... we can use *npm workspaces* technique to work locally and speed up things as follows: + +```shell +mkdir -p cap/works; cd cap/works +git clone https://github.com/capire/xflights +git clone https://github.com/capire/xtravels +echo '{"workspaces":["xflights","xtravels"]}' > package.json +``` + +Add a link to the local `@capire/xflights-data` API package, enclosed with the cloned xflights sources: + +```shell +npm add ./xflights/apis/data-service +``` + +Check the installation using `npm ls`, which would yield output as below, showing that `@capire/xtravel`'s dependency to `@capire/xflights-data` is nicely fulfilled by a local link to `./xflights/apis/data-service`: + +```shell +npm ls @capire/xflights-data +``` + +```zsh +works@ ~/cap/works +├── @capire/xflights-data@0.1.11 -> ./xflights/apis/data-service +└─┬ @capire/xtravels@1.0.0 -> ./xtravels + └── @capire/xflights-data@0.1.11 deduped -> ./xflights/apis/data-service +``` + +Start the xtravels application → and note the sources loaded from *./xflights/apis/data-service*, and the information further below about the `sap.capire.flights.data` service mocked automatically: + +```shell +cds watch xtravels +``` + +```zsh +[cds] - loaded model from 20 file(s): + + xtravels/srv/travel-service.cds + xtravels/db/schema.cds + xtravels/db/xflights.cds + xflights/apis/data-service/index.cds + xflights/apis/data-service/services.csn + ... +``` + +```zsh +[cds] - mocking sap.capire.flights.data { + at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], + decl: 'xflights/apis/data-service/services.csn:3', +} +``` + + + +## Using Proxy Packages + +The usage of *npm workspaces* technique as described above streamlined our workflows as follows: + +- Before: ( *develop* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) +- After: ( *develop* → *export* ) → ( *consume* ) + +We can even more streamline that by eliminating the export step as follows... + +Create a new subfolder `xflights-api-shortcut` in which we add two files as follows: + +```shell +mkdir xflights-api-shortcut +``` + +Add a `package.json` file in there with that content: + +```json +{ + "name": "@capire/xflights-data", + "dependencies": { + "@capire/xflights": "*" + } +} +``` + +And an `index.cds` file with that content: + +```cds +using from '@capire/xflights/srv/data-service'; +``` + +
Using the shell's "here document" technique + + You can also create those two files from the command line as follows: + ```shell + cat > xflights-api-shortcut/package.json << EOF + { + "name": "@capire/xflights-data", + "dependencies": { + "@capire/xflights": "*" + } + } + EOF + ``` + + Take the same approach for the `index.cds` file: + ```shell + cat > xflights-api-shortcut/index.cds << EOF + using from '@capire/xflights/srv/data-service'; + EOF + ``` + +
+With that in place, change our API package dependency in the workspace root as follows: + +```shell +npm add ./xflights-api-shortcut +``` + +Check the effect of that → note how `@capire/xflights-data` dependencies now link to `./xflights-api-shortcut`: + +```shell +npm ls @capire/xflights-data +``` + +```zsh +works@ ~/cap/works +├── @capire/xflights-data@ -> ./xflights-api-shortcut +└─┬ @capire/xtravels@1.0.0 -> ./xtravels + └── @capire/xflights-data@ deduped -> ./xflights-api-shortcut≤ +``` + +Start the *xtravels* application → and note the sources loaded from *./xflights-api-shortcut*, and the information further below about the `sap.capire.flights.data` service now being _served_, not _mocked_ anymore: + +```shell +cds watch xtravels +``` + +```zsh +[cds] - loaded model from 20 file(s): + + xtravels/srv/travel-service.cds + xtravels/db/schema.cds + xtravels/db/xflights.cds + xflights-api-shortcut/index.cds + xflights/srv/data-service.cds + xflights/db/schema.cds + ... +``` + +```zsh +[cds] - serving sap.capire.flights.data { + at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], + decl: 'xflights/apis/data-service/services.csn:3', +} +``` + +Which means we've streamlined our workflows as follows: + +- Before: ( *change* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) +- Step 1: ( *change* → *export* ) → ( *consume* ) +- Step 2: ( *change* ) → ( *consume* ) diff --git a/guides/integration/service-bindings.md b/guides/integration/service-bindings.md new file mode 100644 index 0000000000..725329248b --- /dev/null +++ b/guides/integration/service-bindings.md @@ -0,0 +1,85 @@ + + +# Service Bindings + +Service bindings configure connectivity to remote services. They are injected respective connection points configure in CAP through `cds.requires.` configurations, which are defined like this: + +```tsx +cds.requires. = { + kind?: 'odata' | 'odata-v2' | 'rest' | 'hcql' | 'graphql' , + model?: '', + credentials: { + url?: '', + username?: '', + password?: '', + token?: '', + } +} +``` + + +They are added to consuming applications' _package.json_ files, either manually, or automatically when using `cds import` as we saw earlier. + +## CAP Node.js + +Service bindings configure connectivity to remote services. They are added to consuming applications' _package.json_ files, either manually, or automatically when using `cds import` as we saw earlier. +Service bindings have this general form: + +```sh +cds.requires. = { kind: '' , ... } +``` + +::: code-group +```json [package.json] +{ ... + "cds": { + "requires": { + "API_BUSINESS_PARTNER": { + "kind": "odata-v2", + "model": "srv/external/API_BUSINESS_PARTNER" + } + } + } +} +``` +::: + +## CAP Java + +You need to configure remote services in Spring Boot's _application.yaml_: +::: code-group + +```yaml [srv/src/main/resources/application.yaml] +spring: + config.activate.on-profile: cloud +cds: + remote.services: + API_BUSINESS_PARTNER: + type: "odata-v2" +``` + +::: +To work with remote services, add the following dependency to your Maven project: + +```xml + + com.sap.cds + cds-feature-remote-odata + runtime + +``` + +[Learn about all `cds.remote.services` configuration possibilities.](../../java/developing-applications/properties){.learn-more} + + +## Local Binding Environment + + +## Cloud Foundry + +## Kyma / K8s + +## Destinations + +## Service Keys +## Using API Keys diff --git a/guides/services/consuming-services--.md b/guides/services/consuming-services--.md index 7e79f5e66f..cdf501227e 100644 --- a/guides/services/consuming-services--.md +++ b/guides/services/consuming-services--.md @@ -1,4 +1,4 @@ -### Mock Remote Service as OData Service (Java) +### Mock Remote OData Service (Java) You configure CAP to do OData and HTTP requests for a mocked service instead of doing it in-process. Configure a new Spring Boot profile (for example `mocked`): ::: code-group @@ -77,28 +77,9 @@ List businessPartner = bupa.run(select).listOf(ABusinessPartne [Learn more about querying API examples.](https://github.com/SAP-samples/cloud-cap-risk-management/blob/ext-service-s4hc-suppliers-ui/test/odata-examples.js){.learn-more} -### Expose Remote Services +### Expose Remote Services -To expose a remote service entity, you add a projection on it to your CAP service: - -```cds -using {  API_BUSINESS_PARTNER as bupa } from '../srv/external/API_BUSINESS_PARTNER'; - -extend service RiskService with { - entity BusinessPartners as projection on bupa.A_BusinessPartner; -} -``` - -CAP automatically tries to delegate queries to database entities, which don't exist as you're pointing to an external service. That behavior would produce an error like this: - -```xml - -500 -SQLITE_ERROR: no such table: RiskService_BusinessPartners in: SELECT BusinessPartner, Customer, Supplier, AcademicTitle, AuthorizationGroup, BusinessPartnerCategory, BusinessPartnerFullName, BusinessPartnerGrouping, BusinessPartnerName, BusinessPartnerUUID, CorrespondenceLanguage, CreatedByUser, CreationDate, (...) FROM RiskService_BusinessPartner ALIAS_1 ORDER BY BusinessPartner COLLATE NOCASE ASC LIMIT 11 - -``` - -To avoid this error, you need to handle projections. Write a handler function to delegate a query to the remote service and run the incoming query on the external service. +Write a handler function to delegate a query to the remote service and run the incoming query on the external service. ::: code-group ```js [Node.js] @@ -128,45 +109,8 @@ public class RiskServiceHandler implements EventHandler { ::: -[For Node.js, get more details in the end-to-end tutorial.](https://developers.sap.com/tutorials/btp-app-ext-service-add-consumption.html#0a5ed8cc-d0fa-4a52-bb56-9c864cd66e71){.learn-more} - - -::: warning -If you receive `404` errors, check if the request contains fields that don't exist in the service and start with the name of an association. `cds import` adds an empty keys declaration (`{ }`) to each association. Without this declaration, foreign keys for associations are generated in the runtime model, that don't exist in the real service. To solve this problem, you need to reimport the external service definition using `cds import`. -::: - This works when accessing the entity directly. Additional work is required to support [navigation](#handle-navigations-across-local-and-remote-entities) and [expands](#handle-expands-across-local-and-remote-entities) from or to a remote entity. -Instead of exposing the remote service's entity unchanged, you can [model your own projection](#model-projections). For example, you can define a subset of fields and change their names. - -::: tip -CAP does the magic that maps the incoming query, according to your projections, to the remote service and maps back the result. -::: - -```cds -using { API_BUSINESS_PARTNER as bupa } from '../srv/external/API_BUSINESS_PARTNER'; - -extend service RiskService with { - entity Suppliers as projection on bupa.A_BusinessPartner { - key BusinessPartner as ID, - BusinessPartnerFullName as fullName, - BusinessPartnerIsBlocked as isBlocked - } -} -``` - -```js -module.exports = cds.service.impl(async function() { - const bupa = await cds.connect.to('API_BUSINESS_PARTNER'); - - this.on('READ', 'Suppliers', req => { - return bupa.run(req.query); - }); -}); -``` - -[Learn more about queries on projections to remote services.](#execute-queries-on-projections-to-a-remote-service){.learn-more} - ### Expose Remote Services with Associations It's possible to expose associations of a remote service entity. You can adjust the [projection for the association target](#model-projections) and change the name of the association: @@ -200,14 +144,6 @@ this.on('READ', 'Suppliers', req => { }); ``` -If you need to resolve the association using navigation or request it independently from the source entity, add a handler for the __target entity__ as well: - -```js -this.on('READ', 'SupplierAddresses', req => { - return bupa.run(req.query); -}); -``` - As usual, you can put two handlers into one handler matching both entities: ```js @@ -216,147 +152,13 @@ this.on('READ', ['Suppliers', 'SupplierAddresses'], req => { }); ``` -### Mashing up with Remote Services - -You can combine local and remote services using associations. These associations need manual handling, because of their different data sources. - -#### Integrate Remote into Local Services - -Use managed associations from local entities to remote entities: - -```cds -@path: 'service/risk' -service RiskService { - entity Risks : managed { - key ID : UUID @(Core.Computed : true); - title : String(100); - prio : String(5); - supplier : Association to Suppliers; - } - - entity Suppliers as projection on BusinessPartner.A_BusinessPartner { - key BusinessPartner as ID, - BusinessPartnerFullName as fullName, - BusinessPartnerIsBlocked as isBlocked, - }; -} -``` - -#### 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. - - -```cds -entity Suppliers as projection on bupa.A_BusinessPartner { - key BusinessPartner as ID, - BusinessPartnerFullName as fullName, - BusinessPartnerIsBlocked as isBlocked, - risks : Association to many Risks on risks.supplier.ID = ID, -}; -``` - ### Handle Mashups with Remote Services Depending on how the service is accessed, you need to support direct requests, navigation, or expands. CAP resolves those three request types only for service entities that are served from the database. When crossing the boundary between database and remote sourced entities, you need to take care of those requests. The list of [required implementations for mashups](#required-implementations-for-mashups) explains the different combinations. -#### Handle Expands Across Local and Remote Entities - -Expands add data from associated entities to the response. For example, for a risk, you want to display the suppliers name instead of just the technical ID. But this property is part of the (remote) supplier and not part of the (local) risk. - -To handle expands, you need to add a handler for the main entity: -1. Check if a relevant `$expand` column is present. -2. Remove the `$expand` column from the request. -3. Get the data for the request. -4. Execute a new request for the expand. -5. Add the expand data to the returned data from the request. - -Example of a CQN request with an expand: - -```json -{ - "from": { "ref": [ "RiskService.Suppliers" ] }, - "columns": [ - { "ref": [ "ID" ] }, - { "ref": [ "fullName" ] }, - { "ref": [ "isBlocked" ] }, - { "ref": [ "risks" ] }, - { "expand": [ - { "ref": [ "ID" ] }, - { "ref": [ "title" ] }, - { "ref": [ "descr" ] }, - { "ref": [ "supplier_ID" ] } - ] } - ] -} -``` - -[See an example how to handle expands in Node.js.](https://github.com/SAP-samples/cloud-cap-risk-management/blob/ext-service-s4hc-suppliers-ui/srv/risk-service.js){.node .learn-more} - -[See an example how to handle expands 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){.java .learn-more} - - -Expands across local and remote can cause stability and performance issues. For a list of items, you need to collect all IDs and send it to the database or the remote system. This can become long and may exceed the limits of a URL string in case of OData. Do you really need expands for a list of items? - -```http -GET /service/risk/Risks?$expand=supplier -``` - -Or is it sufficient for single items? - -```http -GET /service/risk/Risks(545A3CF9-84CF-46C8-93DC-E29F0F2BC6BE)/?$expand=supplier -``` -::: warning Keep performance in mind -Consider to reject expands if it's requested on a list of items. -::: - -#### Handle Navigations Across Local and Remote Entities - -Navigations allow to address items via an association from a different entity: - -```http -GET /service/risks/Risks(20466922-7d57-4e76-b14c-e53fd97dcb11)/supplier -``` - -The CQN consists of a `from` condition with 2 values for `ref`. The first `ref` selects the record of the source entity of the navigation. The second `ref` selects the name of the association, to navigate to the target entity. - -```json -{ - "from": { - "ref": [ { - "id": "RiskService.Risks", - "where": [ - { "ref": [ "ID" ] }, - "=", - { "val": "20466922-7d57-4e76-b14c-e53fd97dcb11" } - ]}, - "supplier" - ] - }, - "columns": [ - { "ref": [ "ID" ] }, - { "ref": [ "fullName" ] }, - { "ref": [ "isBlocked" ] } - ], - "one": true -} -``` - -To handle navigations, you need to check in your code if the `from.ref` object contains 2 elements. Be aware, that for navigations the handler of the **target** entity is called. - -If the association's on condition equals the key of the source entity, you can directly select the target entity using the key's value. You find the value in the `where` block of the first `from.ref` entry. - -Otherwise, you need to select the source item using that `where` block and take the required fields for the associations on condition from that result. - -[See an example how to handle navigations in Node.js.](https://github.com/SAP-samples/cloud-cap-risk-management/blob/ext-service-s4hc-suppliers-ui/srv/risk-service.js){.learn-more .node} - -[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. @@ -370,37 +172,6 @@ You need additional logic, if remote entities are in the game. The following tab | Remote: Navigate to local | `/service/Suppliers(...)/risks` | Implement navigation, delegate query for target to local service | -##### Support Analytical Queries in Java - -CAP Java provides out-of-the-box support for remote analytical queries. - -| **Request** | **Example** | **Implementation** | -| --------------------------------------------------------------------- | ---------------------------------------- | ----------------------------------------------------------------- | -| Remote: Analytical queries | `/service/risks/Suppliers?$apply=...` | Delegate query to remote service | - - -#### Transient Access vs. Replication - -> This chapter shows only techniques for transient access. - -The following matrix can help you to find the best approach for your scenario: - -| **Feature** | **Transient Access** | **Replication** | -|-------------------------------------------------------|-----------------------|-----------------------------------| -| Filtering on local **or** remote fields 1 | Possible | Possible | -| Filtering on local **and** remote fields 2 | Not possible | Possible | -| Relationship: Uni-/Bidirectional associations | Possible | Possible | -| Relationship: Flatten | Not possible | Possible | -| Evaluate user permissions in remote system | Possible | Requires workarounds 3 | -| Data freshness | Live data | Outdated until replicated | -| Performance | Degraded 4 | Best | - -
- -> 1 It's **not required** to filter both, on local and remote fields, in the same request.
-> 2 It's **required** to filter both, on local and remote fields, in the same request.
-> 3 Because replicated data is accessed, the user permission checks of the remote system aren't evaluated.
-> 4 Depends on the connectivity and performance of the remote system.
## Connect and Deploy @@ -421,7 +192,6 @@ CAP leverages the destination capabilities of the SAP Cloud SDK. Create a destination using one or more of the following options. - **Register a system in your global account:** You can check here how to [Register an SAP System](https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/2ffdaff0f1454acdb046876045321c91.html) in your SAP BTP global account and which systems are supported for registration. Once the system is registered and assigned to your subaccount, you can create a service instance. A destination is automatically created along with the service instance. - - **Connect to an on-premise system:** With SAP BTP [Cloud Connector](https://help.sap.com/docs/CP_CONNECTIVITY/cca91383641e40ffbe03bdc78f00f681/e6c7616abb5710148cfcf3e75d96d596.html), you can create a connection from your cloud application to an on-premise system. From 01e40d7ed6cca703cab01f67a12411bfa4b3b193 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 30 Jan 2026 12:48:31 +0100 Subject: [PATCH 374/439] ai-assisted edit --- guides/integration/calesi.md | 109 +++++++++++++++++------------------ 1 file changed, 54 insertions(+), 55 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index 79e67a9f6d..2e629cfe00 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -2,7 +2,7 @@ # CAP-Level Service Integration The *'Calesi'* Pattern {.subtitle} -Integrating remote services – from other applications, third-party services, or platform services – is a fundamental aspect of cloud application development. CAP provides an easy and platform-agnostic way to do so: Remote services are represented as CAP services, which can be consumed _as if they were local_, while the CAP runtimes manage the communication and resilience details under the hood. Not the least, remote services can be mocked automatically for local inner-loop development and testing. +Integrating remote services - from other applications, third-party services, or platform services - is a fundamental aspect of cloud application development. CAP provides an easy and platform-agnostic way to do so: Remote services represented as CAP services, which you can consume _as if they were local_, while the CAP runtimes manage the communication and resilience details under the hood. Not the least, CAP mocks remote services automatically for local inner-loop development and testing. {.abstract} @@ -24,7 +24,7 @@ Integrating remote services – from other applications, third-party services, o ## As if they were local -Service integration is much about consuming remote services from other applications, third-party services, or platform services. CAP greatly simplifies this by allowing to call remote services _as if they were local_. Let's see how that looks in practice: +Service integration is much about consuming remote services from other applications, third-party services, or platform services. CAP greatly simplifies this by allowing to call remote services _as if they were local_. Let's see how this works: 1. Clone the bookshop sample, and start the server in a terminal: @@ -33,7 +33,7 @@ Service integration is much about consuming remote services from other applicati cds watch bookshop ``` -2. Start *cds repl* in a second terminal, and run the code below in there: +2. Start *cds repl* in a second terminal and run this code: ```shell cds repl @@ -78,25 +78,25 @@ and covers all the aspects of CAP-level service integration in detail. ## The XTravels Sample -In this guide we'll use the _XTravels_ sample application as our running example for CAP-level service integration. It is an modernized adaptation of the reknown [ABAP Flight reference sample](https://help.sap.com/docs/abap-cloud/abap-rap/abap-flight-reference-scenario), reimplemented using CAP, as well as split into two microservices as follows: +In this guide we'll use the _XTravels_ sample application as our running example. It's a modernized adaptation of the renowned [ABAP Flight reference sample](https://help.sap.com/docs/abap-cloud/abap-rap/abap-flight-reference-scenario), reimplemented using CAP and split into two microservices: - The [*@capire/xflights*](https://github.com/capire/xflights) service provides flight-related master data, such as *Flights*, *Airports*, *Airlines*, and *Supplements* (like extra luggage, meals, etc.). It exposes this data via a CAP service API. -- The [*@capire/xtravels*](https://github.com/capire/xtravels) application allows travel agents to plan travels on behalf of travellers, including bookings of flights. *Customer* data is obtained from a SAP S/4HANA system, while *Flights*, *Airports* and *Airline* are consumed from the *@capire/xflights*, as indicated by the green and blue areas in the screenshot below. +- The [*@capire/xtravels*](https://github.com/capire/xtravels) application allows travel agents to plan travels on behalf of travellers, including bookings of flights. The application obtains *Customer* data from a SAP S/4HANA system, while it consumes *Flights*, *Airports*, and *Airlines* from *@capire/xflights*, as indicated by the green and blue areas in the screenshot below. ![XTravels application interface showing a travel request form. The interface displays customer information including name, email, and address fields highlighted in green, sourced from S/4HANA. Below that, a flight booking section shows departure and arrival airports, dates, and times highlighted in blue, sourced from the XFlights service. The layout demonstrates data federation from multiple backend systems presented in a unified user interface. ](assets/xtravels-screenshot.png) The resulting entity-relationship model looks like that: -![Architecture diagram showing three systems: XFlights on the left containing Flights and Airports entities in light blue, XTravels in the center containing Travels, Bookings, and Supplements entities in darker blue, and S/4HANA on the right containing Customers entity in gray. Arrows connect Bookings to Flights, Travels to Customers, and Bookings to Supplements, illustrating data relationships between the systems in a federated service integration pattern. +![Architecture diagram showing three systems: XFlights on the left containing Flights, Airlines, and Airports entities in light blue, XTravels in the center containing Travels, Bookings, and Supplements entities in darker blue, and S/4HANA on the right containing Customers entity in gray. Arrows connect Bookings to Flights, Travels to Customers, and Bookings to Supplements, illustrating data relationships between the systems in a federated service integration pattern. ](assets/xtravels-sample.drawio.svg) -From a service integration perspective, this sample mainly shows a data federation scenario, where data is consumed from different upstream systems (XFlights and S/4HANA) – most frequently in a readonly fashion – to be displayed together with an application's local data. +From a service integration perspective, this sample mainly shows a data federation scenario, where the application consumes data from different upstream systems (XFlights and S/4HANA) – most frequently in a readonly fashion – to display it together with the application's local data. ## Workflow Overview -The graphic below shows the flow of essential steps for service integration, which the following sections will walk you through in detail. +The graphic below shows the flow of essential steps for service integration, which the following sections walk you through in detail: ![Workflow diagram showing five numbered steps of CAP-level service integration. Service Provider box on left contains step 1 Service Definition in blue and Domain Models in gray. Packaged API box in center shows step 2 Service Interface in light gray. Service Consumer box on right displays step 4 Consumption Views in light blue and step 5 Own Models in blue. Arrows connect the components left to right. Below, numbered list describes: 1 Expose Service Interfaces as usual, 2 Export APIs using cds export and npm publish, 3 Import APIs using cds import or npm add, 4 Add Consumption Views defining what to consume, 5 Use with own models as if they were local. ](assets/overview.drawio.svg) @@ -104,7 +104,7 @@ The graphic below shows the flow of essential steps for service integration, whi #### Getting Started... -So let's dive into the details of CAP-level service integration, using the XTravels sample as our running example. Clone both repositories as follows to follow along: +Let's dive into the details of CAP-level service integration, using the XTravels sample as our running example. Clone both repositories as follows to follow along: ```sh mkdir -p cap/samples @@ -139,7 +139,7 @@ This declares a CAP service named `sap.capire.flights.data`, served over _OData_ #### Using Denormalized Views -Lets have a closer look at the denormalized view for _Flights_, which basically flattens the association to `FlightConnection`. The projection `{flights.*,*}` shown in line 3 above, is a simplified version of the following actual definition found in `srv/data-service.cds`: +Let's have a closer look at the denormalized view for _Flights_, which basically flattens the association to `FlightConnection`. The projection `{flights.*,*}` shown in line 3 above, is a simplified version of the following actual definition found in `srv/data-service.cds`: ```cds :line-numbers=3 [cap/samples/xflights/srv/data-service.cds] @readonly entity Flights as projection on x.Flights {flights.*,*}; // [!code --] @@ -178,11 +178,11 @@ Exporting APIs to apis/data-service ... /done. ``` -By default, generated output is written to an `./apis/` subfolder, with `` being the given service definition's `.cds` file basename. You can choose a different output folder with the `--to` option of `cds export`. +By default, output goes to an `./apis/` subfolder, where `` is the `.cds` file basename. Use the `--to` option to specify a different output folder. #### Exported Service Definitions -The key ingredient of the generated output is the `services.csn` file, which contains a cleansed, ***interface-only*** part of the given service definition: only the _inferred elements signature_ of served entities are included, while all projections to underlying entities got removed, and hence all underlying entities and definitions referred to by them. +The key ingredient of the generated output is the `services.csn` file, which contains a cleansed, ***interface-only*** part of your service definition. It includes the _inferred elements signature_ of served entities but removes all projections to underlying entities and their dependencies. To get an idea of the effect, run `cds export` in dry-run mode like this: @@ -284,12 +284,12 @@ Skipped: 31 # [!code ++] ::: -In addition to the generated `services.csn` file, an `index.cds` file was added, which you can modify as needed. It won't be overridded on subsequent runs of `cds export`. +In addition to the generated `services.csn` file, an `index.cds` file was added, which you can modify as needed. It won't be overridden on subsequent runs of `cds export`. ### Packaged APIs -The third file generated is a `package.json` with that content: +The third generated file is `package.json`: ::: code-group @@ -310,16 +310,16 @@ The third file generated is a `package.json` with that content: ::: -We can modify that as needed, changes won't be overriden on subsequent runs of `cds export`. In our xflights/xtravels sample we adjusted the package name to `@capire/xflights-data` as shown in the second tab above. +You can modify this file. `cds export` won't overwrite your changes. In our xflights/xtravels sample, we changed the package name to `@capire/xflights-data`. > [!tip] Yet Another CAP Package (YACAP) -> The generated output is actually a CAP project/package on its own. So we can also add additional files to the generated *./apis* subfolder as needed; such as additional models in *.cds* files, data in *.csv* files or I18n bundles, even *.js* or *.java* files with custom logic for consumers. +> The generated output is a complete CAP package. You can add additional files to the *./apis* subfolder: models in *.cds* files, data in *.csv* files, I18n bundles, or even *.js* or *.java* files with custom logic for consumers. #### Adding Initial Data and I18n Bundles -We can also use the following `cds export` command line options, to add I18n bundles and/or initial data , wich would generate output to the usual locations next to the generated `.csn` file as shown below: +You can use these `cds export` options to add I18n bundles and initial data, which generates files next to the `.csn` file: ```shell cds export srv/data-service.cds --texts @@ -341,13 +341,13 @@ cds export srv/data-service.cds --data > apis/data-service/data/sap.capire.flights.data.Supplements.csv ``` -The `.csv` data is taken from the source application's existing initial data, but reduced to and transformed to the entities exposed by the given service definition, including all denormalizations or calculated fields. It's actually read via an instance of that service. +The `.csv` data comes from the source application's initial data, filtered and transformed for the exposed entities, including denormalizations and calculated fields. The application actually reads it via an instance of that service. #### Plug & Play Config -We can also use the `--plugin` option, to turn the package into a CAP plugin, to benefit from CAP's plug & play configuration features in consuming apps: +Use the `--plugin` option to turn the package into a CAP plugin and benefit from CAP's plug & play configuration features in consuming apps: ```shell cds export srv/data-service.cds --plugin @@ -442,7 +442,7 @@ Packaged APIs provided by CAP service providers are imported to consuming applic npm add @capire/xflights-data ``` -This makes the exported models with all accompanying artifacts available in the target project's `node_modules` folder. In addition it adds a respective package dependency to the consuming application's *package.json* like that: +This makes the exported models with all accompanying artifacts available in the target project's `node_modules` folder. In addition, it adds a respective package dependency to the consuming application's *package.json* like this: ::: code-group ```json [package.json] @@ -460,7 +460,7 @@ This allows us to update imported APIs later on using standard commands like `np ### From OData EDMX -We can also `cds import` APIs from other sources, such as OData APIs to integrate customer data from SAP S/4 HANA systems. Do so as follows: +You can also `cds import` APIs from other sources, such as OData APIs for customer data from SAP S/4 HANA systems: 1. Get an [_OData EDMX_](https://api.sap.com/api/API_BUSINESS_PARTNER/overview) source, e.g., from [*SAP Business Accelerator Hub*](https://api.sap.com): @@ -507,7 +507,7 @@ Further, it adds a [service binding](#service-bindings) stub to your _package.js ### Via Reuse Packages -Instead of importing the same APIs from raw EDMX or other non-CAP sources again and again in each consuming project, we can also do that once and share the outcomes as reusable pre-built integration packages. These basically apply the same best practice techniques than Packaged APIs created with `cds export`, and can hence be consumed in the same ways, with the same plug & play conveniences. +Instead of importing the same APIs repeatedly in each project, you can import them once and share them as reusable packages. These packages use the same techniques as `cds export` and provide the same plug & play convenience. For the _XTravels_ sample, we did so with the [`@capire/s4`](https://github.com/capire/s4) sample package, which we created as follows. @@ -590,13 +590,13 @@ npm add @capire/s4 ## Consuming APIs -Given the imported APIs we next use the definitions within our own models. For example, in the XTravels application we want to combine customer data obtained from SAP S/4HANA with travels, and flights data from xflights with respective bookings, like a [mashup of own and imported entities](#mashed-up-models). With the integrated models given, we can already run the integrated application, as most integrations are [mocked out of the box](#mocked-out-of-the-box) by CAP runtimes. For the real non-mocked integration, [custom code is required](#required-custom-code), of course, which we'll deep dive in in the last secion of this chapter. +With imported APIs, you can now use them in your own models. For example, the XTravels application combines customer data from SAP S/4HANA with travels and flight bookings from xflights in a [mashup](#mashed-up-models). With the integrated models, you can already run the application, as CAP [mocks integrations automatically](#mocked-out-of-the-box). For real integration, you'll need [custom code](#required-custom-code), which we'll cover later. ### Consumption Views -Imported APIs frequently contain much more entities and elements than we actually need. So as a next step we first declare so-called *Consumption Views*, to capture what we really want to use from them, with focus on these entities and elements we need in close access. +Imported APIs often contain more entities and elements than you need. So as a next step we first create *Consumption Views* to capture what you actually want to use, focusing on entities and elements you need close access to. -We do so in two new files `apis/capire/xflights.cds` and `apis/capire/s4.cds`: +Create two new files `apis/capire/xflights.cds` and `apis/capire/s4.cds`: ::: code-group ```cds :line-numbers [apis/capire/xflights.cds] @@ -635,24 +635,24 @@ Noteworthy aspects here are: - For the `Flights` entity we also flatten data from associations directly into the `Flights` consumption view. This is another [denormalization](#using-denormalized-views) to make life easier for us in the xtravels app. -- The chosen namespaces `sap.capire.s4` and `sap.capire.xflights`, reflect the source systems, but are distinct from their original namespaces, which is a good practice to avoid name clashes further down the road. +- The namespaces `sap.capire.s4` and `sap.capire.xflights` reflect the source systems but differ from the original namespaces to avoid name clashes. -- Finally, we annotate both consumption views with `@federated`, to trigger data federation for them, which we'll learn about in the next chapters. +- We annotate both views with `@federated` to trigger data federation, covered in the next chapters. > [!tip] Always use Consumption Views > -> Even though they are optional, it's a good practice to always define consumption views on top of imported APIs. They declare what you really need, which can be used later on to automate data federation. In addition they map imported definitions to your own domain and use cases, by renaming, flattening, or restructuring them as needed. +> Even though they are optional, it's a good practice to always define consumption views on top of imported APIs. They declare what you need, enabling automated data federation. They also map imported definitions to your domain by renaming, flattening, or restructuring. > [!warning] Protocol-specific Limitations > -> Depending on the service provider and supported protocols, limitations apply to what you can do in consumption views. In particular, OData doesn't support denormalization, such as we did in case of `Flights` consumption view above. That latter is possible, because the xflights service is also served over the HCQL protocol (indicated by the `@hcql` annotation in it's [definition](#defining-service-apis)), which is CAP's native protocol. +> Depending on the service provider and protocols, limitations apply to consumption views. In particular, OData doesn't support denormalization like we used for the `Flights` view. This works here because xflights also serves the HCQL protocol (see the `@hcql` annotation in its [definition](#defining-service-apis)), which is CAP's native protocol. ### Mashed up Models -With the consumption views in place, we can now refer to them from our own models in any way we like, _as if they were local_, thus creating mashups of definitions from imported APIs and local definitions. +With consumption views in place, you can now reference them from your models _as if they were local_, creating mashups of imported and local definitions. > [!tip] AI Agents 'capire' CAP > We can use AI agents to help us analysing and understanding our models. Actually, the following sections are based on a response by *Claude Sonnet* to the question: *"Find and explain all references"*, with the entity definition for the `Flights` consumption view selected as context. @@ -766,7 +766,7 @@ There are similar references to `Flights` entity from xflights in other parts of ### Mocked Out of the Box -With the mashed up models in place, we can already run consuming applications in _'airplane mode'_ – i.e. without the upstream services running and connected –, as the imported services are mocked out of the box by CAP runtimes, _in-process_ and with mock data in the same _in-memory_ database, next to our own data. +With mashed up models, you can run applications in _'airplane mode'_ without upstream services running. CAP mocks imported services automatically _in-process_ with mock data in the same _in-memory_ database as your own data. Start the xtravels application locally using `cds watch` as usual, and note the output about the `sap.capire.flights.data` service, as well as the `S4BusinessPartnerService` being mocked automatically: @@ -786,7 +786,7 @@ cds watch } ``` -When we open the Fiori UI in the browser, we see it displays data from both, local and imported entities, seamlessly integrated as shown in the screenshot below (the data highlighted in green is mocked data from `@capire/s4`). +Open the Fiori UI in the browser. It displays data from both local and imported entities seamlessly (the green-highlighted data is mocked from `@capire/s4`). ![XTravels Fiori list view showing a table of travel requests, with the Customer highlighted in green.](assets/xtravels-list.png) @@ -795,11 +795,11 @@ When we open the Fiori UI in the browser, we see it displays data from both, loc There are different options to provide initial data, test data, and mock data: -- In case of `@capire/xflights-data`, we generated the package content using `cds export --data` option, which added `.csv` files next to the `.cds` files. -- In case of `@capire/s4`, we explicitly added `.csv` files next to the `.cds` files. -- In addition, we could add `.csv` files for imported entities in the consuming apps `db/data` or `test/data` folders. +- For `@capire/xflights-data`, we used `cds export --data` to add `.csv` files. +- For `@capire/s4`, we manually added `.csv` files next to the `.cds` files. +- You can also add `.csv` files in the consuming app's `db/data` or `test/data` folders. -In all cases, the `.csv` files are placed next to the `.cds` files, and hence they are automatically detected and loaded into the in-memory database. +In all cases, you place the `.csv` files next to the `.cds` files, and the system automatically detects and loads them into the in-memory database. For Java, make sure to add the `--with-mocks` option to the `cds deploy` command used to generate the `schema.sql` in `srv/pom.xml`. This ensures that tables for the mocked remote entities are created in the database. @@ -813,7 +813,7 @@ For Java, make sure to add the `--with-mocks` option to the `cds deploy` command ### Required Custom Code -When it comes to real non-mocked integration with external services, custom code is required to handle the actual data integration. For a more realistic test, lets use `cds mock` to run the mocked services in separate processes. Run these commands **in separate terminals**: +For real integration with external services, you need custom code. Let's test with `cds mock` running services in separate processes. Run these commands **in separate terminals**: ```shell cds mock apis/capire/s4.cds @@ -825,7 +825,7 @@ cds mock apis/capire/xflights.cds cds watch ``` -In the log output of the xtravels app server we now see that it connects to the two other services instead of mocking them: +The xtravels app log shows it connects to the two services instead of mocking them: ```zsh [cds] - connect to S4BusinessPartnerService > odata { @@ -838,15 +838,15 @@ In the log output of the xtravels app server we now see that it connects to the } ``` -This is because the CAP runtime now detected that services with that name are served by different processes within our local binding environment now, so we don't mock them in-process any longer. +CAP detected that these services run in different processes in our local environment, so it doesn't mock them in-process anymore. -When we open the Fiori UI in the browser again, we see the data from the S/4 service is missing now, as we have not yet implemented the required custom code for the actual data integration, the same applies to the flight data from _xflights_: +Open the Fiori UI again. The S/4 and xflights data is missing because we haven't implemented the custom integration code yet: ![XTravels Fiori list view showing a table of travel requests, with the Customer column empty.](assets/xtravels-list-.png) ![XTravels Fiori details view showing a travel requests, with the flights data missing](assets/xtravels-bookings-.png) -In addition, when we again look into the log output, we see some bulk requests like shown below, which indicates that the Fiori client is desparately trying to fetch the missing customer data. If we'd scroll the list in the UI this would repeat like crazy. +The log shows bulk requests – the Fiori client desperately trying to fetch the missing customer data. Scrolling the list would repeat this endlessly: @@ -891,24 +891,24 @@ MaxListeners is 10. Use emitter.setMaxListeners() to increase limit ``` -So, let's go on and fill this gap with required custom code... +Let's go on and fill this gap with required custom code... ### CAP-level Data Federation -Displaying external data in lists commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on server, and a nightmare regarding resilience. Instead, we somehow need to ensure that all required data is available locally, so that it can be accessed fast and reliably by UIs, using good old SQL JOINs. +Displaying external data in lists requires fast access. Live calls to remote services per row would cause poor performance, excessive server load, and resilience problems. Instead, ensure all required data is available locally for fast, reliable access via SQL JOINs. -In the xtravels app we accomplished that with a simple, yet quite effective data replication solution, which automatically replicates data for all [consumption views](#consumption-views) tagged with the `@federated` annotation, for example: +The xtravels app uses a simple data replication solution that automatically replicates data for all [consumption views](#consumption-views) tagged with `@federated`: ```cds :line-numbers=4 @federated entity Customers as projection on S4.A_BusinessPartner { ... } ``` -If a remote service is detected, these entities are turned into tables to serve as local persistence for replicated data (line 9 in the code below). +If a remote service is detected, CAP turns these entities into tables to serve as local persistence for replicated data (line 9 in the code below). > [!tip] Stay Intentional -> What, not how! -> Minimal Assumptions > -> By tagging entities with `@federated` we stay _intentional_ about **_what_** we want to achieve, and avoid any premature assumptions about **_how_** things are actually implemented. => This allows CAP runtimes – or your own _generic_ solutions, as in this case – to choose the best possible implementation strategies for the given environment and use case, which may differ between development, testing, and production environments, or might need to evolve over time. +> By tagging entities with `@federated`, you declare your intention - **_what_** you want - without assuming **_how_** to implement it. This lets CAP runtimes or your own solutions choose the best implementation for each environment, which may differ between development, testing, and production environments, allowing evolution without disruption. Here's the complete code, placed in file `srv/data-federation.js`: @@ -958,7 +958,7 @@ const is_remote = srv => cds.requires[srv]?.credentials?.url Let's have a closer look at this code, which handles these main tasks: -1. **Prepare Persistence** – When the model is `loaded`, before it's deployed to the database, we collect all to be `@federated` entities, check whether their respective services are remote, and if so, turn them into tables for local replicas (line 11). +1. **Prepare Persistence** – When the model is `loaded`, before deploying it to the database, we collect all `@federated` entities to be replicated, check whether their respective services are remote, and if so, turn them into tables for local replicas (line 11). 2. **Setup Replication** – Later when all services are `served`, we connect to each remote one (line 20), register a handler for replication (line 21), and schedule it to be invoked every three seconds (line 22). @@ -1070,7 +1070,7 @@ this.after ('SAVE', Travels, ({ Bookings=[] }) => Promise.all ( ## Service Bindings -Service bindings configure connectivity to remote services. They are injected respective connection points configure in CAP through `cds.requires.` configurations, which are defined like this: +Service bindings configure connectivity to remote services. They inject respective connection points that you configure in CAP through `cds.requires.` configurations: ```tsx cds.requires. = { @@ -1086,11 +1086,10 @@ cds.requires. = { ``` -They are added to consuming applications' _package.json_ files, either manually, or automatically when using `cds import` as we saw earlier. +They are added to consuming applications' _package.json_ files, either manually or automatically when you use `cds import`, as we saw earlier. ### CAP Node.js -Service bindings configure connectivity to remote services. They are added to consuming applications' _package.json_ files, either manually, or automatically when using `cds import` as we saw earlier. Service bindings have this general form: ```sh @@ -1226,18 +1225,18 @@ await xflights.read `Flights { }` ``` -⇒ equally works for both, xflights api mocked locally, as well as running remotely +⇒ works equally well for both scenarios: the xflights API mocked locally, as well as running remotely ### Using Workspaces -Instead of exercising a workflow like that again and again: +Instead of repeating this workflow again and again: - ( *develop* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) -... we can use *npm workspaces* technique to work locally and speed up things as follows: +... you can use the *npm workspaces* technique to work locally and speed things up as follows: ```shell mkdir -p cap/works; cd cap/works @@ -1298,9 +1297,9 @@ The usage of *npm workspaces* technique as described above streamlined our workf - Before: ( *develop* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) - After: ( *develop* → *export* ) → ( *consume* ) -We can even more streamline that by eliminating the export step as follows... +We can even streamline this further by eliminating the export step as follows... -Create a new subfolder `xflights-api-shortcut` in which we add two files as follows: +Create a new subfolder `xflights-api-shortcut` in which you add two files as follows: ```shell mkdir xflights-api-shortcut From 6b75bdcf6f4b99945328f2fa6d01752a06c240e4 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Fri, 30 Jan 2026 12:48:57 +0100 Subject: [PATCH 375/439] replaced doubled airports with airlines --- guides/integration/assets/xtravels-sample.drawio.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guides/integration/assets/xtravels-sample.drawio.svg b/guides/integration/assets/xtravels-sample.drawio.svg index 7c8149a221..5a6d1dfd2a 100644 --- a/guides/integration/assets/xtravels-sample.drawio.svg +++ b/guides/integration/assets/xtravels-sample.drawio.svg @@ -1,4 +1,4 @@ - + @@ -171,13 +171,13 @@
- Airports + Airlines
- Airports + Airlines From 220be7285669db77b780a5b476f105683855bc37 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 30 Jan 2026 14:50:06 +0100 Subject: [PATCH 376/439] Fixed database guides --- cds/cxl.md | 3 +- guides/databases/_menu.md | 2 +- .../{cql-to-sql.md => cap-level-dbs.md} | 99 ++++++++++++------- guides/databases/cdl-to-ddl.md | 2 +- guides/databases/index.md | 10 +- java/working-with-cql/query-api.md | 2 +- 6 files changed, 74 insertions(+), 44 deletions(-) rename guides/databases/{cql-to-sql.md => cap-level-dbs.md} (64%) diff --git a/cds/cxl.md b/cds/cxl.md index 2314a175dc..a0ba0ddd53 100644 --- a/cds/cxl.md +++ b/cds/cxl.md @@ -340,7 +340,7 @@ that multiplies the two factors `price` and `quantity`.
-CAP supports a set of [portable functions](../guides/databases/cql-to-sql.md#portable-functions) that can be used in all expressions. Those functions are passed through to the underlying database, allowing you to leverage the same functions for different databases, which greatly enhances portability. +CAP supports a set of [portable functions](../guides/databases/cap-level-dbs#portable-functions) that can be used in all expressions. Those functions are passed through to the underlying database, allowing you to leverage the same functions for different databases, which greatly enhances portability. ## ref (path expression) { #ref } @@ -835,4 +835,3 @@ navigates along the `author` association of the `Books` entity only if the autho } - diff --git a/guides/databases/_menu.md b/guides/databases/_menu.md index 18ce5ff004..6ed4bd668d 100644 --- a/guides/databases/_menu.md +++ b/guides/databases/_menu.md @@ -1,5 +1,5 @@ -# [ Mocked Out of the Box ](cql-to-sql) +# [ CAP-level Database Support ](cap-level-dbs) # [ CDL Compiled to DDL ](cdl-to-ddl) # [ Adding Initial Data ](initial-data.md) # Deployed to ... diff --git a/guides/databases/cql-to-sql.md b/guides/databases/cap-level-dbs.md similarity index 64% rename from guides/databases/cql-to-sql.md rename to guides/databases/cap-level-dbs.md index d28be92848..f68d8691fd 100644 --- a/guides/databases/cql-to-sql.md +++ b/guides/databases/cap-level-dbs.md @@ -1,4 +1,4 @@ -# CDS Compilation to Database-Specific SQL +# CAP-Level Database Integration CAP supports a number of portable functions and operators in CQL. The compiler automatically translates these to the best-possible database-specific native SQL equivalents. You can safely use these in CDS view definitions and runtime queries expressed in CQL. {.abstract} @@ -6,7 +6,21 @@ CAP supports a number of portable functions and operators in CQL. The compiler a [[toc]] -## Operators +## Mocked Out of the Box + +When using CAP's mocked out-of-the-box database integration, these functions and operators are supported in the in-memory SQLite database used for development and testing. + +#### TODO: + +- Mocked by in-memory SQLite or H2 databases +- With SAP HANA or PostgreSQL for production +- With a defined set of portable functions and operators + +## Standard Operators + +This chapter lists standardized operators supported by CAP, and guaranteed to work across all supported databases with feature parity. You can safely use these in CDS view definitions and runtime queries expressed in CQL. The compiler translates them to the best-possible database-specific native SQL equivalents. + +### Standard SQL Operators Most native SQL operators are supported in CQL as-is, like these from the SQL92 standard: @@ -77,13 +91,15 @@ FROM Books; The compiler translates this operator to the best-possible equivalent in the target database: `CASE WHEN ... THEN ... ELSE ... END` in standard SQL, or `IF(..., ..., ...)` in SAP HANA. -## Functions +## Standard Functions -### Portable Functions +The following sections list standardized string, numeric, data/time, and aggregate functions supported by CAP, and guaranteed to work across all supported databases with feature parity. You can safely use these in CDS view definitions and runtime queries expressed in CQL. The compiler translates them to the best-possible database-specific native SQL equivalents. + +> [!important] Function names are case-sensitive +> The names for standardized functions must be written exactly as listed above. For example, `toUpper` is invalid, while `toupper` is valid. Differently cased names might also work if they match native functions of the specific database, but are not guaranteed to be portable -> always use the exact casing as listed. -Following are portable functions supported by CAP. You can safely use these in CDS view definitions and runtime queries expressed in CQL. The compiler translates them to the best-possible database-specific native SQL equivalents. -String functions: +### String Functions - `concat(x,y,...)` - `length(x)` @@ -97,15 +113,53 @@ String functions: - `substring(x,start, length)` - `matchespattern(x,pattern)` +In addition, to `concat()`, CAP also supports the common `||` operator for string concatenation in CQL queries, same as in SQL queries. For example, these two queries are equivalent: + +```sql +SELECT concat (firstName,' ',lastName) as fullName from Authors; +``` +```sql +SELECT firstName || ' ' || lastName as fullName from Authors; +``` + + +> [!important] Indexes and Substring Details +> The return value of `indexof()` as well as the `start` parameter in `substring()` are zero-based index values. If the substring is not found, `indexof()` returns `-1`. If the `start` index in `substring()` is negative, it is counted from the end of the string. If the `length` parameter is omitted, the substring to the end of the string is returned. -Numeric functions: + +### Numeric Functions - `ceil(x)`, `ceiling(x)` - `floor(x)` - `round(x)` -###### aggregate-functions -Aggregate functions: +> [!warning] Non-portable round() function with more than one argument +> Note that databases support `round()` functions with multiple arguments, the second parameter being the precision. If you use that option, the `round()` function may behave differently depending on the database. + + +### Date / Time Functions + +- `date(x)` -> `yyyy-MM-dd` strings +- `time(x)` -> `HH:mm:ss` strings +

+- `year(x)` -> integer +- `month(x)` -> integer +- `day(x)` -> integer +- `hour(x)` -> integer +- `minute(x)` -> integer +- `second(x)` -> integer +

+- `years_between(x,y)` -> number +- `months_between(x,y)` -> number +- `days_between(x,y)` -> number +- `seconds_between(x,y)` -> number + +> [!note] CAP Java support coming soon... +> The above `*_between` functions are currently only supported by CAP Node.js. \ +> Support for CAP Java is planned for a future release. + + +### Aggregate Functions - `avg(x)`, `average(x)` - `min(x)`, `max(x)` @@ -113,32 +167,9 @@ Aggregate functions: - `count(x)` -Date / Time functions: - -- `date(x)` -> `yyyy-MM-dd` -- `time(x)` -> `HH:mm:ss` -- `year(x)` -- `month(x)` -- `day(x)` -- `hour(x)` -- `minute(x)` -- `second(x)` -- `years_between(x,y)` -- `months_between(x,y)` -- `days_between(x,y)` -- `seconds_between(x,y)` - -> [!important] Function names are case-sensitive -> The function names must be written exactly as listed above. For example, `toUpper` is invalid, while `toupper` is valid. Differently cased names might also work if they match native functions of the specific database, but are not guaranteed to be portable -> always use the exact casing as listed. - -> [!important] Non-portable round() function with more than one argument -> Note that databases support `round()` functions with multiple arguments, the second parameter being the precision. If you use that option, the `round()` function may behave differently depending on the database. - -> [!note] Indexes and Substring Details -> The return value of `indexof()` as well as the `start` parameter in `substring()` are zero-based index values. If the substring is not found, `indexof()` returns `-1`. If the `start` index in `substring()` is negative, it is counted from the end of the string. If the `length` parameter is omitted, the substring to the end of the string is returned. -### Native Functions +## Native Functions In general, the CDS compiler doesn't 'understand' SQL functions but translates them to SQL _generically_ as long as they follow the standard call syntax of `fn(x,y,...)`. This allows to use all native database functions inside your CDS models, like this: @@ -152,7 +183,7 @@ SELECT from Books { > Using native functions like this makes your CDS models database-specific, and thus less portable. Therefore, prefer using the [portable functions](#portable-functions) listed above whenever possible. -### Window Functions +## Window Functions [SQL window functions](https://en.wikipedia.org/wiki/Window_function_(SQL)) with `OVER` clauses are supported as well, for example: diff --git a/guides/databases/cdl-to-ddl.md b/guides/databases/cdl-to-ddl.md index 9a91b3ec1c..ed862872fa 100644 --- a/guides/databases/cdl-to-ddl.md +++ b/guides/databases/cdl-to-ddl.md @@ -160,7 +160,7 @@ CREATE VIEW SomeProjection AS SELECT ... FROM SomeEntity; ::: > [!tip] Views are defined using CQL -> Both view defined per `as projection on` and those using `as select from` are defined using CQL, which supports a broad scope of database-agnostic features. Learn more about that in the following guide: [_CQL Compilation to SQL_](cql-to-sql). +> Both view defined per `as projection on` and those using `as select from` are defined using CQL, which supports a broad scope of database-agnostic features. Learn more about that in the following guide: [_CQL Compilation to SQL_](cap-level-dbs). #### Qualified Names ⇒ Slugified diff --git a/guides/databases/index.md b/guides/databases/index.md index 488cccb823..87dfe976ee 100644 --- a/guides/databases/index.md +++ b/guides/databases/index.md @@ -37,19 +37,19 @@ The illustration below shows what happens automatically under the hood: The following guides explain the details of CAP-level database integration, which are mostly database-agnostic, and apply to all supported databases: -[CDL Compiled to DDL](cdl-to-ddl.md) +[ CAP-level Database Integration ](cap-level-dbs.md) : How database-agnostic CDS models in CDL format are compiled to native DDL statements for different databases. -[CQL Compiled to SQL](cql-to-sql.md) +[ CQL Compiled to SQL ](cdl-to-ddl.md) : How database-agnostic CDS queries in CQL format are compiled to native SQL statements for different databases. -[Adding Initial Data](initial-data.md) +[ Adding Initial Data ](initial-data.md) : How to provide initial data and test data using CSV files, which are loaded into the database automatically. -[Schema Evolution](schema-evolution.md) +[ Schema Evolution ](schema-evolution.md) : How to manage schema changes with appropriate schema evolution strategies for development and production. -[Performance Guide](performance.md) +[ Performance Guide ](performance.md) : Pointing out performance considerations, and common pitfalls. diff --git a/java/working-with-cql/query-api.md b/java/working-with-cql/query-api.md index 32681ead5f..ac3afc46fc 100644 --- a/java/working-with-cql/query-api.md +++ b/java/working-with-cql/query-api.md @@ -713,7 +713,7 @@ You can aggregate data in two ways: #### Aggregation Functions { #aggregation-functions } -Use [aggregation functions](../../guides/databases/cql-to-sql#aggregate-functions) to calculate minimums, maximums, totals, averages, and counts of values. You can use them in *columns* of `Select` statements to include the aggregated values in the result set, or in the [having](#having) clause to filter based on aggregated values. +Use [aggregation functions](../../guides/databases/cap-level-dbs#aggregate-functions) to calculate minimums, maximums, totals, averages, and counts of values. You can use them in *columns* of `Select` statements to include the aggregated values in the result set, or in the [having](#having) clause to filter based on aggregated values. #### Grouping { #grouping } From ee3b5cb59bc25d4ea10df6c9208d19aaac204fdc Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 30 Jan 2026 14:50:17 +0100 Subject: [PATCH 377/439] ... --- guides/integration/calesi.md | 55 ++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index 6bfcf6955d..5cdf279da7 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -10,7 +10,7 @@ Integrating remote services - from other applications, third-party services, or > > 1. Remote services are proxied by CAP services, ... → *everything's a CAP service* > 2. consumed in protocol-agnostic ways → *... as if they were local* -> 3. mocked out of the box → *inner-loop development* +> 3. mocked out of the box → *fast-track inner-loop development* > 4. with varying implementations → *evolution w/o disruption* > 5. extensible through event handlers → *intrinsic extensibility* > @@ -801,12 +801,16 @@ With mashed up models, you can run applications in _'airplane mode'_ without ups ![XTravels Fiori list view showing a table of travel requests, with the Customer highlighted in green.](assets/xtravels-list.png) +> [!tip] Fast-track Inner-Loop Development → Spawning Parallel Tracks +> +> The mocked-out-of-the-box capabilities of CAP, with remoted services mocked in-process and a shared in-memory database, allows us to greatly speed up development and time to market. For real remote operations there is additional investment required, of course. But the agnostic nature of CAP-level Service Integration also allows you to spawn two working tracks running in parallel: One team to focus on domain and functionality, and another one to work on the integration logic under the hood. + We'll learn more about mocking and inner loop development in the [next chapter](#inner-loop-development). #### Integration Logic Required -While everything just works nicely when mocked in-process and with a shared in-memory database, let's get a bit more realistic and use `cds mock` to run the services in separate processes. +While everything just works nicely when mocked in-process and with a shared in-memory database, let's move closer to the target setup and use `cds mock` to run the services to be integrated in separate processes. 1. First run these commands **in two separate terminals**: @@ -881,12 +885,57 @@ The log shows bulk requests – the Fiori client desperately trying to fetch the We see there are specific implementions required, to actually integrate remote services at runtime. We deep dive into one possible solution for that next. + + ## Integration Logic -To actually integrate remote services at runtime, custom code is required. In the xtravels sample we implemented that in `srv/travel-service.js`, which is automatically picked up by the CAP runtime as service implementation for the `TravelService` defined in `srv/travel-service.cds`. +This chapter walks you through the typical use cases and solution patterns that you should be aware of when implementing required integration logic. The following sections do that on the example of [CAP Node.js SDK](../../node.js/); the same principles and patterns apply to CAP Java, as documented in the [CAP Java SDK](../../java/) reference documentation. + + ### Connecting to Remote Services +It all starts with connecting to remote services, which we do like that in the xtravels project: + +::: code-group + +```js :line-numbers=21 [srv/travel-service.js] +const xflights = await cds.connect.to ('sap.capire.flights.data') +const s4 = await cds.connect.to ('S4BusinessPartnerService') +``` + +::: + +The `cds.connect` functions used here is the common way to address service instances, that is commonly used for and works the same way for both, local as well as remote services: + +- for **local** services, it returns the local service providers – i.e., instances of [`cds.ApplicationService`](../../node.js/app-services), or your application-specific subclases thereof. +- for **remote** services, it returns a remote service proxy – i.e., instances of [`cds.RemoteService`](../../node.js/remote-services), generically constructed by the client libs. +- **both** inherit from the [`cds.Service`](../../node.js/core-services) base class, which constitutes the uniform programming interface for consuming CAP services – agnostic to underlying protocols, and agnostic to whether its local or remote at all. + +![Diagram illustrating CAP-level service integration showing two scenarios: Local services where Consumer connects to Service via CQL, and Remote services where Consumer connects to Proxy via CQL, Proxy connects to Protocol Adapter via OData, and Protocol Adapter connects to Service via CQL. +](assets/remoting.drawio.svg) + +### Uniform, Agnostic APIs + +The uniform, agnostic programming interface offered through [`cds.Service`](../../node.js/core-services) is centered around these methods: + +- [`srv.send ()`](../../node.js/core-services#srv-send-request) → synchronous communication, for all kinds of services. +- [`srv.emit ()`](../../node.js/core-services#srv-emit-event) → asynchronous communication, via messaging middlewares. +- [`srv.run ()`](../../node.js/core-services#srv-run-query) → execute CRUD queries with services that support that, like CAP services, OData services, or GraphQL services. + +Here are some typical usages found in xtravels: + +```js +await xflights.send ('POST','BookingCreated', { flight, date, seats }) +await xflights.emit ('FlightsUpdated', { flight, date, free_seats }) +await xflights.run (SELECT.from`Flights`.where`modifiedAt > ${latest}`) +``` + +The querying API is the most powerful and closest to the use cases of data-centric business applications. + + + + ### Querying Remote Data ### Delegating Queries From 1ebff7d86f565c0014944c4d11d15faf11dfff0a Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 30 Jan 2026 15:23:31 +0100 Subject: [PATCH 378/439] Data Federation Guide, part I -> ready for Jan release --- guides/integration/_menu.md | 2 +- guides/integration/data-federation.md | 49 ++++++++++++++++----------- 2 files changed, 30 insertions(+), 21 deletions(-) diff --git a/guides/integration/_menu.md b/guides/integration/_menu.md index 1e14a70cab..16c8690933 100644 --- a/guides/integration/_menu.md +++ b/guides/integration/_menu.md @@ -1,6 +1,6 @@ # [ CAP-level Service Integration ](calesi.md) -# [ CAP-level Data Federation ](data-federation.md) +# [ CAP-level Data Federation ](data-federation.md) # [ Inner Loop Development ](inner-loops.md) # [ Reuse & Compose ](reuse-and-compose.md) # [ Service Bindings ](service-bindings.md) diff --git a/guides/integration/data-federation.md b/guides/integration/data-federation.md index 12fd24f4de..32bdabb655 100644 --- a/guides/integration/data-federation.md +++ b/guides/integration/data-federation.md @@ -4,11 +4,11 @@ CAP applications can integrate and federate data from multiple external data sou {.abstract} -## Introduction +## Introduction & Motivation Displaying external data in lists commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on server, and a nightmare regarding resilience. Instead, we somehow need to ensure that all required data is available locally, so that it can be accessed fast and reliably by UIs, using good old SQL JOINs. -For example, we saw the need for that already in the [CAP-level Service Integration](calesi.md#coding-required) guide, where the `Customer` field in the travel requests list is populated from the remote S/4 Business Partner service, but missing when running the services separately: +For example, we saw the need for that already in the [CAP-level Service Integration](calesi.md#integration-logic-required) guide, where the `Customer` field in the travel requests list is populated from the remote S/4 Business Partner service, but missing when running the services separately: 1. First run these commands **in two separate terminals**: @@ -80,16 +80,28 @@ In addition, when we again look into the log output, we see some bulk requests l ```
-In the xtravels app we accomplished that with a simple, yet quite effective data replication solution, which automatically replicates data as follows... + +## Get The XTravels Sample + +In the [`@capire/xtravels`](https://github.com/capire/xtravels) app we accomplished that with a simple, yet quite effective data replication solution, which automatically replicates data as documented below. + +Clone the project from GitHub and open it in VS Code to follow along: + +```shell +git clone https://github.com/capire/xtravels.git cap/samples/xtravels +code cap/samples/xtravels +``` ## Federated Consumption Views -Tag [consumption views](calesi#consumption-views) with the `@federated` annotation, to express your intent to have that data federated, i.e. in close access locally, for example: +Tag [consumption views](calesi#consumption-views) with the `@federated` annotation, to express your intent to have that data federated, i.e. in close access locally. For example, we did so in out consumption view for S/4 Business Partners: -```cds :line-numbers=4 +::: code-group +```cds :line-numbers=4 [apis/capire/s4.cds] @federated entity Customers as projection on S4.A_BusinessPartner { ... } ``` +::: > [!tip] Stay Intentional -> What, not how! -> Minimal Assumptions > @@ -98,7 +110,7 @@ Tag [consumption views](calesi#consumption-views) with the `@federated` annotati ## Generic Implementation -Here's the complete code, placed in file `srv/data-federation.js`: +Here's the complete code, as found in [`srv/data-federation.js`](https://github.com/capire/xtravels/blob/main/srv/data-federation.js): ::: code-group ```js:line-numbers [srv/data-federation.js] @@ -155,7 +167,7 @@ Let's have a closer look at this code, which handles these main tasks: > We work with **database-agnostic** and **protocol-agnostic** [CQL queries](../../cds/cql) both for interacting with the local database as well as for querying remote services. In effect, we got a fully generic solution for replication, i.e., it works for **_any_** remote service that supports OData, or HCQL. -### Test Drive Locally +## Test Drive Locally Let's see the outcome in action: to activate the above data federation code, edit `srv/server.js` file and uncomment the single line of code in there like this: @@ -216,16 +228,13 @@ Finally, open the Fiori UI in the browser again, and see that customer data from ![XTravels Fiori details view showing a travel requests, now with flight data again.](assets/xtravels-bookings.png) - -## Service-level Replication - -### Initial Loads -### Delta Loads -### On-Demand Replication -### Event-driven Updates - -## HANA Virtual Tables - -## HANA Synonyms - -## HANA Data Products + From a22385f1e0ee77aa38f881ab729369c8b5409e3c Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Fri, 30 Jan 2026 15:35:16 +0100 Subject: [PATCH 379/439] extracted data federation --- guides/integration/calesi.md | 178 +++-------------------------------- 1 file changed, 12 insertions(+), 166 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index 5cdf279da7..d4930d73a2 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -843,47 +843,6 @@ While everything just works nicely when mocked in-process and with a shared in-m ![XTravels Fiori details view showing a travel requests, with the flights data missing](assets/xtravels-bookings-.png) -The log shows bulk requests – the Fiori client desperately trying to fetch the missing customer data. Scrolling the list would repeat this endlessly: - - - -```js -[odata] - POST /odata/v4/travel/$batch -[odata] - > GET /Travels(ID=4133,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4132,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4131,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4130,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4129,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4128,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4127,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4126,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4125,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4124,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4123,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4122,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4121,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4120,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4119,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4118,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4117,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4116,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4115,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4114,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4113,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4112,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4111,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4110,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4109,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4108,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4107,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4106,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4105,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -[odata] - > GET /Travels(ID=4104,IsActiveEntity=true) { '$select': 'Customer', '$expand': 'Customer($select=ID,Name)' } -``` - - -We see there are specific implementions required, to actually integrate remote services at runtime. We deep dive into one possible solution for that next. - @@ -938,6 +897,10 @@ The querying API is the most powerful and closest to the use cases of data-centr ### Querying Remote Data +> [!tip] CAP-level Querying -> agnostic to databases & protocols +> We work with **database-agnostic** and **protocol-agnostic** [CQL queries](../../cds/cql) both for interacting with the local database as well as for querying remote services. In effect, we got a fully generic solution for replication, i.e., it works for **_any_** remote service that supports OData, or HCQL. + + ### Delegating Queries Value helps are common use cases where delegation of requests is needed, which we implemented like this in `srv/travel-service.js` for the `Customers` entity: @@ -990,142 +953,25 @@ this.after ('SAVE', Travels, ({ Bookings=[] }) => Promise.all ( ### Generic Data Federation -**Motivation** – Displaying external data in lists commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on server, and a nightmare regarding resilience. Instead, we somehow need to ensure that all required data is available locally, so that it can be accessed fast and reliably by UIs, using good old SQL JOINs. - -#### Federated Consumption Views - -The xtravels app uses a simple data replication solution that automatically replicates data for all [consumption views](#consumption-views) tagged with `@federated`: - -```cds :line-numbers=4 -@federated entity Customers as projection on S4.A_BusinessPartner { ... } -``` - -If a remote service is detected, CAP turns these entities into tables to serve as local persistence for replicated data (line 9 in the code below). +Displaying external data in lists commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on server, and a nightmare regarding resilience. Instead, we somehow need to ensure that all required data is available locally, so that it can be accessed fast and reliably by UIs, using good old SQL JOINs. -> [!tip] Stay Intentional -> What, not how! -> Minimal Assumptions -> -> By tagging entities with `@federated`, you declare your intention - **_what_** you want - without assuming **_how_** to implement it. This lets CAP runtimes or your own solutions choose the best implementation for each environment, which may differ between development, testing, and production environments, allowing evolution without disruption. - - -#### Generic Implementation - -Here's the complete code, placed in file `srv/data-federation.js`: +In the [`@capire/xtravels`](https://github.com/capire/xtravels) app we accomplished that with a simple, yet quite effective generic data replication solution. In essence that implementation boils down to these lines of querying remote services: ::: code-group -```js:line-numbers [srv/data-federation.js] -const PROD = process.env.NODE_ENV === 'production' /* eslint-disable no-console */ -const cds = require ('@sap/cds') -const feed = [] - -// Collect all entities to be federated, and prepare replica tables -PROD || cds.on ('loaded', csn => { - for (let e of cds.linked(csn).entities) { - if (e['@federated']) { - let srv = remote_srv4(e) - if (is_remote(srv)) { - e['@cds.persistence.table'] = true //> turn into table for replicas - feed.push ({ entity: e.name, remote: srv }) - } - } - } -}) - -// Setup and schedule replications for all collected entities -PROD || cds.once ('served', () => Promise.all (feed.map (async each => { - const srv = await cds.connect.to (each.remote) - srv._once ??=! srv.on ('replicate', replicate) - await srv.schedule ('replicate', each) .every ('3 seconds') -}))) - -// Event handler for replicating single entities -async function replicate (req) { - let { entity } = req.data, remote = this +```js [srv/data-federation.js] +const remote = await cds.connect.to (each.remote) +``` +::: +```js let { latest } = await SELECT.one `max(modifiedAt) as latest` .from (entity) let rows = await remote.run ( SELECT.from (entity) .where `modifiedAt > ${latest}` ) if (rows.length) await UPSERT (rows) .into (entity); else return - console.log ('Replicated', rows.length, 'entries', { for: entity, via: this.kind }) } - -// Helpers to identify remote services, and check whether they are connected -const remote_srv4 = entity => entity.__proto__._service?.name -const is_remote = srv => cds.requires[srv]?.credentials?.url ``` -::: - -Let's have a closer look at this code, which handles these main tasks: - -1. **Prepare Persistence** – When the model is `loaded`, before deploying it to the database, we collect all `@federated` entities to be replicated, check whether their respective services are remote, and if so, turn them into tables for local replicas (line 11). - -2. **Setup Replication** – Later when all services are `served`, we connect to each remote one (line 20), register a handler for replication (line 21), and schedule it to be invoked every three seconds (line 22). - -3. **Replicate Data** – Finally, the `replicate` handler implements a simple polling-based data federation strategy, based on `modifiedAt` timestamps (lines 28-32), with the actual call to remote happening on line 29. - -> [!tip] CAP-level Querying -> agnostic to databases & protocols -> We work with **database-agnostic** and **protocol-agnostic** [CQL queries](../../cds/cql) both for interacting with the local database as well as for querying remote services. In effect, we got a fully generic solution for replication, i.e., it works for **_any_** remote service that supports OData, or HCQL. - - -#### Test Drive - -Let's see the outcome in action: to activate the above data federation code, edit `srv/server.js` file and uncomment the single line of code in there like this: - -::: code-group -```js :line-numbers [srv/server.js] -process.env.NODE_ENV || require ('./data-federation') -``` -::: - -Restart the Xtravels app, and see these lines in the log output: - -```zsh -Replicated 49 entries { for: 'sap.capire.xflights.Supplements', via: 'hcql' } -Replicated 44 entries { for: 'sap.capire.xflights.Flights', via: 'hcql' } -Replicated 727 entries { for: 'sap.capire.s4.Customers', via: 'odata' } -``` - -The S/4 Business Partner service in terminal 1 shows the incoming OData request(s): - -```zsh -[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { - '$select': 'BusinessPartner,PersonFullName,LastChangeDate', - '$filter': 'LastChangeDate gt 2024-12-31' -} -``` - -While the xflights service in terminal 2 shows its incoming HCQL requests like that: - -```zsh -[hcql] - GET /hcql/data/ { - SELECT: { - from: { ref: [ 'sap.capire.flights.data.Flights' ] }, - columns: [ - { ref: [ 'ID' ], as: 'ID' }, - { ref: [ 'date' ], as: 'date' }, - { ref: [ 'departure' ], as: 'departure' }, - { ref: [ 'arrival' ], as: 'arrival' }, - { ref: [ 'free_seats' ], as: 'free_seats' }, - { ref: [ 'modifiedAt' ], as: 'modifiedAt' }, - { ref: [ 'airline', 'icon' ], as: 'icon' }, - { ref: [ 'airline', 'name' ], as: 'airline' }, - { ref: [ 'origin', 'name' ], as: 'origin' }, - { ref: [ 'destination', 'name' ], as: 'destination' } - ], - where: [ - { ref: [ 'modifiedAt' ] }, - '>', - { val: '2026-01-28T17:38:28.929Z' } - ] - } -} -``` - -Finally, open the Fiori UI in the browser again, and see that customer data from S/4 as well as flight data from xflights is now displayed properly, thanks to the data federation implemented above. - -![XTravels Fiori list view showing tarvel requests, now with customer names again.](assets/xtravels-list.png) - -![XTravels Fiori details view showing a travel requests, now with flight data again.](assets/xtravels-bookings.png) +[Learn more about CAP-level Data Federation in the dedicated guide.](data-federation){.learn-more} ### On-demand Replication From 99468c8e283d482a422219dc42c0f4bf4eb264a3 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 08:28:22 +0100 Subject: [PATCH 380/439] cleanup --- node.js/cds-connect.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/node.js/cds-connect.md b/node.js/cds-connect.md index 0bbd7dd8cd..38ad872e46 100644 --- a/node.js/cds-connect.md +++ b/node.js/cds-connect.md @@ -786,11 +786,3 @@ cds.requires.db.credentials.database = sqlite.db > Never check in or deploy such _.env_ files!
- - - -## Importing Service APIs - - - -## Mocking Required Services From ebf2c97f5f9abfaad0941196127dbeda892fcc20 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 08:28:36 +0100 Subject: [PATCH 381/439] cds.ql.clone --- node.js/cds-ql.md | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/node.js/cds-ql.md b/node.js/cds-ql.md index b64494b83d..4c43930ee9 100644 --- a/node.js/cds-ql.md +++ b/node.js/cds-ql.md @@ -336,6 +336,54 @@ q1 === q2 //> true ``` +## cds.ql.clone() {.method} + +Use the `cds.ql.clone()` method to create clones of given queries, which can by plain CQN objects, or instances of `cds.Query` themselves. This is useful to avoid side effects when modifying queries prior to execution. The returned clone is always an instance of [`cds.Query`](#class-cds-ql-query). + +For example, given this original query, which would be captured in CQN as shown below: + +```js +q1 = SELECT.from`Books` .where`title like 'Wu%'`.orderBy`genre.name` +``` +```zsh +=> cds.ql { + SELECT: { + from: { ref: [ 'Books' ] }, + where: [ { ref: [ 'title' ] }, 'like', { val: 'Wu%' } ], + orderBy: [ { ref: [ 'genre', 'name' ] } ] + } +} +``` + +We can create a clone and modify it like this: +```js +q2 = cds.ql.clone (q1) +``` +We can then modify `q2` without changing `q1`, for example like this: +```js +// Override where clause +q2.SELECT.where = cds.ql.predicate`author.name = 'Emily%'` +``` +```js +// Append an additional order by clause +q2.orderBy`title asc` +``` + +We can use the `.flat()` method to see the effective modified query: +```js +q2.flat() +``` +```zsh +=> cds.ql { + SELECT: { + from: { ref: [ 'Books' ] }, + where: [ { ref: [ 'author', 'name' ] }, '=', { val: 'Emily%' } ], + orderBy: [ { ref: [ 'genre', 'name' ] }, { ref: [ 'title' ], sort: 'asc' } ] + } +} +``` + + ## cds.ql. Query {#class-cds-ql-query .class} Instances of `cds.Query` capture queries at runtime. Subclasses provide [fluent APIs](#constructing-queries) to construct queries as highlighted below. From 9e8111ddd35df3a17e35b2228b5c653b1bc5947b Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 08:29:18 +0100 Subject: [PATCH 382/439] calesi finished --- guides/integration/calesi.md | 490 ++++++++++++++++++++---- guides/integration/data-federation.md | 2 +- guides/integration/service-bindings.md | 134 ++++--- guides/services/consuming-services--.md | 84 +--- 4 files changed, 494 insertions(+), 216 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index d4930d73a2..8da80839ae 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -24,7 +24,7 @@ Integrating remote services - from other applications, third-party services, or ## Introduction & Overview -### As if they were local +### As If They Were Local Service integration is much about consuming remote services from other applications, third-party services, or platform services. CAP greatly simplifies this by allowing to call remote services _as if they were local_. Let's see how this works: @@ -436,7 +436,7 @@ On the consumer side, like [*@capire/xtravels*](https://github.com/capire/xtrave -### From Packaged APIs +### Packaged APIs Packaged APIs provided by CAP service providers are imported to consuming applications like that: @@ -460,7 +460,7 @@ This allows us to update imported APIs later on using standard commands like `np -### From OData EDMX +### OData APIs You can also `cds import` APIs from other sources, such as OData APIs for customer data from SAP S/4 HANA systems: @@ -507,7 +507,7 @@ Further, it adds a [service binding](#service-bindings) stub to your _package.js > [Learn more about `cds import` in the tools guides.](../../tools/apis/cds-import){.learn-more} -### Via Reuse Packages +### Reuse Packages Instead of importing the same APIs repeatedly in each project, you can import them once and share them as reusable packages. These packages use the same techniques as `cds export` and provide the same plug & play convenience. @@ -535,7 +535,7 @@ For the _XTravels_ sample, we did so with the [`@capire/s4`](https://github.com/ "version": "1.0.0", "cds": { "requires": { - "S4BusinessPartnerService": { + "sap.capire.s4.business-partner": { "service": "API_BUSINESS_PARTNER", "kind": "odata-v2" } @@ -630,14 +630,14 @@ namespace sap.capire.s4; @federated entity Customers as projection on S4.A_BusinessPartner { BusinessPartner as ID, PersonFullName as Name, - LastChangeDate as modifiedAt, + LastChangeDate || 'T' || LastChangeTime || 'Z' as modifiedAt, } where BusinessPartnerCategory == 1; // 1 = Person ``` ::: Noteworthy aspects here are: -- We map names to match our domain, for example by renaming the imported entity from `A_Business_Partner` to `Customers`, as well as choosing simpler names for the elements we want to use. +- We map names to match our domain, for example by renaming the imported entity from `A_Business_Partner` to `Customers`, choose simpler names for the elements we want to use, and combine date and time fields into a single `modifiedAt` timestamp in ISO 8601 format. - For the `Flights` entity we also flatten data from associations directly into the `Flights` consumption view. This is another [denormalization](#using-denormalized-views) to make life easier for us in the xtravels app. @@ -656,7 +656,7 @@ Noteworthy aspects here are: -### Associations to Remote +### Associations With consumption views in place, you can now reference them from your models _as if they were local_, creating mashups of imported and local definitions. @@ -694,7 +694,7 @@ Extensions to remote entities, as shown above, are only possible for elements wh ::: -### Field Constraints +### Constraints ::: code-group ```cds :line-numbers=44 [srv/travel-constraints.cds] @@ -712,7 +712,7 @@ annotate TravelService.Bookings with { ... - Line 46 – Adds a constraint to the _Flight.date_ element to ensure that the flight date of a booked _Flight_ falls within the travel period of the associated _Travel_. -### Serving to Fiori UIs +### Serving UIs ::: code-group ```cds :line-numbers=1 [srv/travel-service.cds] @@ -785,16 +785,16 @@ With mashed up models, you can run applications in _'airplane mode'_ without ups cds watch ``` ```zsh + [cds] - mocking sap.capire.s4.business-partner { + at: [ '/odata/v4/s4-business-partner' ], + decl: 's4/external/API_BUSINESS_PARTNER.csn:7' + } + ```zsh [cds] - mocking sap.capire.flights.data { at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], decl: 'xflights/apis/data-service/services.csn:3' } ``` - ```zsh - [cds] - mocking S4BusinessPartnerService { - at: [ '/odata/v4/s4-business-partner' ], - decl: 's4/external/API_BUSINESS_PARTNER.csn:7' - } ``` 2. Open the Fiori UI in the browser -> it displays data from both, local and imported entities, seamlessly integrated as shown in the screenshot below (the data highlighted in green is mocked data from `@capire/s4`). @@ -814,20 +814,20 @@ While everything just works nicely when mocked in-process and with a shared in-m 1. First run these commands **in two separate terminals**: - ```shell - cds mock apis/capire/s4.cds - ``` - ```shell + ```shell :line-numbers=1 cds mock apis/capire/xflights.cds ``` + ```shell :line-numbers=2 + cds mock apis/capire/s4.cds + ``` 2. Start the xtravels server as usual **in a third terminal**, and note that it now _connects_ to the other services instead of mocking them: - ```shell + ```shell :line-numbers=3 cds watch ``` ```zsh - [cds] - connect to S4BusinessPartnerService > odata { + [cds] - connect to sap.capire.s4.business-partner > odata { url: 'http://localhost:54476/odata/v4/s4-business-partner' } ``` @@ -859,124 +859,458 @@ It all starts with connecting to remote services, which we do like that in the x ::: code-group ```js :line-numbers=21 [srv/travel-service.js] +const s4 = await cds.connect.to ('sap.capire.s4.business-partner') const xflights = await cds.connect.to ('sap.capire.flights.data') -const s4 = await cds.connect.to ('S4BusinessPartnerService') ``` ::: -The `cds.connect` functions used here is the common way to address service instances, that is commonly used for and works the same way for both, local as well as remote services: +The `cds.connect.to()` function used here is the single common way to address service instances. It's used for and works the same way for both, local as well as remote services: - for **local** services, it returns the local service providers – i.e., instances of [`cds.ApplicationService`](../../node.js/app-services), or your application-specific subclases thereof. + - for **remote** services, it returns a remote service proxy – i.e., instances of [`cds.RemoteService`](../../node.js/remote-services), generically constructed by the client libs. -- **both** inherit from the [`cds.Service`](../../node.js/core-services) base class, which constitutes the uniform programming interface for consuming CAP services – agnostic to underlying protocols, and agnostic to whether its local or remote at all. ![Diagram illustrating CAP-level service integration showing two scenarios: Local services where Consumer connects to Service via CQL, and Remote services where Consumer connects to Proxy via CQL, Proxy connects to Protocol Adapter via OData, and Protocol Adapter connects to Service via CQL. ](assets/remoting.drawio.svg) +> [!tip] Agnostic to Location and Protocol +> Always use `cds.connect.to()` to connect to both local and remote services. Both inherit from the [`cds.Service`](../../node.js/core-services) base class, which constitutes the uniform interface for consuming CAP services – in turn agnostic to underlying protocols, and agnostic to whether its local or remote at all. + + ### Uniform, Agnostic APIs -The uniform, agnostic programming interface offered through [`cds.Service`](../../node.js/core-services) is centered around these methods: +The uniform and protocol-agnostic programming interface offered through [`cds.Service`](../../node.js/core-services) is centered around these methods: +- [`cds.connect.to ()`](../../node.js/cds-connect) → connects to remote services, as shown above. +- [`srv.run ()`](../../node.js/core-services#srv-run-query) → executes advanced, deep queries with remote services. - [`srv.send ()`](../../node.js/core-services#srv-send-request) → synchronous communication, for all kinds of services. - [`srv.emit ()`](../../node.js/core-services#srv-emit-event) → asynchronous communication, via messaging middlewares. -- [`srv.run ()`](../../node.js/core-services#srv-run-query) → execute CRUD queries with services that support that, like CAP services, OData services, or GraphQL services. +- [`srv.on ()`](../../node.js/core-services#srv-on-event) → subscribe event handlers to events from other services. -Here are some typical usages found in xtravels: +Here are some typical usages found in the xflights/xtravels sample: -```js -await xflights.send ('POST','BookingCreated', { flight, date, seats }) -await xflights.emit ('FlightsUpdated', { flight, date, free_seats }) +```js :line-numbers=1 await xflights.run (SELECT.from`Flights`.where`modifiedAt > ${latest}`) +await xflights.send ('POST','BookingCreated', { flight, date, seats }) +await this.emit ('Flights.Updated', { flight, date, free_seats }) // this = xflights service +xflights.on ('Flights.Updated', async msg => { ... }) ``` +- Line 1 – queries the xflights service for updated flights since the last sync +- Line 2 – calls a custom action of the xflights service (synchronously). +- Line 3 – emits asynchronous events from the xflights service. +- Line 4 – subscribes an event handler to events from the xflights service. -The querying API is the most powerful and closest to the use cases of data-centric business applications. +The [`srv.send()`](../../node.js/core-services#srv-send-request) method – and its [_REST-style_ derivatives](../../node.js/core-services#rest-style-api) – is the most flexible option, as it allows to send all kinds of requests to all kinds of services – including non-CAP services, and non-OData services, down to very technical services, for which no API schema might exist at all. - +The, [`srv.emit()`](../../node.js/core-services#srv-emit-event) method – with [`srv.on()`](../../node.js/core-services#srv-on-event) on subscribers' side – promotes asynchronous communication via events, which is most recommended for reasons of decoupling and scalability. It requires the target service to be connected via a messaging middleware, though. +The [`srv.run()`](../../node.js/core-services#srv-run-query) method – and its [_CRUD-style_ derivatives](../../node.js/core-services#crud-style-api) – is the most powerful option, and closest to the use cases of data-centric business applications. It requires the target service to support querying, though, like CAP application services, OData services, or GraphQL services. -### Querying Remote Data +> [!tip] Choosing the Right Method +> Choose the method that best fits your use case and the capabilities of the target service. Prefer `srv.run()` for its power and conceptual expressiveness with data-centric operations. Consider `srv.emit()` for decoupled, asynchronous communication whenever possible. Retreat to `srv.send()` for maximum flexibility only when needed. -> [!tip] CAP-level Querying -> agnostic to databases & protocols -> We work with **database-agnostic** and **protocol-agnostic** [CQL queries](../../cds/cql) both for interacting with the local database as well as for querying remote services. In effect, we got a fully generic solution for replication, i.e., it works for **_any_** remote service that supports OData, or HCQL. +> [!tip] Staying at CAP Level +> Always stay at CAP level when integrating services, using the uniform and protocol-agnostic [_Core Service APIs_](../../node.js/core-services) outlined above, combined with [_CQL_](../../cds/cql) as CAP's universal query language. This allows CAP to automate things like protocol translations, data federation, resilience for you, as well as mocking services out of the box, thereby promoting fast inner loops. Only retreat to lower levels when absolutely necessary. +### Testing with `cds repl` -### Delegating Queries +We can use `cds repl` to experiment the options to send requests and queries to remote services interactively. Do so as follows... -Value helps are common use cases where delegation of requests is needed, which we implemented like this in `srv/travel-service.js` for the `Customers` entity: +From within the xtravels project's root folder `cap/samples/xtravels`, start by mocking the remote services in separate terminals, then start xtravels server within `cds repl` in a third terminal: -::: code-group -```js :line-numbers=24 [srv/travel-service.js] -const s4 = await cds.connect.to ('S4BusinessPartnerService') -this.on ('READ', Customers, req => s4.run (req.query)) +```shell :line-numbers=1 +cds mock apis/capire/xflights.cds +``` +```shell :line-numbers=2 +cds mock apis/capire/s4.cds +``` +```shell :line-numbers=3 +cds repl ./ +``` + +Within the REPL, connect to local and remote services: + +```js +const TravelService = await cds.connect.to ('TravelService') +const xflights = await cds.connect.to ('sap.capire.flights.data') +const s4 = await cds.connect.to ('sap.capire.s4.business-partner') +``` + +Read data directly from the remote `A_BusinessPartner` entity. +```js +await s4.run (SELECT.from`A_BusinessPartner`.limit (3)) +await s4.read`A_BusinessPartner`.limit (3) // shorthand // [!code focus] +``` +> The variant on line 2 is a convenient shorthand for the one on line 1. + +::: details See results output ... +```zsh +=> [ + { + BusinessPartner: '000001', + PersonFullName: 'Mrs. Theresia Buchholm', + LastChangeDate: '2024-01-19', + LastChangeTime: '21:48:32', + BusinessPartnerCategory: '1' + }, + { + BusinessPartner: '000002', + PersonFullName: 'Mr. Johannes Buchholm', + LastChangeDate: '2024-01-08', + LastChangeTime: '11:22:01', + BusinessPartnerCategory: '1' + }, + { + BusinessPartner: '000003', + PersonFullName: 'Mr. James Buchholm', + LastChangeDate: '2022-11-04', + LastChangeTime: '15:27:46', + BusinessPartnerCategory: '1' + } +] +``` +::: + +Read the same data via the `s4.capire.s4.Customers` consumption view: +```js +const { Customers } = cds.entities ('sap.capire.s4') +await s4.read (Customers) .limit (3) // [!code focus] +``` +::: details See results output ... +```zsh +=> [ + { ID: '000001', Name: 'Mrs. Theresia Buchholm', modifiedAt: '2024-01-19' }, + { ID: '000002', Name: 'Mr. Johannes Buchholm', modifiedAt: '2024-01-08' }, + { ID: '000003', Name: 'Mr. James Buchholm', modifiedAt: '2022-11-04' } +] +``` +Note how field names and structure are adapted to our domain. +::: + +::: details See OData requests ... +Watch the log output in the second terminal to see the translated OData requests being received by the remote service, for example: + +```zsh +[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { + '$top': '3' +} +``` +```zsh +[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { + '$select': 'BusinessPartner,PersonFullName,LastChangeDate', + '$top': '3' +} +``` +::: + +CRUD some data into remote `A_BusinessPartner` entity, still via the `s4.capire.s4.Customers` consumption view: +```js +await s4.insert ({ ID: '123', Name: 'Sherlock' }) .into (Customers) +await s4.create (Customers, { ID: '456', Name: 'Holmes' }) +await s4.read`ID, Name` .from (Customers) .where`length(ID) <= 3` +await s4.update (Customers,'123') .with ({ modifiedAt: '2026-01-01' }) +await s4.delete (Customers,'123') +await s4.delete (Customers) .where`ID = ${'456'}` +``` + +> [!tip] Always use Consumption Views +> Even when accessing remote services directly, always prefer doing so via consumption views as shown above. They map the remote definitions to your domain, and allow CAP to automatically translate queries accordingly. This includes renaming, flattening, restructuring, as well as filtering out unnecessary data. + + +### Modifying CQNs + +Queries in CAP are represented as first-class [CQN](../../cds/cqn) objects under the hood. When querying remote services, we can inspect and modify those query objects prior to forwarding them to target services for execution. + +Let's try that out in `cds repl`, which we [started before](#testing-with-cds-repl). + +1. Construct and inspect an example of an inbound query: + +```js +q1 = SELECT`ID, Name`.from (Customers) .where`length(ID) <= 3` +``` +```zsh +=> cds.ql { + SELECT: { + from: { ref: [ 'sap.capire.s4.Customers' ] }, + columns: [ + { ref: [ 'ID' ] }, + { ref: [ 'Name' ] } + ], + where: [ + { func:'length', args: [ {ref:['ID']} ] }, '<=', { val:3 } + ], + } +} +``` + +2. Create a clone of that query to modify it without changing the original one: +```js +q2 = cds.ql.clone (q1) // get a clone to keep q1 intact +``` + +3. Modify our cloned query as needed. For example, let's replace the existing where clause, and add an order by clause like this: +```js +q2.SELECT.where = cds.ql.predicate`contains (Name,'Astrid')` +q2.orderBy `Name asc` +``` +```zsh +=> cds.ql { + SELECT: { // ... as before ..., + where: [ + { func: 'contains', args: [ {ref:['Name']}, {val:'Astrid'} ] } # [!code focus] + ], + orderBy: [ {ref:['Name'], sort: 'asc' } ] # [!code focus] + }, +} +``` + +4. Finally forward / run the modified query: +```js +await s4.run (q2) ``` +::: details See results output ... +```zsh +=> [ + { ID: '000096', Name: 'Mrs. Astrid Detemple' }, + { ID: '000037', Name: 'Mrs. Astrid Gutenberg' }, + { ID: '000164', Name: 'Mrs. Astrid Hoffen' }, + { ID: '000399', Name: 'Mrs. Astrid Kramer' }, + { ID: '000087', Name: 'Mrs. Astrid Martin' }, + { ID: '000527', Name: 'Mrs. Astrid Sommer' }, + { ID: '000203', Name: 'Mrs. Astrid Waldmann' } +] +``` +::: + +> [!tip] Powerful Query Adaptation +> Modifying queries prior to forwarding them to remote services is a powerful technique to implement advanced integration scenarios. For example, you can adapt queries to the capabilities of target services, implement custom filtering, paging, or sorting logic, or even split and merge queries across multiple services. + +::: details First-Class Query Objects +On a side note: We leverage key principles of [_first-class objects_](https://google.com/search?q=first+class+objects+programming) here, as known from functional programming and dynamic languages: As queries are represented as first-class CQN objects, we can construct and manipulate them programmatically at runtime, pass them as arguments, and return them from functions. And, not the least, this opens the doors for things like higher-order queries, query delegation – e.g. push down to databases –, and late materialization. ::: -The event handler intercepts all `READ` requests to the `Customers` entity, and simply delegates the incoming query as-is to the connected S/4 service (line 26). +> [!warning] Always Clone Before Modifying +> As always, great power comes with great responsibility: Ensure to [`cds.ql.clone`](../../node.js/cds-ql#cds-ql-clone) CQNs before modifying them, as they are shared across the entire request processing pipeline. Failing to do so may lead to unexpected side effects and hard-to-debug issues. And CAP runtimes can only optimize for _immutable_ CQNs. + -Noteworthy: The incoming request refers to: +### Data Federation -- the `TravelService.Customers` entity, which is a view on - - the `Customers` entity, which in turn is a consumption view on - - the remote `A_BusinessPartner` entity. +There are many scenarios where data from remote services needs to be in close access locally. For example, in the xtravels app we want to display lists of flight details alongside bookings in Fiori UIs. This requires joining data from the local `Bookings` entity with data from the remote `Flights` entity. -The CAP runtime is aware of that and automatically translates the query into a query to the underlying entity, known to the remote service. Thereby, all select clauses, and where clauses, are fully preserved, translated, and delegated. +Relying on live calls to remote services per row is clearly not an option. Instead, we'd rather ensure that data required in close access is really available locally, so it can be joined with own data using SQL JOINs. This is what _data federation_ is all about. -### Navigation & Expands -### Calling Remote Actions +#### Basic Implementation -In addition to replication, there are also use cases where we need to send requests directly to the remote services. For example, when creating new bookings, we need to inform the external xflights service so it can reduce its records of free seats. This is accomplished by the following code in `srv/travel-service.js`: +Following would be a basic implementation for replicating flights data from the remote xflights service into local database tables of the xtravels app: + +1. Annotate your consumption _views_ with `@cds.persistence.table` to turn them into _tables_ to persist replicated data locally: ::: code-group -```js :line-numbers=28 [srv/travel-service.js] -const xflights = await cds.connect.to ('sap.capire.flights.data') // [!code focus] -this.after ('SAVE', Travels, ({ Bookings=[] }) => Promise.all ( - Bookings.map (({ Flight_ID, Flight_date }) => { - return xflights.BookingCreated (Flight_ID, Flight_date) // [!code focus] - }) -)) +```cds [db/schema.cds] +// turn into table to persist replicated data +annotate x.Flights with @cds.persistence.table; ``` ::: -### Sending Arbitratry Requests +2. Implement logic to replicate updated data, for example like that: +```js [srv/data-replication.js] +const xflight = await cds.connect.to ('sap.capire.flights.data') +const {Flights} = cds.entities ('sap.capire.xflights') +let {latest} = await SELECT.one`max(modifiedAt) as latest`.from (Flights) +let touched = await xflight.read (Flights).where`modifiedAt > ${latest||0}` +if (touched.length) await UPSERT (touched).into (Flights) +``` +#### Generic Implementation -### Events-based Integration +While the above is a valid implementation for data replication, it is specific to the `Flights` entity, which means we would need to write similar code for each entity we want to replicate. Therefore, we actually implemented a more generic solution for data federation in xtravels, which automatically kicks in on any entity tagged with the `@federated` annotated, which we already used in our [consumption views](#consumption-views): -#### Emitting Events +::: code-group +```cds [apis/capire/xflights.cds] +@federated entity Flights as projection on x.Flights { ... } +@federated entity Supplements as projection on x.Supplements { ... } +``` +```cds [apis/capire/s4.cds] +@federated entity Customers as projection on S4.A_BusinessPartner { ... } +``` +::: + +Besides the advantages of reusability and maintainability, this also allows us to easily add new entities for data federation just by annotating them with `@federated`, without the need to write any custom code at all. The projections defined in such _`@federated` consumption views_ also declare exactly what data needs to be in close access, and what not, thereby avoiding overfetching. + +Learn more about that generic solution in the [_CAP-level Data Federation_](data-federation) guide. -#### Subscribing to Events +> [!tip] When to Use Data Federation +> Data federation is essential when remote data is needed in close access for joins with local data, filtering, or sorting operations. It drastically improves read performance and reduces latency, as well as overall load. It also increases resilience and high availability by reducing dependencies on other services. -### Generic Integration Logic -### Generic Data Federation -Displaying external data in lists commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on server, and a nightmare regarding resilience. Instead, we somehow need to ensure that all required data is available locally, so that it can be accessed fast and reliably by UIs, using good old SQL JOINs. +### Delegation -In the [`@capire/xtravels`](https://github.com/capire/xtravels) app we accomplished that with a simple, yet quite effective generic data replication solution. In essence that implementation boils down to these lines of querying remote services: +Even with [data federation](#data-federation) in place, there are still several scenarios where we need to reach out to remote services on demand. Value helps are a prime example for that; for example, to select `Customers` from a drop-down list when creating new travels. Although we could serve that from replicated data as well, this would require replicating **_all_** relevant customer data locally, which is often overkill. + +The code below shows how we simply delegate value help requests for `Customers` in xtravels to the connected S/4 service: ::: code-group -```js [srv/data-federation.js] -const remote = await cds.connect.to (each.remote) +```js [srv/travel-service.js] +this.on ('READ', Customers, req => s4.run (req.query)) ``` ::: -```js - let { latest } = await SELECT.one `max(modifiedAt) as latest` .from (entity) - let rows = await remote.run ( - SELECT.from (entity) .where `modifiedAt > ${latest}` - ) - if (rows.length) await UPSERT (rows) .into (entity); else return + +The event handler intercepts all direct `READ` requests to the `Customers` entity, and just forwards the query as-is to the connected S/4 service. + +::: details Try this in `cds repl` ... + +```shell :line-numbers=1 +cds mock apis/capire/s4.cds +``` +```shell :line-numbers=2 +cds repl ./ +``` + +Within the `cds repl` session in the second terminal, run this: + +```js +await TravelService.read`ID, Name`.from`Customers`.limit(3) +``` + +This issues a `READ` request to the local `TravelService.Customers` entity, which is intercepted by the above event handler, and delegated to the remote S/4 service. The result comes back translated to the structure of the `Customers` consumption view: + +```zsh +=> [ + { ID: '000001', Name: 'Mrs. Theresia Buchholm' }, + { ID: '000002', Name: 'Mr. Johannes Buchholm' }, + { ID: '000003', Name: 'Mr. James Buchholm' } +] +``` + +See the log output of in the first terminal where we `cds mock`ed the S/4 service to observe the translated OData request being received by the remote service: + +```zsh +[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { + '$select': 'BusinessPartner,PersonFullName', + '$top': '3' } ``` +::: + + +#### Automatic Query Translation + +Note that for the handler above, incoming requests always refer to: + +- the [`TravelService.Customers`](#serving-uis) entity – which is a view on: + - the [`sap.capire.s4.Customers`](#consumption-views) entity – which in turn is a view on: + - the [`A_BusinessPartner`](#odata-apis) remote entity. + +In effect, we are delegating a query to the S/4 service, which refers to an entity actually not known to that remote service. How could that work at all? + +It works because we fuelled the CAP runtime with CDS models, so the generic handlers detect such situations, and automatically translate delegated queries into valid queries targeted to underlying remote entities – i.e. `A_BusinessPartner` in our example. When doing so, all column references in select clauses, where clauses, etc., are translated and delegated as well, and the results' structure transformed back to that of the original target – i.e., `TravelService.Customers` above. + + + +### Navigation + +Automatic translation of delegated queries, [as shown above](#automatic-query-translation), has limitations when navigations and expands are involved. +Let's explore those limitations and how to deal with them on the example of the _Bookings -> Flights_ association. + +Try running the following query in `cds repl`, with the xflights service mocked in a separate process, as before: + +```js +const { Bookings } = cds.entities ('sap.capire.travels') +``` +```js +await SELECT.from (Bookings) .where`Flight.origin like '%Ken%'` +``` + +- With data federation in place, this would work (if all flight data had been replicated). +- Without data federation, though, this would fail with a runtime error. -[Learn more about CAP-level Data Federation in the dedicated guide.](data-federation){.learn-more} +For that to really work cross-service – that is, without data federation, or bypassing it – we'd have to split the query, manually dispatch the parts to involved services, and correlate results back, for example, like this: + +```js +await SELECT.from (Bookings) .where`Flight.ID in ${( + await xflights.read`ID`.from`Flights`.where`origin.name like '%Ken%'` +).map (f => f.ID)}` +``` +::: details +The above can also be written like that, of course: +```js +const flights = await xflights.read`ID`.from`Flights`.where`origin.name like '%Ken%'` +const flightIDs = flights.map (f => f.ID) +await SELECT.from (Bookings) .where`Flight.ID in ${flightIDs}` +``` +::: + +> [!tip] What is 'Navigation'? +> The term 'navigation' commonly refers to traversing associations between entities in queries. In CAP, this is typically expressed using [path expressions](../../cds/cql#path-expressions) along (chains of) associations – e.g., `flight.origin.name` –, which can show up in all query clauses (_select_, _from_, _where_, _order by_, and _group by_). + + +### Expands + +Similar to navigations, expands across associations also require special handling when we cannot serve them from federated data. Try running the following query in `cds repl`, with the xflights service mocked in a separate process, as before: + +```js +await SELECT.from (Bookings) .columns`{ + Flight { ID, date, destination } +}` .where`exists Flight` .limit(3) +``` +::: details See results output ... +```zsh +=> [ + { Flight: { ID: 'SW1537', date: '2023-08-04', destination: 'Miami International Airport' } }, + { Flight: { ID: 'SW1537', date: '2023-08-04', destination: 'Miami International Airport' } }, + { Flight: { ID: 'SW1537', date: '2023-08-04', destination: 'Miami International Airport' } } +] +``` +::: + +To achieve the same without data federation, we'd have to manually fetch nested data from the remote service for each row, and fill it into the outer results, for example like this: + +```js +await SELECT.from(Bookings).columns`Flight_ID, Flight_date`.limit(3) +.then (all => Promise.all (all.map (async b => ({ + Flight: await xflights.read`ID, date, destination.name as destination` + .from`Flights`.where`ID = ${b.Flight_ID} and date = ${b.Flight_date}` +})))) +``` + +We can do similar things for expands across associations from remote data to local ones, for example like that: + +```js +const { Customers } = cds.entities ('sap.capire.s4') +const { Travels } = cds.entities ('sap.capire.travels') +await s4.read(Customers).columns`{ ID, Name }` +.then (all => Promise.all (all.map (async c => Object.assign (c, { + Travels: await SELECT`ID`.from(Travels).where`Customer.ID = ${c.ID}` +})))) +``` + + + +### Outboxed Emits + +Use [_transactional outbox_](../../guides/events/event-queues) for write operations, which you want to take place reliably, but don't need the results in your current execution context. As in this event hander example: + +::: code-group +```js :line-numbers=30 [srv/travel-service.js] +const xflights_ = cds.outboxed (xflights) // [!code focus] +this.after ('SAVE', Travels, ({ Bookings=[] }) => { + return Promise.all (Bookings.map (booking => { + let { Flight_ID: flight, Flight_date: date } = booking + return xflights_.send ('POST', 'BookingCreated', { flight, date }) // [!code focus] + })) +}) +``` +::: -### On-demand Replication +- Line 29 – We create an _outboxed_ version of the connected xflights service. +- Line 34 – We use that outboxed service to send events to the xflights service. +This creates ultimate resilience, as the events are stored in a local outbox table within the same transaction as the `SAVE` operation on `Travels`. A separate process then takes care of reliably forwarding those events to the xflights service, retrying in case of failures, etc. -### Resilience Out of the Box ## Learn More @@ -985,4 +1319,6 @@ const remote = await cds.connect.to (each.remote) - [Inner Loop Development](inner-loops) – Understand how to develop and test integrated applications efficiently using CAP's inner loop development features. -- [Service Bindings](service-bindings) – Learn how to configure connections to external services in a declarative way using service bindings. + diff --git a/guides/integration/data-federation.md b/guides/integration/data-federation.md index 32bdabb655..cf0ecda0cc 100644 --- a/guides/integration/data-federation.md +++ b/guides/integration/data-federation.md @@ -25,7 +25,7 @@ For example, we saw the need for that already in the [CAP-level Service Integrat cds watch ``` ```zsh - [cds] - connect to S4BusinessPartnerService > odata { + [cds] - connect to sap.capire.s4.business-partner > odata { url: 'http://localhost:54476/odata/v4/s4-business-partner' } ``` diff --git a/guides/integration/service-bindings.md b/guides/integration/service-bindings.md index 725329248b..f6eac5bdcc 100644 --- a/guides/integration/service-bindings.md +++ b/guides/integration/service-bindings.md @@ -1,83 +1,107 @@ - - # Service Bindings -Service bindings configure connectivity to remote services. They are injected respective connection points configure in CAP through `cds.requires.` configurations, which are defined like this: - -```tsx -cds.requires. = { - kind?: 'odata' | 'odata-v2' | 'rest' | 'hcql' | 'graphql' , - model?: '', - credentials: { - url?: '', - username?: '', - password?: '', - token?: '', - } -} -``` +Service bindings configure connectivity to required services. CAP runtimes use them to connect to these services at runtime, using credentials injected from the binding environment, such as `url`, and authentication details. -They are added to consuming applications' _package.json_ files, either manually, or automatically when using `cds import` as we saw earlier. -## CAP Node.js +[[toc]] -Service bindings configure connectivity to remote services. They are added to consuming applications' _package.json_ files, either manually, or automatically when using `cds import` as we saw earlier. -Service bindings have this general form: -```sh -cds.requires. = { kind: '' , ... } -``` +## Declaring Required Services + +Required services are declared via `cds.requires` configuration in CAP Node.js. Such configurations are typically placed in an application's _package.json_ file, for example like this in case of [_@capire/bookstore/package.json_](https://github.com/capire/bookstore/blob/main/package.json) : ::: code-group ```json [package.json] -{ ... - "cds": { - "requires": { - "API_BUSINESS_PARTNER": { - "kind": "odata-v2", - "model": "srv/external/API_BUSINESS_PARTNER" - } - } +"cds": { + "requires": { + "ReviewsService": { "kind": "odata" }, + "OrdersService": { "kind": "odata" } } } ``` ::: -## CAP Java +The key names under `cds.requires` (here: `ReviewsService` and `OrdersService`) correspond to the names of the required services, used when calling `cds.connect.to()` in service implementations, for example: -You need to configure remote services in Spring Boot's _application.yaml_: -::: code-group - -```yaml [srv/src/main/resources/application.yaml] -spring: - config.activate.on-profile: cloud -cds: - remote.services: - API_BUSINESS_PARTNER: - type: "odata-v2" +```js +const ReviewsService = await cds.connect.to ('ReviewsService') ``` -::: -To work with remote services, add the following dependency to your Maven project: - -```xml - - com.sap.cds - cds-feature-remote-odata - runtime - +Configurations for required services can also be provided in a plug & play manner by CAP plugins. For example, the [_@capire/xtravels_](https://github.com/capire/xtravels) sample application automatically requires two services, provided by the CAP plugins [_@capire/s4_](https://github.com/capire/s4) and [_@capire/xflights_](https://github.com/capire/xflights/blob/main/apis/data-service). + +[Learn more about that in the _CAP-level Service Integration_ guide.](calesi#packaged-apis) {.learn-more} + + + +### Configuration Properties + +| Property | Description | +|---------------|------------------------------------------------------------------| +| `kind` | (mandatory) protocol to use -> one of `odata`, `rest`, or `hcql` | +| `impl` | custom service implementation to use | +| `model` | a model to load automatically | +| `service` | name of the service definition (default: same as key) | +| `credentials` | usually filled from binding environment, as outlined below | + +- Find detailed documentation about these properties in the [CAP Node.js documentation](../../node.js/cds-connect#cds-env-requires). + + +### Inspect using `cds env` + +You can inspect the effective configurations of declared required services using the `cds env` command, including those from CAP plugins. For example, running this command in the _@capire/xtravels_ project yields the output below: + +```sh +cds env requires +``` +```zsh +'sap.capire.flights.data': { + kind: '*' +}, ``` +```zsh +'sap.capire.s4.business-partner': { + kind: 'odata-v2', + impl: '@sap/cds/srv/remote-service.js', + service: 'API_BUSINESS_PARTNER' +}, +``` + +Add the `-b` flag to see the full configurations including credentials injected from the binding environment (if any). For example, run these commands from the _xtravels_ project root in three different terminals: -[Learn about all `cds.remote.services` configuration possibilities.](../../java/developing-applications/properties){.learn-more} +```shell :line-numbers=1 +cds mock apis/capire/xflights.cds +``` +```shell :line-numbers=2 +cds mock apis/capire/s4.cds +``` +```shell :line-numbers=3 +cds env requires -b +``` +```zsh +'sap.capire.flights.data': { + kind: 'hcql', + impl: '@sap/cds/srv/remote-service.js', + credentials: { url: 'http://localhost:51441/hcql/data' } +}, +``` +```zsh +'sap.capire.s4.business-partner': { + kind: 'odata-v2', + impl: '@sap/cds/srv/remote-service.js', + service: 'API_BUSINESS_PARTNER', + credentials: { url: 'http://localhost:51438/odata/v4/business-partner' } +}, +``` -## Local Binding Environment +## Binding Environments -## Cloud Foundry +### Local Development +### Cloud Foundry -## Kyma / K8s +### Kyma / K8s ## Destinations diff --git a/guides/services/consuming-services--.md b/guides/services/consuming-services--.md index cdf501227e..ef033b6430 100644 --- a/guides/services/consuming-services--.md +++ b/guides/services/consuming-services--.md @@ -57,27 +57,7 @@ For example: [Try out the example application.](https://github.com/SAP-samples/cloud-cap-risk-management/tree/ext-service-s4hc-suppliers-ui-java){.learn-more} - -### Execute Queries with Java - -You can use dependency injection to get access to the remote service: - -```java -@Autowired -@Qualifier(ApiBusinessPartner_.CDS_NAME) -CqnService bupa; -``` - -Then execute your queries using the [Querying API](../../java/working-with-cql/query-execution): - -```java -CqnSelect select = Select.from(ABusinessPartner_.class).limit(100); -List businessPartner = bupa.run(select).listOf(ABusinessPartner.class); -``` - -[Learn more about querying API examples.](https://github.com/SAP-samples/cloud-cap-risk-management/blob/ext-service-s4hc-suppliers-ui/test/odata-examples.js){.learn-more} - -### Expose Remote Services +### Delegation with Java Write a handler function to delegate a query to the remote service and run the incoming query on the external service. @@ -111,68 +91,6 @@ public class RiskServiceHandler implements EventHandler { This works when accessing the entity directly. Additional work is required to support [navigation](#handle-navigations-across-local-and-remote-entities) and [expands](#handle-expands-across-local-and-remote-entities) from or to a remote entity. -### Expose Remote Services with Associations - -It's possible to expose associations of a remote service entity. You can adjust the [projection for the association target](#model-projections) and change the name of the association: - -```cds -using { API_BUSINESS_PARTNER as bupa } from '../srv/external/API_BUSINESS_PARTNER'; - -extend service RiskService with { - entity Suppliers as projection on bupa.A_BusinessPartner { - key BusinessPartner as ID, - BusinessPartnerFullName as fullName, - BusinessPartnerIsBlocked as isBlocked, - to_BusinessPartnerAddress as addresses: redirected to SupplierAddresses - } - - entity SupplierAddresses as projection on bupa.A_BusinessPartnerAddress { - BusinessPartner as bupaID, - AddressID as ID, - CityName as city, - StreetName as street, - County as county - } -} -``` - -As long as the association is only resolved using expands (for example `.../risk/Suppliers?$expand=addresses`), a handler for the __source entity__ is sufficient: - -```js -this.on('READ', 'Suppliers', req => { - return bupa.run(req.query); -}); -``` - -As usual, you can put two handlers into one handler matching both entities: - -```js -this.on('READ', ['Suppliers', 'SupplierAddresses'], req => { - return bupa.run(req.query); -}); -``` - -### Handle Mashups with Remote Services - -Depending on how the service is accessed, you need to support direct requests, navigation, or expands. CAP resolves those three request types only for service entities that are served from the database. When crossing the boundary between database and remote sourced entities, you need to take care of those requests. - -The list of [required implementations for mashups](#required-implementations-for-mashups) explains the different combinations. - -### 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. - -| **Request** | **Example** | **Implementation** | -| --------------------------------------------------------------------- | ---------------------------------------- | ----------------------------------------------------------------- | -| Local (including navigations and expands) | `/service/risks/Risks` | Handled by CAP | -| Local: Expand remote | `/service/risks/Risks?$expand=supplier` | Delegate query w/o expand to local service and implement expand. | -| Local: Navigate to remote | `/service/risks(...)/supplier` | Implement navigation and delegate query target to remote service. | -| Remote (including navigations and expands to the same remote service) | `/service/risks/Suppliers` | Delegate query to remote service | -| Remote: Expand local | `/service/risks/Suppliers?$expand=risks` | Delegate query w/o expand to remote service and implement expand. | -| Remote: Navigate to local | `/service/Suppliers(...)/risks` | Implement navigation, delegate query for target to local service | - - - ## Connect and Deploy From 6f7b2e26c5a789b12ecc73e91271294f5ecf5e7c Mon Sep 17 00:00:00 2001 From: Tim Schulze-Hartung <108271660+tim-sh@users.noreply.github.com> Date: Mon, 2 Feb 2026 09:01:50 +0100 Subject: [PATCH 383/439] Update CDS grammar (#2353) --- .vitepress/languages/cds.tmLanguage.json | 33 +++++++++++++++++------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/.vitepress/languages/cds.tmLanguage.json b/.vitepress/languages/cds.tmLanguage.json index 4a6706a13a..21b90211e0 100644 --- a/.vitepress/languages/cds.tmLanguage.json +++ b/.vitepress/languages/cds.tmLanguage.json @@ -206,8 +206,7 @@ "name": "constant.language.cds" }, { - "match": "(? Date: Mon, 2 Feb 2026 10:18:19 +0100 Subject: [PATCH 384/439] Fix anchor links --- guides/databases/cap-level-dbs.md | 5 +- guides/integration/calesi.md | 192 +++++++++++++++--------------- 2 files changed, 99 insertions(+), 98 deletions(-) diff --git a/guides/databases/cap-level-dbs.md b/guides/databases/cap-level-dbs.md index f68d8691fd..656eeac85c 100644 --- a/guides/databases/cap-level-dbs.md +++ b/guides/databases/cap-level-dbs.md @@ -10,7 +10,7 @@ CAP supports a number of portable functions and operators in CQL. The compiler a When using CAP's mocked out-of-the-box database integration, these functions and operators are supported in the in-memory SQLite database used for development and testing. -#### TODO: +#### TODO: - Mocked by in-memory SQLite or H2 databases - With SAP HANA or PostgreSQL for production @@ -92,6 +92,7 @@ The compiler translates this operator to the best-possible equivalent in the tar ## Standard Functions +###### Portable Functions The following sections list standardized string, numeric, data/time, and aggregate functions supported by CAP, and guaranteed to work across all supported databases with feature parity. You can safely use these in CDS view definitions and runtime queries expressed in CQL. The compiler translates them to the best-possible database-specific native SQL equivalents. @@ -120,7 +121,7 @@ SELECT concat (firstName,' ',lastName) as fullName from Authors; ``` ```sql SELECT firstName || ' ' || lastName as fullName from Authors; -``` +``` > [!important] Indexes and Substring Details diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index 8da80839ae..1f889c5b84 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -24,7 +24,7 @@ Integrating remote services - from other applications, third-party services, or ## Introduction & Overview -### As If They Were Local +### As If They Were Local Service integration is much about consuming remote services from other applications, third-party services, or platform services. CAP greatly simplifies this by allowing to call remote services _as if they were local_. Let's see how this works: @@ -42,8 +42,8 @@ Service integration is much about consuming remote services from other applicati ``` ```js :line-numbers cats = await cds.connect.to ('http://localhost:4004/hcql/admin') - await cats.read `Authors { - ID, name, books { + await cats.read `Authors { + ID, name, books { ID, title, genre.name as genre } }` @@ -70,9 +70,9 @@ Remote CAP services can be consumed using the same high-level, uniform APIs as f > [!note] Model Free > -> Note that in the exercise above, the consumer side didn't even have any information about the service provider, except for the URL endpoint and protocols served, which it got from the service binding. In particular no API/service definitions at all – neither in *CDS*, *OData*, nor *OpenAPI*. +> Note that in the exercise above, the consumer side didn't even have any information about the service provider, except for the URL endpoint and protocols served, which it got from the service binding. In particular no API/service definitions at all – neither in *CDS*, *OData*, nor *OpenAPI*. -The remainder of this guide goes beyond such simple scenarios +The remainder of this guide goes beyond such simple scenarios and covers all the aspects of CAP-level service integration in detail. @@ -84,7 +84,7 @@ In this guide we'll use the _XTravels_ sample application as our running example - The [*@capire/xflights*](https://github.com/capire/xflights) service provides flight-related master data, such as *Flights*, *Airports*, *Airlines*, and *Supplements* (like extra luggage, meals, etc.). It exposes this data via a CAP service API. -- The [*@capire/xtravels*](https://github.com/capire/xtravels) application allows travel agents to plan travels on behalf of travellers, including bookings of flights. The application obtains *Customer* data from a SAP S/4HANA system, while it consumes *Flights*, *Airports*, and *Airlines* from *@capire/xflights*, as indicated by the green and blue areas in the screenshot below. +- The [*@capire/xtravels*](https://github.com/capire/xtravels) application allows travel agents to plan travels on behalf of travellers, including bookings of flights. The application obtains *Customer* data from a SAP S/4HANA system, while it consumes *Flights*, *Airports*, and *Airlines* from *@capire/xflights*, as indicated by the green and blue areas in the screenshot below. ![XTravels application interface showing a travel request form. The interface displays customer information including name, email, and address fields highlighted in green, sourced from S/4HANA. Below that, a flight booking section shows departure and arrival airports, dates, and times highlighted in blue, sourced from the XFlights service. The layout demonstrates data federation from multiple backend systems presented in a unified user interface. ](assets/xtravels-screenshot.png) @@ -94,7 +94,7 @@ The resulting entity-relationship model looks like that: ![Architecture diagram showing three systems: XFlights on the left containing Flights, Airlines, and Airports entities in light blue, XTravels in the center containing Travels, Bookings, and Supplements entities in darker blue, and S/4HANA on the right containing Customers entity in gray. Arrows connect Bookings to Flights, Travels to Customers, and Bookings to Supplements, illustrating data relationships between the systems in a federated service integration pattern. ](assets/xtravels-sample.drawio.svg) -From a service integration perspective, this sample mainly shows a data federation scenario, where the application consumes data from different upstream systems (XFlights and S/4HANA) – most frequently in a readonly fashion – to display it together with the application's local data. +From a service integration perspective, this sample mainly shows a data federation scenario, where the application consumes data from different upstream systems (XFlights and S/4HANA) – most frequently in a readonly fashion – to display it together with the application's local data. ### Workflow Overview @@ -118,7 +118,7 @@ git clone https://github.com/capire/xtravels ## Providing CAP-level APIs -In case of CAP service providers, as for [*@capire/xflights*](https://github.com/capire/xflights) in our [sample scenario](#the-xtravels-sample), you define [CAP services](../services/index) for all inbound interfaces, which includes (private) interfaces to your application's UIs, as well as public APIs to any other remote consumers. +In case of CAP service providers, as for [*@capire/xflights*](https://github.com/capire/xflights) in our [sample scenario](#the-xtravels-sample), you define [CAP services](../services/index) for all inbound interfaces, which includes (private) interfaces to your application's UIs, as well as public APIs to any other remote consumers. ### Defining Service APIs @@ -131,7 +131,7 @@ using sap.capire.flights as x from '../db/schema'; @odata @hcql service sap.capire.flights.data { @readonly entity Flights as projection on x.Flights {flights.*,*}; @readonly entity Airlines as projection on x.Airlines; - @readonly entity Airports as projection on x.Airports; + @readonly entity Airports as projection on x.Airports; } ``` ::: @@ -148,7 +148,7 @@ Let's have a closer look at the denormalized view for _Flights_, which basically @readonly entity Flights as projection on x.Flights { *, // all fields from Flights flight.{*} excluding {ID}, // all fields from FlightConnection - key flight.ID, // with flight ID preserved as key + key flight.ID, // with flight ID preserved as key key date, // with date preserved as key } excluding { flight }; // which we flattened above ``` @@ -168,7 +168,7 @@ Reason for this more complicated definition is that we need to preserve the prim Use `cds export` to generate APIs for given [service definitions](#defining-service-apis). For example, run that within the _cap/samples/xflights_ folder for the service definition we saw earlier, which would print some output as shown below: ```shell -cds export srv/data-service.cds +cds export srv/data-service.cds ``` ```log Exporting APIs to apis/data-service ... @@ -180,16 +180,16 @@ Exporting APIs to apis/data-service ... /done. ``` -By default, output goes to an `./apis/` subfolder, where `` is the `.cds` file basename. Use the `--to` option to specify a different output folder. +By default, output goes to an `./apis/` subfolder, where `` is the `.cds` file basename. Use the `--to` option to specify a different output folder. #### Exported Service Definitions -The key ingredient of the generated output is the `services.csn` file, which contains a cleansed, ***interface-only*** part of your service definition. It includes the _inferred elements signature_ of served entities but removes all projections to underlying entities and their dependencies. +The key ingredient of the generated output is the `services.csn` file, which contains a cleansed, ***interface-only*** part of your service definition. It includes the _inferred elements signature_ of served entities but removes all projections to underlying entities and their dependencies. To get an idea of the effect, run `cds export` in dry-run mode like this: ```shell -cds export srv/data-service.cds --dry +cds export srv/data-service.cds --dry ``` ```zsh Kept: 6 @@ -289,7 +289,7 @@ Skipped: 31 # [!code ++] In addition to the generated `services.csn` file, an `index.cds` file was added, which you can modify as needed. It won't be overridden on subsequent runs of `cds export`. -### Packaged APIs +### Packaged APIs The third generated file is `package.json`: @@ -315,7 +315,7 @@ The third generated file is `package.json`: You can modify this file. `cds export` won't overwrite your changes. In our xflights/xtravels sample, we changed the package name to `@capire/xflights-data`. > [!tip] Yet Another CAP Package (YACAP) -> The generated output is a complete CAP package. You can add additional files to the *./apis* subfolder: models in *.cds* files, data in *.csv* files, I18n bundles, or even *.js* or *.java* files with custom logic for consumers. +> The generated output is a complete CAP package. You can add additional files to the *./apis* subfolder: models in *.cds* files, data in *.csv* files, I18n bundles, or even *.js* or *.java* files with custom logic for consumers. @@ -398,7 +398,7 @@ As password you're using a Personal Access Token (classic) with `read:packages` ::: details Not using npm registries ... -Instead of publishing to npm registries we can also share packages any other way. For example we could create an archive that we upload to some marketplace like [*SAP Business Accelerator Hub*](https://api.sap.com), or team-internal ones. +Instead of publishing to npm registries we can also share packages any other way. For example we could create an archive that we upload to some marketplace like [*SAP Business Accelerator Hub*](https://api.sap.com), or team-internal ones. For Node.js we'd use `npm pack` to create installable archives, which would print some output with the last line telling us the filename of the created archive: @@ -417,7 +417,7 @@ capire-xflights-data-0.1.13.tgz > [!warning] > -> Not using package registries like *npm* or *Maven* also means you'll loose all their support for semver-based dependency management. +> Not using package registries like *npm* or *Maven* also means you'll loose all their support for semver-based dependency management. ::: @@ -430,7 +430,7 @@ capire-xflights-data-0.1.13.tgz -## Importing APIs +## Importing APIs On the consumer side, like [*@capire/xtravels*](https://github.com/capire/xtravels) in our [sample scenario](#the-xtravels-sample), we import packaged APIs as provided before using `npm add`, or other APIs from non-CAP sources using `cds import` as outlined below. @@ -469,10 +469,10 @@ You can also `cds import` APIs from other sources, such as OData APIs for custom ::: details Detailed steps through SAP Business Accelerator Hub ... - Open https://api.sap.com in your browser - Navigate to - \> [_SAP S/4HANA Cloud Public Edition_](https://api.sap.com/products/SAPS4HANACloud) + \> [_SAP S/4HANA Cloud Public Edition_](https://api.sap.com/products/SAPS4HANACloud) \> [_APIs_](https://api.sap.com/products/SAPS4HANACloud/apis) \> [_OData V2_](https://api.sap.com/products/SAPS4HANACloud/apis/ODATA) - - Find and open [_Business Partner (A2X)_](https://api.sap.com/api/API_BUSINESS_PARTNER/overview) + - Find and open [_Business Partner (A2X)_](https://api.sap.com/api/API_BUSINESS_PARTNER/overview) - Switch to the *API Specification* subtab. - Click the download icon next to *OData EDMX* to download the `.edmx` file. ::: @@ -490,9 +490,9 @@ srv/external └── API_BUSINESS_PARTNER.edmx ``` -> Run `cds import` with option `--as cds` to generate a human-readable `.cds` file instead of `.csn`. +> Run `cds import` with option `--as cds` to generate a human-readable `.cds` file instead of `.csn`. -Further, it adds a [service binding](#service-bindings) stub to your _package.json_, which we'll learn about later. +Further, it adds a [service binding](./service-bindings) stub to your _package.json_, which we'll learn about later. > [!tip] Import from other APIs @@ -504,14 +504,14 @@ Further, it adds a [service binding](#service-bindings) stub to your _package.js > cds import --asyncapi ... > cds import --rfc ... > ``` -> [Learn more about `cds import` in the tools guides.](../../tools/apis/cds-import){.learn-more} +> [Learn more about `cds import` in the tools guides.](../../tools/apis/cds-import){.learn-more} ### Reuse Packages -Instead of importing the same APIs repeatedly in each project, you can import them once and share them as reusable packages. These packages use the same techniques as `cds export` and provide the same plug & play convenience. +Instead of importing the same APIs repeatedly in each project, you can import them once and share them as reusable packages. These packages use the same techniques as `cds export` and provide the same plug & play convenience. -For the _XTravels_ sample, we did so with the [`@capire/s4`](https://github.com/capire/s4) sample package, which we created as follows. +For the _XTravels_ sample, we did so with the [`@capire/s4`](https://github.com/capire/s4) sample package, which we created as follows. 1. We started a new CAP project – get the outcome from Github to follow along: @@ -521,7 +521,7 @@ For the _XTravels_ sample, we did so with the [`@capire/s4`](https://github.com/ code s4 ``` - 2. We imported the [OData API](https://api.sap.com/api/API_BUSINESS_PARTNER/overview) as [outlined above](#from-odata-edmx). + 2. We imported the [OData API](https://api.sap.com/api/API_BUSINESS_PARTNER/overview) as [outlined above](#odata-apis). ```shell cds import ~/Downloads/API_BUSINESS_PARTNER.edmx @@ -556,7 +556,7 @@ For the _XTravels_ sample, we did so with the [`@capire/s4`](https://github.com/ ::: code-group ```cds :line-numbers [srv/business-partners.cds] using from './srv/external/API_BUSINESS_PARTNER'; - annotate API_BUSINESS_PARTNER with @cds.external:2; + annotate API_BUSINESS_PARTNER with @cds.external:2; ``` ::: @@ -592,17 +592,17 @@ npm add @capire/s4 ## Integrating Models -With imported APIs, you can now use them in your own models. For example, the XTravels application combines customer data from SAP S/4HANA with travels and flight bookings from xflights in a [mashup](#mashed-up-models). With the integrated models, you can already run the application, as CAP [mocks integrations automatically](#mocked-out-of-the-box). For real integration, you'll need [custom code](#required-custom-code), which we'll cover later. +With imported APIs, you can now use them in your own models. For example, the XTravels application combines customer data from SAP S/4HANA with travels and flight bookings from xflights. With the integrated models, you can already run the application, as CAP [mocks integrations automatically](#mocked-out-of-the-box). For real integration, you'll need [custom code](#integration-logic), which we'll cover later. > [!tip] AI Agents 'capire' CAP -> We can use AI agents to help us analysing and understanding our models. Actually, the following sections are based on a response by *Claude Sonnet* to the question: *"Find and explain all references"*, with the entity definition for the `Flights` consumption view selected as context. +> We can use AI agents to help us analysing and understanding our models. Actually, the following sections are based on a response by *Claude Sonnet* to the question: *"Find and explain all references"*, with the entity definition for the `Flights` consumption view selected as context. ### Consumption Views -Imported APIs often contain more entities and elements than you need. So as a next step we first create *Consumption Views* to capture what you actually want to use, focusing on entities and elements you need close access to. +Imported APIs often contain more entities and elements than you need. So as a next step we first create *Consumption Views* to capture what you actually want to use, focusing on entities and elements you need close access to. -Create two new files `apis/capire/xflights.cds` and `apis/capire/s4.cds`: +Create two new files `apis/capire/xflights.cds` and `apis/capire/s4.cds`: ::: code-group ```cds :line-numbers [apis/capire/xflights.cds] @@ -648,27 +648,27 @@ Noteworthy aspects here are: > [!tip] Always use Consumption Views > -> Even though they are optional, it's a good practice to always define consumption views on top of imported APIs. They declare what you need, enabling automated data federation. They also map imported definitions to your domain by renaming, flattening, or restructuring. +> Even though they are optional, it's a good practice to always define consumption views on top of imported APIs. They declare what you need, enabling automated data federation. They also map imported definitions to your domain by renaming, flattening, or restructuring. > [!warning] Protocol-specific Limitations > -> Depending on the service provider and protocols, limitations apply to consumption views. In particular, OData doesn't support denormalization like we used for the `Flights` view. This works here because xflights also serves the HCQL protocol (see the `@hcql` annotation in its [definition](#defining-service-apis)), which is CAP's native protocol. +> Depending on the service provider and protocols, limitations apply to consumption views. In particular, OData doesn't support denormalization like we used for the `Flights` view. This works here because xflights also serves the HCQL protocol (see the `@hcql` annotation in its [definition](#defining-service-apis)), which is CAP's native protocol. ### Associations -With consumption views in place, you can now reference them from your models _as if they were local_, creating mashups of imported and local definitions. +With consumption views in place, you can now reference them from your models _as if they were local_, creating mashups of imported and local definitions. ::: code-group ```cds :line-numbers=1 [db/schema.cds] - using { sap.capire.xflights as x } from '../apis/capire/xflights'; + using { sap.capire.xflights as x } from '../apis/capire/xflights'; ``` ::: - ```cds :line-numbers=25 + ```cds :line-numbers=25 entity Bookings { // ... - Flight : Association to x.Flights; + Flight : Association to x.Flights; } ``` - Line 26 – Each _Booking_ references a _Flight_ from the external xflights service, which allows us to display flight details alongside bookings. @@ -677,7 +677,7 @@ With consumption views in place, you can now reference them from your models _as ::: code-group ```cds :line-numbers=1 [db/schema.cds] - using { sap.capire.xflights as x } from '../apis/capire/xflights'; + using { sap.capire.xflights as x } from '../apis/capire/xflights'; ``` ::: ```cds :line-numbers=73 @@ -699,9 +699,9 @@ Extensions to remote entities, as shown above, are only possible for elements wh ::: code-group ```cds :line-numbers=44 [srv/travel-constraints.cds] annotate TravelService.Bookings with { ... - Flight @mandatory { - date @assert: (case - when date not between $self.Travel.BeginDate and $self.Travel.EndDate + Flight @mandatory { + date @assert: (case + when date not between $self.Travel.BeginDate and $self.Travel.EndDate then 'ASSERT_BOOKING_IN_TRAVEL_PERIOD' end); }; @@ -719,13 +719,13 @@ annotate TravelService.Bookings with { ... using { sap.capire.xflights as x } from '../apis/capire/xflights'; ``` ::: -```cds :line-numbers=16 +```cds :line-numbers=16 @fiori service TravelService { ... - @readonly entity Flights as projection on x.Flights; + @readonly entity Flights as projection on x.Flights; } ``` -- Line 17 – Exposes the _Flights_ entity in the _TravelService_ for UI consumption. +- Line 17 – Exposes the _Flights_ entity in the _TravelService_ for UI consumption. This is required as associations to non-exposed entities would be cut off, which would apply to the _Bookings_ -> _x.Flights_ association if we did not expose _x.Flights_. @@ -736,15 +736,15 @@ On top of the mashed up models we can add Fiori annotations as usual to serve Fi ::: code-group ```cds [app/common/labels.cds] annotate s4.Customers with @title: '{i18n>Customer}' { ... - ID @title: '{i18n>Customer}' @Common.Text: Name; + ID @title: '{i18n>Customer}' @Common.Text: Name; } ``` ::: ```cds annotate our.Travels with { ... - Customer @title: '{i18n>Customer}' @Common: { - Text: (Customer.Name), TextArrangement: #TextOnly - }; + Customer @title: '{i18n>Customer}' @Common: { + Text: (Customer.Name), TextArrangement: #TextOnly + }; } ``` @@ -772,17 +772,17 @@ annotate TravelService.Bookings with @UI: { ... } ``` -There are similar references to `Flights` entity from xflights in other parts of the Fiori annotations, which we omit here for brevity. +There are similar references to `Flights` entity from xflights in other parts of the Fiori annotations, which we omit here for brevity. ### Mocked Out of the Box -With mashed up models, you can run applications in _'airplane mode'_ without upstream services running. CAP mocks imported services automatically _in-process_ with mock data in the same _in-memory_ database as your own data. +With mashed up models, you can run applications in _'airplane mode'_ without upstream services running. CAP mocks imported services automatically _in-process_ with mock data in the same _in-memory_ database as your own data. 1. Start the xtravels application locally using `cds watch` as usual, and note the output about the integrated services being mocked automatically: ```shell - cds watch + cds watch ``` ```zsh [cds] - mocking sap.capire.s4.business-partner { @@ -803,14 +803,14 @@ With mashed up models, you can run applications in _'airplane mode'_ without ups > [!tip] Fast-track Inner-Loop Development → Spawning Parallel Tracks > -> The mocked-out-of-the-box capabilities of CAP, with remoted services mocked in-process and a shared in-memory database, allows us to greatly speed up development and time to market. For real remote operations there is additional investment required, of course. But the agnostic nature of CAP-level Service Integration also allows you to spawn two working tracks running in parallel: One team to focus on domain and functionality, and another one to work on the integration logic under the hood. +> The mocked-out-of-the-box capabilities of CAP, with remoted services mocked in-process and a shared in-memory database, allows us to greatly speed up development and time to market. For real remote operations there is additional investment required, of course. But the agnostic nature of CAP-level Service Integration also allows you to spawn two working tracks running in parallel: One team to focus on domain and functionality, and another one to work on the integration logic under the hood. -We'll learn more about mocking and inner loop development in the [next chapter](#inner-loop-development). +We'll learn more about mocking and inner loop development in the [next chapter](./inner-loops). #### Integration Logic Required -While everything just works nicely when mocked in-process and with a shared in-memory database, let's move closer to the target setup and use `cds mock` to run the services to be integrated in separate processes. +While everything just works nicely when mocked in-process and with a shared in-memory database, let's move closer to the target setup and use `cds mock` to run the services to be integrated in separate processes. 1. First run these commands **in two separate terminals**: @@ -827,13 +827,13 @@ While everything just works nicely when mocked in-process and with a shared in-m cds watch ``` ```zsh - [cds] - connect to sap.capire.s4.business-partner > odata { - url: 'http://localhost:54476/odata/v4/s4-business-partner' + [cds] - connect to sap.capire.s4.business-partner > odata { + url: 'http://localhost:54476/odata/v4/s4-business-partner' } ``` ```zsh - [cds] - connect to sap.capire.flights.data > hcql { - url: 'http://localhost:54475/hcql/data' + [cds] - connect to sap.capire.flights.data > hcql { + url: 'http://localhost:54475/hcql/data' } ``` @@ -854,7 +854,7 @@ This chapter walks you through the typical use cases and solution patterns that ### Connecting to Remote Services -It all starts with connecting to remote services, which we do like that in the xtravels project: +It all starts with connecting to remote services, which we do like that in the xtravels project: ::: code-group @@ -865,9 +865,9 @@ const xflights = await cds.connect.to ('sap.capire.flights.data') ::: -The `cds.connect.to()` function used here is the single common way to address service instances. It's used for and works the same way for both, local as well as remote services: +The `cds.connect.to()` function used here is the single common way to address service instances. It's used for and works the same way for both, local as well as remote services: -- for **local** services, it returns the local service providers – i.e., instances of [`cds.ApplicationService`](../../node.js/app-services), or your application-specific subclases thereof. +- for **local** services, it returns the local service providers – i.e., instances of [`cds.ApplicationService`](../../node.js/app-services), or your application-specific subclases thereof. - for **remote** services, it returns a remote service proxy – i.e., instances of [`cds.RemoteService`](../../node.js/remote-services), generically constructed by the client libs. @@ -880,7 +880,7 @@ The `cds.connect.to()` function used here is the single common way to a ### Uniform, Agnostic APIs -The uniform and protocol-agnostic programming interface offered through [`cds.Service`](../../node.js/core-services) is centered around these methods: +The uniform and protocol-agnostic programming interface offered through [`cds.Service`](../../node.js/core-services) is centered around these methods: - [`cds.connect.to ()`](../../node.js/cds-connect) → connects to remote services, as shown above. - [`srv.run ()`](../../node.js/core-services#srv-run-query) → executes advanced, deep queries with remote services. @@ -888,9 +888,9 @@ The uniform and protocol-agnostic programming interface offered through [`cds.Se - [`srv.emit ()`](../../node.js/core-services#srv-emit-event) → asynchronous communication, via messaging middlewares. - [`srv.on ()`](../../node.js/core-services#srv-on-event) → subscribe event handlers to events from other services. -Here are some typical usages found in the xflights/xtravels sample: +Here are some typical usages found in the xflights/xtravels sample: -```js :line-numbers=1 +```js :line-numbers=1 await xflights.run (SELECT.from`Flights`.where`modifiedAt > ${latest}`) await xflights.send ('POST','BookingCreated', { flight, date, seats }) await this.emit ('Flights.Updated', { flight, date, free_seats }) // this = xflights service @@ -901,11 +901,11 @@ xflights.on ('Flights.Updated', async msg => { ... }) - Line 3 – emits asynchronous events from the xflights service. - Line 4 – subscribes an event handler to events from the xflights service. -The [`srv.send()`](../../node.js/core-services#srv-send-request) method – and its [_REST-style_ derivatives](../../node.js/core-services#rest-style-api) – is the most flexible option, as it allows to send all kinds of requests to all kinds of services – including non-CAP services, and non-OData services, down to very technical services, for which no API schema might exist at all. +The [`srv.send()`](../../node.js/core-services#srv-send-request) method – and its [_REST-style_ derivatives](../../node.js/core-services#rest-style-api) – is the most flexible option, as it allows to send all kinds of requests to all kinds of services – including non-CAP services, and non-OData services, down to very technical services, for which no API schema might exist at all. The, [`srv.emit()`](../../node.js/core-services#srv-emit-event) method – with [`srv.on()`](../../node.js/core-services#srv-on-event) on subscribers' side – promotes asynchronous communication via events, which is most recommended for reasons of decoupling and scalability. It requires the target service to be connected via a messaging middleware, though. -The [`srv.run()`](../../node.js/core-services#srv-run-query) method – and its [_CRUD-style_ derivatives](../../node.js/core-services#crud-style-api) – is the most powerful option, and closest to the use cases of data-centric business applications. It requires the target service to support querying, though, like CAP application services, OData services, or GraphQL services. +The [`srv.run()`](../../node.js/core-services#srv-run-query) method – and its [_CRUD-style_ derivatives](../../node.js/core-services#crud-style-api) – is the most powerful option, and closest to the use cases of data-centric business applications. It requires the target service to support querying, though, like CAP application services, OData services, or GraphQL services. > [!tip] Choosing the Right Method > Choose the method that best fits your use case and the capabilities of the target service. Prefer `srv.run()` for its power and conceptual expressiveness with data-centric operations. Consider `srv.emit()` for decoupled, asynchronous communication whenever possible. Retreat to `srv.send()` for maximum flexibility only when needed. @@ -913,7 +913,7 @@ The [`srv.run()`](../../node.js/core-services#srv-run-query) method – a > [!tip] Staying at CAP Level > Always stay at CAP level when integrating services, using the uniform and protocol-agnostic [_Core Service APIs_](../../node.js/core-services) outlined above, combined with [_CQL_](../../cds/cql) as CAP's universal query language. This allows CAP to automate things like protocol translations, data federation, resilience for you, as well as mocking services out of the box, thereby promoting fast inner loops. Only retreat to lower levels when absolutely necessary. -### Testing with `cds repl` +### Testing with `cds repl` We can use `cds repl` to experiment the options to send requests and queries to remote services interactively. Do so as follows... @@ -937,7 +937,7 @@ const xflights = await cds.connect.to ('sap.capire.flights.data') const s4 = await cds.connect.to ('sap.capire.s4.business-partner') ``` -Read data directly from the remote `A_BusinessPartner` entity. +Read data directly from the remote `A_BusinessPartner` entity. ```js await s4.run (SELECT.from`A_BusinessPartner`.limit (3)) await s4.read`A_BusinessPartner`.limit (3) // shorthand // [!code focus] @@ -992,8 +992,8 @@ Note how field names and structure are adapted to our domain. Watch the log output in the second terminal to see the translated OData requests being received by the remote service, for example: ```zsh -[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { - '$top': '3' +[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { + '$top': '3' } ``` ```zsh @@ -1022,7 +1022,7 @@ await s4.delete (Customers) .where`ID = ${'456'}` Queries in CAP are represented as first-class [CQN](../../cds/cqn) objects under the hood. When querying remote services, we can inspect and modify those query objects prior to forwarding them to target services for execution. -Let's try that out in `cds repl`, which we [started before](#testing-with-cds-repl). +Let's try that out in `cds repl`, which we [started before](#testing-with-cds-repl). 1. Construct and inspect an example of an inbound query: @@ -1031,11 +1031,11 @@ q1 = SELECT`ID, Name`.from (Customers) .where`length(ID) <= 3` ``` ```zsh => cds.ql { - SELECT: { + SELECT: { from: { ref: [ 'sap.capire.s4.Customers' ] }, - columns: [ - { ref: [ 'ID' ] }, - { ref: [ 'Name' ] } + columns: [ + { ref: [ 'ID' ] }, + { ref: [ 'Name' ] } ], where: [ { func:'length', args: [ {ref:['ID']} ] }, '<=', { val:3 } @@ -1084,7 +1084,7 @@ await s4.run (q2) ::: > [!tip] Powerful Query Adaptation -> Modifying queries prior to forwarding them to remote services is a powerful technique to implement advanced integration scenarios. For example, you can adapt queries to the capabilities of target services, implement custom filtering, paging, or sorting logic, or even split and merge queries across multiple services. +> Modifying queries prior to forwarding them to remote services is a powerful technique to implement advanced integration scenarios. For example, you can adapt queries to the capabilities of target services, implement custom filtering, paging, or sorting logic, or even split and merge queries across multiple services. ::: details First-Class Query Objects On a side note: We leverage key principles of [_first-class objects_](https://google.com/search?q=first+class+objects+programming) here, as known from functional programming and dynamic languages: As queries are represented as first-class CQN objects, we can construct and manipulate them programmatically at runtime, pass them as arguments, and return them from functions. And, not the least, this opens the doors for things like higher-order queries, query delegation – e.g. push down to databases –, and late materialization. @@ -1096,7 +1096,7 @@ On a side note: We leverage key principles of [_first-class objects_](https://go ### Data Federation -There are many scenarios where data from remote services needs to be in close access locally. For example, in the xtravels app we want to display lists of flight details alongside bookings in Fiori UIs. This requires joining data from the local `Bookings` entity with data from the remote `Flights` entity. +There are many scenarios where data from remote services needs to be in close access locally. For example, in the xtravels app we want to display lists of flight details alongside bookings in Fiori UIs. This requires joining data from the local `Bookings` entity with data from the remote `Flights` entity. Relying on live calls to remote services per row is clearly not an option. Instead, we'd rather ensure that data required in close access is really available locally, so it can be joined with own data using SQL JOINs. This is what _data federation_ is all about. @@ -1120,7 +1120,7 @@ annotate x.Flights with @cds.persistence.table; const xflight = await cds.connect.to ('sap.capire.flights.data') const {Flights} = cds.entities ('sap.capire.xflights') let {latest} = await SELECT.one`max(modifiedAt) as latest`.from (Flights) -let touched = await xflight.read (Flights).where`modifiedAt > ${latest||0}` +let touched = await xflight.read (Flights).where`modifiedAt > ${latest||0}` if (touched.length) await UPSERT (touched).into (Flights) ``` @@ -1149,7 +1149,7 @@ Learn more about that generic solution in the [_CAP-level Data Federation_](data ### Delegation -Even with [data federation](#data-federation) in place, there are still several scenarios where we need to reach out to remote services on demand. Value helps are a prime example for that; for example, to select `Customers` from a drop-down list when creating new travels. Although we could serve that from replicated data as well, this would require replicating **_all_** relevant customer data locally, which is often overkill. +Even with [data federation](#data-federation) in place, there are still several scenarios where we need to reach out to remote services on demand. Value helps are a prime example for that; for example, to select `Customers` from a drop-down list when creating new travels. Although we could serve that from replicated data as well, this would require replicating **_all_** relevant customer data locally, which is often overkill. The code below shows how we simply delegate value help requests for `Customers` in xtravels to the connected S/4 service: @@ -1159,7 +1159,7 @@ this.on ('READ', Customers, req => s4.run (req.query)) ``` ::: -The event handler intercepts all direct `READ` requests to the `Customers` entity, and just forwards the query as-is to the connected S/4 service. +The event handler intercepts all direct `READ` requests to the `Customers` entity, and just forwards the query as-is to the connected S/4 service. ::: details Try this in `cds repl` ... @@ -1189,9 +1189,9 @@ This issues a `READ` request to the local `TravelService.Customers` entity, whic See the log output of in the first terminal where we `cds mock`ed the S/4 service to observe the translated OData request being received by the remote service: ```zsh -[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { - '$select': 'BusinessPartner,PersonFullName', - '$top': '3' +[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { + '$select': 'BusinessPartner,PersonFullName', + '$top': '3' } ``` ::: @@ -1199,21 +1199,21 @@ See the log output of in the first terminal where we `cds mock`ed the S/4 servic #### Automatic Query Translation -Note that for the handler above, incoming requests always refer to: +Note that for the handler above, incoming requests always refer to: - the [`TravelService.Customers`](#serving-uis) entity – which is a view on: - the [`sap.capire.s4.Customers`](#consumption-views) entity – which in turn is a view on: - - the [`A_BusinessPartner`](#odata-apis) remote entity. + - the [`A_BusinessPartner`](#odata-apis) remote entity. In effect, we are delegating a query to the S/4 service, which refers to an entity actually not known to that remote service. How could that work at all? -It works because we fuelled the CAP runtime with CDS models, so the generic handlers detect such situations, and automatically translate delegated queries into valid queries targeted to underlying remote entities – i.e. `A_BusinessPartner` in our example. When doing so, all column references in select clauses, where clauses, etc., are translated and delegated as well, and the results' structure transformed back to that of the original target – i.e., `TravelService.Customers` above. +It works because we fuelled the CAP runtime with CDS models, so the generic handlers detect such situations, and automatically translate delegated queries into valid queries targeted to underlying remote entities – i.e. `A_BusinessPartner` in our example. When doing so, all column references in select clauses, where clauses, etc., are translated and delegated as well, and the results' structure transformed back to that of the original target – i.e., `TravelService.Customers` above. ### Navigation -Automatic translation of delegated queries, [as shown above](#automatic-query-translation), has limitations when navigations and expands are involved. +Automatic translation of delegated queries, [as shown above](#automatic-query-translation), has limitations when navigations and expands are involved. Let's explore those limitations and how to deal with them on the example of the _Bookings -> Flights_ association. Try running the following query in `cds repl`, with the xflights service mocked in a separate process, as before: @@ -1225,7 +1225,7 @@ const { Bookings } = cds.entities ('sap.capire.travels') await SELECT.from (Bookings) .where`Flight.origin like '%Ken%'` ``` -- With data federation in place, this would work (if all flight data had been replicated). +- With data federation in place, this would work (if all flight data had been replicated). - Without data federation, though, this would fail with a runtime error. For that to really work cross-service – that is, without data federation, or bypassing it – we'd have to split the query, manually dispatch the parts to involved services, and correlate results back, for example, like this: @@ -1235,7 +1235,7 @@ await SELECT.from (Bookings) .where`Flight.ID in ${( await xflights.read`ID`.from`Flights`.where`origin.name like '%Ken%'` ).map (f => f.ID)}` ``` -::: details +::: details The above can also be written like that, of course: ```js const flights = await xflights.read`ID`.from`Flights`.where`origin.name like '%Ken%'` @@ -1248,7 +1248,7 @@ await SELECT.from (Bookings) .where`Flight.ID in ${flightIDs}` > The term 'navigation' commonly refers to traversing associations between entities in queries. In CAP, this is typically expressed using [path expressions](../../cds/cql#path-expressions) along (chains of) associations – e.g., `flight.origin.name` –, which can show up in all query clauses (_select_, _from_, _where_, _order by_, and _group by_). -### Expands +### Expands Similar to navigations, expands across associations also require special handling when we cannot serve them from federated data. Try running the following query in `cds repl`, with the xflights service mocked in a separate process, as before: @@ -1270,8 +1270,8 @@ await SELECT.from (Bookings) .columns`{ To achieve the same without data federation, we'd have to manually fetch nested data from the remote service for each row, and fill it into the outer results, for example like this: ```js -await SELECT.from(Bookings).columns`Flight_ID, Flight_date`.limit(3) -.then (all => Promise.all (all.map (async b => ({ +await SELECT.from(Bookings).columns`Flight_ID, Flight_date`.limit(3) +.then (all => Promise.all (all.map (async b => ({ Flight: await xflights.read`ID, date, destination.name as destination` .from`Flights`.where`ID = ${b.Flight_ID} and date = ${b.Flight_date}` })))) @@ -1282,7 +1282,7 @@ We can do similar things for expands across associations from remote data to loc ```js const { Customers } = cds.entities ('sap.capire.s4') const { Travels } = cds.entities ('sap.capire.travels') -await s4.read(Customers).columns`{ ID, Name }` +await s4.read(Customers).columns`{ ID, Name }` .then (all => Promise.all (all.map (async c => Object.assign (c, { Travels: await SELECT`ID`.from(Travels).where`Customer.ID = ${c.ID}` })))) @@ -1319,6 +1319,6 @@ This creates ultimate resilience, as the events are stored in a local outbox tab - [Inner Loop Development](inner-loops) – Understand how to develop and test integrated applications efficiently using CAP's inner loop development features. - From 4f8cdf8185636aaaefe298758db5f9c80248ffeb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 09:27:39 +0000 Subject: [PATCH 385/439] chore(deps): update dependency com.sap.cds:cds4j-api to v4.7.0 (#2355) 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.cds:cds4j-api](http://www.sap.com) ([source](https://cap.cloud.sap/docs/java/)) | `4.6.2` → `4.7.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.sap.cds:cds4j-api/4.7.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.sap.cds:cds4j-api/4.6.2/4.7.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. --- - [x] 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 c1a97ff141..78e8e56df0 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -117,7 +117,7 @@ if (!siteURL.pathname.endsWith('/')) siteURL.pathname += '/' config.themeConfig.capire = { versions: { java_services: '4.6.2', - java_cds4j: '4.6.2' + java_cds4j: '4.7.0' }, gotoLinks: [], siteURL From c4d4f40b4f02f361eb042943743e2416377b1d68 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 12:18:14 +0100 Subject: [PATCH 386/439] Archived outdated Consuming Services guide --- guides/integration/_menu-parked.md | 20 + guides/integration/_menu.md | 15 +- ...e-sample.md => bookstore-sample-parked.md} | 0 guides/services/_menu.md | 1 - guides/services/consuming-services--.md | 698 ------------------ guides/services/consuming-services.md | 403 +++++++++- guides/services/index.md | 3 - 7 files changed, 412 insertions(+), 728 deletions(-) create mode 100644 guides/integration/_menu-parked.md rename guides/integration/{-bookstore-sample.md => bookstore-sample-parked.md} (100%) delete mode 100644 guides/services/consuming-services--.md diff --git a/guides/integration/_menu-parked.md b/guides/integration/_menu-parked.md new file mode 100644 index 0000000000..c81dccfa47 --- /dev/null +++ b/guides/integration/_menu-parked.md @@ -0,0 +1,20 @@ + +# [ CAP-level Service Integration ](calesi) +# [ CAP-level Data Federation ](data-federation) +# [ Inner Loop Development ](inner-loops) +# [ Reuse & Compose ](reuse-and-compose) + +# [ Service Bindings ](service-bindings) + +# Platform Services + + ## [ Application Gateways ](platform/app-gateways) + ## [ Identity & Authentication ](platform/ias-xsuaa) + ## [ Portal Services ](platform/portal-services) + ## [ Attachments ](platform/attachments) + ## [ Audit Logging ](platform/audit-logging) + ## [ Notifications ](platform/notifications) + ## [ Telemetry ](platform/telemetry) + ## [ Change Tracking ](platform/change-tracking) + +# [ CAP Plugins Guide ](plugins-guide) diff --git a/guides/integration/_menu.md b/guides/integration/_menu.md index 16c8690933..95c2d9f263 100644 --- a/guides/integration/_menu.md +++ b/guides/integration/_menu.md @@ -1,19 +1,6 @@ # [ CAP-level Service Integration ](calesi.md) # [ CAP-level Data Federation ](data-federation.md) -# [ Inner Loop Development ](inner-loops.md) +# [ Inner Loop Development ](inner-loops.md) # [ Reuse & Compose ](reuse-and-compose.md) # [ Service Bindings ](service-bindings.md) - -# Platform Services - - ## [ Application Gateways ](platform/app-gateways) - ## [ Identity & Authentication ](platform/ias-xsuaa) - ## [ Portal Services ](platform/portal-services) - ## [ Attachments ](platform/attachments) - ## [ Audit Logging ](platform/audit-logging) - ## [ Notifications ](platform/notifications) - ## [ Telemetry ](platform/telemetry) - ## [ Change Tracking ](platform/change-tracking) - -# [ CAP Plugins Guide ](plugins-guide.md) diff --git a/guides/integration/-bookstore-sample.md b/guides/integration/bookstore-sample-parked.md similarity index 100% rename from guides/integration/-bookstore-sample.md rename to guides/integration/bookstore-sample-parked.md diff --git a/guides/services/_menu.md b/guides/services/_menu.md index fa1350b4f3..17e2b37d26 100644 --- a/guides/services/_menu.md +++ b/guides/services/_menu.md @@ -5,4 +5,3 @@ # [Event Handlers](custom-code) # [Actions & Functions](custom-actions) # [Serving Media Data](media-data) -# [Consuming Services](consuming-services) diff --git a/guides/services/consuming-services--.md b/guides/services/consuming-services--.md deleted file mode 100644 index ef033b6430..0000000000 --- a/guides/services/consuming-services--.md +++ /dev/null @@ -1,698 +0,0 @@ -### Mock Remote OData Service (Java) - -You configure CAP to do OData and HTTP requests for a mocked service instead of doing it in-process. Configure a new Spring Boot profile (for example `mocked`): -::: code-group -```yaml [srv/src/main/resources/application.yaml] -spring: - config.activate.on-profile: mocked -cds: - application.services: - - name: API_BUSINESS_PARTNER-mocked - model: API_BUSINESS_PARTNER - serve.path: API_BUSINESS_PARTNER - remote.services: - API_BUSINESS_PARTNER: - destination: - name: "s4-business-partner-api-mocked" -``` -::: -The profile exposes the mocked service as OData service and defines a destination to access the service. The destination just points to the CAP application itself. You need to implement some Java code for this: - -::: code-group -```java [DestinationConfiguration.java] -@EventListener -void applicationReady(ApplicationReadyEvent ready) { - int port = Integer.valueOf(environment.getProperty("local.server.port")); - DefaultHttpDestination mockDestination = DefaultHttpDestination - .builder("http://localhost:" + port) - .name("s4-business-partner-api-mocked").build(); - - DefaultDestinationLoader loader = new DefaultDestinationLoader(); - loader.registerDestination(mockDestination); - DestinationAccessor.prependDestinationLoader(loader); -} -``` -::: - -Now, you just need to run the application with the new profile: - -```sh -mvn spring-boot:run -Dspring-boot.run.profiles=default,mocked -``` - -When sending a request to your CAP application, for example the `Suppliers` entity, it is transformed to the request for the mocked remote service and requested from itself as a OData request. Therefore, you'll see two HTTP requests in your CAP application's log. - -For example: - -[http://localhost:8080/service/risk/Suppliers](http://localhost:8080/service/risk/Suppliers) - -```log -2021-09-21 15:18:44.870 DEBUG 34645 — [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : GET "/service/risk/Suppliers", parameters={} -... -2021-09-21 15:18:45.292 DEBUG 34645 — [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : GET "/API_BUSINESS_PARTNER/A_BusinessPartner?$select=BusinessPartner,BusinessPartnerFullName,BusinessPartnerIsBlocked&$top=1000&$skip=0&$orderby=BusinessPartner%20asc&sap-language=de&sap-valid-at=2021-09-21T13:18:45.211722Z", parameters={masked} -... -2021-09-21 15:18:45.474 DEBUG 34645 — [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed 200 OK -2021-09-21 15:18:45.519 DEBUG 34645 — [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed 200 OK -``` - -[Try out the example application.](https://github.com/SAP-samples/cloud-cap-risk-management/tree/ext-service-s4hc-suppliers-ui-java){.learn-more} - -### Delegation with Java - -Write a handler function to delegate a query to the remote service and run the incoming query on the external service. - -::: code-group -```js [Node.js] -module.exports = cds.service.impl(async function() { - const bupa = await cds.connect.to('API_BUSINESS_PARTNER'); - - this.on('READ', 'BusinessPartners', req => { - return bupa.run(req.query); - }); -}); -``` - -```java [Java] -@Component -@ServiceName(RiskService_.CDS_NAME) -public class RiskServiceHandler implements EventHandler { - @Autowired - @Qualifier(ApiBusinessPartner_.CDS_NAME) - CqnService bupa; - - @On(entity = BusinessPartners.CDS_NAME) - Result readSuppliers(CdsReadEventContext context) { - return bupa.run(context.getCqn()); - } -} -``` - -::: - -This works when accessing the entity directly. Additional work is required to support [navigation](#handle-navigations-across-local-and-remote-entities) and [expands](#handle-expands-across-local-and-remote-entities) from or to a remote entity. - - -## Connect and Deploy - - -### Using Destinations - -Destinations contain the necessary information to connect to a remote system. They're basically an advanced URL, that can carry additional metadata like, for example, the authentication information. - -You can choose to use SAP BTP destinations or [application defined destinations](#use-application-defined-destinations). - -#### Use SAP BTP Destinations - -CAP leverages the destination capabilities of the SAP Cloud SDK. - -##### Create Destinations on SAP BTP - -Create a destination using one or more of the following options. - -- **Register a system in your global account:** You can check here how to [Register an SAP System](https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/2ffdaff0f1454acdb046876045321c91.html) in your SAP BTP global account and which systems are supported for registration. Once the system is registered and assigned to your subaccount, you can create a service instance. A destination is automatically created along with the service instance. - -- **Connect to an on-premise system:** With SAP BTP [Cloud Connector](https://help.sap.com/docs/CP_CONNECTIVITY/cca91383641e40ffbe03bdc78f00f681/e6c7616abb5710148cfcf3e75d96d596.html), you can create a connection from your cloud application to an on-premise system. - -- **Manually create destinations:** You can create destinations manually in your SAP BTP subaccount. See section [destinations](https://help.sap.com/docs/CP_CONNECTIVITY/cca91383641e40ffbe03bdc78f00f681/5eba6234a0e143fdacd8535f44c315c5.html) in the SAP BTP documentation. - -- **Create a destination to your application:** If you need a destination to your application, for example, to call it from a different application, then you can automatically create it in the MTA deployment. - - -##### Use Destinations with Node.js - -In your _package.json_, a configuration for the `API_BUSINESS_PARTNER` looks like this: - -```json -"cds": { - "requires": { - "API_BUSINESS_PARTNER": { - "kind": "odata", - "model": "srv/external/API_BUSINESS_PARTNER" - } - } -} -``` - -If you've imported the external service definition using `cds import`, an entry for the service in the _package.json_ has been created already. Here you specify the name of the destination in the `credentials` block. - -In many cases, you also need to specify the `path` prefix to the service, which is added to the destination's URL. For services listed on the SAP Business Accelerator Hub, you can find the path in the linked service documentation. - -Since you don't want to use the destination for local testing, but only for production, you can profile it by wrapping it into a `[production]` block: - -```json -"cds": { - "requires": { - "API_BUSINESS_PARTNER": { - "kind": "odata", - "model": "srv/external/API_BUSINESS_PARTNER", - "[production]": { - "credentials": { - "destination": "S4HANA", - "path": "/sap/opu/odata/sap/API_BUSINESS_PARTNER" - } - } - } - } -} -``` - -Additionally, you can provide [destination options](https://sap.github.io/cloud-sdk/api/v4/interfaces/sap-cloud-sdk_connectivity.DestinationFetchOptions.html) inside a `destinationOptions` object: - -```jsonc -"cds": { - "requires": { - "API_BUSINESS_PARTNER": { - /* ... */ - "[production]": { - "credentials": { - /* ... */ - }, - "destinationOptions": { - "selectionStrategy": "alwaysSubscriber", - "useCache": true - } - } - } - } -} -``` - -The `selectionStrategy` property controls how a [destination is resolved](#destination-resolution). - -The `useCache` option controls whether the SAP Cloud SDK caches the destination. It's enabled by default but can be disabled by explicitly setting it to `false`. -Read [Destination Cache](https://sap.github.io/cloud-sdk/docs/js/features/connectivity/destination-cache#destination-cache) to learn more about how the cache works. - -If you want to configure additional headers for the HTTP request to the system behind the destination, for example an Application Interface Register (AIR) header, you can specify such headers in the destination definition itself using the property [_URL.headers.\_](https://help.sap.com/docs/CP_CONNECTIVITY/cca91383641e40ffbe03bdc78f00f681/4e1d742a3d45472d83b411e141729795.html?q=URL.headers). - -##### Use Destinations with Java - -Destinations are configured in Spring Boot's _application.yaml_ file: -::: code-group -```yaml [srv/src/main/resources/application.yaml] -cds: - remote.services: - API_BUSINESS_PARTNER: - type: "odata-v2" - destination: - name: "cpapp-bupa" - http: - suffix: "/sap/opu/odata/sap" -``` -::: -[Learn more about configuring destinations for Java.](../../java/cqn-services/remote-services){.learn-more} - -#### 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. - -Application defined destinations support a subset of properties and authentication types of the SAP BTP destination service. - -##### Configure Application Defined Destinations in Node.js - -You specify the destination properties in `credentials` instead of putting the name of a destination there. - -This is an example of a destination using basic authentication: - -```jsonc -"cds": { - "requires": { - "REVIEWS": { - "kind": "odata", - "model": "srv/external/REVIEWS", - "[production]": { - "credentials": { - "url": "https://reviews.ondemand.com/reviews", - "authentication": "BasicAuthentication", - "username": "", - "password": "", - "headers": { - "my-header": "header value" - }, - "queries": { - "my-url-param": "url param value" - } - } - } - } - } -} -``` - -[Learn more about providing project configuration values.](./../../node.js/cds-env#project-specific-configurations){.learn-more} - -::: warning Warning: You should not put any sensitive information here! - -Instead, set the properties in the bootstrap code of your CAP application: - -```js -const cds = require("@sap/cds"); - -if (cds.env.requires?.credentials?.authentication === "BasicAuthentication") { - const credentials = /* read your credentials */ - cds.env.requires.credentials.username = credentials.username; - cds.env.requires.credentials.password = credentials.password; -} -``` -::: - -You might also want to set some values in the application deployment. This can be done using env variables. For this example, the env variable for the URL would be `cds_requires_REVIEWS_credentials_destination_url`. - -This variable can be parameterized in the _manifest.yml_ for a `cf push` based deployment: -::: code-group -```yaml [manifest.yml] -applications: -- name: reviews - ... - env: - cds_requires_REVIEWS_credentials_url: ((reviews_url)) -``` -::: -```sh -cf push --var reviews_url=https://reviews.ondemand.com/reviews -``` - -The same can be done using _mtaext_ file for MTA deployment. - -If the URL of the target service is also part of the MTA deployment, you can automatically receive it as shown in this example: - -::: code-group -```yaml [mta.yaml] - - name: reviews - provides: - - name: reviews-api - properties: - reviews-url: ${default-url} - - name: bookshop - requires: - ... - - name: reviews-api - properties: - cds_requires_REVIEWS_credentials_url: ~{reviews-api/reviews-url} -``` -::: - -::: code-group -```properties [.env] -cds_requires_REVIEWS_credentials_url=http://localhost:4008/reviews -``` -::: - -::: warning -For the _configuration path_, you **must** use the underscore ("`_`") character as delimiter. CAP supports dot ("`.`") as well, but Cloud Foundry won't recognize variables using dots. Your _service name_ **mustn't** contain underscores. -::: - -##### Implement Application Defined Destinations in Node.js - -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 - -Destinations are configured in Spring Boot's _application.yaml_ file. - -::: code-group -```yaml [srv/src/main/resources/application.yaml] -cds: - remote.services: - REVIEWS: - type: "odata-v4" - destination: - properties: - url: https://reviews.ondemand.com/reviews - authentication: TokenForwarding - http: - headers: - my-header: "header value" - queries: - my-url-param: "url param value" -``` -::: - - -##### Implement Application Defined Destinations in Java - -You can use the APIs offered by SAP Cloud SDK to create destinations programmatically. The destination can be used by its name the same way as destinations on the SAP BTP destination service. -::: code-group -```yaml [srv/src/main/resources/application.yaml] -cds: - remote.services: - REVIEWS: - type: "odata-v2" - destination: - name: "reviews-destination" -``` -::: -[Learn more about programmatic destination registration.](../../java/cqn-services/remote-services#programmatic-destination-registration){.learn-more} [See examples for different authentication types.](../../java/cqn-services/remote-services){.learn-more} - - -### Connect to Remote Services Locally - -If you use SAP BTP destinations, you can access them locally using [CAP's hybrid testing capabilities](../../tools/cds-bind) with the following procedure: - -#### Bind to Remote Destinations - -Your local application needs access to an XSUAA and Destination service instance in the same subaccount where the destination is: - -1. Login to your Cloud Foundry org and space -2. Create an XSUAA service instance and service key: - - ```sh - cf create-service xsuaa application cpapp-xsuaa - cf create-service-key cpapp-xsuaa cpapp-xsuaa-key - ``` - -3. Create a Destination service instance and service key: - - ```sh - cf create-service destination lite cpapp-destination - cf create-service-key cpapp-destination cpapp-destination-key - ``` - -4. Bind to XSUAA and Destination service: - - ```sh - cds bind -2 cpapp-xsuaa,cpapp-destination - ``` - - [Learn more about `cds bind`.](../../tools/cds-bind#services-on-cloud-foundry){.learn-more} - -#### Run a Node.js Application with a Destination - -Add the destination for the remote service to the `hybrid` profile in the _.cdsrc-private.json_ file: - -```jsonc -{ - "requires": { - "[hybrid]": { - "auth": { - /* ... */ - }, - "destinations": { - /* ... */ - }, - "API_BUSINESS_PARTNER": { - "credentials": { - "path": "/sap/opu/odata/sap/API_BUSINESS_PARTNER", - "destination": "cpapp-bupa" - } - } - } - } -} -``` - -Run your application with the Destination service: - -```sh -cds watch --profile hybrid -``` - -::: tip -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 - -Add a new profile `hybrid` to your _application.yaml_ file that configures the destination for the remote service. -::: code-group -```yaml [srv/src/main/resources/application.yaml] -spring: - config.activate.on-profile: hybrid - sql.init.schema-locations: - - "classpath:schema-nomocks.sql" -cds: - remote.services: - - name: API_BUSINESS_PARTNER - type: "odata-v2" - destination: - name: "cpapp-bupa" - http: - suffix: "/sap/opu/odata/sap" -``` -::: -Run your application with the Destination service: - -```sh -cds bind --exec -- mvn spring-boot:run \ - -Dspring-boot.run.profiles=default,hybrid -``` - -[Learn more about `cds bind --exec`.](../../tools/cds-bind#run-arbitrary-commands-with-service-bindings){.learn-more} - -::: tip -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 to your destination environment variable. See [Reach On-Premise Service from the SAP Business Application Studio](https://sap.github.io/cloud-sdk/docs/java/features/connectivity/destination-service#reach-on-premise-service-from-the-sap-business-application-studio) for more details. -::: - - -### Connect to an Application Using the Same XSUAA (Forward Authorization Token) -###### Forward Auth Token - -If your application consists of microservices and you use one (or more) as a remote service as described in this guide, you can leverage the same XSUAA instance. In that case, you don't need an SAP BTP destination at all. - -Assuming that your microservices use the same XSUAA instance, you can just forward the authorization token. The URL of the remote service can be injected into the application in the [MTA or Cloud Foundry deployment](#deployment) using [application defined destinations](#use-application-defined-destinations). - -#### Forward Authorization Token with Node.js - -To enable the token forwarding, set the `forwardAuthToken` option to `true` in your application defined destination: - -```json -{ - "requires": { - "kind": "odata", - "model": "./srv/external/OrdersService", - "credentials": { - "url": "", - "forwardAuthToken": true - } - } -} -``` - -#### Forward Authorization Token with Java{.java} - -For Java, you set the authentication type to `TOKEN_FORWARDING` for the destination. - -You can implement it in your code: - -```java -urlFromConfig = ...; // read from config -DefaultHttpDestination mockDestination = DefaultHttpDestination - .builder(urlFromConfig) - .name("order-service") - .authenticationType(AuthenticationType.TOKEN_FORWARDING) - .build(); -``` - -Or declare the destination in your _application.yaml_ file: -::: code-group -```yaml [srv/src/main/resources/application.yaml] -cds: - remote.services: - order-service: - type: "odata-v4" - destination: - properties: - url: "" - authentication: TokenForwarding -``` -::: -Alternatively to setting the authentication type, you can set the property `forwardAuthToken` to `true`. - -### Connect to an Application in Your Kyma Cluster - -The [Istio](https://istio.io) service mesh provides secure communication between the services in your service mesh. You can access a service in your applications' namespace by just reaching out to `http://` or using the full hostname `http://..svc.cluster.local`. Istio sends the requests through an mTLS tunnel. - -With Istio, you can further secure the communication [by configuring authentication and authorization for your services](https://istio.io/latest/docs/concepts/security) - - -### Deployment - -Your micro service needs bindings to the **XSUAA** and **Destination** service to access destinations on SAP BTP. If you want to access an on-premise service using **Cloud Connector**, then you need a binding to the **Connectivity** service as well. - -[Learn more about deploying CAP applications.](../deploy/index){.learn-more} -[Learn more about deploying an application using the end-to-end tutorial.](https://developers.sap.com/group.btp-app-cap-deploy.html){.learn-more} - - - -#### Add Required Services to MTA Deployments - -The MTA-based deployment is described in [the deployment guide](../deploy/index). You can follow this guide and make some additional adjustments to the [generated _mta.yml_](../deploy/to-cf#add-mta-yaml) file. - - -```sh -cds add xsuaa,destination,connectivity -``` - -::: details Learn what this does in the background... - -1. Adds **XSUAA**, **Destination**, and **Connectivity** services to your _mta.yaml_: - ::: code-group - ```yaml [mta.yml] - - name: cpapp-uaa - type: org.cloudfoundry.managed-service - parameters: - 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 - parameters: - service: connectivity - service-plan: lite - ``` - ::: -2. Requires the services for your server in the _mta.yaml_: - ::: code-group - ```yaml [mta.yaml] - - name: cpapp-srv - ... - requires: - ... - - name: cpapp-uaa - - name: cpapp-destination - - name: cpapp-connectivity # Required for on-premise connectivity only - ``` - ::: - ::: - -Build your application: - -```sh -mbt build -t gen --mtar mta.tar -``` - -Now you can deploy it to Cloud Foundry: -```sh -cf deploy gen/mta.tar -``` - -#### Connectivity Service Credentials on Kyma - -The secret of the connectivity service on Kyma needs to be modified for the Cloud SDK to connect to on-premise destinations. - -[Support for Connectivity Service Secret in Java](https://github.com/SAP/cloud-sdk/issues/657){.java .learn-more} -[Support for Connectivity Service Secret in Node.js](https://github.com/SAP/cloud-sdk-js/issues/2024){.node .learn-more} - -### Destinations and Multitenancy - -With the destination service, you can access destinations in your provider account, the account your application is running in, and destinations in the subscriber accounts of your multitenant-aware application. - -#### Use Destinations from Subscriber Account - -Customers want to see business partners from, for example, their SAP S/4 HANA system. - -As provider, you need to define a name for a destination, which enables access to systems of the subscriber of your application. In addition, your multitenant application or service needs to have a dependency to the destination service. For destinations in an on-premise system, the connectivity service must be bound. - -The subscriber needs to create a destination with that name in their subscriber account, for example, pointing to their SAP S/4HANA system. - - - - - -#### Destination Resolution - -The destination is read from the tenant of the request's JWT (authorization) token. If no JWT token is present, the destination is read from the tenant of the application's XSUAA binding.{.java} - -The destination is read from the tenant of the request's JWT (authorization) token. If no JWT token is present *or the destination isn't found*, the destination is read from the tenant of the application's XSUAA binding.{.node} - -::: warning JWT token vs. XSUAA binding -Using the tenant of the request's JWT token means reading from the **subscriber subaccount** for a multitenant application. The tenant of the application's XSUAA binding points to the destination of the **provider subaccount**, the account where the application is deployed to. -::: - -
- -You can change the destination lookup behavior as follows: - -```jsonc -"cds": { - "requires": { - "SERVICE_FOR_PROVIDER": { - /* ... */ - "credentials": { - /* ... */ - }, - "destinationOptions": { - "selectionStrategy": "alwaysProvider", - "jwt": null - } - } - } -} -``` - - -Setting the [`selectionStrategy`](https://sap.github.io/cloud-sdk/docs/js/features/connectivity/destination#multi-tenancy) property for the [destination options](#use-destinations-with-node-js) to `alwaysProvider`, you can ensure that the destination is always read from your provider subaccount. With that you ensure that a subscriber cannot overwrite your destination. - -Set the destination option `jwt` to `null`, if you don't want to pass the request's JWT to SAP Cloud SDK. Passing the request's JWT to SAP Cloud SDK has implications on, amongst others, the effective defaults for selection strategy and isolation level. In rare cases, these defaults are not suitable, for example when the request to the upstream server does not depend on the current user. Please see [Authentication and JSON Web Token (JWT) Retrieval](https://sap.github.io/cloud-sdk/docs/js/features/connectivity/destinations#authentication-and-json-web-token-jwt-retrieval) for more details. - -
- -
- -For Java use the property `retrievalStrategy` in the destination configuration, to ensure that the destination is always read from your provider subaccount: - -```yaml -cds: - remote.services: - service-for-provider: - type: "odata-v4" - destination: - retrievalStrategy: "AlwaysProvider" - -``` - -Read more in the full reference of all [supported retrieval strategy values](https://sap.github.io/cloud-sdk/docs/java/features/connectivity/sdk-connectivity-destination-service#retrieval-strategy-options). Please note that the value must be provided in pascal case, for example: `AlwaysProvider`. - - -
diff --git a/guides/services/consuming-services.md b/guides/services/consuming-services.md index 8794d083aa..47bcc2a3a3 100644 --- a/guides/services/consuming-services.md +++ b/guides/services/consuming-services.md @@ -4,16 +4,227 @@ synopsis: > impl-variants: true --- +# Consuming Services +--- +> [!caution] Deprecation Notice +> **This guide is outdated** and has been replaced by the [_CAP-level Service Integration_](../integration/calesi.md) guide for up-to-date information about integrating remote services in CAP. The content of this guide is kept for archival purposes only for a limited time. +{.abstract} -# Consuming Services +--- +
If you want to use data from other services or you want to split your application into multiple microservices, you need a connection between those services. We call them **remote services**. As everything in CAP is a service, remote services are modeled the same way as internal services — using CDS. [[toc]] +## Introduction + +If you want to use data from other services or you want to split your application into multiple microservices, you need a connection between those services. We call them **remote services**. As everything in CAP is a service, remote services are modeled the same way as internal services — using CDS. + +CAP supports service consumption with dedicated APIs to [import](#import-external-apis) service definitions, [query](#execute-queries) remote services, [mash up](#handle-mashups-with-remote-services) services, and [work locally](#local-mocking) as much as possible. + + + + +### Feature Overview + +For outbound remote service consumption, the following features are supported: ++ OData V4 ++ OData V2 (Deprecated) ++ [Querying API](#querying-api-features) ++ [Projections on remote services](#supported-projection-features) + +### Tutorials and Examples +| Example | Description | +| ---------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| [Capire Bookstore (Fiori)](https://github.com/capire/bookstore/tree/main/app) | Example, Node.js, CAP-to-CAP | +| [Example Application (Node.js)](https://github.com/SAP-samples/cloud-cap-risk-management/tree/ext-service-s4hc-suppliers-ui) | Complete application from the end-to-end Tutorial | +| [Example Application (Java)](https://github.com/SAP-samples/cloud-cap-risk-management/tree/ext-service-s4hc-suppliers-ui-java) | Complete application from the end-to-end Tutorial | +| [Incident Management (Node.js)](https://github.com/SAP-samples/btp-developer-guide-cap/tree/main/documentation/remote-service) | Using a mock server or S/4 on Cloud Foundry or Kyma + +### Define Scenario + +Before you start your implementation, you should define your scenario. Answering the following questions gets you started: ++ What services (remote/CAP) are involved? ++ How do they interact? ++ What needs to be displayed on the UI? + +You have all your answers and know your scenario, go on reading about [external service APIs](#import-external-apis), getting an API definition from [the SAP Business Accelerator Hub](#from-sap-business-accelerator-hub) or [from a CAP project](#for-a-remote-cap-service), and [importing an API definition](#import-api-definition) to your project. + +#### Sample Scenario from End-to-End Tutorial + +![A graphic showing the flow for one possible scenario. A user can either view risks or view the suppliers. The suppliers master data is already available from a system and is consumed in an application that enables the user to add the risks. From the maintained risks the user can get information about the supplier connected to a risk. From the supplier view, it's also possible to get details about a risk that is associated with a supplier. The user can block/unblock suppliers from the risk view.](./assets/risk-mgmt.drawio.svg){style="width: 500px"} + +> [!info] _User Story_ +> A company wants to ensure that goods are only sourced from suppliers with acceptable risks. There shall be a software system, that allows a clerk to maintain risks for suppliers and their mitigations. The system shall block the supplier used if risks can't be mitigated. + +The application is an extension for SAP S/4HANA. It deals with _risks_ and _mitigations_ that are local entities in the application and _suppliers_ that are stored in SAP S/4HANA Cloud. The application helps to reduce risks associated with suppliers by automatically blocking suppliers with a high risk using a [remote API Call](#execute-queries). + +##### Integrate + +The user picks a supplier from the list. That list is coming [from the remote system and is exposed by the CAP application](#expose-remote-services). Then the user does a risk assessment. Additional supplier data, like name and blocked status, should be displayed on the UI as well, by [integrating the remote supplier service into the local risk service](#integrate-remote-into-local-services). + +##### Extend + +It should be also possible to search for suppliers and show the associated risks by extending the remote supplier service [with the local risk service](#extend-a-remote-by-a-local-service) and its risks. + +:::info New scenario: Incident Management +If you want to learn about this topic based on the [Incident Management](https://github.com/cap-js/incidents-app) sample, you can follow the [BTP Developer's Guide repository](https://github.com/SAP-samples/btp-developer-guide-cap/tree/main/documentation/remote-service). +::: + + + +## Import External APIs +###### external-service-api +###### import-api + +To communicate to remote services, CAP needs to know their definitions. Having the definitions in your project allows you to mock them during design time. + +These definitions are usually made available by the service provider. As they aren't defined within your application but imported from outside, they're called *external* service APIs in CAP. Service APIs can be provided in different formats. Currently, *EDMX* files for OData V2 and V4 are supported. + +### From SAP Business Accelerator Hub + +The [SAP Business Accelerator Hub](https://api.sap.com/) provides many relevant APIs from SAP. You can download API specifications in different formats. If available, use the EDMX format. The EDMX format describes OData interfaces. + +To download the [Business Partner API (A2X) from SAP S/4HANA Cloud](https://api.sap.com/api/API_BUSINESS_PARTNER/overview), go to section **API Resources**, select **API Specification**, and download the **EDMX** file. + +### For a Remote CAP Service + +We recommend using EDMX as exchange format. Export a service API to EDMX: + + + + +::: code-group +```sh [Mac/Linux] +cds compile srv -s OrdersService -2 edmx > OrdersService.edmx +``` + +```cmd [Windows] +cds compile srv -s OrdersService -2 edmx > OrdersService.edmx +``` + +```powershell [Powershell] +cds compile srv -s OrdersService -2 edmx -o dest/ +``` +::: + + +[You can try it with the orders sample in **capire/orders**.](https://github.com/capire/orders){.learn-more} + +By default, CAP works with OData V4 and the EDMX export is in this protocol version as well. The `cds compile` command offers options for other OData versions and flavors, call `cds help compile` for more information. +::: warning Don't just copy the CDS file for a remote CAP service +Simply copying CDS files from a different application comes with the following issues: +- The effective service API depends on the used protocol. +- CDS files often use includes, which can't be resolved anymore. +- CAP creates unneeded database tables and views for all entities in the file. +::: + +### Import API Definition + +Import the API to your project using `cds import`. + +```sh +cds import --as cds +``` + +> `` can be an EDMX (OData V2, OData V4), OpenAPI or AsyncAPI file. + +| Option | Description | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--as cds` | The import creates a CDS file (for example _API_BUSINESS_PARTNER.cds_) instead of a CSN file. | + + +This adds the API in CDS format to the _srv/external_ folder and also copies the input file into that folder. + +
+ +Further, it adds the API as an external service to your _package.json_. You use this declaration later to connect to the remote service [using a destination](#use-destinations-with-node-js). + +```json +"cds": { + "requires": { + "API_BUSINESS_PARTNER": { + "kind": "odata-v2", + "model": "srv/external/API_BUSINESS_PARTNER" + } + } +} +``` + +
+ +::: details Options and flags in _.cdsrc.json_ +Alternatively, you can set the options and flags for `cds import` in your _.cdsrc.json_: + +```json +{ + "import": { + "as": "cds", + "force": true, + "include_namespaces": "sap,c4c" + } +} +``` + +Now run `cds import ` + +- `--as` only supports these formats: "csn","cds", and "json" +- `--force` is applicable only in combination with `--as` option. By default the `--force` flag is set to false. + > If set to true, existing CSN/CDS files from previous imports are overwritten. + ::: + +When importing the specification files, the `kind` is set according to the following mapping: + +| Imported Format | Used `kind` | +|-----------------|--------------------------------| +| OData V2 | `odata-v2` | +| OData V4 | `odata` (alias for `odata-v4`) | +| OpenAPI | `rest` | +| AsyncAPI | `odata` | + +[Learn more about type mappings from OData to CDS and vice versa.](../../tools/apis/cds-import#odata-type-mappings){.learn-more} + +::: tip +Always use OData V4 (`odata`) when calling another CAP service. +::: + +::: warning Limitations +Not all features of OData, OpenAPI, or AsyncAPI are supported in CAP which may lead to the rejection of the imported model by the CDS compiler or may result in a different API when rendered by CAP. +Known limitations are cyclic type references and inheritance. +::: + +
+ +You need to configure remote services in Spring Boot's _application.yaml_: +::: code-group +```yaml [srv/src/main/resources/application.yaml] +spring: + config.activate.on-profile: cloud +cds: + remote.services: + API_BUSINESS_PARTNER: + type: "odata-v2" +``` +::: +To work with remote services, add the following dependency to your Maven project: + +```xml + + com.sap.cds + cds-feature-remote-odata + runtime + +``` + +[Learn about all `cds.remote.services` configuration possibilities.](../../java/developing-applications/properties){.learn-more} + +
## Local Mocking @@ -274,6 +485,7 @@ const result = await bupa.run(SELECT.from(A_BusinessPartner, bp => { [Learn more about querying API examples.](https://github.com/SAP-samples/cloud-cap-risk-management/blob/ext-service-s4hc-suppliers-ui/test/odata-examples.js){.learn-more} +[Learn more about supported querying API features.](#querying-api-features){.learn-more} ### Execute Queries with Java @@ -294,10 +506,11 @@ List businessPartner = bupa.run(select).listOf(ABusinessPartne [Learn more about querying API examples.](https://github.com/SAP-samples/cloud-cap-risk-management/blob/ext-service-s4hc-suppliers-ui/test/odata-examples.js){.learn-more} +[Learn more about supported querying API features.](#querying-api-features){.learn-more} ### Model Projections -External service definitions, like generated CDS or CSN files during import, can be used as any other CDS definition, but they **don't** generate database tables and views unless they are mocked. +External service definitions, like [generated CDS or CSN files during import](#import-external-apis), can be used as any other CDS definition, but they **don't** generate database tables and views unless they are mocked. It's best practice to use your own "interface" to the external service and define the relevant fields in a projection in your namespace. Your implementation is then independent of the remote service implementation and you request only the information that you require. @@ -313,6 +526,7 @@ entity Suppliers as projection on bupa.A_BusinessPartner { As the example shows, you can use field aliases as well. +[Learn more about supported features for projections.](#supported-projection-features){.learn-more} ### Execute Queries on Projections to a Remote Service @@ -367,7 +581,7 @@ For Java, you can use the `HttpClient` API to implement your custom requests. Th By creating projections on remote service entities and using associations, you can create services that combine data from your local service and remote services. -What you need to do depends on the scenarios and how your remote services should be integrated into, as well as extended by your local services. +What you need to do depends on [the scenarios](#sample-scenario-from-end-to-end-tutorial) and how your remote services should be integrated into, as well as extended by your local services. ### Expose Remote Services @@ -534,7 +748,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. @@ -648,7 +862,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. @@ -697,6 +911,12 @@ The following matrix can help you to find the best approach for your scenario: ## Connect and Deploy + + + ### Using Destinations @@ -805,11 +1025,11 @@ 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. -Application defined destinations support a subset of properties and authentication types of the SAP BTP destination service. +Application defined destinations support a subset of [properties](#destination-properties) and [authentication types](#authentication-types) of the SAP BTP destination service. ##### Configure Application Defined Destinations in Node.js @@ -842,7 +1062,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} ::: warning Warning: You should not put any sensitive information here! @@ -909,7 +1131,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. @@ -931,6 +1153,7 @@ cds: ``` ::: +[Learn more about supported destination properties.](#destination-properties){.learn-more} ##### Implement Application Defined Destinations in Java @@ -1014,7 +1237,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 @@ -1181,13 +1404,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 @@ -1300,3 +1523,159 @@ Read more in the full reference of all [supported retrieval strategy values](htt
+ + +## Add Qualities + +
+ +### Resilience + +There are two ways to make your outbound communications resilient: + +1. Run your application in a service mesh (for example, Istio, Linkerd, etc.). For example, [Kyma is provided as service mesh](#resilience-in-kyma). +2. Implement resilience in your application. + +Refer to the documentation for the service mesh of your choice for instructions. No code changes should be required. + + +To build resilience into your application, there are libraries to help you implement functions, like doing retries, circuit breakers or implementing fallbacks. + +
+ +You can use the [resilience features](https://sap.github.io/cloud-sdk/docs/java/features/resilience) provided by the SAP Cloud SDK with CAP Java. You need to wrap your remote calls with a call of `ResilienceDecorator.executeSupplier` and a resilience configuration (`ResilienceConfiguration`). Additionally, you can provide a fallback function. + +```java +ResilienceConfiguration config = ResilienceConfiguration.of(AdminServiceAddressHandler.class) + .timeLimiterConfiguration(TimeLimiterConfiguration.of(Duration.ofSeconds(10))); + +context.setResult(ResilienceDecorator.executeSupplier(() -> { + // ..to access the S/4 system in a resilient way.. + logger.info("Delegating GET Addresses to S/4 service"); + return bupa.run(select); +}, config, (t) -> { + // ..falling back to the already replicated addresses in our own database + logger.warn("Falling back to already replicated Addresses"); + return db.run(select); +})); +``` + +[See the full example](https://github.com/SAP-samples/cloud-cap-samples-java/blob/main/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java){.learn-more} + +
+ +
+ + +There's no resilience library provided out of the box for CAP Node.js. However, you can use packages provided by the Node.js community. Usually, they provide a function to wrap your code that adds the resilience logic. + +
+ +#### Resilience in Kyma + +Kyma clusters run an [Istio](https://istio.io/) service mesh. Istio allows to [configure resilience](https://istio.io/latest/docs/concepts/traffic-management/#network-resilience-and-testing) for the network destinations of your service mesh. + +### Tracing + +CAP adds headers for request correlation to its outbound requests that allows logging and tracing across micro services. + +[Learn more about request correlation in Node.js.](../../node.js/cds-log#node-observability-correlation){.learn-more .node} +[Learn more about request correlation in Java.](../../java/operating-applications/observability#correlation-ids){.learn-more .java} + +
+ +## Feature Details + + + + +### Legend + +| Tag | Explanation | +|:----:|---------------| +| | supported | +| | not supported | + +### Supported Protocols + +| Protocol | Java | Node.js | +|----------|:----:|:-------:| +| odata-v2 | | | +| odata-v4 | | | +| rest | | | + +::: tip +The Node.js runtime supports `odata` as an alias for `odata-v4` as well. +::: + +### Querying API Features + +| Feature | Java | Node.js | +|------------------------------------|:----:|:-------:| +| READ | | | +| INSERT/UPDATE/DELETE | | | +| Actions | | | +| `columns` | | | +| `where` | | | +| `orderby` | | | +| `limit` (top & skip) | | | +| `$apply` (aggregate, groupby, ...) | | | +| `$search` (OData v4) | | | +| `search` (SAP OData v2 extension) | | | + +### Supported Projection Features + +| Feature | Java | Node.js | +|-----------------------------------------------------------|:----:|:-------:| +| Resolve projections to remote services | | | +| Resolve multiple levels of projections to remote services | | | +| Aliases for fields | | | +| `excluding` | | | +| Resolve associations (within the same remote service) | | | +| Redirected associations | | | +| Flatten associations | | | +| `where` conditions | | | +| `order by` | | | +| Infix filter for associations | | | +| Model Associations with mixins | | | + +### Supported Features for Application Defined Destinations + +The following properties and authentication types are supported for *[application defined destinations](#use-application-defined-destinations)*: + +#### Destination Properties + +These destination properties are fully supported by both, the Java and the Node.js runtime. +::: tip +This list specifies the properties for application defined destinations. +::: + +| Properties | Description | +| -------------------------- | ----------------------------------------- | +| `url` | | +| `authentication` | Authentication type | +| `username` | User name for BasicAuthentication | +| `password` | Password for BasicAuthentication | +| `headers` | Map of HTTP headers | +| `queries` | Map of URL parameters | +| `forwardAuthToken` | [Forward auth token](#forward-auth-token) | + +[Destination Type in SAP Cloud SDK for JavaScript](https://sap.github.io/cloud-sdk/api/v4/interfaces/sap-cloud-sdk_connectivity.Destination.html){.learn-more .node} +[HttpDestination Type in SAP Cloud SDK for Java](https://help.sap.com/doc/82a32040212742019ce79dda40f789b9/1.0/en-US/index.html){.learn-more .java} + +#### Authentication Types + +| Authentication Types | Java | Node.js | +|-------------------------|:-----------------------------------------------------------------------:|:------------------------------:| +| NoAuthentication | | | +| BasicAuthentication | | | +| TokenForwarding | |
Use `forwardAuthToken` | +| OAuth2ClientCredentials | [code only](../../java/cqn-services/remote-services#programmatic-destinations) | | +| UserTokenAuthentication | [code only](../../java/cqn-services/remote-services#programmatic-destinations) | | diff --git a/guides/services/index.md b/guides/services/index.md index c275ad3446..46c9e8b083 100644 --- a/guides/services/index.md +++ b/guides/services/index.md @@ -23,6 +23,3 @@ status: released [Serving Media Data](media-data.md) : Store and stream media and binary data either in the database or external repositories using OData V4's media resource support. - -[Consuming Services](consuming-services.md) - : Connect to local or remote services using uniform APIs for importing definitions, querying, and building service mashups. From 94c9209809c6c6db59406d55cef2d51f5868881a Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 12:19:43 +0100 Subject: [PATCH 387/439] ... --- guides/integration/_menu-parked.md | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/guides/integration/_menu-parked.md b/guides/integration/_menu-parked.md index c81dccfa47..f3d88a1c4b 100644 --- a/guides/integration/_menu-parked.md +++ b/guides/integration/_menu-parked.md @@ -1,20 +1,19 @@ -# [ CAP-level Service Integration ](calesi) -# [ CAP-level Data Federation ](data-federation) -# [ Inner Loop Development ](inner-loops) -# [ Reuse & Compose ](reuse-and-compose) - -# [ Service Bindings ](service-bindings) +# [ CAP-level Service Integration ](calesi.md) +# [ CAP-level Data Federation ](data-federation.md) +# [ Inner Loop Development ](inner-loops.md) +# [ Reuse & Compose ](reuse-and-compose.md) +# [ Service Bindings ](service-bindings.md) # Platform Services - ## [ Application Gateways ](platform/app-gateways) - ## [ Identity & Authentication ](platform/ias-xsuaa) - ## [ Portal Services ](platform/portal-services) - ## [ Attachments ](platform/attachments) - ## [ Audit Logging ](platform/audit-logging) - ## [ Notifications ](platform/notifications) - ## [ Telemetry ](platform/telemetry) - ## [ Change Tracking ](platform/change-tracking) + ## [ Application Gateways ](platform/app-gateways.md) + ## [ Identity & Authentication ](platform/ias-xsuaa.md) + ## [ Portal Services ](platform/portal-services.md) + ## [ Attachments ](platform/attachments.md) + ## [ Audit Logging ](platform/audit-logging.md) + ## [ Notifications ](platform/notifications.md) + ## [ Telemetry ](platform/telemetry.md) + ## [ Change Tracking ](platform/change-tracking.md) -# [ CAP Plugins Guide ](plugins-guide) +# [ CAP Plugins Guide ](plugins-guide.md) From 48ebab65b0baa5536bc8ff4facabac40ff647dc5 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 12:32:40 +0100 Subject: [PATCH 388/439] ... --- guides/databases/cap-level-dbs.md | 2 +- guides/databases/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/databases/cap-level-dbs.md b/guides/databases/cap-level-dbs.md index 656eeac85c..52414884da 100644 --- a/guides/databases/cap-level-dbs.md +++ b/guides/databases/cap-level-dbs.md @@ -1,4 +1,4 @@ -# CAP-Level Database Integration +# CAP-Level Database Support CAP supports a number of portable functions and operators in CQL. The compiler automatically translates these to the best-possible database-specific native SQL equivalents. You can safely use these in CDS view definitions and runtime queries expressed in CQL. {.abstract} diff --git a/guides/databases/index.md b/guides/databases/index.md index 87dfe976ee..1c05847606 100644 --- a/guides/databases/index.md +++ b/guides/databases/index.md @@ -1,5 +1,5 @@ -# CAP-level Database Integration +# CAP-Level Database Integration CAP application developers [focus on their domain](../../get-started/features#focus-on-domain), while CAP takes care of all aspects of database integration. This includes translating CDS models to native persistence models, schema evolution, deployment, as well as runtime querying – all of that in a database-agnostic way. [SQLite](./sqlite) 1 in-memory databases are automatically used in inner-loop development, while in production, [SAP HANA](./hana) 2 is used by default. {.abstract} From 87aaf8ea07c5c4e45b761ca96135249ebe90ad39 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 14:16:57 +0100 Subject: [PATCH 389/439] fixed broken link to unreleased --- guides/integration/calesi.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index 1f889c5b84..bbf4799140 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -492,8 +492,6 @@ srv/external > Run `cds import` with option `--as cds` to generate a human-readable `.cds` file instead of `.csn`. -Further, it adds a [service binding](./service-bindings) stub to your _package.json_, which we'll learn about later. - > [!tip] Import from other APIs > You can use `cds import` in the same way as for OData to import SAP data products, [_OpenAPI_](../protocols/openapi) definitions, [_AsyncAPI_](../protocols/asyncapi) definitions, or from [_ABAP RFC_](../../plugins/#abap-rfc). For example: From 247f2084bc85e59598b98229c596aad9e618bbc6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Feb 2026 14:32:57 +0100 Subject: [PATCH 390/439] chore(deps): update dependency com.sap.cds:cds-services-api to v4.7.0 (#2356) 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.cds:cds-services-api](https://cap.cloud.sap/docs/java) | `4.6.2` → `4.7.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.sap.cds:cds-services-api/4.7.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.sap.cds:cds-services-api/4.6.2/4.7.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 78e8e56df0..a08952cbd6 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -116,7 +116,7 @@ const siteURL = new URL(process.env.SITE_HOSTNAME || 'http://localhost:4173/docs if (!siteURL.pathname.endsWith('/')) siteURL.pathname += '/' config.themeConfig.capire = { versions: { - java_services: '4.6.2', + java_services: '4.7.0', java_cds4j: '4.7.0' }, gotoLinks: [], From b0c26f3b0d1c7331f3fe51ee7d946194f226b099 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 14:34:52 +0100 Subject: [PATCH 391/439] polishing --- .vitepress/theme/styles.scss | 1 + guides/integration/calesi.md | 24 +++++++++++------------- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/.vitepress/theme/styles.scss b/.vitepress/theme/styles.scss index 9cade7b146..4a8cf367bf 100644 --- a/.vitepress/theme/styles.scss +++ b/.vitepress/theme/styles.scss @@ -20,6 +20,7 @@ html { :root { --vp-font-family-avenir: 'Avenir Next', var(--vp-font-family-base); + --vp-font-family-mono: Menlo, Monaco, 'Courier New', monospace; // Layout sizes // .VPContent .aside { max-width: 270px}; diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index bbf4799140..30c6987b95 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -490,7 +490,7 @@ srv/external └── API_BUSINESS_PARTNER.edmx ``` -> Run `cds import` with option `--as cds` to generate a human-readable `.cds` file instead of `.csn`. +> Add option `--as cds` to generate a human-readable `.cds` file instead of `.csn`. > [!tip] Import from other APIs @@ -628,20 +628,20 @@ namespace sap.capire.s4; @federated entity Customers as projection on S4.A_BusinessPartner { BusinessPartner as ID, PersonFullName as Name, - LastChangeDate || 'T' || LastChangeTime || 'Z' as modifiedAt, + LastChangeDate as modifiedAt, } where BusinessPartnerCategory == 1; // 1 = Person ``` ::: Noteworthy aspects here are: -- We map names to match our domain, for example by renaming the imported entity from `A_Business_Partner` to `Customers`, choose simpler names for the elements we want to use, and combine date and time fields into a single `modifiedAt` timestamp in ISO 8601 format. +- We map names to match our domain, e.g., `A_Business_Partner` -> `Customers`, and choose simpler names for the elements we want to use. -- For the `Flights` entity we also flatten data from associations directly into the `Flights` consumption view. This is another [denormalization](#using-denormalized-views) to make life easier for us in the xtravels app. +- For entity `Flights` we flatten data from associations directly into the consumption view. This is another [denormalization](#using-denormalized-views) to make life easier for us in the xtravels app. - The namespaces `sap.capire.s4` and `sap.capire.xflights` reflect the source systems but differ from the original namespaces to avoid name clashes. -- We annotate both views with `@federated` to trigger data federation, covered in the next chapters. +- We add `@federated` annotations, which we'll use later on to automate [data federation](#data-federation). > [!tip] Always use Consumption Views @@ -669,7 +669,7 @@ With consumption views in place, you can now reference them from your models _as Flight : Association to x.Flights; } ``` -- Line 26 – Each _Booking_ references a _Flight_ from the external xflights service, which allows us to display flight details alongside bookings. +- Each _Booking_ references a _Flight_ from the external xflights service, which allows us to display flight details alongside bookings. #### Associations from Remote @@ -683,9 +683,7 @@ With consumption views in place, you can now reference them from your models _as Bookings : Association to many Bookings on Bookings.Flight = $self } ``` - - -- Line 74 – Adds a backlink from _Flights_ to _Bookings_ for bidirectional traversal. +- Adds a backlink from _Flights_ to _Bookings_ for bidirectional traversal. ::: details Limitations of Remote Extensions Extensions to remote entities, as shown above, are only possible for elements which would not require changes to the remote service's actual data. This is the case for _virtual_ elements and _calculated_ fields, as well as **_unmanaged_** associations, as all foreign keys are local. It's not possible for regular elements or _managed_ associations, though. @@ -707,7 +705,7 @@ annotate TravelService.Bookings with { ... ``` ::: -- Line 46 – Adds a constraint to the _Flight.date_ element to ensure that the flight date of a booked _Flight_ falls within the travel period of the associated _Travel_. +- Adds a constraint to the _Flight.date_ element to ensure that the flight date of a booked _Flight_ falls within the travel period of the associated _Travel_. ### Serving UIs @@ -723,7 +721,7 @@ using { sap.capire.xflights as x } from '../apis/capire/xflights'; } ``` -- Line 17 – Exposes the _Flights_ entity in the _TravelService_ for UI consumption. +- Exposes the _Flights_ entity in the _TravelService_ for UI consumption. This is required as associations to non-exposed entities would be cut off, which would apply to the _Bookings_ -> _x.Flights_ association if we did not expose _x.Flights_. @@ -779,7 +777,7 @@ With mashed up models, you can run applications in _'airplane mode'_ without ups 1. Start the xtravels application locally using `cds watch` as usual, and note the output about the integrated services being mocked automatically: - ```shell + ```shell :line-numbers=1 cds watch ``` ```zsh @@ -787,13 +785,13 @@ With mashed up models, you can run applications in _'airplane mode'_ without ups at: [ '/odata/v4/s4-business-partner' ], decl: 's4/external/API_BUSINESS_PARTNER.csn:7' } + ``` ```zsh [cds] - mocking sap.capire.flights.data { at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], decl: 'xflights/apis/data-service/services.csn:3' } ``` - ``` 2. Open the Fiori UI in the browser -> it displays data from both, local and imported entities, seamlessly integrated as shown in the screenshot below (the data highlighted in green is mocked data from `@capire/s4`). From f00089e94eb44e5e045139968f194a481ee673b2 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 14:56:33 +0100 Subject: [PATCH 392/439] polishing --- guides/integration/data-federation.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guides/integration/data-federation.md b/guides/integration/data-federation.md index cf0ecda0cc..d634656c35 100644 --- a/guides/integration/data-federation.md +++ b/guides/integration/data-federation.md @@ -12,16 +12,16 @@ For example, we saw the need for that already in the [CAP-level Service Integrat 1. First run these commands **in two separate terminals**: - ```shell + ```shell :line-numbers=1 cds mock apis/capire/s4.cds ``` - ```shell + ```shell :line-numbers=2 cds mock apis/capire/xflights.cds ``` 2. Start the xtravels server as usual **in a third terminal**, and note that it now _connects_ to the other services instead of mocking them: - ```shell + ```shell :line-numbers=3 cds watch ``` ```zsh From c89a229d83da532bed6e36ffd1b6c2226c2bcde2 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 16:19:26 +0100 Subject: [PATCH 393/439] fixed redirects --- redirects.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/redirects.md b/redirects.md index a59cd3ead9..8266826c3e 100644 --- a/redirects.md +++ b/redirects.md @@ -1,8 +1,9 @@ ## Getting Started Guides -- [about](get-started/concepts) +- [about/](get-started/concepts) - [about/best-practices](get-started/features#served-out-of-the-box) - [about/features](get-started/features) + - [get-started/in-a-nutshell](get-started/bookshop) - [get-started/learning-sources](get-started/learn-more) - [get-started/troubleshooting](get-started/get-help) @@ -29,7 +30,7 @@ - [guides/i18n](guides/uis/i18n) - [guides/localized-data](guides/uis/localized-data) - [guides/media-data](guides/services/media-data) -- [guides/messaging](guides/events/) +- [guides/messaging/(.*)](guides/events/$1) - [guides/providing-services](guides/services/providing-services) - [guides/reuse-and-compose](guides/integration/reuse-and-compose) - [guides/services](guides/services/providing-services) From 034e80293577bda6eee80b9df25ea3f5765e7f03 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 16:27:55 +0100 Subject: [PATCH 394/439] Update redirects.md --- redirects.md | 1 + 1 file changed, 1 insertion(+) diff --git a/redirects.md b/redirects.md index 8266826c3e..590d6d1788 100644 --- a/redirects.md +++ b/redirects.md @@ -31,6 +31,7 @@ - [guides/localized-data](guides/uis/localized-data) - [guides/media-data](guides/services/media-data) - [guides/messaging/(.*)](guides/events/$1) +- [guides/messaging/event-broker](guides/events/event-hub) - [guides/providing-services](guides/services/providing-services) - [guides/reuse-and-compose](guides/integration/reuse-and-compose) - [guides/services](guides/services/providing-services) From c7706215545402291f4a9fe3661d9a474b8fb24e Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Mon, 2 Feb 2026 17:19:05 +0100 Subject: [PATCH 395/439] Don't line-break code snippets --- .vitepress/theme/styles.scss | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.vitepress/theme/styles.scss b/.vitepress/theme/styles.scss index 4a8cf367bf..2989dbbbde 100644 --- a/.vitepress/theme/styles.scss +++ b/.vitepress/theme/styles.scss @@ -193,6 +193,10 @@ main .vp-doc { .dark & { background: #222 } } + code { + white-space: nowrap; + } + .cols-2 { display: flex; flex-wrap: wrap; From 88f3d7dab76097261046cc52e9c58211b05c46c7 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 2 Feb 2026 17:29:09 +0100 Subject: [PATCH 396/439] one more redirects fix --- redirects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redirects.md b/redirects.md index 590d6d1788..dfdc748400 100644 --- a/redirects.md +++ b/redirects.md @@ -20,8 +20,8 @@ - [guides/authorization](guides/security/authorization) - [guides/consuming-services](guides/integration/calesi) - [guides/data-privacy](guides/security/data-privacy) -- [guides/deployment](guides/deploy/) - [guides/deploy-to-cloud](guides/deploy/) +- [guides/deployment/(.*)](guides/deploy/$1) - [guides/deployment/deploy-to-kyma](guides/deploy/to-kyma) - [guides/domain-models](guides/domain/) - [guides/domain-modeling](guides/domain/) From 4d78648f5bb01daca94708a6949b73dd7038ab53 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Tue, 3 Feb 2026 09:13:48 +0100 Subject: [PATCH 397/439] polishing --- index.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/index.md b/index.md index 1e94bf0941..8a7b589d3e 100644 --- a/index.md +++ b/index.md @@ -8,10 +8,9 @@ hero: image: /logos/cap.svg tagline: - Build cloud-native applications - with maximized productivity - at minimized costs, - and proven best practices + Build enterprise-grade cloud applications + with maximized productivity, + fueled by proven best practices, served out of the box. actions: @@ -36,9 +35,9 @@ features: - title: Rapid Development icon: ⭕️ details: - •  Jumpstart & grow as you go...
- •  Fast, local inner loops
- •  Minimized boilerplate
+ •  Jumpstart & Grow as you go...
+ •  Fast local inner loops
+ •  Decoupled dev tracks
link: get-started/ linkText: Getting Started @@ -47,7 +46,7 @@ features: details: •  Capture intent → What, not how!
•  Separation of concerns
- •  Minimized technical debts
+ •  Minimized technical debt
link: get-started/features linkText: Features Overview From 2b1bbde53d0d46dba80ce226101b4950f6f8dedb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 11:12:05 +0100 Subject: [PATCH 398/439] chore(deps): update dependency @sap/cds to v9.7.0 (#2357) 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/) | |---|---|---|---| | [@sap/cds](https://cap.cloud.sap/) | [`9.6.4` → `9.7.0`](https://renovatebot.com/diffs/npm/@sap%2fcds/9.6.4/9.7.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@sap%2fcds/9.7.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@sap%2fcds/9.6.4/9.7.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> --- package-lock.json | 114 ++++++++-------------------------------------- 1 file changed, 19 insertions(+), 95 deletions(-) diff --git a/package-lock.json b/package-lock.json index 598a5d2c0b..d75b00c550 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2429,14 +2429,15 @@ ] }, "node_modules/@sap/cds": { - "version": "9.6.4", - "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-9.6.4.tgz", - "integrity": "sha512-GPVuMxfQsuSs4q27gdFoof4rJhugXwhn7CSsP25XIRbyxZF4Us6pJrDgHUCip0IV9xUn/2CY/BxXPlhE0+Y+FA==", + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-9.7.0.tgz", + "integrity": "sha512-E2ntY7l98fIIbhRbgjxL/M3+iM0mAOz8ehNu+evCUusQHveTWyx3b4DQomJaD4yOAlzMq1m26iDYQBT8HuSIpg==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { - "@sap/cds-compiler": "^6.3", + "@sap/cds-compiler": "^6.4", "@sap/cds-fiori": "^2", + "express": "^4.22.1 || ^5", "js-yaml": "^4.1.1" }, "bin": { @@ -2448,13 +2449,9 @@ }, "peerDependencies": { "@eslint/js": "^9", - "express": "^4", - "tar": "^7" + "tar": "^7.5.6" }, "peerDependenciesMeta": { - "express": { - "optional": true - }, "tar": { "optional": true } @@ -3373,7 +3370,6 @@ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -3506,8 +3502,7 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/array-timsort": { "version": "1.0.3", @@ -3539,7 +3534,6 @@ "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "bytes": "~3.1.2", "content-type": "~1.0.5", @@ -3565,7 +3559,6 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ms": "2.0.0" } @@ -3575,8 +3568,7 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/boolbase": { "version": "1.0.0", @@ -3601,7 +3593,6 @@ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8" } @@ -3612,7 +3603,6 @@ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -3627,7 +3617,6 @@ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -3835,7 +3824,6 @@ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "safe-buffer": "5.2.1" }, @@ -3849,7 +3837,6 @@ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -3860,7 +3847,6 @@ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -3870,8 +3856,7 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/copy-anything": { "version": "4.0.5", @@ -4170,7 +4155,6 @@ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8" } @@ -4191,7 +4175,6 @@ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -4228,7 +4211,6 @@ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -4243,8 +4225,7 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/emoji-regex-xs": { "version": "1.0.0", @@ -4259,7 +4240,6 @@ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8" } @@ -4296,7 +4276,6 @@ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" } @@ -4307,7 +4286,6 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" } @@ -4318,7 +4296,6 @@ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -4370,8 +4347,7 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", @@ -4640,7 +4616,6 @@ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -4651,7 +4626,6 @@ "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -4699,7 +4673,6 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ms": "2.0.0" } @@ -4709,8 +4682,7 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -4787,7 +4759,6 @@ "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", @@ -4807,7 +4778,6 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ms": "2.0.0" } @@ -4817,8 +4787,7 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", @@ -4894,7 +4863,6 @@ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -4905,7 +4873,6 @@ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -4931,7 +4898,6 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4965,7 +4931,6 @@ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -4991,7 +4956,6 @@ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -5048,7 +5012,6 @@ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" }, @@ -5072,7 +5035,6 @@ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" }, @@ -5086,7 +5048,6 @@ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -5156,7 +5117,6 @@ "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", @@ -5178,7 +5138,6 @@ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -5269,8 +5228,7 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/ini": { "version": "4.1.1", @@ -5288,7 +5246,6 @@ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.10" } @@ -5718,7 +5675,6 @@ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" } @@ -5971,7 +5927,6 @@ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -5982,7 +5937,6 @@ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -5993,7 +5947,6 @@ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -6563,7 +6516,6 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "mime": "cli.js" }, @@ -6577,7 +6529,6 @@ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -6588,7 +6539,6 @@ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "mime-db": "1.52.0" }, @@ -6682,7 +6632,6 @@ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -6714,7 +6663,6 @@ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4" }, @@ -6735,7 +6683,6 @@ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ee-first": "1.1.1" }, @@ -6858,7 +6805,6 @@ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8" } @@ -6895,8 +6841,7 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/perfect-debounce": { "version": "1.0.0", @@ -7006,7 +6951,6 @@ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -7041,7 +6985,6 @@ "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "side-channel": "^1.1.0" }, @@ -7058,7 +7001,6 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.6" } @@ -7069,7 +7011,6 @@ "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", @@ -7218,16 +7159,14 @@ "url": "https://feross.org/support" } ], - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/sass": { "version": "1.97.3", @@ -7277,7 +7216,6 @@ "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -7303,7 +7241,6 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "ms": "2.0.0" } @@ -7313,8 +7250,7 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/serve-static": { "version": "1.16.3", @@ -7322,7 +7258,6 @@ "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", @@ -7338,8 +7273,7 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true, - "license": "ISC", - "peer": true + "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -7387,7 +7321,6 @@ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -7408,7 +7341,6 @@ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -7426,7 +7358,6 @@ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -7446,7 +7377,6 @@ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -7511,7 +7441,6 @@ "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8" } @@ -7633,7 +7562,6 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=0.6" } @@ -7720,7 +7648,6 @@ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -7837,7 +7764,6 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8" } @@ -7865,7 +7791,6 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.4.0" } @@ -7876,7 +7801,6 @@ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">= 0.8" } From 0d58f8b2f0822107869d233c0f14f4b28cad53b6 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Tue, 3 Feb 2026 11:16:17 +0100 Subject: [PATCH 399/439] .. --- guides/databases/cap-level-dbs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/databases/cap-level-dbs.md b/guides/databases/cap-level-dbs.md index 52414884da..55ab31dc3f 100644 --- a/guides/databases/cap-level-dbs.md +++ b/guides/databases/cap-level-dbs.md @@ -156,7 +156,7 @@ SELECT firstName || ' ' || lastName as fullName from Authors; - `seconds_between(x,y)` -> number > [!note] CAP Java support coming soon... -> The above `*_between` functions are currently only supported by CAP Node.js. \ +> The above date / time functions are currently only supported by CAP Node.js. \ > Support for CAP Java is planned for a future release. From 24d7db176627144e85f3c58032ddf6ab97005700 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 10:22:39 +0000 Subject: [PATCH 400/439] chore(deps): update dependency @shikijs/vitepress-twoslash to v3.22.0 (#2354) 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/vitepress-twoslash](https://redirect.github.com/shikijs/shiki) ([source](https://redirect.github.com/shikijs/shiki/tree/HEAD/packages/vitepress-twoslash)) | [`3.21.0` → `3.22.0`](https://renovatebot.com/diffs/npm/@shikijs%2fvitepress-twoslash/3.21.0/3.22.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@shikijs%2fvitepress-twoslash/3.22.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@shikijs%2fvitepress-twoslash/3.21.0/3.22.0?slim=true) | --- ### Release Notes
shikijs/shiki (@​shikijs/vitepress-twoslash) ### [`v3.22.0`](https://redirect.github.com/shikijs/shiki/releases/tag/v3.22.0) [Compare Source](https://redirect.github.com/shikijs/shiki/compare/v3.21.0...v3.22.0) #####    🚀 Features - Update grammar and themes  -  by [@​antfu](https://redirect.github.com/antfu) [(40676)](https://redirect.github.com/shikijs/shiki/commit/40676761) #####     [View changes on GitHub](https://redirect.github.com/shikijs/shiki/compare/v3.21.0...v3.22.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 | 86 +++++++++++++++++++++++------------------------ 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/package-lock.json b/package-lock.json index d75b00c550..88c4db139b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2484,59 +2484,59 @@ } }, "node_modules/@shikijs/core": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.21.0.tgz", - "integrity": "sha512-AXSQu/2n1UIQekY8euBJlvFYZIw0PHY63jUzGbrOma4wPxzznJXTXkri+QcHeBNaFxiiOljKxxJkVSoB3PjbyA==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.22.0.tgz", + "integrity": "sha512-iAlTtSDDbJiRpvgL5ugKEATDtHdUVkqgHDm/gbD2ZS9c88mx7G1zSYjjOxp5Qa0eaW0MAQosFRmJSk354PRoQA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0", + "@shikijs/types": "3.22.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.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.21.0.tgz", - "integrity": "sha512-ATwv86xlbmfD9n9gKRiwuPpWgPENAWCLwYCGz9ugTJlsO2kOzhOkvoyV/UD+tJ0uT7YRyD530x6ugNSffmvIiQ==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.22.0.tgz", + "integrity": "sha512-jdKhfgW9CRtj3Tor0L7+yPwdG3CgP7W+ZEqSsojrMzCjD1e0IxIbwUMDDpYlVBlC08TACg4puwFGkZfLS+56Tw==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0", + "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.4" } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.21.0.tgz", - "integrity": "sha512-OYknTCct6qiwpQDqDdf3iedRdzj6hFlOPv5hMvI+hkWfCKs5mlJ4TXziBG9nyabLwGulrUjHiCq3xCspSzErYQ==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.22.0.tgz", + "integrity": "sha512-DyXsOG0vGtNtl7ygvabHd7Mt5EY8gCNqR9Y7Lpbbd/PbJvgWrqaKzH1JW6H6qFkuUa8aCxoiYVv8/YfFljiQxA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0", + "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "^10.0.2" } }, "node_modules/@shikijs/langs": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.21.0.tgz", - "integrity": "sha512-g6mn5m+Y6GBJ4wxmBYqalK9Sp0CFkUqfNzUy2pJglUginz6ZpWbaWjDB4fbQ/8SHzFjYbtU6Ddlp1pc+PPNDVA==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.22.0.tgz", + "integrity": "sha512-x/42TfhWmp6H00T6uwVrdTJGKgNdFbrEdhaDwSR5fd5zhQ1Q46bHq9EO61SCEWJR0HY7z2HNDMaBZp8JRmKiIA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0" + "@shikijs/types": "3.22.0" } }, "node_modules/@shikijs/themes": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.21.0.tgz", - "integrity": "sha512-BAE4cr9EDiZyYzwIHEk7JTBJ9CzlPuM4PchfcA5ao1dWXb25nv6hYsoDiBq2aZK9E3dlt3WB78uI96UESD+8Mw==", + "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==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.21.0" + "@shikijs/types": "3.22.0" } }, "node_modules/@shikijs/transformers": { @@ -2612,14 +2612,14 @@ } }, "node_modules/@shikijs/twoslash": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.21.0.tgz", - "integrity": "sha512-iH360udAYON2JwfIldoCiMZr9MljuQA5QRBivKLpEuEpmVCSwrR+0WTQ0eS1ptgGBdH9weFiIsA5wJDzsEzTYg==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-3.22.0.tgz", + "integrity": "sha512-GO27UPN+kegOMQvC+4XcLt0Mttyg+n16XKjmoKjdaNZoW+sOJV7FLdv2QKauqUDws6nE3EQPD+TFHEdyyoUBDw==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.21.0", - "@shikijs/types": "3.21.0", + "@shikijs/core": "3.22.0", + "@shikijs/types": "3.22.0", "twoslash": "^0.3.6" }, "peerDependencies": { @@ -2627,9 +2627,9 @@ } }, "node_modules/@shikijs/types": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.21.0.tgz", - "integrity": "sha512-zGrWOxZ0/+0ovPY7PvBU2gIS9tmhSUUt30jAcNV0Bq0gb2S98gwfjIs1vxlmH5zM7/4YxLamT6ChlqqAJmPPjA==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz", + "integrity": "sha512-491iAekgKDBFE67z70Ok5a8KBMsQ2IJwOWw3us/7ffQkIBCyOQfm/aNwVMBUriP02QshIfgHCBSIYAl3u2eWjg==", "dev": true, "license": "MIT", "dependencies": { @@ -2638,13 +2638,13 @@ } }, "node_modules/@shikijs/vitepress-twoslash": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-3.21.0.tgz", - "integrity": "sha512-R9qylCClKnLlPlWloY9SGdvr5X6smanxdPq7O1bxe7SL89j4/v9fMUUAWM6yPHf4jmGZuRGm/9IFRBdaAmm5Rw==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-3.22.0.tgz", + "integrity": "sha512-E4W4eUHmRVaWhhJO9Phor7xySwKyxMlgzqAnx3/wC9JWxTUKcsWn4gtd4zGtHF9IsrAq0JVkcGdLSx2YoY784A==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/twoslash": "3.21.0", + "@shikijs/twoslash": "3.22.0", "floating-vue": "^5.2.2", "lz-string": "^1.5.0", "magic-string": "^0.30.21", @@ -2653,10 +2653,10 @@ "mdast-util-gfm": "^3.1.0", "mdast-util-to-hast": "^13.2.1", "ohash": "^2.0.11", - "shiki": "3.21.0", + "shiki": "3.22.0", "twoslash": "^0.3.6", "twoslash-vue": "^0.3.6", - "vue": "^3.5.26" + "vue": "^3.5.27" } }, "node_modules/@shikijs/vscode-textmate": { @@ -7299,18 +7299,18 @@ } }, "node_modules/shiki": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.21.0.tgz", - "integrity": "sha512-N65B/3bqL/TI2crrXr+4UivctrAGEjmsib5rPMMPpFp1xAx/w03v8WZ9RDDFYteXoEgY7qZ4HGgl5KBIu1153w==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.22.0.tgz", + "integrity": "sha512-LBnhsoYEe0Eou4e1VgJACes+O6S6QC0w71fCSp5Oya79inkwkm15gQ1UF6VtQ8j/taMDh79hAB49WUk8ALQW3g==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.21.0", - "@shikijs/engine-javascript": "3.21.0", - "@shikijs/engine-oniguruma": "3.21.0", - "@shikijs/langs": "3.21.0", - "@shikijs/themes": "3.21.0", - "@shikijs/types": "3.21.0", + "@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/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" } From 4e1fc3b81fe52346064b82a6f0ab0631561d8558 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 3 Feb 2026 11:35:54 +0100 Subject: [PATCH 401/439] Add titles for warnings and tips --- guides/security/overview.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/guides/security/overview.md b/guides/security/overview.md index e0fe754a02..f4931776af 100644 --- a/guides/security/overview.md +++ b/guides/security/overview.md @@ -14,7 +14,7 @@ uacp: Used as link target from SAP Help Portal at https://help.sap.com/products/ ## Key Concepts { #key-concepts } -CAP's security architecture is built on several fundamental principles that enable flexible, secure, and maintainable applications. +CAP's security architecture is built on several fundamental principles that enable flexible, secure, and maintainable applications. These concepts work together to provide comprehensive security while maintaining developer productivity and operational efficiency. ### Pluggable Building Blocks { #key-concept-pluggable } @@ -38,35 +38,35 @@ For example, authentication can be delegated to a [separate ingress component](. Due to the plugin-based architecture, **CAP allows standard functions to be modified as required or, if necessary, completely replaced**. This flexibility is crucial for scenarios where the default methods do not fully meet the requirements of the application. -Moreover, this integration helps to easily incorporate non-CAP and even non-BTP services, thereby providing a flexible and interoperable environment. +Moreover, this integration helps to easily incorporate non-CAP and even non-BTP services, thereby providing a flexible and interoperable environment. ![Overview Customizable Components with CAP](./assets/security-customizable.drawio.svg){width="600px" } -For instance, it is possible to define specific endpoints with a [custom authentication strategy](./authentication#custom-auth). +For instance, it is possible to define specific endpoints with a [custom authentication strategy](./authentication#custom-auth). Likewise, the CAP representation of the request user can be overruled to match additional, application-specific requirements. ### Built on Best of Breed { #key-concept-platform-services } CAP does not deal with user login flows, password and credential management, user sessions, or any cryptographic logic - **and applications should definitely not do so!** -Instead, **CAP seamlessly integrates with battle-tested [platform services](#btp-services)** that handle these critical security topics centrally. +Instead, **CAP seamlessly integrates with battle-tested [platform services](#btp-services)** that handle these critical security topics centrally. This approach not only simplifies the implementation but also enhances security by leveraging robust, well-tested mechanisms provided by the platform. Built on platform services, CAP allows developers to focus on core application functionality without worrying about the intricacies of security implementation. -Most notably, authentication is covered by CAP-integration of [platform's identity services](./authentication#ias-auth). +Most notably, authentication is covered by CAP-integration of [platform's identity services](./authentication#ias-auth). Likewise, TLS termination is offered by the [platform infrastructure](#platform-environment). ![Overview Platform Integration with CAP](./assets/security-platform-integration.drawio.svg){width="600px" } ### Decoupled from Business Logic { #key-concept-decoupled-coding } -As security functions are factorized into independent components, **application code is entirely decoupled** and hence is not subject to change in case of any security-related adaptations. +As security functions are factorized into independent components, **application code is entirely decoupled** and hence is not subject to change in case of any security-related adaptations. This ensures that business logic remains independent of platform services, which are often subject to security-hardening initiatives. As a welcome side effect, this also allows testing application security in a **local test or development setup in a self-contained way**. -For instance, CAP allows performing outbound service calls via [Remote Services while handling authentication completely under the hood](./remote-authentication#remote-services). -This abstraction layer ensures that developers do not need to worry about the details of authentication. +For instance, CAP allows performing outbound service calls via [Remote Services while handling authentication completely under the hood](./remote-authentication#remote-services). +This abstraction layer ensures that developers do not need to worry about the details of authentication. -::: warn +::: warning Low-level application code is prone to configuration changes Application code that doesn't build on the abstractions provided by CAP, but instead uses the interfaces of the underlying security services directly, is highly vulnerable to configuration changes or behavioral changes on this level. For example, the application cannot be switched from TLS to mTLS-based communication with the platform services without rewriting custom code, if it doesn't consistently use Remote Services. ::: @@ -74,12 +74,12 @@ For example, the application cannot be switched from TLS to mTLS-based communica ### Secure by Default { #key-concept-secure-by-default } CAP security features are configured by default. If different behavior is required, you must explicitly reconfigure or add custom code accordingly. -CAP's security autoconfiguration approach significantly reduces the risk of misconfiguration - **override only when absolutely necessary and when all effects are safely controlled**. +CAP's security autoconfiguration approach significantly reduces the risk of misconfiguration - **override only when absolutely necessary and when all effects are safely controlled**. For instance, endpoints of deployed CAP applications are [automatically authenticated](./authentication#model-auth), providing a secure baseline. Making endpoints public requires manual configuration in either the CAP model or the middleware. -::: warning +::: warning Application projects are still responsible overall CAP cannot guarantee end-to-end [product security](./data-protection) across all application layers by default. The application is responsible for coordinated overall configuration. ::: @@ -130,7 +130,7 @@ It can be deployed as an application (reusable module) or alternatively consumed Application providers (platform users) have privileged access to the application zone. In contrast, application subscribers (business users) are restricted to a minimal interface. -::: warning +::: warning Do not share secrets Application providers **must not share any secrets from the application zone** such as binding information with other components or persons. In a production environment, we recommend deploying and operating the application on behalf of a technical user. ::: @@ -150,12 +150,12 @@ This **frees CAP applications from the need to manage trust certificates**. The All supported [environments](#cloud) fulfill the given requirements. Additional requirements could be added in future. -::: tip +::: tip Sign custom certificates Custom domain certificates must be signed by a trusted certificate authority. ::: -::: warning - **In general, application endpoints are visible to public zone**. Hence, CAP applications need to protect all exposed endpoints. +::: warning Application endpoints are visible to the public zone +Hence, CAP applications need to protect all exposed endpoints. ::: @@ -202,7 +202,7 @@ Likewise, the **deployment process** must be secured. This includes not only set As part of **secure operations**, application providers must establish patch and vulnerability management, as well as a secure support process. For example, component versions must be updated and credentials must be rotated regularly. -::: warning +::: warning Applications must use secure platform environments The application provider is responsible to **develop, deploy, and operate the application in a secure platform environment**. CAP offers seamless integration into platform services and tools to help to meet these requirements. ::: @@ -222,7 +222,7 @@ Find more about BTP platform security here: SAP BTP provides a range of platform services that your CAP applications can utilize to meet production-grade security requirements. To ensure the security of your CAP applications, it's crucial to comply with the service level agreement (SLA) of these platform services. *As the provider of the application, you play a key role in meeting these requirements by correctly configuring and using these services.* -::: tip +::: tip Compliance documents in SAP Trust Center SAP BTP services and the underlying platform infrastructure hold various certifications and attestations, which can be found under the naming of SAP Cloud Platform in the [SAP Trust Center](https://www.sap.com/about/trust-center/certification-compliance/compliance-finder.html?search=SAP%20Business%20Technology%20Platform%20ISO). ::: [Webcast SAP BTP Cloud Identity and Security Services](https://assets.dm.ux.sap.com/webinars/sap-user-groups-k4u/pdfs/221117_sap_security_webcast_series_sap_btp_cloud_identity_and_security_services.pdf){.learn-more} From 08f0509fbc7ebbc0b1471c8db4eabc29f6cf830b Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 3 Feb 2026 13:15:07 +0100 Subject: [PATCH 402/439] fix indentation --- guides/multitenancy/index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/guides/multitenancy/index.md b/guides/multitenancy/index.md index 711ab7b7a0..52dc05f19b 100644 --- a/guides/multitenancy/index.md +++ b/guides/multitenancy/index.md @@ -670,14 +670,13 @@ You should now see the route mapped to your application. There are several ways to update the database schema of a multitenant application. * For **CAP Java** applications, schema updates should be done as described in the respective [Java Guide](../../java/multitenancy#database-update). -* For **CAP Node.js** applications, you can use either of: -* the `cds-mtx upgrade` command from a terminal +* For **CAP Node.js** applications, you can use either of the following as shown in the examples below: + - the `cds-mtx upgrade` command from a terminal - the [MTX Sidecar API](mtxs#upgrade-tenants-→-jobs) - via a [CloudFoundry hook](https://help.sap.com/docs/btp/sap-business-technology-platform/module-hooks) - via a [CloudFoundry task](https://tutorials.cloudfoundry.org/cf4devs/advanced-concepts/tasks/) - via a [Kubernetes job](https://kubernetes.io/docs/concepts/workloads/controllers/job/) -as shown in the examples below. ::: code-group ```sh [cds-mtx upgrade] From 3f2fdb88d0c62dfbf16adb0d6f3ca519d795af97 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Tue, 3 Feb 2026 13:15:21 +0100 Subject: [PATCH 403/439] fix since tag --- tools/console.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/console.md b/tools/console.md index b277b96dbe..4eeb742886 100644 --- a/tools/console.md +++ b/tools/console.md @@ -164,7 +164,7 @@ If you don't want CAP console to open an SSH tunnel, you can disable SSH for you Even though the SSH tunnel is only opened to one specific port of your application container, you are still opening up a potential attack vector. CAP console tries to minimize this risk by only opening the tunnel for the duration of the connection. Once you close the CAP console, switch environments, or your user loses access to the CF Space, the SSH tunnel is closed automatically. You must ensure that you and your team understand the security implications of opening SSH tunnels in your environment and read the [Cloud Foundry SSH Documentation](https://docs.cloudfoundry.org/devguide/deploy-apps/ssh-apps.html). If attackers exploit the SSH tunnel, they will also be able to access the WebSocket and read all data transmitted via it. -## Telemetry and Data Collection +## Telemetry and Data Collection CAP console collects anonymous usage data to improve user experience, prioritize feature development, ensure reliability across different environments, and optimize performance. The collected data is sent to SAP in accordance with our [Privacy Statement](https://www.sap.com/about/legal/privacy.html). No personally identifiable information, project names, source code, or other sensitive details are collected. You can disable telemetry collection in the application settings if desired. From cc7b9e471f89b083e4e3dd5b0e823cec9b5a0cbc Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 3 Feb 2026 13:31:23 +0100 Subject: [PATCH 404/439] Fix `` badge to use `package` --- node.js/cds-compile.md | 2 +- node.js/typescript.md | 6 +++--- tools/apis/cds-build.md | 4 ++-- tools/cds-bind.md | 2 +- tools/cds-cli.md | 20 ++++++++++---------- tools/cds-typer.md | 2 +- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/node.js/cds-compile.md b/node.js/cds-compile.md index d9802f0416..cc3b2553c2 100644 --- a/node.js/cds-compile.md +++ b/node.js/cds-compile.md @@ -186,7 +186,7 @@ for (let [edm,{file,suffix}] of all) Use [`cds.compile.to.hana`](#hana) instead. -### .hana() {.method} +### .hana() {.method} Generates `hdbtable/hdbview` output. diff --git a/node.js/typescript.md b/node.js/typescript.md index 12d802f48e..750387c048 100644 --- a/node.js/typescript.md +++ b/node.js/typescript.md @@ -41,7 +41,7 @@ It features both [CAP service handlers](https://github.com/SAP-samples/cap-sflig ## Developing TypeScript Projects -### Using `cds watch` { #cds-watch} +### Using `cds watch` { #cds-watch} Preferably use `cds watch` in a TypeScript project as if it was a JavaScript project. It detects TypeScript mode based on a `tsconfig.json` and run [`cds-tsx`](#cds-tsx) under the hood. @@ -58,7 +58,7 @@ Detected tsconfig.json. Running with tsx. The same applies to `cds serve`. -### Using `cds-tsx` { #cds-tsx} +### Using `cds-tsx` { #cds-tsx} Alternatively, you can use the `cds-tsx` CLI command instead of `cds` for automatic TypeScript transpilation: @@ -159,7 +159,7 @@ cd gen/srv && npm start [Learn more on running a project from build results.](../guides/deploy/build.md){.learn-more} -## TypeScript APIs in `@sap/cds` +## TypeScript APIs in `@sap/cds` The package `@cap-js/cds-types` contains all TypeScript declarations for `@sap/cds` APIs. These declarations are used automatically when you write TypeScript files, but also enable IntelliSense and type checking for standard JavaScript development in Visual Studio Code. Just add the `@cap-js/cds-types` package to your project as follows: diff --git a/tools/apis/cds-build.md b/tools/apis/cds-build.md index 2e5d139fa9..79bc91bdda 100644 --- a/tools/apis/cds-build.md +++ b/tools/apis/cds-build.md @@ -4,7 +4,7 @@ synopsis: > status: released --- -# Implement Build Plugins +# Implement Build Plugins CDS already offers build plugins to create deployment layouts for the most use cases. However, you will find cases where these plugins are not enough and you have to develop your own. This section shows how such a build plugin can be implemented and how it can be used in projects. @@ -67,7 +67,7 @@ The compiled CSN model can be accessed using the asynchronous methods `model()` - To get a CSN model without features, use the method `baseModel()` instead. The model can be used as input for further [model processing](../../node.js/cds-compile#cds-compile-to-xyz), like `to.edmx`, `to.hdbtable`, `for.odata`, etc. - Use [`cds.reflect`](../../node.js/cds-reflect) to access advanced query and filter functionality on the CDS model. -## Add build task type to cds schema +## Add build task type to cds schema In addition you can also add a new build task type provided by your plugin. This build task type will then be part of code completion suggestions for `package.json` and `.cdsrc.json` files. diff --git a/tools/cds-bind.md b/tools/cds-bind.md index b948eb7651..5b689dd17f 100644 --- a/tools/cds-bind.md +++ b/tools/cds-bind.md @@ -94,7 +94,7 @@ Output: [bind] - TIP: Run with cloud bindings: cds watch --profile hybrid ``` -#### Shared Service Instances on Cloud Foundry { #binding-shared-service-instances} +#### Shared Service Instances on Cloud Foundry { #binding-shared-service-instances} On SAP BTP Cloud Foundry, service instances can be shared across orgs and spaces. Even such shared instances can be used in `cds bind`: diff --git a/tools/cds-cli.md b/tools/cds-cli.md index 5ff69760ba..f5ba6b21ea 100644 --- a/tools/cds-cli.md +++ b/tools/cds-cli.md @@ -46,7 +46,7 @@ Using `--markdown` you can get the information in markdown format: -## cds completion +## cds completion The `cds` command supports shell completion with the tab key for several shells and operating systems. @@ -194,7 +194,7 @@ cds add data adds _csv_ files with a single header line for all entities to the _db/data/_ folder. The name of the files matches the entities' namespace and name, separated by `-`. -#### Filtering {#data-filtering} +#### Filtering {#data-filtering} To create data for some entities only, use `--filter`. For example: @@ -215,7 +215,7 @@ cds add data --filter "books$" The escape character is usually the backslash, for example, `\?`. Quote characters are `'` or `"` with varying rules between shells. Consult the documentation for your shell here. ::: -#### Sample records +#### Sample records To create actual data (along with the header line), use `--records` with a number for how many records you wish to have. @@ -227,7 +227,7 @@ cds add data --records 2 [Watch a short video by DJ Adams to see this in action.](https://www.youtube.com/shorts/_YVvCA2oSco){.learn-more} -#### Formats +#### Formats By default, the data format is _CSV_. You can change this to JSON with the `--content-type` option: @@ -262,12 +262,12 @@ The result could look like this for a typical _Books_ entity from the _Bookshop_ - Other constraints like [type formats](../cds/types), [enums](../cds/cdl#enums), and [validation constraints](../guides/services/constraints) are respected as well, in a best effort way. ::: -#### Interactively in VS Code +#### Interactively in VS Code In [VS Code](./cds-editors#vscode), use the commands _Generate Model Data as JSON / CSV_ to insert test data at the cursor position for a selected entity. -### http {.add} +### http {.add} Adds `.http` files with sample read and write requests. @@ -346,7 +346,7 @@ assumes a remote app named `bookshop` on CloudFoundry and a JWT token for this a For CloudFoundry, use `cf login ...` and select org and space. ::: -### handler {.add} +### handler {.add} Generates handler stubs for actions and functions for both Java and Node.js projects. @@ -404,7 +404,7 @@ Compiles the specified models to [CSN](../cds/csn) or other formats. In addition, the following formats are available: -### mermaid {.compile} +### mermaid {.compile} This produces text for a [Mermaid class diagram](https://mermaid.js.org/syntax/classDiagram.html): @@ -543,7 +543,7 @@ Use `cds watch` to watch for changed files, restarting your Node.js server. For CAP Java applications, you can use [`mvn cds:watch`](../java/developing-applications/running#cds-watch) instead. ::: -### Includes and Excludes +### Includes and Excludes Additional watched or ignored paths can be specified via CLI options: @@ -686,7 +686,7 @@ Opening Chrome DevTools at devtools://devtools/bundled/inspector.html?ws=... -### Java Applications +### Java Applications #### Remote Applications diff --git a/tools/cds-typer.md b/tools/cds-typer.md index 2fd6f5ed49..ac4427f615 100644 --- a/tools/cds-typer.md +++ b/tools/cds-typer.md @@ -507,7 +507,7 @@ class CatalogService extends cds.ApplicationService { async init(){ }} ``` -### Static Top-Level Imports {#typer-top-level-imports} +### Static Top-Level Imports {#typer-top-level-imports} You can pass a new option, `useEntitiesProxy`, to `cds-typer`. This option allows you to statically import your entities at the top level, as you intuitively would. However, you can still only _use these entities_ in a context where the CDS runtime is fully booted, like in a service definition: ```ts twoslash From 75c78b5386757364b7d4d6c0bf6fe68c20a1020f Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Tue, 3 Feb 2026 14:19:27 +0100 Subject: [PATCH 405/439] Include `--nodejs` where necessary in `cds init --add sample` et al. (#2358) --- cds/cxl.md | 2 +- guides/deploy/microservices.md | 2 +- guides/deploy/to-cf.md | 2 +- guides/deploy/to-kyma.md | 2 +- guides/extensibility/customization.md | 2 +- guides/integration/reuse-and-compose.md | 2 +- guides/security/authentication.md | 2 +- guides/uis/fiori.md | 2 +- tools/cds-cli.md | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cds/cxl.md b/cds/cxl.md index a0ba0ddd53..dea73057d2 100644 --- a/cds/cxl.md +++ b/cds/cxl.md @@ -47,7 +47,7 @@ For a complete reference of the syntax, there are clickable [syntax diagrams](ht To try the samples by yourself, create a simple CAP app: ```sh -cds init bookshop --add sample && cd bookshop +cds init bookshop --nodejs --add sample && cd bookshop ``` We encourage you to play around with the snippets. diff --git a/guides/deploy/microservices.md b/guides/deploy/microservices.md index b398e955f9..a38c2efea1 100644 --- a/guides/deploy/microservices.md +++ b/guides/deploy/microservices.md @@ -127,7 +127,7 @@ These are the (not so beneficial) side effects you when using a shared persisten 1. Add another `cds` project to collect the models from these projects: ```sh - cds init shared-db --add hana + cds init shared-db --nodejs --add hana ``` ```sh diff --git a/guides/deploy/to-cf.md b/guides/deploy/to-cf.md index 6496a5fb98..77ac056262 100644 --- a/guides/deploy/to-cf.md +++ b/guides/deploy/to-cf.md @@ -27,7 +27,7 @@ The following sections are based on a new project that you can create like this:
```sh -cds init bookshop --add sample +cds init bookshop --nodejs --add sample cd bookshop ``` diff --git a/guides/deploy/to-kyma.md b/guides/deploy/to-kyma.md index e4406992bb..1095796ba5 100644 --- a/guides/deploy/to-kyma.md +++ b/guides/deploy/to-kyma.md @@ -127,7 +127,7 @@ cds add hana,xsuaa
```sh -cds init bookshop --add sample && cd bookshop +cds init bookshop --nodejs --add sample && cd bookshop cds add hana,xsuaa ``` diff --git a/guides/extensibility/customization.md b/guides/extensibility/customization.md index 0fa89bd6b1..2ddbac821b 100644 --- a/guides/extensibility/customization.md +++ b/guides/extensibility/customization.md @@ -153,7 +153,7 @@ Extension projects are standard CAP projects extending the SaaS application. Cre ```sh cd .. - cds init orders-ext + cds init orders-ext --nodejs code orders-ext # open in VS Code ``` diff --git a/guides/integration/reuse-and-compose.md b/guides/integration/reuse-and-compose.md index ec01f1af65..5b9de77126 100644 --- a/guides/integration/reuse-and-compose.md +++ b/guides/integration/reuse-and-compose.md @@ -58,7 +58,7 @@ npm install **2)**   Start a sample project: ```sh -cds init sample +cds init sample --nodejs cd sample npm i # ... run the upcoming commands in here diff --git a/guides/security/authentication.md b/guides/security/authentication.md index 39244bf95a..deeca86dd5 100644 --- a/guides/security/authentication.md +++ b/guides/security/authentication.md @@ -71,7 +71,7 @@ Platform starter bundles `cds-starter-cf` and `cds-starter-k8s` ensure all requi
```sh -cds init bookshop --add sample && cd ./bookshop +cds init bookshop --nodejs --add sample && cd ./bookshop cds watch ``` diff --git a/guides/uis/fiori.md b/guides/uis/fiori.md index a59b528950..9f004cdb37 100644 --- a/guides/uis/fiori.md +++ b/guides/uis/fiori.md @@ -65,7 +65,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 --add 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`. ### From [Capire Samples](https://github.com/capire) diff --git a/tools/cds-cli.md b/tools/cds-cli.md index f5ba6b21ea..5514aa3a26 100644 --- a/tools/cds-cli.md +++ b/tools/cds-cli.md @@ -98,7 +98,7 @@ In addition, you can add (most of) the project 'facets' from [below](#cds-add) r For example to create a project with a sample bookshop model and configuration for SAP HANA, use: ```sh -cds init --add sample,hana +cds init --nodejs --add sample,hana ``` ::: details See the full help text of `cds init` From 8a0855f1bdbd3a310f016538a8841c24062d4765 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 15:34:09 +0100 Subject: [PATCH 406/439] chore(deps): update dependency cspell to v9.6.3 (#2338) 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/) | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`9.6.2` → `9.6.3`](https://renovatebot.com/diffs/npm/cspell/9.6.2/9.6.3) | ![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/9.6.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.6.2/9.6.3?slim=true) | --- ### Release Notes
streetsidesoftware/cspell (cspell) ### [`v9.6.3`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#v963-2026-02-02) [Compare Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v9.6.2...v9.6.3) ##### Fixes
fix: Add `engines` setting (#​8491) ##### fix: Add `engines` setting ([#​8491](https://redirect.github.com/streetsidesoftware/cspell/pull/8491))
--- ### 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> Co-authored-by: Christian Georgi --- package-lock.json | 299 +++++++++++++++++++++++++--------------------- 1 file changed, 163 insertions(+), 136 deletions(-) diff --git a/package-lock.json b/package-lock.json index 88c4db139b..c1ea978dc4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -369,9 +369,9 @@ } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.6.2.tgz", - "integrity": "sha512-s5u/3nhQUftKibPIbRLLAf4M5JG1NykqkPCxS0STMmri0hzVMZbAOCyHjdLoOCqPUn0xZzLA8fgeYg3b7QuHpg==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.6.3.tgz", + "integrity": "sha512-0Ibx+ynlSd8wMAoUmc2Ck4SDN27eJheM45aCmCvCA8saROwkDh7j8zBz7aTTUTtFN+pcotJoNxr71LLD+KXhgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -390,9 +390,9 @@ "@cspell/dict-docker": "^1.1.17", "@cspell/dict-dotnet": "^5.0.11", "@cspell/dict-elixir": "^4.0.8", - "@cspell/dict-en_us": "^4.4.27", + "@cspell/dict-en_us": "^4.4.28", "@cspell/dict-en-common-misspellings": "^2.1.12", - "@cspell/dict-en-gb-mit": "^3.1.16", + "@cspell/dict-en-gb-mit": "^3.1.17", "@cspell/dict-filetypes": "^3.0.15", "@cspell/dict-flutter": "^1.1.1", "@cspell/dict-fonts": "^4.0.5", @@ -416,14 +416,14 @@ "@cspell/dict-markdown": "^2.0.14", "@cspell/dict-monkeyc": "^1.0.12", "@cspell/dict-node": "^5.0.9", - "@cspell/dict-npm": "^5.2.31", + "@cspell/dict-npm": "^5.2.32", "@cspell/dict-php": "^4.1.1", "@cspell/dict-powershell": "^5.0.15", "@cspell/dict-public-licenses": "^2.0.15", "@cspell/dict-python": "^4.2.25", "@cspell/dict-r": "^2.1.1", "@cspell/dict-ruby": "^5.1.0", - "@cspell/dict-rust": "^4.1.1", + "@cspell/dict-rust": "^4.1.2", "@cspell/dict-scala": "^5.0.9", "@cspell/dict-shell": "^1.1.2", "@cspell/dict-software-terms": "^5.1.20", @@ -440,22 +440,22 @@ } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.6.2.tgz", - "integrity": "sha512-8TCD7KOG9ppo5BoJOe2diACfB6I6UpJmYmjLOxMy0o8y3ruWFoDKaDEsf5tIi4T7cdVb8MjGbHjw9ksCwRRMjA==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.6.3.tgz", + "integrity": "sha512-4jhqXKGCFAQXomtk4/Ldy/GiGEocC61v8GISiUgn1mH+HPgEvkJijyxKRNFYvzXOoJr4y0KrkGBoKk5FI7cipw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "9.6.2" + "@cspell/cspell-types": "9.6.3" }, "engines": { "node": ">=20" } }, "node_modules/@cspell/cspell-performance-monitor": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-9.6.2.tgz", - "integrity": "sha512-MZuhYy59zFCVsX3PzW02/3TqPsPw87MELOJuZfpWDcGgxrweTrVjMdmJ0/w7COJ6zEAqtgGjNMAEmK4xJnrQjQ==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-9.6.3.tgz", + "integrity": "sha512-Y1I0wg7MUTouubREyPeTJe2dKNbBZPBnd6kDNcVet5DRZ3Cck2udS9m1a6DhJO2sGQgHTBULPDBEUU5tcAZ+nQ==", "dev": true, "license": "MIT", "engines": { @@ -463,9 +463,9 @@ } }, "node_modules/@cspell/cspell-pipe": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.6.2.tgz", - "integrity": "sha512-Wt6Cf4b/E0QJ/TkbOMjXSGrccASgbc8xZq3c+8+kCXM5JT92NP2Lx67m3UA1g+BDv7E4DNPuwm1fM7o/2zum5w==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.6.3.tgz", + "integrity": "sha512-Q0M58JbgHWOOOYvSyBodEysXLP5t8Q58Ff08msj2/XxRFpowR4iIUyfg3k+/d06uyOy89l+RD5AmyTEa5410xg==", "dev": true, "license": "MIT", "engines": { @@ -473,9 +473,9 @@ } }, "node_modules/@cspell/cspell-resolver": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.6.2.tgz", - "integrity": "sha512-u7P4ErApEcSP+Si2HaeotFQXjuCopAa+wPF1fDzuJzpotPxsDwNDanGGn2qUMjOyVI4UiI84MPI6ZuGLj5EDyQ==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.6.3.tgz", + "integrity": "sha512-yUMTC8vl+LeRcIeXRrxn0GXL+rurf4OR3uyqZbG6bbtuttvq/Icleeibv9Wts+n700HLp+sVXJ7BrCn0Ehobsw==", "dev": true, "license": "MIT", "dependencies": { @@ -486,9 +486,9 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.6.2.tgz", - "integrity": "sha512-T4LBWe3NYpKPD/fIkYAL56z5pr8Cgh//UZDl4afDTJNuTkdE6ZL93MBAUXggONHqY8B9dRXlQKrD4PD+kHabtw==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.6.3.tgz", + "integrity": "sha512-gDUDq0PcMcdSG/5HwaQzkptn29E0zCWJUqmP0W/4scSC80AVh/8hgws4tuqv1GWvr4MiBZhIbUEO4f3Pc58OYQ==", "dev": true, "license": "MIT", "engines": { @@ -496,9 +496,9 @@ } }, "node_modules/@cspell/cspell-types": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.6.2.tgz", - "integrity": "sha512-RsUFrSB0oQHEBnR8yarKIReUPwSu2ROpbjhdVKi4T/nQhMaS+TnIQPBwkMtb2r8A1KS2Hijw4D/4bV/XHoFQWw==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.6.3.tgz", + "integrity": "sha512-oDTzZ2kG/jJk3TaupESUckDraGJbBpRBEW1xgTrWyIU+uGwdmMXPcGr9XZq9dRS5Zxm01nTgLwxpVM/3BVTvWQ==", "dev": true, "license": "MIT", "engines": { @@ -506,13 +506,13 @@ } }, "node_modules/@cspell/cspell-worker": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/cspell-worker/-/cspell-worker-9.6.2.tgz", - "integrity": "sha512-1xq8jmt6YZ7MVPESydjYJ3p67vi+YWgi5qow1xyZzeQWFXVCCFi9pQSxC0bzGQwWrYGNWSAIbYZB3Sq5ntYz4w==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/cspell-worker/-/cspell-worker-9.6.3.tgz", + "integrity": "sha512-zZccf1jLSrqIvlYAqwnnBi4RrLVfSEfWT4eYpiyIzHXHMzWnkUXEstQCG6LFK4L9A44M/w9s8szi7R4DLBzKsA==", "dev": true, "license": "MIT", "dependencies": { - "cspell-lib": "9.6.2" + "cspell-lib": "9.6.3" }, "engines": { "node": ">=20.18" @@ -627,9 +627,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-en_us": { - "version": "4.4.27", - "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.27.tgz", - "integrity": "sha512-0y4vH2i5cFmi8sxkc4OlD2IlnqDznOtKczm4h6jA288g5VVrm3bhkYK6vcB8b0CoRKtYWKet4VEmHBP1yI+Qfw==", + "version": "4.4.28", + "resolved": "https://registry.npmjs.org/@cspell/dict-en_us/-/dict-en_us-4.4.28.tgz", + "integrity": "sha512-/rzhbZaZDsDWmXbc9Fmmr4/ngmaNcG2b+TGT+ZjGqpOXVQYI75yZ9+XduyI43xJ5O38QcX3QIbJY5GWaJqxPEg==", "dev": true, "license": "MIT" }, @@ -641,9 +641,9 @@ "license": "CC BY-SA 4.0" }, "node_modules/@cspell/dict-en-gb-mit": { - "version": "3.1.16", - "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.16.tgz", - "integrity": "sha512-4PPdapCJslytxAVJu35Mv97qDyGmAQxtDE790T2bWNhcqN6gvRVAc/eTRaXkUIf21q1xCxxNNqpH4VfMup69rQ==", + "version": "3.1.17", + "resolved": "https://registry.npmjs.org/@cspell/dict-en-gb-mit/-/dict-en-gb-mit-3.1.17.tgz", + "integrity": "sha512-MLx+3XN9rj+EGwLIFmh0gpEDNalCyQqjcszp+WkedCHcvTCzQgWXQMZK6cPuhO/OKYyW9GOwsx4t0wjU5tRVNg==", "dev": true, "license": "MIT" }, @@ -815,9 +815,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-npm": { - "version": "5.2.31", - "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.31.tgz", - "integrity": "sha512-+HoFoFe53pL0wDuSHRs5L+CcDMaG5sLfjKLPT4H0VdwNzho3HLOohTCZr6cYt7OEbXf3xi4YXBkamCy38xOpjA==", + "version": "5.2.32", + "resolved": "https://registry.npmjs.org/@cspell/dict-npm/-/dict-npm-5.2.32.tgz", + "integrity": "sha512-H0XD0eg4d96vevle8VUKVoPhsgsw003ByJ47XzipyiMKoQTZ2IAUW+VTkQq8wU1floarNjmThQJOoKL9J4UYuw==", "dev": true, "license": "MIT" }, @@ -867,9 +867,9 @@ "license": "MIT" }, "node_modules/@cspell/dict-rust": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.1.1.tgz", - "integrity": "sha512-fXiXnZH0wOaEVTKFRNaz6TsUGhuB8dAT0ubYkDNzRQCaV5JGSOebGb1v2x5ZrOSVp+moxWM/vdBfiNU6KOEaFQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@cspell/dict-rust/-/dict-rust-4.1.2.tgz", + "integrity": "sha512-O1FHrumYcO+HZti3dHfBPUdnDFkI+nbYK3pxYmiM1sr+G0ebOd6qchmswS0Wsc6ZdEVNiPYJY/gZQR6jfW3uOg==", "dev": true, "license": "MIT" }, @@ -944,13 +944,13 @@ "license": "MIT" }, "node_modules/@cspell/dynamic-import": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.6.2.tgz", - "integrity": "sha512-DY/X6lsdK4aeJ4erPVZoU1ccEXqtnYqWCMUXZOsMeIsZlXwZz/ocNNd09A4ga9IzGj1lYsB13UG4GVe8lSMAXQ==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.6.3.tgz", + "integrity": "sha512-J2RArbv02H0fZCZxfGe2RjhEBFrcBlWgEESh2kDdF3CyoXBoPneevS5L3X4dk2XpOR0LU6bCJEsVIuzJqoFDbw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.6.2", + "@cspell/url": "9.6.3", "import-meta-resolve": "^4.2.0" }, "engines": { @@ -958,19 +958,29 @@ } }, "node_modules/@cspell/filetypes": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.6.2.tgz", - "integrity": "sha512-XYAuGZoRCUf4Y12YP+K0BpU3QUMj4Z4SkKpi08Dwx/bQlq/NqycHKkUWYhlViHLav1+MJbWxcvDIHxGNv0UIaA==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.6.3.tgz", + "integrity": "sha512-FocAActFpUanhQblokOQYlsV3yt3xC6FNMnziGURG9f1a5LYPGwmb6v40qkkhsTwK8L9L7Ai1KRtPJ3zyowNCA==", "dev": true, "license": "MIT", "engines": { "node": ">=20" } }, + "node_modules/@cspell/rpc": { + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/rpc/-/rpc-9.6.3.tgz", + "integrity": "sha512-D8ouhYPOZR11CI66GKsFu/05sSTSjxwfyUsTZ0m7lQOcILxkJ0P/y4DJ9HffFT6uY62mEbxDeibvlfCLBzWO4w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20.18" + } + }, "node_modules/@cspell/strong-weak-map": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.6.2.tgz", - "integrity": "sha512-7zpnLkpT91wsH4aU3oAprnzrURvBWKq97j5i/SWXGuNKf36XNEO4HaeaPp6L2oVq4OzdUOdm0tUK1gB0HhMWSg==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.6.3.tgz", + "integrity": "sha512-2OmE4RCSJG1mAfVsZqEvThJaQY//rYjDBycHfb1pfLb3KlV+O5jNKlYrI6E/+JpiTb1cI9MnzIRw6uzTPgCN1g==", "dev": true, "license": "MIT", "engines": { @@ -978,9 +988,9 @@ } }, "node_modules/@cspell/url": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.6.2.tgz", - "integrity": "sha512-625EiP1jUOQZ6UQuTUV1XB8Bxa18z3EtC1qA6PJyM3TqUD8PD8Tz183j9av6d/Dq52+7w0F4ovuqjUcTXTfD6g==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.6.3.tgz", + "integrity": "sha512-k+o5Dp8Hp8mjex8Lpe9m9B4LsrMoEzAaaYfvagUPQW1BKPwi3ugkH9YkC7uUOvzD6hOWq77WJZ2t946zY2NDSg==", "dev": true, "license": "MIT", "engines": { @@ -3787,9 +3797,9 @@ } }, "node_modules/commander": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, "license": "MIT", "engines": { @@ -3897,29 +3907,29 @@ } }, "node_modules/cspell": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.6.2.tgz", - "integrity": "sha512-EmkSGhStMbSh2BcyMqbVDOF48fSPWL3adjqajUVCwfnlZD7mzUWPx9pR8pt2dOQaFEE47rlOQGXdd3wTqL5dnQ==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.6.3.tgz", + "integrity": "sha512-eGfq/qCJXDNLtqvwo3RFOJ8ECQD45NSEqlEdxJPdMlu/MA7YXSm4QptkJTybdodZmQpIGNpAz8UtVjKwhseqZg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "9.6.2", - "@cspell/cspell-performance-monitor": "9.6.2", - "@cspell/cspell-pipe": "9.6.2", - "@cspell/cspell-types": "9.6.2", - "@cspell/cspell-worker": "9.6.2", - "@cspell/dynamic-import": "9.6.2", - "@cspell/url": "9.6.2", + "@cspell/cspell-json-reporter": "9.6.3", + "@cspell/cspell-performance-monitor": "9.6.3", + "@cspell/cspell-pipe": "9.6.3", + "@cspell/cspell-types": "9.6.3", + "@cspell/cspell-worker": "9.6.3", + "@cspell/dynamic-import": "9.6.3", + "@cspell/url": "9.6.3", "ansi-regex": "^6.2.2", "chalk": "^5.6.2", "chalk-template": "^1.1.2", - "commander": "^14.0.2", - "cspell-config-lib": "9.6.2", - "cspell-dictionary": "9.6.2", - "cspell-gitignore": "9.6.2", - "cspell-glob": "9.6.2", - "cspell-io": "9.6.2", - "cspell-lib": "9.6.2", + "commander": "^14.0.3", + "cspell-config-lib": "9.6.3", + "cspell-dictionary": "9.6.3", + "cspell-gitignore": "9.6.3", + "cspell-glob": "9.6.3", + "cspell-io": "9.6.3", + "cspell-lib": "9.6.3", "fast-json-stable-stringify": "^2.1.0", "flatted": "^3.3.3", "semver": "^7.7.3", @@ -3937,13 +3947,13 @@ } }, "node_modules/cspell-config-lib": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.6.2.tgz", - "integrity": "sha512-VQB+xmqGqCJrt5k/o0rRG9v0X0CA96CEd9FsmBAm5+9DvNiRzXOqewZSdsOM2Y0SX7YKcvG82PfRsujhYltcfQ==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.6.3.tgz", + "integrity": "sha512-gQnpAzyf7rPaIb2hjVDtkvfhNc+7hAeHjK+RFAHj7fXiMfdPOWMxnl5IZBOdd9aYHZzVbxYkeyvJbLwF4M3YSg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "9.6.2", + "@cspell/cspell-types": "9.6.3", "comment-json": "^4.5.1", "smol-toml": "^1.6.0", "yaml": "^2.8.2" @@ -3953,16 +3963,16 @@ } }, "node_modules/cspell-dictionary": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.6.2.tgz", - "integrity": "sha512-J55/9+AtkRzfSVn+KaqoWxsS4O66szKP6LrDW0O2qWnuvVvO1BoAMsINynD845IIzrd1n1yTOHS/DbjmHd4//A==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.6.3.tgz", + "integrity": "sha512-y5te3Wu89WIdUYPYqMKUliviFxSu7xImuEacct6f2XFQd2c4G9vNduRMJjHKJT49cwkRM/fZKtOzJyPy8jzQ4g==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-performance-monitor": "9.6.2", - "@cspell/cspell-pipe": "9.6.2", - "@cspell/cspell-types": "9.6.2", - "cspell-trie-lib": "9.6.2", + "@cspell/cspell-performance-monitor": "9.6.3", + "@cspell/cspell-pipe": "9.6.3", + "@cspell/cspell-types": "9.6.3", + "cspell-trie-lib": "9.6.3", "fast-equals": "^6.0.0" }, "engines": { @@ -3970,15 +3980,15 @@ } }, "node_modules/cspell-gitignore": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.6.2.tgz", - "integrity": "sha512-vtwc9AAA9m3aZPtbvPPRTLXIqwryljxEgQTkpr92mFZaGftvnLfNVb2z++NvWbXq9azGKN/7oiLjecb9dhYnfA==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.6.3.tgz", + "integrity": "sha512-S6XAddSjGEP7opCfEkhWaTnNVCI8ypdyZWgOW/gUW3VMpq8zK7OJ/ddyOLUCIMW1Qwtkx7X4Mf06xJSBWEjKjQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.6.2", - "cspell-glob": "9.6.2", - "cspell-io": "9.6.2" + "@cspell/url": "9.6.3", + "cspell-glob": "9.6.3", + "cspell-io": "9.6.3" }, "bin": { "cspell-gitignore": "bin.mjs" @@ -3988,13 +3998,13 @@ } }, "node_modules/cspell-glob": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.6.2.tgz", - "integrity": "sha512-5j+g4JzcWjW16ZAtcPHpG138CEfpp1YmuYJoYtze3lIZLgttt+k2gXJsqyWaP/6MdVknI0Q1afGSKYRtH8mLRA==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.6.3.tgz", + "integrity": "sha512-tcyQP0LXoAEExVzWZMxW4afyo7w/8nea0wskoWQ4G+k36Gk6P52CARARFymHCH4IZLbbybZuLoVDxQ6OgIm3fQ==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.6.2", + "@cspell/url": "9.6.3", "picomatch": "^4.0.3" }, "engines": { @@ -4002,14 +4012,14 @@ } }, "node_modules/cspell-grammar": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.6.2.tgz", - "integrity": "sha512-JTH92+1VGFPb3UsDT+Ezur/ouR8t+XOZkETUkk8eoSBzli9hWgPHW7kl2T8Chcn+Dq/6FLlvezYbBvhSauqJRw==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.6.3.tgz", + "integrity": "sha512-26Pn/zo9hY3/5hGkM4tpV/Nnn4Op1J0DGnA34vA/lDBGtDOFexUEcUHZOieuNtCvZO735ltZPrP3zVxts1CwRg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "9.6.2", - "@cspell/cspell-types": "9.6.2" + "@cspell/cspell-pipe": "9.6.3", + "@cspell/cspell-types": "9.6.3" }, "bin": { "cspell-grammar": "bin.mjs" @@ -4019,43 +4029,44 @@ } }, "node_modules/cspell-io": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.6.2.tgz", - "integrity": "sha512-VRBkAfUdbaq5yDYoVMvodQF3bIdBL6Gy4tiMvf+UI9C16am47AuThg1gGXRzwi5hCEXnCfevAmuVdaQP3onkow==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.6.3.tgz", + "integrity": "sha512-dZYowJVTWPEjik3y/UrJnX/3PG20N1jgnP//lwX6cLGtHjv05W89lnHxsh5Suzxf3mkN/YZ1JUgmxdjj9HduNw==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "9.6.2", - "@cspell/url": "9.6.2" + "@cspell/cspell-service-bus": "9.6.3", + "@cspell/url": "9.6.3" }, "engines": { "node": ">=20" } }, "node_modules/cspell-lib": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.6.2.tgz", - "integrity": "sha512-LvValIwqDAwVp2Www+7PPJ7UbVurYtKGPddpGH7GN+0u+UWzR4oUXR80gY8lHgSrIQ3EkdLhFAItPcyMjGjzIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-bundled-dicts": "9.6.2", - "@cspell/cspell-performance-monitor": "9.6.2", - "@cspell/cspell-pipe": "9.6.2", - "@cspell/cspell-resolver": "9.6.2", - "@cspell/cspell-types": "9.6.2", - "@cspell/dynamic-import": "9.6.2", - "@cspell/filetypes": "9.6.2", - "@cspell/strong-weak-map": "9.6.2", - "@cspell/url": "9.6.2", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.6.3.tgz", + "integrity": "sha512-LFZsCWJX5EjcD0EzF/tb9Sx1d/nKEW6436EDqqb5u/Vxr86LxgX9RbhwkHI7e0XyX3YV64QzPrYGvEkXEuGsCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-bundled-dicts": "9.6.3", + "@cspell/cspell-performance-monitor": "9.6.3", + "@cspell/cspell-pipe": "9.6.3", + "@cspell/cspell-resolver": "9.6.3", + "@cspell/cspell-types": "9.6.3", + "@cspell/dynamic-import": "9.6.3", + "@cspell/filetypes": "9.6.3", + "@cspell/rpc": "9.6.3", + "@cspell/strong-weak-map": "9.6.3", + "@cspell/url": "9.6.3", "clear-module": "^4.1.2", - "cspell-config-lib": "9.6.2", - "cspell-dictionary": "9.6.2", - "cspell-glob": "9.6.2", - "cspell-grammar": "9.6.2", - "cspell-io": "9.6.2", - "cspell-trie-lib": "9.6.2", - "env-paths": "^3.0.0", + "cspell-config-lib": "9.6.3", + "cspell-dictionary": "9.6.3", + "cspell-glob": "9.6.3", + "cspell-grammar": "9.6.3", + "cspell-io": "9.6.3", + "cspell-trie-lib": "9.6.3", + "env-paths": "^4.0.0", "gensequence": "^8.0.8", "import-fresh": "^3.3.1", "resolve-from": "^5.0.0", @@ -4068,16 +4079,16 @@ } }, "node_modules/cspell-trie-lib": { - "version": "9.6.2", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.6.2.tgz", - "integrity": "sha512-JpCHpMdxo680yEkb6U1y3wrhZGHltgCnaQ8Zj6yKE8KE0BTLVl9UQGisP5De1wlFn4GtpPCf7WtQ8+M5aqq3YQ==", + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.6.3.tgz", + "integrity": "sha512-bTlL3UjcBJyQXx67RMFcgHh0AXKd2w6Zw8iZkAcU7KVgAgRpGwCiF3LJLHignnMm+Pn8D3Xrx0raENaMh4uGaQ==", "dev": true, "license": "MIT", "engines": { "node": ">=20" }, "peerDependencies": { - "@cspell/cspell-types": "9.6.2" + "@cspell/cspell-types": "9.6.3" } }, "node_modules/cssesc": { @@ -4258,13 +4269,16 @@ } }, "node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-4.0.0.tgz", + "integrity": "sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw==", "dev": true, "license": "MIT", + "dependencies": { + "is-safe-filename": "^0.1.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5321,6 +5335,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-safe-filename": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.1.tgz", + "integrity": "sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-what": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/is-what/-/is-what-5.5.0.tgz", From 670175b82c322edde08aa9c12632a3945dbcf33c Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 3 Feb 2026 15:54:12 +0100 Subject: [PATCH 407/439] Add titles for warnings and tips --- get-started/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/get-started/index.md b/get-started/index.md index 83ac703895..d37951ae5a 100644 --- a/get-started/index.md +++ b/get-started/index.md @@ -266,20 +266,20 @@ npm upgrade ``` > Use `npm outdated` to check which dependencies are outdated before upgrading. -> [!warning] -> For such upgrades to work, **do not use pinned versions** in your project dependencies. Always use open semver ranges instead – with a leading caret, as in `^9.7.0`, and as shown below –, combined with [`package-lock.json`](https://docs.npmjs.com/cli/configuring-npm/package-lock-json), and [`npm ci`](https://docs.npmjs.com/cli/commands/npm-ci) for repeatable builds and deployments. +> [!warning] Do not use pinned versions +> For such upgrades to work, always **use open version ranges** in your project dependencies – with a leading caret, as in `^9.7.0`, and as shown below –, combined with [`package-lock.json`](https://docs.npmjs.com/cli/configuring-npm/package-lock-json), and [`npm ci`](https://docs.npmjs.com/cli/commands/npm-ci) for repeatable builds and deployments. ::: code-group ```jsonc [package.json] "dependencies": { - "@sap/cds": "9.7.0", // DON'T use pinned versions // [!code --] - "@sap/cds": "^9.7.0", // [!code ++] + "@sap/cds": "9.7.0", // DON'T use pinned versions // [!code --] + "@sap/cds": "^9.7.0", // DO allow new minor versions [!code ++] ... } ``` ::: -> [!tip] +> [!tip] Automate dependency updates > Consider using tools like [Dependabot](https://docs.github.com/en/code-security/getting-started/dependabot-quickstart-guide) or [Renovate](https://www.mend.io/renovate/) to automate dependency updates for you. These tools automatically open pull requests in your Git repositories whenever new versions of your dependencies are released. They are also highly recommended for managing Maven dependencies in CAP Java projects. From 1a4a2e3b33c25aeb69f89f1c59728a753ffb1ff3 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 3 Feb 2026 15:57:25 +0100 Subject: [PATCH 408/439] Fix svg in dark mode --- .../assets/bookshop/cds-compile.drawio.svg | 253 +++++++++++++++++- .../assets/bookshop/services.drawio.svg | 224 +++++++++++++++- 2 files changed, 469 insertions(+), 8 deletions(-) diff --git a/get-started/assets/bookshop/cds-compile.drawio.svg b/get-started/assets/bookshop/cds-compile.drawio.svg index 4a409f31bd..fc3af27ff0 100644 --- a/get-started/assets/bookshop/cds-compile.drawio.svg +++ b/get-started/assets/bookshop/cds-compile.drawio.svg @@ -1,4 +1,249 @@ - - - -
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/bookshop/services.drawio.svg b/get-started/assets/bookshop/services.drawio.svg index 634282fcdb..27c75a5078 100644 --- a/get-started/assets/bookshop/services.drawio.svg +++ b/get-started/assets/bookshop/services.drawio.svg @@ -1,4 +1,220 @@ - - - -
The Outside
The Outside
The Inside
The Inside
Domain Data
Domain Data
read / write
read / write
Admin
Service
Admin...
Catalog
Service
Catalog...
Admins
Admins
Visitors
Visitors
read only
read only
Text is not SVG - cannot display
\ No newline at end of file + + + + + + + + + + +
+
+
+ The Outside +
+
+
+
+ + The Outside + +
+
+
+ + + + + + + +
+
+
+ The Inside +
+
+
+
+ + The Inside + +
+
+
+ + + + + + + + +
+
+
+ Domain Data +
+
+
+
+ + Domain Data + +
+
+
+ + + + + + + + + +
+
+
+ + read / write + +
+
+
+
+ + read / write + +
+
+
+ + + + + + + +
+
+
+ Admin +
+ Service +
+
+
+
+ + Admin... + +
+
+
+ + + + + + + +
+
+
+ Catalog +
+ Service +
+
+
+
+ + Catalog... + +
+
+
+ + + + + + + + +
+
+
+ Admins +
+
+
+
+ + Admins + +
+
+
+ + + + + + + + +
+
+
+ Visitors +
+
+
+
+ + Visitors + +
+
+
+ + + + + + + + +
+
+
+ read only +
+
+
+
+ + read only + +
+
+
+ + + + + + +
+ + + + + Text is not SVG - cannot display + + + +
\ No newline at end of file From ad070980b13d2d114b340d5914ac4d28ebc5580e Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 3 Feb 2026 16:12:42 +0100 Subject: [PATCH 409/439] Hint on add http, better Java snippet --- get-started/bookshop.md | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/get-started/bookshop.md b/get-started/bookshop.md index ea1941bfd7..53a77593b4 100644 --- a/get-started/bookshop.md +++ b/get-started/bookshop.md @@ -422,6 +422,13 @@ Authorization: Basic alice: ``` ::: +::: details `cds add http` can help you with the file creation: +```shell +cds add http +``` +[Learn more in the _CLI reference_.](../tools/cds-cli#http){.learn-more} +::: + > [!tip] Served automatically by generic providers > Simple service definitions in CDS are all we need to serve full-fledged OData services. Behind the scenes, built-in generic providers handle all the heavy lifting for us, such as parsing OData requests, and translating them into appropriate SQL queries executed against a primary database, and returning results as OData responses. @@ -792,7 +799,7 @@ mvn cds:watch In CAP Java, service implementations go into subclasses of `EventHandler`, annotated with `@Component` and `@ServiceName`, and the respective event handlers are methods within these classes annotated with `@On`, `@Before`, or `@After`, depending on the desired interception phase: ::: code-group -```java [srv/src/main/java/sap/capire/bookshop/CatalogServiceHandler.java]{16} +```java [srv/src/main/java/sap/capire/bookshop/CatalogServiceHandler.java] package sap.capire.bookshop; import java.util.List; @@ -805,18 +812,18 @@ import cds.gen.catalogservice.Books; import cds.gen.catalogservice.Books_; import cds.gen.catalogservice.CatalogService_; -@Component -@ServiceName(CatalogService_.CDS_NAME) -public class CatalogServiceHandler implements EventHandler { +@Component // [!code focus] +@ServiceName(CatalogService_.CDS_NAME) // [!code focus] +public class CatalogServiceHandler implements EventHandler { // [!code focus] // After READ handler on Books to add discount info - @After(event = CqnService.EVENT_READ, entity = Books_.CDS_NAME) - public void addDiscountIfApplicable (List books) { - for (Books book : books) { - if (book.getStock() != null && book.getStock() > 111) - book.setTitle (book.getTitle() + " -- 11% discount!"); - } - } + @After(event = CqnService.EVENT_READ, entity = Books_.CDS_NAME) // [!code focus] + public void addDiscountIfApplicable (List books) { // [!code focus] + for (Books book : books) { // [!code focus] + if (book.getStock() != null && book.getStock() > 111) // [!code focus] + book.setTitle (book.getTitle() + " -- 11% discount!"); // [!code focus] + } // [!code focus] + } // [!code focus] } ``` From 83d8b63b34ca0ab96f897bae6f8e7b19c1ea1808 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 3 Feb 2026 16:13:03 +0100 Subject: [PATCH 410/439] Whitespace cosmetics --- get-started/bookshop.md | 138 ++++++++++++++++++++-------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/get-started/bookshop.md b/get-started/bookshop.md index 53a77593b4..c9e3321aad 100644 --- a/get-started/bookshop.md +++ b/get-started/bookshop.md @@ -4,7 +4,7 @@ uacp: This page is linked from the Help Portal at https://help.sap.com/products/ --- -# The Bookshop Sample +# The Bookshop Sample A Step-by-Step Walkthrough {.subtitle} Follow along as we build a simple bookshop application step-by-step, to gain hands-on experience with the most common tasks as an application developer, core concepts and best practices of CAP. {.abstract} @@ -77,16 +77,16 @@ We can capture that in a rudimentary way using CDS as follows (create a file nam ::: code-group ```cds [db/schema.cds] -entity Authors { +entity Authors { name : String; books : Association to many Books; } -entity Books { +entity Books { title : String; author : Association to Authors; genre : Association to Genres; } -entity Genres { +entity Genres { name : String; parent : Association to Genres; } @@ -95,7 +95,7 @@ entity Genres { > [!tip] Domain models are essentially entity-relationship models > - [_Entities_](../cds/cdl#entities) represent the core concepts of your domain. -> - [_Associations_](../cds/cdl#associations) express relationships between them. +> - [_Associations_](../cds/cdl#associations) express relationships between them. ### Complete Domain Model @@ -105,9 +105,9 @@ Let's enhance the rudimentary model above with some essentials, such as key elem ::: code-group ```cds [db/schema.cds] using { Currency, managed, sap } from '@sap/cds/common'; -namespace sap.capire.bookshop; +namespace sap.capire.bookshop; -entity Books : managed { +entity Books : managed { key ID : Integer; title : localized String; descr : localized String; @@ -118,13 +118,13 @@ entity Books : managed { currency : Currency; } -entity Authors : managed { +entity Authors : managed { key ID : Integer; name : String; books : Association to many Books on books.author = $self; } -entity Genres : sap.common.CodeList { +entity Genres : sap.common.CodeList { key ID : Integer; parent : Association to Genres; } @@ -132,7 +132,7 @@ entity Genres : sap.common.CodeList { ::: ###### Focus on Domain -> [!tip] Primary Focus on Domain +> [!tip] Primary Focus on Domain > Strive to keep your domain models simple, concise and comprehensible, focused on the core concepts of your domain, i.e., [_“Keep it simple, stupid!”_](https://en.wikipedia.org/wiki/kiss_principle). Factor out secondary concerns into separate sources, which _extend_ and _annotate_ the core models.\ > See also: [_Separation of Concerns_](#separation-of-concerns). @@ -173,14 +173,14 @@ As soon as we saved the domain model, `cds watch` reacted with additional output ###### Inner Loop > [!tip] Inner-Loop Development -> SQLite isn't meant for productive use, but rather for development only. -> It drastically speeds up turn-around times in local inner-loop development. -> Essentially it acts as a mock stand-in for the target databases we'll use in production, that is, SAP HANA. +> SQLite isn't meant for productive use, but rather for development only. +> It drastically speeds up turn-around times in local inner-loop development. +> Essentially it acts as a mock stand-in for the target databases we'll use in production, that is, SAP HANA. ### Compile to SQL {.optional} -To see what happens under the hood, we can optionally use `cds compile -2 sql` +To see what happens under the hood, we can optionally use `cds compile -2 sql` to test-compile our models to SQL, which would yield output as shown below: ```shell @@ -279,7 +279,7 @@ cds repl ./ ::: details About _cds repl_ ... -The `cds repl` command boots up a minimal CAP environment in an interactive shell that allows us to enter and execute CAP JavaScript commands, with results printed to the console. It's a great way to explore and interact with our models, services, and data in an ad-hoc way. +The `cds repl` command boots up a minimal CAP environment in an interactive shell that allows us to enter and execute CAP JavaScript commands, with results printed to the console. It's a great way to explore and interact with our models, services, and data in an ad-hoc way. The acronym _REPL_ stands for [_Read-Eval-Print Loop_](https://en.wikipedia.org/wiki/Read–eval–print_loop), which was first coined by LISP in the late 1950s like that: `(loop (print (eval (read))))` ::: @@ -323,14 +323,14 @@ Waiting for some to arrive... So, let's go on feeding it with service definitions ... -### Use Case-Specific Services +### Use Case-Specific Services We add two files in folder _./srv_ with respective content as follows: ::: code-group ```cds [srv/admin-service.cds] using { sap.capire.bookshop as my } from '../db/schema'; -service AdminService @(odata:'/admin') { +service AdminService @(odata:'/admin') { entity Authors as projection on my.Authors; entity Books as projection on my.Books; entity Genres as projection on my.Genres; @@ -340,38 +340,38 @@ service AdminService @(odata:'/admin') { ::: code-group ```cds [srv/cat-service.cds] using { sap.capire.bookshop as my } from '../db/schema'; -service CatalogService @(odata:'/browse') { - @readonly entity Books as projection on my.Books { +service CatalogService @(odata:'/browse') { + @readonly entity Books as projection on my.Books { *, // all fields with the following denormalizations: - author.name as author, + author.name as author, genre.name as genre, } excluding { createdBy, modifiedBy }; } ``` ::: -The two services reflect different use cases, and corresponding user personas, as depicted in the illustration below. +The two services reflect different use cases, and corresponding user personas, as depicted in the illustration below. ![Illustration showing two use case-specific services: AdminService for administrators to maintain master data, and CatalogService for visitors to browse and order books.](assets/bookshop/services.drawio.svg) - **_AdminService_** is for *administrators to **maintain*** master data. It exposes all entities as-is from the domain model, allowing full CRUD access to all data. - + - **_CatalogService_** is for *visitors to **browse*** and order books. - It serves denormalized read-only views on `Books`, with flattened fields for `author` and `genre`, to simplify browsing. Entities `Authors` and `Genres` are not exposed, nor internal admin details `createdBy` and `modifiedBy`. - + It serves denormalized read-only views on `Books`, with flattened fields for `author` and `genre`, to simplify browsing. Entities `Authors` and `Genres` are not exposed, nor internal admin details `createdBy` and `modifiedBy`. + ###### Services as Interfaces ###### Services as Facades > [!tip] Services as Interfaces and Facades > Services constitute the **interfaces** of an application to consumers in the outside world, such as UIs or other services. They can be published as respective APIs. At the same time, they act as **facades** which handle all inbound requests, and restrict access to an application’s inner domain data. - + ###### Use Case-Oriented Services > [!tip] Use Case-Oriented Services -> Always design services with respective consumers – and in case of UIs -> respective end user personas – in mind. -> Services can use **_denormalized views_** on underlying data, to expose only +> Always design services with respective consumers – and in case of UIs +> respective end user personas – in mind. +> Services can use **_denormalized views_** on underlying data, to expose only > subsets of information relevant to the respective use case. [Learn more about **Defining Services**.](../guides/services/providing-services){.learn-more} @@ -399,8 +399,8 @@ This time `cds watch` reacted with additional output as shown below, which shows #### Send Requests from Browser We can access these endpoints through these OData URLs opened in a browser: -- _[/browse/Books?$select=ID,title,genre](http://localhost:4004/browse/Books?$select=ID,title,genre)_ -- _[/admin/Authors?$select=ID,name&$expand=books($select=ID,title)](http://localhost:4004/admin/Authors?$select=ID,name&$expand=books($select=ID,title))_ +- _[/browse/Books?$select=ID,title,genre](http://localhost:4004/browse/Books?$select=ID,title,genre)_ +- _[/admin/Authors?$select=ID,name&$expand=books($select=ID,title)](http://localhost:4004/admin/Authors?$select=ID,name&$expand=books($select=ID,title))_ #### Send Requests from REST Client @@ -414,7 +414,7 @@ GET http://localhost:4004/browse/Books? &$select=ID,title,author &$filter=contains(author,'Bro') -### AdminService.read Authors +### AdminService.read Authors GET http://localhost:4004/admin/Authors? &$select=ID,name &$expand=books($select=ID,title) @@ -441,7 +441,7 @@ cds add http ### Compile to EDMX {.optional} -We can optionally also compile service definitions explicitly, for example +We can optionally also compile service definitions explicitly, for example to [OData EDMX metadata documents](https://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part3-csdl.html): ```shell @@ -452,7 +452,7 @@ Essentially, this invokes what happened automatically behind the scenes in the p -## Querying +## Querying Now that we have a deployed SQLite database, filled with some initial data, as well as services to serve requests from the outside, we can send queries to them, based on [CDS Query Language (CQL)](../cds/cql) and the OData protocol. @@ -489,9 +489,9 @@ await SELECT `ID, title, genre.name as genre` .from `Books` We can also run deeply nested queries along to-many associations or compositions, for example, to get authors along with their written books like this: ```js -await SELECT.from `Authors { - ID, name, books { - ID, title, genre.name as genre +await SELECT.from `Authors { + ID, name, books { + ID, title, genre.name as genre } }` ``` @@ -529,15 +529,15 @@ We can send CQL queries to CAP services in very similar ways as we did before ag ```js const CatalogService = await cds.connect.to ('CatalogService') -const AdminService = await cds.connect.to ('AdminService') +const AdminService = await cds.connect.to ('AdminService') ``` And send queries to them like this (which would yield the same results as before): ```js await CatalogService .read `ID, title, genre` .from `Books` -await AdminService .read `Authors { - ID, name, books { +await AdminService .read `Authors { + ID, name, books { ID, title, genre.name as genre } }` @@ -554,19 +554,19 @@ await AdminService .read `Authors { ![](assets/bookshop/pushdown.drawio.svg) -::: details Details: How queries are delegated to database ... +::: details Details: How queries are delegated to database ... Assumed we got an inbound query like that: ```js -let query = SELECT `ID, title` .from `Books` +let query = SELECT `ID, title` .from `Books` ``` When we run it against a service like this: ```js const CatalogService = await cds.connect.to ('CatalogService') -await CatalogService.run (query) +await CatalogService.run (query) ``` It is delegated to the primary database like so: ```js -const db = await cds.connect.to ('db') // the primary database +const db = await cds.connect.to ('db') // the primary database await db.run (query) ``` ::: @@ -587,7 +587,7 @@ We can also send such OData requests programmatically, for example, doing the ve 2. Start the REPL in terminal 2: ```shell cds repl - ``` + ``` 3. Within the REPL, run this to load remote service bindings: @@ -595,7 +595,7 @@ We can also send such OData requests programmatically, for example, doing the ve await cds.service.bindings ``` ::: details About _cds.service.bindings_ ... - The `cds.service.bindings` command fetches the service bindings from a running CAP server instance in another process, and makes them available in the current process, e.g., within `cds repl`. + The `cds.service.bindings` command fetches the service bindings from a running CAP server instance in another process, and makes them available in the current process, e.g., within `cds repl`. ```js [cds] - using bindings from: { registry: '~/.cds-services.json' } Bindings { @@ -623,12 +623,12 @@ With that in place, we can connect to the remote services, and send queries to t ```js const CatalogService = await cds.connect.to ('CatalogService') - const AdminService = await cds.connect.to ('AdminService') + const AdminService = await cds.connect.to ('AdminService') ``` ```js await CatalogService .read `ID, title, genre` .from `Books` - await AdminService .read `Authors { - ID, name, books { + await AdminService .read `Authors { + ID, name, books { ID, title, genre.name as genre } }` @@ -644,13 +644,13 @@ With that in place, we can connect to the remote services, and send queries to t > CAP services can be consumed from other CAP applications, using the same uniform, and protocol-agnostic APIs as for local services – that is, **_as if they were local_**. This is accomplished by the service instances returned by `cds.connect` being remote proxies, which automatically translate all requests into protocol-specific ones, sent to remote services. Thereby taking care of all connectivity, remote communication, marshalling of data, as well as generic resilience. -## Serving UIs +## Serving UIs ### Generic *index.html* Unless replaced by a custom `index.html` in the `app/` folder, CAP serves a generic welcome page at the root of the server. -Open __ in your browser and see the generated _index.html_ page: +Open __ in your browser and see the generated _index.html_ page: ![Generic welcome page generated by CAP that list all endpoints. ](assets/bookshop/index-html.png){style="width:450px; box-shadow: 1px 1px 5px #888888"} @@ -673,7 +673,7 @@ CAP provides out-of-the-box support for SAP Fiori UIs, for example, with respect ###### Vuejs UIs Besides Fiori UIs, CAP services can be consumed from any UI frontends using standard AJAX requests. -For example, you can [find a simple Vue.js app in the GitHub repo](https://github.com/capire/bookshop/tree/main/app/vue), which demonstrates browsing and ordering books using OData requests to the `CatalogService` API we defined above. +For example, you can [find a simple Vue.js app in the GitHub repo](https://github.com/capire/bookshop/tree/main/app/vue), which demonstrates browsing and ordering books using OData requests to the `CatalogService` API we defined above. ![Shows the famous bookshop catalog service in a simple Vue.js UI.](assets/bookshop/vue-app.png){style="margin:0"} @@ -689,7 +689,7 @@ While the generic providers serve most CRUD requests out of the box, you can add > [!note] Choosing between Node.js and Java > The latter is the first time in this guide where you need to choose between Node.js and Java as your CAP runtime. -> You can pick either of them, depending on your team's skillset and other boundary conditions, and add respective configuration using `cds add nodejs` or `cds add java` explained below. +> You can pick either of them, depending on your team's skillset and other boundary conditions, and add respective configuration using `cds add nodejs` or `cds add java` explained below. ### Declarative Constraints @@ -700,14 +700,14 @@ Custom logic frequently deals with input validation. We can accomplish that by a ```cds [srv/admin-constraints.cds] using { AdminService } from './admin-service.cds'; annotate AdminService.Books with { - + title @mandatory; - author @assert: (case + author @assert: (case when not exists author then 'Specified Author does not exist' end); - genre @mandatory @assert: (case + genre @mandatory @assert: (case when not exists genre then 'Specified Genre does not exist' end); @@ -729,7 +729,7 @@ annotate AdminService.Books with { -### Custom Handlers in Node.js +### Custom Handlers in Node.js Prepare your project for custom coding in Node.js by adding the respective facet: ```shell @@ -752,9 +752,9 @@ const cds = require('@sap/cds') class CatalogService extends cds.ApplicationService { init() { // After READ handler on Books to add discount info - this.after ('READ', 'Books', results => results.forEach (book => { + this.after ('READ', 'Books', results => results.forEach (book => { if (book.stock > 111) book.title += ` -- 11% discount!` - }) + }) return super.init() }} @@ -765,9 +765,9 @@ import cds from '@sap/cds' export class CatalogService extends cds.ApplicationService { init() { // After READ handler on Books to add discount info - this.after ('READ', 'Books', results => results.forEach (book => { + this.after ('READ', 'Books', results => results.forEach (book => { if (book.stock > 111) book.title += ` -- 11% discount!` - }) + }) return super.init() }} @@ -781,7 +781,7 @@ export class CatalogService extends cds.ApplicationService { init() { ![](assets/bookshop/event-handlers.drawio.svg) > [!tip] On / Before / After Hooks -> Event handlers can intercept any CRUD event, as well as custom Actions and Functions. They can be registered for different phases of request processing, such as: **_on_**, that is _instead of_ the default processing, **_before_** the default processing, or **_after_** it. +> Event handlers can intercept any CRUD event, as well as custom Actions and Functions. They can be registered for different phases of request processing, such as: **_on_**, that is _instead of_ the default processing, **_before_** the default processing, or **_after_** it. @@ -851,9 +851,9 @@ While you **_can_** add custom handlers for standard CRUD events, you **_have to // Action handler for submitOrder this.on ('submitOrder', async req => { let { book:id, quantity } = req.data - let affected = await UPDATE (Books,id) - .with `stock = stock - ${quantity}` - .where `stock >= ${quantity}` + let affected = await UPDATE (Books,id) + .with `stock = stock - ${quantity}` + .where `stock >= ${quantity}` if (!affected) req.error `${quantity} exceeds stock for book #${id}` }) ``` @@ -888,17 +888,17 @@ We have now built a simple bookshop application step-by-step, thereby following Thereby we touched upon some best practices of CAP, such as: -::: tip [Inner-Loop Development](#inner-loop) -::: -::: tip [Focus on Domain](#focus-on-domain) +::: tip [Inner-Loop Development](#inner-loop) +::: +::: tip [Focus on Domain](#focus-on-domain) ::: -::: tip [Separation of Concerns](#separation-of-concerns) +::: tip [Separation of Concerns](#separation-of-concerns) ::: ::: tip [Use Case-Oriented Services](#use-case-oriented-services) ::: ::: tip [Served Out-of-the-Box](#served-out-of-the-box) ::: -::: tip [Pushdown to Database](#pushed-down-to-db-1) +::: tip [Pushdown to Database](#pushed-down-to-db-1) ::: Learn more about these practices and guiding principles in the [_Core Concepts_](./concepts) guide following next, and the [_Key Features_](./features) guide thereafter. After that, go ahead and explore further on your own in the respective deep dive guides in the [_Develop_ section](../guides/). \ No newline at end of file From d7d87bb02134e628d9b66edb450ad2b6d662d9f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jeglinsky?= Date: Tue, 3 Feb 2026 20:23:33 +0100 Subject: [PATCH 411/439] [review] Security Guide (#2321) General remarks on: - [Remote Authentication](https://github.com/capire/docs/pull/2321#issuecomment-3758980683) --------- Co-authored-by: Paul --- guides/security/authentication.md | 202 ++++++++++++----------- guides/security/authorization.md | 71 ++++---- guides/security/cap-users.md | 77 +++++---- guides/security/overview.md | 59 +++---- guides/security/remote-authentication.md | 32 ++-- 5 files changed, 228 insertions(+), 213 deletions(-) diff --git a/guides/security/authentication.md b/guides/security/authentication.md index deeca86dd5..81063a3d92 100644 --- a/guides/security/authentication.md +++ b/guides/security/authentication.md @@ -39,14 +39,15 @@ As access control relies on verified claims, authentication is a mandatory prere According to key concept [Pluggable Building Blocks](./overview#key-concept-pluggable), the authentication method can be configured freely. CAP [leverages platform services](overview#key-concept-platform-services) to provide proper authentication strategies to cover all relevant scenarios: -- For _local development_ and _unit testing_, [Mock User Authentication](#mock-user-auth) is an appropriate built-in authentication feature. +- For _local development_ and _unit testing_, [Mock User Authentication](#mock-user-authentication) is an appropriate built-in authentication feature. - For _cloud deployments_, in particular deployments for production, CAP provides integration of several identity services out of the box: - [Identity Authentication Service (IAS)](#ias-auth) provides a full-fledged [OpenId Connect](https://openid.net/connect/) compliant, cross-landscape identity management as first choice for applications. - [XS User Authentication and Authorization Service (XSUAA)](https://help.sap.com/docs/CP_AUTHORIZ_TRUST_MNG) is an [OAuth 2.0](https://oauth.net/2/)-based authorization server to support existing applications and services in the scope of individual BTP landscapes. - CAP applications can run IAS and XSUAA in [hybrid mode](#hybrid-auth) to support a smooth migration from XSUAA to IAS. -## Mock User Authentication { #mock-user-auth } + +## Mock User Authentication In non-production profile, by default, CAP creates a security configuration which accepts _mock users_. As this authentication strategy is a built-in feature which does not require any platform service, it is perfect for **unit testing and local development scenarios**. @@ -116,34 +117,43 @@ As the mock user authentication is active, all (CAP) endpoints are [authenticate To simplify the development scenario, you can set cds.security.authentication.mode = "model-relaxed" to deactivate authentication of endpoints derived from unrestricted CDS services. ::: -Sending OData request `curl http://localhost:8080/odata/v4/CatalogService/Books --verbose` -results in a `401` error response from the server indicating that the anonymous user has been rejected due to missing authentication. +If you stay with the standard authentication mode, sending the OData request results in a `401` error response from the server, indicating that the anonymous user has been rejected due to missing authentication. + +```sh +curl http://localhost:8080/odata/v4/CatalogService/Books --verbose +``` + This is the case for all endpoints including the web application page at `/index.html`. -Mock users require **basic authentication**, hence sending the same request on behalf of mock user `admin` (password: `admin`) with `curl http://admin:admin@localhost:8080/odata/v4/CatalogService/Books` returns successfully (HTTP response `200`). +Mock users require **basic authentication**, hence sending the same request on behalf of mock user `admin` (password: `admin`) returns successfully (HTTP response `200`). + +```sh +curl http://admin:admin@localhost:8080/odata/v4/CatalogService/Books +```
-::: info +::: tip In non-production profile, endpoints derived from unrestricted CDS services are not authenticated to simplify the development scenario. ::: -Sending OData request +Send an OData request through the restricted `AdminService` as follows: ```sh curl http://localhost:4004/odata/v4/admin/Books --verbose ``` -results in a `401` error response from the server indicating that the anonymous user has been rejected due to missing authentication. +This results in a `401` error response from the server indicating that the anonymous user has been rejected due to missing authentication. This is true for all endpoints including the web application page at `/index.html`. -Mock users require **basic authentication**, hence sending the same request on behalf of mock user `alice` (password: `basic`) with +Mock users require **basic authentication**, hence sending the same request on behalf of mock user `alice` (no password) returns successfully (HTTP response `200`). + ```sh -curl http://alice:basic@localhost:4004/odata/v4/admin/Books +curl http://alice:@localhost:4004/odata/v4/admin/Books ``` -returns successfully (HTTP response `200`). +
@@ -169,8 +179,8 @@ Mock users are deactivated in production profile by default ❗ ### Preconfigured Mock Users { #preconfigured-mock-users } -For convenience, the runtime creates default mock users to cover typical test scenarios, e.g. privileged users passing all security checks or users which pass authentication but do not have additional claims. -The predefined users are added to [custom mock users](#custom-mock-users) defined by the application. +For convenience, the runtime creates default mock users to cover typical test scenarios, such as privileged users passing all security checks or users that pass authentication but don't have additional claims. +The runtime adds the predefined users to [custom mock users](#custom-mock-users) you define in the application. You can opt out the preconfigured mock users by setting `cds.security.mock.defaultUsers = false`. { .java } @@ -347,14 +357,12 @@ IAS offers a cross-consumption mode that allows IAS users to consume legacy XSUA - cross-landscape user propagation (including on-premise) - streamlined SAP and non-SAP system [integration](https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/integrating-service) (due to [OpenId Connect](https://openid.net/connect/) compliance) -IAS authentication is best configured and tested in the Cloud, so let's enhance the started bookshop sample application with a deployment descriptor for SAP BTP, Cloud Foundry Runtime (CF). +You can best configure and test IAS authentication in the Cloud, so let's enhance the [previously started bookshop sample application](#mock-user-authentication) with a deployment descriptor for SAP BTP, Cloud Foundry Runtime (CF). ### Get Ready with IAS { #ias-ready } - - -Before working with IAS on CF, you need to +Before working with IAS on CF, you need to do all of the following: - Prepare an IAS (test) tenant. If not available yet, you need to [create](https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/get-your-tenant) it now. @@ -364,14 +372,12 @@ towards your IAS tenant to use it as identity provider for applications in your - Ensure your development environment is [prepared for deploying](../deploy/to-cf#prerequisites) on CF, in particular you require a `cf` CLI session targeting a CF space in the test subaccount (test with `cf target`). -You can continue with the sample [already created](#mock-user-auth). In the project root folder, execute +You can continue with the sample [already created](#mock-user-authentication). In the project root folder, execute the following command to make your application ready for deployment to CF. ```sh cds add mta ``` -to make your application ready for deployment to CF. -
::: info @@ -380,9 +386,9 @@ Command `add mta` will enhance the project with `cds-starter-cloudfoundry` and t
-You also need to configure DB support: +You also need to configure database support: -```sh [SAP HANA] +```sh cds add hana ``` @@ -390,13 +396,13 @@ cds add hana ### Adding IAS -Now the application is ready to be enhanced with IAS-support by executing +Now the application is ready to be enhanced with IAS-support: ```sh cds add ias ``` -which automatically adds a service instance named `bookshop-ias` of type `identity` (plan: `application`) and binds the CAP application to it. +This command automatically adds a service instance named `bookshop-ias` of type `identity` (plan: `application`) and binds the CAP application to it in the _mta.yaml_. ::: details Generated deployment descriptor for IAS instance and binding ```yaml [mta.yaml] @@ -425,7 +431,7 @@ resources:
::: info -The [binding](../../java/security#bindings) to service instance of type `identity` is the trigger to automatically enforce IAS authentiaction at runtime ❗ +The [binding](../../java/security#bindings) to service instance of type `identity` is the trigger to automatically enforce IAS authentication at runtime ❗ :::
@@ -444,19 +450,20 @@ Service instance and binding offer the following crucial configuration propertie | `app-identifier` | _binding_ | _Ensures stable subject in generated certificate (required for credential rotation)_ | -[Lean more about IAS service instance and binding configuration.](https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/reference-information-for-identity-service-of-sap-btp){.learn-more} +[Learn more about IAS service instance and binding configuration.](https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/reference-information-for-identity-service-of-sap-btp){.learn-more}
-Now let's pack and deploy the application with +Now let's pack and deploy the application: + ```sh cds up ``` -and wait until the application is up and running. You can test the status with `cf apps` on CLI level or in BTP Cockpit, alternatively. The startup log should confirm the activated IAS authentication: +
```sh @@ -466,7 +473,14 @@ The startup log should confirm the activated IAS authentication:
-TODO + +```sh +[cds] - using auth strategy { + kind: 'ias', + impl: 'node_modules/@sap/cds/lib/srv/middlewares/auth/ias-auth.js' +} +``` +
::: tip @@ -501,10 +515,10 @@ In the [Administrative Console for Cloud Identity Services](https://help.sap.com you can see and manage the deployed IAS application. You need a user with administrative privileges in the IAS tenant to access the services at `.accounts400.ondemand.com/admin`. In the Console you can manage the IAS tenant and IAS applications, for example: -- Create (test) users in `Users & Authorizations` -> `User Management` -- Deactivate users -- Configure the authentication strategy (password policies, MFA etc.) in `Applications & Resources` -> `Applications` (IAS instances listed with their display-name) -- Inspect logs in `Monitoring & Reporting` -> `Troubleshooting` +- Create (test) users in `Users & Authorizations` -> `User Management`. +- Deactivate users. +- Configure the authentication strategy (password policies, multifactor authentication, and similar) in `Applications & Resources` -> `Applications` (IAS instances listed with their display-name). +- Inspect logs in `Monitoring & Reporting` -> `Troubleshooting`. ::: tip In BTP Cockpit, service instance `bookshop-ias` appears as a link that allows direct navigation to the IAS application in the Administrative Console for IAS. @@ -515,7 +529,7 @@ In BTP Cockpit, service instance `bookshop-ias` appears as a link that allows di Due to CAP's autoconfiguration, all CAP endpoints are authenticated and expect valid OAuth tokens created for the IAS application. -Sending the test request +The following request as anonymous user without a token results in a `401 Unauthorized`:
@@ -535,9 +549,7 @@ curl https://--bookshop-srv. \
-as anonymous user without a token results in a `401 Unauthorized` as expected. - -Now let's fetch a token as basis for a fully authenticated test request. +This is expected. Now let's fetch a token as basis for a fully authenticated test request. For doing so, you need to interact with IAS service which requires an authenticated client itself. The overall setup with CLI client and the Cloud services is sketched in the diagram: @@ -545,7 +557,7 @@ The overall setup with CLI client and the Cloud services is sketched in the diag ![CLI-level Testing of IAS Endpoints](./assets/ias-cli-setup.drawio.svg){width="500px"} As IAS requires mTLS-protected channels, **client certificates are mandatory** for all of the following requests: -- Token request to IAS in order to fetch a valid IAS token (1) +- Token request to IAS to fetch a valid IAS token (1) - Business request to the CAP application presenting the token (2) - Initial proof token request to IAS - not required for all business requests (3) @@ -660,8 +672,8 @@ cf delete-service-key bookshop-ias bookshop-ias-key ### UI Level Testing -In the UI scenario, adding an Application Router as an ingress proxy to the deployment simplifies testing a lot. -It will take care of fetching the required IAS tokens when forwarding requests to the backend service. +In the UI scenario, adding an Application Router as an ingress proxy to the deployment simplifies testing significantly. +It fetches the required IAS tokens when forwarding requests to the backend service. Enhancing the project with [SAP Cloud Portal](../deploy/to-cf#option-a-sap-cloud-portal) configuration adds an Application Router component as well as HTML5 Application Repository: @@ -697,7 +709,7 @@ In addition, property `forwardAuthCertificates` needs to be `true` to support th ::: As the login flow is based on an HTTP redirect between the CAP application and IAS login page, -IAS needs to know a valid callback URI which is offered by the AppRouter out-of-the-box. +IAS needs to know a valid callback URI that the AppRouter offers out of the box. The same is true for the logout flow. ::: details Redirect URIs for login and logout @@ -717,14 +729,15 @@ The same is true for the logout flow. ::: -Now re-deploy the solution by running +Now re-deploy the solution: ```sh cds up ``` -and test the application via URL provided in the Cockpit. -The Application Router should redirect to a login flow where you can enter the credentials of a [test user](#ias-admin) created before. +Test the application using the URL provided in the Cockpit. + +The Application Router should redirect to a login flow where you can enter the credentials of a [test user](#ias-admin) you created before in the Administration Console for IAS. ## XSUAA Authentication { #xsuaa-auth } @@ -743,7 +756,7 @@ IAS offers a cross-consumption mode that allows IAS users to consume legacy XSUA In contrast to [IAS](#ias-auth), XSUAA does not allow cross-landscape user propagation out of the box. ::: -XSUAA authentication is best configured and tested in the Cloud, so let's enhance the sample with a deployment descriptor for SAP BTP, Cloud Foundry Runtime (CF). +You can best configure and test XSUAA authentication in the Cloud, so let's enhance the sample with a deployment descriptor for SAP BTP, Cloud Foundry Runtime (CF). ### Get Ready with XSUAA { #xsuaa-ready } @@ -751,34 +764,32 @@ XSUAA authentication is best configured and tested in the Cloud, so let's enhanc Before working with XSUAA on CF, you need to ensure your development environment is [prepared for deploying](../deploy/to-cf#prerequisites) to CF. In particular, you require a `cf` CLI session targeting a CF space in the test subaccount (test with `cf target`). -You can continue with the bookshop sample create for the [mock users](#mock-user-auth) or, alternatively, you can also enhance the [IAS-based](#ias-auth) application. +:::details If you haven't prepared a sample yet... + +You can create a bookshop sample as described in [Mock User Authentication](#mock-user-authentication). + +Execute the following two commands in the project root folder, only if you haven't prepared your sample for IAS in the previous section already. -If there is no deployment descriptor yet, execute in the project root folder +If there is no deployment descriptor yet, execute the following in the project root folder: ```sh cds add mta ``` -
- -::: tip -Command `add mta` will enhance the project with `cds-starter-cloudfoundry` and therefore all [dependencies required for security](../../java/security#maven-dependencies) are added transitively. -::: - -
- -to make your application ready for deployment to CF. - -You also need to configure DB support: +You also need to configure database support: ```sh [SAP HANA] cds add hana ``` +::: tip For Java +Command `add mta` enhances the project with `cds-starter-cloudfoundry` and therefore adds all [dependencies required for security](../../java/security#maven-dependencies) transitively. + +::: ### Adding XSUAA { #adding-xsuaa } -Now the application is ready for enhancing with XSUAA-support: +Enhance your [sample application](#mock-user-authentication) with XSUAA-support:
@@ -852,7 +863,7 @@ There are some mandatory configuration parameters: ::: warning Upgrading the `service-plan` from type `application` to `broker` is not supported. -Hence, start with plan `broker` in case you want to provide technical APIs in future. +Start with plan `broker` if you want to provide technical APIs in future. ::: [Learn more about XSUAA application security descriptor configuration syntax.](https://help.sap.com/docs/btp/sap-business-technology-platform/application-security-descriptor-configuration-syntax){.learn-more} @@ -896,9 +907,9 @@ For convenience, when adding the XSUAA facet, these artifacts are initially deri At runtime, after successful authentication, the scope prefix `$XSAPPNAME`is removed by the CAP integration to match the corresponding CAP role. -In the [deplyoment descriptor](#adding-xsuaa), the optional property `role-collections` contains a list of preconfigured role collections. -In general, role collections are [created manually](./cap-users#xsuaa-assign) at runtime by user administrators. -But in case the underlying role template has no reference to an attribute, a corresponding role collection can be prepared already for sake of convenience. +In the [deployment descriptor](#adding-xsuaa), the optional property `role-collections` contains a list of preconfigured role collections. +In general, user administrators [create role collections manually](./cap-users#xsuaa-assign) at runtime. +However, if the underlying role template has no reference to an attribute, you can prepare a corresponding role collection for convenience. In the example, role collection `admin (bookshop -)` containing the role template `admin` is defined and can be directly assigned to users. @@ -918,7 +929,7 @@ If you modify the _xs-security.json_ manually, make sure that the scope names in #### Start and Check the Deployment -Now let's pack and deploy the application with +Now let's pack and deploy the application:
@@ -969,7 +980,7 @@ The local setup is still runnable on basis of mock users as there is no IAS bind Due to CAP's autoconfiguration, all CAP endpoints are [authenticated automatically](#model-auth) and expect valid XSUAA tokens. -Sending the test request +The following request as anonymous user without a token results in a `401 Unauthorized`:
@@ -989,24 +1000,22 @@ curl https://--bookshop-srv. \
-as anonymous user without a token the request results in a `401 Unauthorized` as expected. - -Now let's fetch an XSUAA token to prepare an authenticated test request. -To do so, you need to interact with XSUAA service which requires a valid authentication as well. +This is expected. Now let's fetch an XSUAA token to prepare an authenticated test request. +Here, you need to interact with XSUAA service which requires a valid authentication as well. -As first step add a new client for XSUAA by creating an appropriate service key with +As first step add a new client for XSUAA by creating an appropriate service key: ```sh cf create-service-key bookshop-auth bookshop-auth-key ``` -You can inspect the service key credentials by executing +You can inspect the service key credentials as follows: ```sh cf service-key bookshop-auth bookshop-auth-key ``` -which prints the information to the console: +This command prints the information to the console: ```json { @@ -1058,7 +1067,7 @@ The request returns with a valid XSUAA token which is suitable to pass authentic {"access_token":"", "token_type":"bearer","expires_in":43199, [...]} ``` -With the token for the technical user, you should be able to access endpoints, which has no specific role requirements: +With the token for the technical user, you should be able to access endpoints that have no specific role requirements:
@@ -1080,8 +1089,8 @@ curl -H "Authorization: Bearer " \
-If you also want to access the `AdminService` which requires the role `admin`, -you need to fetch the token for the named user instead. That is the user which you have assigned the `admin (bookshop -)` role collection to. +If you also want to access the `AdminService` that requires the role `admin`, +you need to fetch the token for the named user instead. That is the user to whom you assigned the `admin (bookshop -)` role collection. With the token for the named user, the following request should succeed: @@ -1122,8 +1131,8 @@ cf delete-service-key bookshop-auth bookshop-auth-key ### UI Level Testing -In the UI scenario, adding an Application Router as an ingress proxy to the deployment simplifies testing a lot. -It will take care of fetching the required XSUAA tokens when forwarding requests to the backend service. +In the UI scenario, adding an Application Router as an ingress proxy to the deployment simplifies testing significantly. +It fetches the required XSUAA tokens when forwarding requests to the backend service. Enhancing the project with [SAP Cloud Portal](../deploy/to-cf#option-a-sap-cloud-portal) configuration adds an Application Router component as well as HTML5 Application Repository: @@ -1162,7 +1171,7 @@ modules: ::: As the login flow is based on an HTTP redirect between the CAP application and XSUAA login page, -XSUAA needs to know a valid callback URI which is offered by the Application Router out of the box. +XSUAA needs to know a valid callback URI that the Application Router offers out of the box. The same is true for the logout flow. ::: details Redirect URIs for login and logout @@ -1182,22 +1191,23 @@ The same is true for the logout flow. ::: -Now update the Cloud deployment with +Now update the Cloud deployment: ```sh cds up ``` -and verify it by running `cf apps` in the targeted space: +Verify it by running `cf apps` in the targeted space: ```sh -name requested state processes routes -bookshop-potal started web:1/1 --bookshop. -bookshop-potal-db-deployer stopped web:0/1 -bookshop-potal-srv started web:1/1 --bookshop-srv. +> $ cf apps +name requested state processes routes +bookshop-portal started web:1/1 --bookshop. +bookshop-portal-db-deployer stopped web:0/1 +bookshop-portal-srv started web:1/1 --bookshop-srv. ``` -and open the route exposed by the `bookshop` UI application in a new browser session. +Open the route exposed by the `bookshop` UI application in a new browser session. @@ -1211,9 +1221,9 @@ will come soon
There are multiple reasons why customization might be required: -1. Endpoints for non-business requests often require specific authentication methods (e.g. health check, technical services). -2. The application is deployed in the context of a service mesh with ingress authentication (e.g. Istio). -3. The application needs to integrate with a 3rd party authentication service. +1. Endpoints for non-business requests often require specific authentication methods (for example, health check, technical services). +2. The application is deployed in the context of a service mesh with ingress authentication (for example, Istio). +3. The application needs to integrate with a third-party authentication service. ![Endpoints with different authentication strategy](./assets/custom-auth.drawio.svg){width="380px"} @@ -1222,9 +1232,9 @@ There are multiple reasons why customization might be required: - For CAP endpoints you are fine to go with the [automatic authentication](#model-auth) fully derived from the CAP model. -- For custom endpoints that should be protected by the same authentication strategy you are also fine with automatc authentication as CAP will cover these endpoints by default. -- For custom endpoints that should have a different kind of authentication strategy (e.g. X.509, basic or none) you can add a security configuration that [partially overrules](#partially-auth) the CAP integration partially for exactly these endpoints. -- In case the authentiaction is delegated to a different component, just [fully overrule](#fully-auth) CAP authentication and replace by any suitable strategy. +- For custom endpoints that should be protected by the same authentication strategy you are also fine with automatic authentication as CAP will cover these endpoints by default. +- For custom endpoints that should have a different kind of authentication strategy (for example, X.509, basic or none) you can add a security configuration that [partially overrules](#partially-auth) the CAP integration for exactly these endpoints. +- If the authentication is delegated to a different component, just [fully overrule](#fully-auth) CAP authentication and replace it with any suitable strategy. ::: tip Secure by Default **By default, CAP authenticates all endpoints of the microservice, including the endpoints which are not served by CAP itself**. @@ -1323,7 +1333,7 @@ With `cds.security.authentication.authenticateMetadataEndpoints: false` you can
-Automatic authentication enforcement can be disabled via feature flag cds.requires.auth.restrict_all_services: false, or by using [mocked authentication](#mock-user-auth) explicitly in production. +Automatic authentication enforcement can be disabled via feature flag cds.requires.auth.restrict_all_services: false, or by using [mocked authentication](#mock-user-authentication) explicitly in production.
@@ -1380,18 +1390,20 @@ In such architectures, CAP authentication is obsolete and can be deactivated ent [Learn more about how to switch off authentication.](../../java/security#custom-spring-security-alone){.learn-more}
- + ## Pitfalls - **Don't miss to configure security middleware.** Endpoints of (CAP) applications deployed on SAP BTP are, by default, accessible from the public network. Without security middleware configured, CDS services are exposed to the public. -- **Don't rely on Application Router authentication**. Application Router as a frontend proxy does not shield the backend from incoming traffic. Therefore, the backend must be secured independently. +- **Don't rely on Application Router authentication**. Application Router as a frontend proxy does not shield the backend from incoming traffic. Therefore, you must secure the backend independently. - **Don't deviate from security defaults**. Only when absolutely necessary should experts make the decision to add modifications or replace parts of the standard authentication mechanisms. diff --git a/guides/security/authorization.md b/guides/security/authorization.md index 610573167b..10c952be8f 100644 --- a/guides/security/authorization.md +++ b/guides/security/authorization.md @@ -21,7 +21,7 @@ uacp: Used as link target from SAP Help Portal at https://help.sap.com/products/ -This guide explains how to restrict access to data by adding respective declarations to CDS models, which are then enforced by CAP's generic service providers. +This guide explains how to restrict access to data by adding respective declarations to CDS models, that are then enforced by CAP's generic service providers. [[toc]] @@ -56,7 +56,7 @@ Finally, according to the key concept [Customizable Security](./overview#key-con ### Internal Services CDS services that are only meant for *internal* usage shouldn't be exposed via protocol adapters. -In order to prevent access from *any* external clients, annotate those services with `@protocol: 'none'`: +To prevent access from *any* external clients, annotate those services with `@protocol: 'none'`: ```cds @protocol: 'none' @@ -105,12 +105,12 @@ context db { ... } - entity Issues : cuid { // implicitly auto-exposed (by composition) + entity Issues : cuid { // implicitly auto-exposed (by composition in Components) category: Association to Categories; ... } - entity Components : cuid { // explicitly exposed (by projection) + entity Components : cuid { // explicitly exposed (by projection in IssuesService) issues: Composition of many Issues; ... } @@ -274,11 +274,10 @@ service CatalogService { @(requires: 'Admin') action addRating (stars: Integer); } - function getViewsCount @(restrict: [{ to: 'Admin' }]) () returns Integer; + function getViewsCount @(restrict: [{ grant: 'READ', to: 'Admin' }]) () returns Integer; } ``` - ### Combined Restrictions { #combined-restrictions} Restrictions can be defined on different levels in the CDS model hierarchy. Bound actions and functions refer to an entity, which in turn refers to a service. Unbound actions and functions refer directly to a service. As a general rule, **all authorization checks of the hierarchy need to be passed** (logical AND). @@ -384,9 +383,9 @@ annotate IssuesService.Components with @(restrict: [ { grant: '*', to: 'Supporter' }, { grant: 'READ', to: 'authenticated-user' } ]); ``` -Basically, users with the `Supporter` role aren't restricted, whereas authenticated users can only read the `Components`. But what about the auto-exposed entities such as `IssuesService.Issues` and `IssuesService.Categories`? They could be a target of an (indirect) request as outlined in [Events to Auto-Exposed Entities](#events-and-auto-expose), but none of them are annotated with a concrete restriction. In general, the same also holds for service entities, which are generated by the compiler, for example, for localization or draft support. +Basically, users with the `Supporter` role aren't restricted, whereas authenticated users can only read the `Components`. But what about the auto-exposed entities such as `IssuesService.Issues` and `IssuesService.Categories`? They could be a target of an (indirect) request as outlined in [Events to Auto-Exposed Entities](#events-and-auto-expose), but none of them are annotated with a concrete restriction. In general, the same also holds for service entities that are generated by the compiler, for example, for localization or draft support. -To close the gap with auto-exposed and generated entities, the authorization of such entities is delegated to a so-called **authorization entity**, which is the last entity in the request path, which bears authorization information, that means, which fulfills at least one of the following properties: +To close the gap with auto-exposed and generated entities, the authorization of such entities is delegated to a so-called **authorization entity**, which is the last entity in the request path, that bears authorization information, that means, that fulfills at least one of the following properties: - Explicitly exposed in the service - Annotated with a concrete restriction - Annotated with `@cds.autoexpose` @@ -411,9 +410,27 @@ So, the authorization for the requests in the example is delegated as follows: The [restrict annotation](#restrict-annotation) for an entity allows you to enforce authorization checks that statically depend on the event type and user roles. In addition, you can define a `where`-condition that further limits the set of accessible instances. -This condition, which acts like a filter, establishes *instance-based authorization*. +This condition, that acts like a filter, establishes *instance-based authorization*. + +### Filter Conditions + +For instance, a user is allowed to read or edit `Orders` (defined with the `managed` aspect) that they have created: + +```cds +annotate Orders with @(restrict: [ + { grant: ['READ', 'UPDATE', 'DELETE'], where: (CreatedBy = $user) } ]); +``` -### Filter Conditions { #filter-consitions } +Or a `Vendor` can only edit articles on stock (that means `Articles.stock` positive): + +```cds +annotate Articles with @(restrict: [ + { grant: ['UPDATE'], to: 'Vendor', where: (stock > 0) } ]); +``` + +::: tip +Filter conditions declared as **compiler expressions** ensure validity at compile time and therefore strengthen security. +::: The condition defined in the `where` clause typically associates domain data with static [user claims](cap-users#claims). Basically, it *either filters the result set in queries or accepts only write operations on instances that meet the condition*. @@ -444,24 +461,6 @@ You can define filter conditions in the `where`-clause of restrictions based on
-For instance, a user is allowed to read or edit `Orders` (defined with the `managed` aspect) that they have created: - -```cds -annotate Orders with @(restrict: [ - { grant: ['READ', 'UPDATE', 'DELETE'], where: (CreatedBy = $user) } ]); -``` - -Or a `Vendor` can only edit articles on stock (that means `Articles.stock` positive): - -```cds -annotate Articles with @(restrict: [ - { grant: ['UPDATE'], to: 'Vendor', where: (stock > 0) } ]); -``` - -::: tip -Filter conditions declared as **compiler expressions** ensure validity at compile time and therefore strengthen security. -::: - At runtime you'll find filter predicates attached to the appropriate CQN queries matching the instance-based condition. :::warning Modification of Statements @@ -619,7 +618,7 @@ Paths on 1:n associations (`Association to many`) evaluate to `true`, _if the co Input data of `CREATE` and `UPDATE` events is also validated with regards to instance-based authorization conditions. Invalid input that does not meet the condition is rejected with response code `400`. -Let's assume an entity `Orders` which restricts access to users classified by assigned accounting areas: +Let's assume an entity `Orders` that restricts access to users classified by assigned accounting areas: ```cds annotate Orders with @(restrict: [ @@ -639,11 +638,11 @@ Entities that have an instance-based authorization condition, that is [`@restric are guarded by the CAP Java runtime by adding a filter condition to the DB query **excluding not matching instances from the result**. Hence, if the user isn't authorized to query an entity, requests targeting a *single* entity return *404 - Not Found* response and not *403 - Forbidden*. -To allow the UI to distinguish between *not found* and *forbidden*, CAP Java can detect this situation and rejects`UPDATE` and `DELETE` requests to single entities with forbidden accordingly. -The additional authorization check may affect performance. +To allow the UI to distinguish between *not found* and *forbidden*, CAP Java can detect this situation and rejects `UPDATE` and `DELETE` requests to single entities with forbidden accordingly. +The additional authorization check might affect performance. ::: warning Avoid enumerable keys -To avoid to disclosure the existence of such entities to unauthorized users, make sure that the key is not efficiently enumerable or add custom code to overrule the default behaviour otherwise. +To avoid disclosure of the existence of such entities to unauthorized users, make sure that the key is not efficiently enumerable or add custom code to overrule the default behavior otherwise. ::: Starting with CAP Java `4.0`, the reject behaviour is active by default. @@ -666,7 +665,7 @@ See [solution sketches](#limitation-deep-authorization) for information about ho ### Associations -Queries to Application Services are not only authorized by the target entity which has a `@restrict` or `@requires` annotation, but also for all __associated entities__ that are used in the statement. +Queries to Application Services are not only authorized by the target entity that has a `@restrict` or `@requires` annotation, but also for all __associated entities__ that are used in the statement. For instance, consider the following model: ```cds @@ -739,7 +738,7 @@ CAP authorization allows you to control access to your business data on a fine g When defining user roles, one of the first options could be to align roles to the available *operations* on entities, which results in roles such as `SalesOrders.Read`, `SalesOrders.Create`, `SalesOrders.Update`, and `SalesOrders.Delete`. What is the problem with this approach? Think about the resulting number of roles that the user administrator has to handle when assigning them to business users. The administrator would also have to know the domain model precisely and understand the result of combining the roles. Similarly, assigning roles to operations only (`Read`, `Create`, `Update`, ...) typically doesn't fit your business needs.
-We strongly recommend defining roles that describe **how a business user interacts with the system**. Roles like `Vendor`, `Customer`, or `Accountant` can be appropriate. With this approach, the application developers define the set of accessible resources in the CDS model for each role - and not the user administrator. +We strongly recommend defining roles that describe **how a business user interacts with the system**. Roles like `Vendor`, `Customer`, or `Accountant` can be appropriate. With this approach, you as the application developer define the set of accessible resources in the CDS model for each role - and not the user administrator. ### Prefer Single-Purposed, Use-Case Specific Services { #dedicated-services} @@ -849,7 +848,7 @@ service BrowseEmployeesService @(requires:'Employee') { } ``` -A team (entity `Teams`) contains members of type `Employees`. An employee refers to a single contract (entity `Contracts`), which contains sensitive information that should be visible only to `Manager` users. +A team (entity `Teams`) contains members of type `Employees`. An employee refers to a single contract (entity `Contracts`) that contains sensitive information that should be visible only to `Manager` users. `Employee` users should be able to browse the teams and their members but are not allowed to read or even edit their contracts.
As `db.Employees` and `db.Contracts` are auto-exposed, managers can navigate to all instances through the `ManageTeamsService.Teams` service entity (for example, OData request `/ManageTeamsService/Teams?$expand=members($expand=contract)`).
It's important to note that this also holds for an `Employee` user, as **only the target entity** `BrowseEmployeesService.Teams` **has to pass the authorization check in the generic handler, and not the associated entities**.
@@ -867,7 +866,7 @@ service BrowseEmployeesService @(requires:'Employee') { Now, an `Employee` user cannot expand the contracts as the composition is not reachable anymore from the service. ::: tip -Associations without navigation links (for example, when an associated entity is not exposed) are still critical with regard to security. +Associations without navigation links (for example, when you don't expose an associated entity) are still critical with regard to security. ::: ### Design Authorization Models from the Start diff --git a/guides/security/cap-users.md b/guides/security/cap-users.md index 962a138392..0a8eed1511 100644 --- a/guides/security/cap-users.md +++ b/guides/security/cap-users.md @@ -2,7 +2,7 @@ # layout: cookbook label: CAP Users synopsis: > - This guide introduces to CAP user abstraction and role assignments. + This guide introduces CAP user abstraction and role assignments. status: released --- @@ -23,7 +23,7 @@ status: released -This guide introduces to CAP user abstraction and role assignments. +This guide introduces CAP user abstraction and role assignments. [[toc]] @@ -38,8 +38,8 @@ It contains static information about the user such as name, ID, and tenant. Addi After _successful_ authentication, a **CAP user** is mainly represented by the following properties: - **_Logon name_** identifying the user uniquely -- **_Tenant_** describes the tenant of the user (subscriber or provider) which implies the CDS model and business data container. -- **_Roles_** the user has been assigned by a user administrator (business [user roles](#roles)) or roles which are derived by the authentication level ([pseudo roles](#pseudo-roles)). +- **_Tenant_** describes the tenant of the user (subscriber or provider) that implies the CDS model and business data container. +- **_Roles_** the user has been assigned by a user administrator (business [user roles](#roles)) or roles that are derived by the authentication level ([pseudo roles](#pseudo-roles)). - **_Attributes_** the user has been assigned, for example, for instance-based authorization.
@@ -64,8 +64,8 @@ CAP users can be classified in multiple dimensions: - Technical users operate on behalf of an entire tenant at a technical API level. **Authenticated users vs. anonymous users** -- Authenticated users have successfully completed authentication by presenting valid credentials (e.g., a token). -- Anonymous users are unidentifiable in general, as they usually do not present any credentials. +- Authenticated users have successfully completed authentication by presenting valid credentials (for example, a token). +- Anonymous users are unidentifiable in general, as they usually don't present any credentials. **Provider vs. subscriber tenant** - The provider tenant includes all users of the application owner. @@ -104,12 +104,12 @@ Find more details about how to [switch the user context](#switching-users) durin ### Roles { #roles} CAP roles, which are defined on CDS resources such as services and entities, down to the events allowed on them, form the basis of [static access control](authorization#role-based-access-control). -Technically, the request user is restricted to the resources for which an appropriate CAP role is assiged. +Technically, the request user is restricted to the resources for which an appropriate CAP role is assigned. **Such roles should reflect basic operations performed by users interacting with the application**. In the following example, there are two different basic operations defined on domain level: -- `ReportIssues` describes users which view existing issues, report new issues and confirm provided solutions. -- `ProcessIssues` describes users which process issues. They also write notes for customers. +- `ReportIssues` describes users who view existing issues, report new issues and confirm provided solutions. +- `ProcessIssues` describes users who process issues. They also write notes for customers. ```cds annotate Issues with @(restrict: [ @@ -127,8 +127,8 @@ CAP roles represent basic building blocks of authorization rules that are define Independently of that, user administrators combine CAP roles in higher-level policies and assign them to business users in the platform's central authorization management solution _at runtime_. Dynamic assignments of roles to users can be done by -- [AMS roles](#roles-assignment-ams) in case of [IAS authentication](./authentication#ias-auth). -- [XSUAA roles](#xsuaa-roles) in case of [XSUAA authentication](./authentication#xsuaa-auth). +- [AMS roles](#roles-assignment-ams) for [IAS authentication](./authentication#ias-auth). +- [XSUAA roles](#xsuaa-roles) for [XSUAA authentication](./authentication#xsuaa-auth). ::: info CDS-based authorization deliberately avoids technical concepts, such as _scopes_ in _OAuth_, in favor of user roles, which are closer to the business domain of applications. @@ -137,7 +137,7 @@ CDS-based authorization deliberately avoids technical concepts, such as _scopes_ #### Pseudo Roles { #pseudo-roles} -Often it is useful to define access rules that aren't based on an application-specific user role, but rather on the _technical authentication level_ of the request which can be mapped to a pre-defined CAP role. +Often it is useful to define access rules that aren't based on an application-specific user role, but rather on the _technical authentication level_ of the request that can be mapped to a pre-defined CAP role. For instance, a service should be accessible only for technical users, with or without user propagation. Such roles are called pseudo roles as they aren't assigned by user administrators, but are added by the runtime automatically on successful authentication, reflecting the technical level: @@ -181,7 +181,7 @@ All technical clients that have access to the application's XSUAA or IAS service The object representation of the resolved CAP user is attached to the current request context and has an impact on the request flow, for instance with regard to - [authorizations](./authorization#restrictions) - [enriching business data](../domain/#managed-data) with user data -- setting DB session variables +- setting database session variables In the CDS model, some of the user properties can be referenced in annotations or static views: @@ -497,7 +497,7 @@ annotate AdminService.Books with @ams.attributes: { In general, the `@ams` annotation operates on the entity level. The value of the AMS attribute needs to point to a single-value property of the target entity (paths are supported). -You need to make use of a compiler expression in order to ensure validity of the value reference. +You need to make use of a compiler expression to ensure validity of the value reference. ::: tip @@ -688,7 +688,7 @@ You can now verify that the assigned policies enforce the expected access rules: - mock user `content-manager` has full access to `Books` and `Authors`. - mock user `stock-manager` can _read_ `Books` and `Authors` and can _edit_ `Books` (but _not_ `Authors`). -For the advanced test scenario, you can define custom policies in pre-defined package `local` which is ignored during [deployment of the policies](#ams-deployment) to the Cloud service and hence will not show up in production. +For the advanced test scenario, you can define custom policies in pre-defined package `local` that is ignored during [deployment of the policies](#ams-deployment) to the Cloud service and hence will not show up in production. Let's add a custom policy `StockManagerFiction` which is based on base policy `cap.StockManager` restricting the assigned users to the genres `Mystery` and `Fantasy`: @@ -802,7 +802,7 @@ Enhancing the project by `cds add ams` automatically adds task e.g. in the MTA f Note that the policy deployer task requires a path to a directory structure containing the `ams` root folder with the policies to be deployed. -By default, the path points to `srv/src/gen/policies` which is prepared automatically during build step with the appropriate policy-content copied from `srv/src/main/resources/ams`. +By default, the path points to `srv/src/gen/policies` that is prepared automatically during build step with the appropriate policy-content copied from `srv/src/main/resources/ams`. In addition, `@sap/ams` needs to be referenced to add the deployer logic.
@@ -848,7 +848,7 @@ In addition, `@sap/ams` needs to be referenced to add the deployer logic. Note that the policy deployer task requires a path to a directory structure containing the `ams/dcl` root folder with the policies to be deployed. -By default, the path points to `gen/policies` which is prepared automatically during build step with the appropriate policy-content copied from `ams/dcl`. +By default, the path points to `gen/policies` that is prepared automatically during build step with the appropriate policy-content copied from `ams/dcl`. In addition, `@sap/ams` needs to be referenced to add the deployer logic.
@@ -872,7 +872,7 @@ Afterwards, you can now perform the following tasks in the Administrative Consol To create a custom policy with filter restrictions, follow these steps: 1. Select **Applications & Resources** > **Applications**. Pick the IAS application of your project from the list. -2. In **Authorization Policies** select **Create** > **Create Restriction**. Choose an appropriate policy name, e.g. `StockManagerFiction`. +2. In **Authorization Policies** select **Create** > **Create Restriction**. Choose an appropriate policy name, for example, `StockManagerFiction`. 3. Customize the filter conditions for the available AMS attributes. 4. Confirm with **Save**. @@ -1127,9 +1127,9 @@ Next, you create a role collection that assigns these roles to your users. 8. Choose *Save* -If a user attribute isn't set for a user in the IdP of the SAP BTP Cockpit, this means that the user has no restriction for this attribute. +If a user attribute isn't set for a user in the identity provider of the SAP BTP Cockpit, this means that the user has no restriction for this attribute. For example, if a user has no value set for an attribute "Country", they're allowed to see data records for all countries. -In the _xs-security.json_, the `attribute` entity has a property `valueRequired` where the developer can specify whether unrestricted access is possible by not assigning a value to the attribute. +In the _xs-security.json_, the `attribute` entity has a property `valueRequired` where you as the developer can specify whether unrestricted access is possible by not assigning a value to the attribute. @@ -1254,7 +1254,7 @@ Depending on the configured [authentication](./authentication) strategy, CAP der In most cases, CAP's default mapping to the CAP user matches your requirements, but CAP also allows you to customize the mapping according to specific needs. -For instance, the logon name as injected by standard XSUAA integration might not be unique if several customer IdPs are connected to the underlying identity service. +For instance, the logon name as injected by standard XSUAA integration might not be unique if several customer identity providers are connected to the underlying identity service. Here a combination of `user_name` and `origin` mapped to `$user` might be a feasible solution that you can implement in a custom adaptation. This is done by means of a custom [UserInfoProvider](https://www.javadoc.io/doc/com.sap.cds/cds-services-api/latest/com/sap/cds/services/runtime/UserInfoProvider.html) interface that can be implemented as Spring bean as demonstrated in [Registering Global Parameter Providers](../../java/event-handlers/request-contexts#global-providers): @@ -1306,10 +1306,9 @@ Also consider data protection and privacy regulations when storing user data. There are multiple reasonable use cases in which user modification is a suitable approach: -- Injecting or mixing user roles by calling `modifiableUserInfo.addRole(String role)` (In fact this is the base for [AMS plugin](#roles-assignment-ams) injecting user specifc roles). +- Injecting or mixing user roles by calling `modifiableUserInfo.addRole(String role)` (In fact this is the base for [AMS plugin](#roles-assignment-ams) injecting user-specific roles). - Providing calculated attributes used for [instance-based authorization](./authorization#user-attrs) by invoking `modifiableUserInfo.setAttributeValues(String attribute, List values)`. - Constructing a request user based on forwarded (and trusted) header information, completely replacing default authentication. -- etc. [See more examples for custom UserInfoProvider](https://pages.github.tools.sap/cap/docs/java/event-handlers/request-contexts#global-providers){.learn-more} @@ -1348,7 +1347,6 @@ There are multiple reasonable use cases in which user modification is a suitable - Overriding user roles by calling `user.roles(roles)`. - Overriding user attributes and providing calculated attributes used for [instance-based authorization](./authorization#user-attrs) by invoking `user.attr(attributes)`. -- etc. ::: warning Be very careful when redefining `$user` and customizing `cds.middlewares` The user name is frequently stored with business data (for example, `managed` aspect) and might introduce migration efforts. @@ -1578,7 +1576,7 @@ Call application services on behalf of the privileged user only in case the serv
In rare situations you might want to call a public service without sharing information of the current request user. -In this case, user propagation is explicitly prevented. +In this case, you explicitly prevent user propagation. Such service calls can be executed on behalf of the anonymous user, acting as a public user without personal user claims: ```java @@ -1593,7 +1591,7 @@ cdsRuntime.requestContext().anonymousUser().run(privilegedContext -> {
In rare situations you might want to call a public service without sharing information about the current request user. -In this case, user propagation can explicitly be prevented by running in a context whose principal is the `anonymous` user. +In this case, you can explicitly prevent user propagation by running in a context whose principal is the `anonymous` user. ```js cds.tx({ user: cds.User.anonymous }, async tx => { @@ -1735,22 +1733,23 @@ Prefer using [Remote Services](#remote-services) built on Cloud SDK rather than ## Pitfalls -- **Don't write custom code against concrete user types of a specific identity service (e.g. XSUAA or IAS)**. -Instead, if required at all, use CAP's user abstraction layer (`UserInfo` in Java or `req.user` in Node.js) to handle user-related logic. +- **Don't write custom code against user types of an identity service (XSUAA / IAS)**. + + Instead, if it is required at all to code against user types, use CAP's user abstraction layer (`UserInfo` in Java or `req.user` in Node.js) to handle user-related logic. + +- **Don't try to propagate named user context in asynchronous requests**. + + This can happen when using the Outbox pattern or Messaging. Asynchronous tasks are typically executed outside the scope of the original request context, after successful authorization. Propagating the named user context can lead to inconsistencies or security issues. Instead, use technical users for such scenarios. -- **Don't try to propagate named user context in asynchronous requests**, such as when using the Outbox pattern or Messaging. -Asynchronous tasks are typically executed outside the scope of the original request context, after successful authorization. -Propagating the named user context can lead to inconsistencies or security issues. Instead, use technical users for such scenarios. +- **Don't mix CAP Roles for business and technical users**. -- **Don't mix CAP Roles for business and technical users**. CAP roles should be clearly separated based on their purpose: Business user roles are designed to reflect how end users interact with the application. -Technical user roles are intended for system-level operations, such as background tasks or service-to-service communication. Mixing these roles can lead to confusion and unintended access control issues. + CAP roles should be clearly separated based on their purpose: Business user roles are designed to reflect how end users interact with the application. Technical user roles are intended for system-level operations, such as background tasks or service-to-service communication. Mixing these roles can lead to confusion and unintended access control issues. - **Don't mix AMS Policy level with CAP Role level**. -AMS policies operate at the business level, while CAP roles are defined at the technical domain level. -Avoid mixing these two layers, as this could undermine the clarity and maintainability of your authorization model. + + AMS policies operate at the business level, while CAP roles are defined at the technical domain level. Avoid mixing these two layers, as this could undermine the clarity and maintainability of your authorization model. -- **Don't choose AMS Attributes which do not slice the domain properly**. -AMS attributes should have a broad, domain-wide relevance and be applicable across multiple entities. -Typically, only a limited number of attributes (less than 5) meet this criterion. -Exposing entity-specific attributes as AMS attributes can lead to unnecessary complexity and reduced reusability. +- **Don't choose entity attributes as AMS Attributes whose relevance is too small**. + + Such attributes should have a broad, domain-wide relevance and be applicable across multiple entities. Typically, only a limited number of attributes (less than 10) meet this criterion. Exposing entity-specific attributes as AMS attributes can lead to unnecessary complexity and reduced reusability. diff --git a/guides/security/overview.md b/guides/security/overview.md index f4931776af..b760ffad73 100644 --- a/guides/security/overview.md +++ b/guides/security/overview.md @@ -36,14 +36,14 @@ For example, authentication can be delegated to a [separate ingress component](. ### Customizable { #key-concept-customizable } -Due to the plugin-based architecture, **CAP allows standard functions to be modified as required or, if necessary, completely replaced**. -This flexibility is crucial for scenarios where the default methods do not fully meet the requirements of the application. -Moreover, this integration helps to easily incorporate non-CAP and even non-BTP services, thereby providing a flexible and interoperable environment. +Due to the plugin-based architecture, **you can modify CAP's standard functions as required or, if necessary, completely replace them**. +This flexibility is crucial for scenarios where the default methods do not fully meet your application's requirements. +Moreover, this integration helps to easily incorporate non-CAP and even non-BTP services, thereby providing a flexible and interoperable environment. ![Overview Customizable Components with CAP](./assets/security-customizable.drawio.svg){width="600px" } -For instance, it is possible to define specific endpoints with a [custom authentication strategy](./authentication#custom-auth). -Likewise, the CAP representation of the request user can be overruled to match additional, application-specific requirements. +For instance, you can define specific endpoints with a [custom authentication strategy](./authentication#custom-auth). +Likewise, you can override the CAP representation of the request user to match additional, application-specific requirements. ### Built on Best of Breed { #key-concept-platform-services } @@ -59,7 +59,7 @@ Likewise, TLS termination is offered by the [platform infrastructure](#platform- ### Decoupled from Business Logic { #key-concept-decoupled-coding } -As security functions are factorized into independent components, **application code is entirely decoupled** and hence is not subject to change in case of any security-related adaptations. +As security functions are factorized into independent components, **application code is entirely decoupled** and hence is not subject to change for any security-related adaptations. This ensures that business logic remains independent of platform services, which are often subject to security-hardening initiatives. As a welcome side effect, this also allows testing application security in a **local test or development setup in a self-contained way**. @@ -89,7 +89,7 @@ The application is responsible for coordinated overall configuration. ## Security Architecture CAP applications run in a specific context that has a major impact on the security [architecture](#architecture-overview). -CAP requires a dedicated [platform environment](#platform-environment) to integrate with, in order to ensure end-to-end security. +CAP requires a dedicated [platform environment](#platform-environment) to integrate with to ensure end-to-end security. ### Architecture Overview { #architecture-overview } @@ -97,7 +97,7 @@ The following diagram provides a high-level overview of the security-relevant co ![This TAM graphic is explained in the accompanying text.](./assets/cap-security-architecture-overview.png){width="600px"} -To serve a business request, different runtime components are involved: a request, issued by a UI or technical client ([public zone](#public-zone)), is forwarded by a gateway or ingress router to the CAP application. In case of a UI request, an [Application Router](https://help.sap.com/docs/btp/sap-business-technology-platform/application-router) instance acts as a proxy to manage the login flow and the browser session. The CAP application can have additional services such as a CAP sidecar. All application components ([application zone](#application-zone)) might make use of platform services such as database or identity service ([platform zone](#platform-zone)). +To serve a business request, different runtime components are involved: a request, issued by a UI or technical client ([public zone](#public-zone)), is forwarded by a gateway or ingress router to the CAP application. For a UI request, an [Application Router](https://help.sap.com/docs/btp/sap-business-technology-platform/application-router) instance acts as a proxy to manage the login flow and the browser session. The CAP application can have additional services such as a CAP sidecar. All application components ([application zone](#application-zone)) might make use of platform services such as database or identity service ([platform zone](#platform-zone)). #### Public Zone { #public-zone } @@ -111,17 +111,17 @@ Ideally, you should limit the number of exposed endpoints to a minimum, perhaps The platform zone contains all platform components and services that are *configured and maintained* by the application provider. CAP applications consume these low-level [platform services](#btp-services) to handle more complex business requests. -For instance, persistence service to store business data and identity service to authenticate the business user play a fundamental role. +For instance, the persistence service stores business data and the identity service authenticates the business user. Both play a fundamental role. The platform zone also includes the gateway, which is the main entry point for external requests. Additionally, it may contain extra ingress routers. #### Application Zone { #application-zone} -The application zone comprises all microservices that represent a CAP application. They are tightly integrated and form a **unit of trust**. The application provider is responsible to *develop, deploy and operate* these services: +The application zone comprises all microservices that represent a CAP application. They are tightly integrated and form a **unit of trust**. The application provider is responsible for *developing, deploying, and operating* these services: - The [Application Router](https://help.sap.com/docs/btp/sap-business-technology-platform/application-router) acts as an optional reverse proxy wrapping the application service and providing business-independent functionality required for UIs. This includes serving UI content, providing a login flow as well as managing the session with the browser. -It can be deployed as an application (reusable module) or alternatively consumed as a [service](https://help.sap.com/docs/btp/sap-business-technology-platform/managed-application-router). +You can deploy it as an application (reusable module) or alternatively consume it as a [service](https://help.sap.com/docs/btp/sap-business-technology-platform/managed-application-router). - The CAP application service exposes the API to serve business requests. Usually, it makes use of lower-level platform services. As built on CAP, a significant number of security requirements is covered either out of the box or by adding minimal configuration. @@ -148,7 +148,7 @@ This **frees CAP applications from the need to manage trust certificates**. The 3. **Secrets** that are required to protect the application or to consume other platform services **are injected by the platform** into the application microservices in a secure way. -All supported [environments](#cloud) fulfill the given requirements. Additional requirements could be added in future. +All supported [environments](#cloud) fulfill the given requirements. Additional requirements may be added in future. ::: tip Sign custom certificates Custom domain certificates must be signed by a trusted certificate authority. @@ -176,10 +176,13 @@ Security not only plays a crucial role in [cloud environments](#cloud), but also Apparently the security requirements are different from cloud scenario as local endpoints are typically not exposed for remote clients. But there are still a few things to consider because exploited vulnerabilities could be the basis for attacks on productive cloud services: +#### DO:{.good} + - Make sure that locally started HTTP endpoints are bound to `localhost`. -- In case you run your service in hybrid mode with bindings to cloud service instances, -use [cds bind](../../tools/cds-bind) instead of copying bindings manually to `default-env.json` file. -`cds bind` avoids materialization of secrets to local disc, which is inherently dangerous. +- Use [cds bind](../../tools/cds-bind) to run your service in hybrid mode with bindings to cloud service instances. `cds bind` avoids materialization of secrets to local disc, which is inherently dangerous. The opposite is consequently a **Don't**. + +#### DON'T:{.bad} +- Don't copy bindings manually to `default-env.json` file or otherwise on your local disc. - Don't write sensitive data to application logs, also not via debug logging. - Don't test with real business data, for example, copied from a productive system. @@ -191,12 +194,12 @@ Currently, CAP supports to run on two cloud runtimes of [SAP Business Technology - [SAP BTP, Cloud Foundry Runtime](https://help.sap.com/docs/btp/sap-business-technology-platform/cloud-foundry-environment) - [SAP BTP, Kyma Runtime](https://help.sap.com/docs/btp/sap-business-technology-platform/kyma-environment) -Application providers are responsible to ensure a **secure platform environment**. +Application providers are responsible for ensuring a **secure platform environment**. In particular, this includes *configuring* [platform services](#btp-services) the application consumes. -For instance, the provider (user) administrator needs to configure the [identity service](#identity-service) to separate platform users from business users that come from different identity providers. +For instance, you as the provider (user) administrator need to configure the [identity service](#identity-service) to separate platform users from business users that come from different identity providers. Likewise, login policies (for example, multifactor authentication or single-sign-on) must be aligned with company-specific requirements. -Note, that achieving production-ready security requires to meet all relevant aspects of the **development process** as well. +Note that achieving production-ready security requires meeting all relevant aspects of the **development process** as well. For instance, source code repositories must be protected and must not contain any secrets or personal data. Likewise, the **deployment process** must be secured. This includes not only setting up CI/CD pipelines running on technical platform users, but also defining integration tests to ensure properly secured application endpoints. @@ -220,7 +223,7 @@ Find more about BTP platform security here: ### Security Platform Services { #btp-services } -SAP BTP provides a range of platform services that your CAP applications can utilize to meet production-grade security requirements. To ensure the security of your CAP applications, it's crucial to comply with the service level agreement (SLA) of these platform services. *As the provider of the application, you play a key role in meeting these requirements by correctly configuring and using these services.* +SAP BTP provides a range of platform services that your CAP applications can use to meet production-grade security requirements. To ensure the security of your CAP applications, comply with the service level agreement (SLA) of these platform services. *As the provider of the application, you play a key role in meeting these requirements by correctly configuring and using these services.* ::: tip Compliance documents in SAP Trust Center SAP BTP services and the underlying platform infrastructure hold various certifications and attestations, which can be found under the naming of SAP Cloud Platform in the [SAP Trust Center](https://www.sap.com/about/trust-center/certification-compliance/compliance-finder.html?search=SAP%20Business%20Technology%20Platform%20ISO). @@ -228,42 +231,42 @@ SAP BTP services and the underlying platform infrastructure hold various certifi [Webcast SAP BTP Cloud Identity and Security Services](https://assets.dm.ux.sap.com/webinars/sap-user-groups-k4u/pdfs/221117_sap_security_webcast_series_sap_btp_cloud_identity_and_security_services.pdf){.learn-more} -The CAP framework offers flexible APIs that you can integrate with various services, including your custom services. If you replace platform services with your custom ones, it's important to ensure that the service level agreements (SLAs) CAP depends on are still met. +The CAP framework offers flexible APIs that you can integrate with various services, including your custom services. If you replace platform services with your custom ones, ensure that the service level agreements (SLAs) CAP depends on are still met. The most important services for security offered by the platform: #### [SAP Cloud Identity Services - Identity Authentication](https://help.sap.com/docs/IDENTITY_AUTHENTICATION) { #identity-service } -The Identity Authentication service defines the user base for (CAP) applications and services, and allows to control access. -Customers can integrate their third-party or on-premise identity provider (IdP) and harden security by defining multifactor authentication or by narrowing client IP ranges. -This service helps to introduce a strict separation between platform users (provider) and business users (subscribers), a requirement of CAP. It supports various authentication methods, including SAML 2.0 and [OpenID Connect](https://openid.net/connect/), and allows for the configuration of single sign-on access. +The Identity Authentication service defines the user base for (CAP) applications and services, and allows you to control access. +You can integrate your third-party or on-premise identity provider (IdP) and harden security by defining multifactor authentication or by narrowing client IP ranges. +This service helps introduce a strict separation between platform users (provider) and business users (subscribers), a requirement of CAP. It supports various authentication methods, including SAML 2.0 and [OpenID Connect](https://openid.net/connect/), and allows you to configure single sign-on access. -[Learn more in the security guide.](https://help.sap.com/docs/IDENTITY_AUTHENTICATION?#discover_task-security){.learn-more} +[Learn more in the SAP Cloud Identity - Security Guide.](https://help.sap.com/docs/IDENTITY_AUTHENTICATION?#discover_task-security){.learn-more} #### [SAP Authorization and Trust Management Service](https://help.sap.com/docs/CP_AUTHORIZ_TRUST_MNG) The service allows customers to manage user authorizations in technical roles at the application level, which can be aggregated into business-level role collections for large-scale cloud scenarios. Developers must define application roles carefully as they form the basic access rules for business data. -[Learn more in the security guide.](https://help.sap.com/docs/btp/sap-business-technology-platform/btp-security){.learn-more} +[Learn more in the SAP Authorization and Trust Management service guide.](https://help.sap.com/docs/btp/sap-business-technology-platform/btp-security){.learn-more} #### [SAP BTP Connectivity](https://help.sap.com/docs/CP_CONNECTIVITY) The connectivity service allows SAP BTP applications to securely access remote services that run on the Internet or on-premise. It provides a way to establish a secure communication channel between remote endpoints that are connected via an untrusted network infrastructure. -[Learn more in the security guide.](https://help.sap.com/docs/CP_CONNECTIVITY/cca91383641e40ffbe03bdc78f00f681/cb50b6191615478aa11d2050dada467d.html){.learn-more} +[Learn more in the SAP BTP Connectivity guide.](https://help.sap.com/docs/CP_CONNECTIVITY/cca91383641e40ffbe03bdc78f00f681/cb50b6191615478aa11d2050dada467d.html){.learn-more} #### [SAP Malware Scanning Service](https://help.sap.com/docs/MALWARE_SCANNING) This service scans transferred business documents for malware and viruses. Currently, there is no CAP integration. A scan must be triggered explicitly by the business application. -[Learn more in the security guide.](https://help.sap.com/docs/btp?#operate_task-security){.learn-more} +[Learn more in the SAP Malware Scanning service guide.](https://help.sap.com/docs/btp?#operate_task-security){.learn-more} #### [SAP Credential Store](https://help.sap.com/docs/CREDENTIAL_STORE) Credentials managed by applications must be stored securely. This service provides a REST API for (CAP) applications to store and retrieve credentials at runtime. -[Learn more in the security guide.](https://help.sap.com/docs/CREDENTIAL_STORE?#discover_task-security){.learn-more} +[Learn more in the SAP Credential Store guide.](https://help.sap.com/docs/CREDENTIAL_STORE?#discover_task-security){.learn-more} diff --git a/guides/security/remote-authentication.md b/guides/security/remote-authentication.md index 88f3f2f40a..de04d59beb 100644 --- a/guides/security/remote-authentication.md +++ b/guides/security/remote-authentication.md @@ -29,7 +29,7 @@ This guide explains how to authenticate remote services. ## Remote Service Abstraction { #remote-services } -According to the key concept of [pluggable building blocks](./overview#key-concept-pluggable), the architecture of CAP's [Remote Services](../services/consuming-services#consuming-services) decouples protocol level (i.e., exchanged content) from connection level (i.e., established connection channel). +According to the key concept of [pluggable building blocks](./overview#key-concept-pluggable), the architecture of CAP's [Remote Services](../services/consuming-services#consuming-services) decouples protocol level (that is, exchanged content) from connection level (that is, established connection channel). While the business context of the application impacts the protocol, the connectivity of the service endpoints is independent of it and mainly depends on platform-level capabilities. The latter is frequently subject to change and therefore should not introduce application dependencies. @@ -45,15 +45,15 @@ All three service scenarios can be addressed through configuration variants of t CAP supports out-of-the-box consumption of various types of [remote services]( #remote-services): -* [Co-located services](#co-located-services) as part of the same deployment and bound to the same identity instance (i.e., belong to the same trusted [application zone](./overview#application-zone)). -* [External services](#app-to-app) which can be running on non-BTP platforms. +* [Co-located services](#co-located-services) as part of the same deployment and bound to the same identity instance (that is, belong to the same trusted [application zone](./overview#application-zone)). +* [External services](#app-to-app) that can be running on non-BTP platforms. * [BTP reuse services](#ias-reuse) consumed via service binding. ## Co-located Services {#co-located-services} Co-located services do not run in the same microservice, but are typically part of the same deployment unit and hence reside within the same trust boundary of the [application zone](./overview#application-zone). -Logically, such co-located services contribute to the application equally and could run as integrated services in the same microservice, but for technical reasons (e.g., different runtime or scaling requirements) they are separated physically, often as a result of a [late-cut microservice approach](../deploy/microservices#late-cut-microservices). +Logically, such co-located services contribute to the application equally and could run as integrated services in the same microservice, but for technical reasons (for example, different runtime or scaling requirements) they are separated physically, often as a result of a [late-cut microservice approach](../deploy/microservices#late-cut-microservices). Technically, **they share the same identity instance, which allows direct token forwarding**: @@ -200,7 +200,7 @@ xtravels-ias identity application xtravels, xtravels-srv, xflights-srv, .. ::: You can test the valid setup of the xtravels application by accessing the UI and logging in with an authorized test user of the IAS tenant. -To do so, assign a proper AMS policy (e.g., `admin`) to the test user as described [earlier](./cap-users#ams-deployment). +To do so, assign a proper AMS policy (for example, `admin`) to the test user as described [earlier](./cap-users#ams-deployment). ::: tip @@ -215,7 +215,7 @@ As a consequence, external services can run cross-regionally; even non-BTP syste A prerequisite for external service calls is a trust federation between the consumer and the provider system. A seamless integration experience for external service communication is provided by [IAS App-2-App](#app-to-app) flows, which are offered by CAP via remote services. -Alternatively, remote services can be configured on top of [BTP HTTP Destinations](../services/consuming-services#using-destinations) which offer [various authentication strategies](https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/http-destinations) such as SAML 2.0 as required by many S/4 system endpoints. +Alternatively, remote services can be configured on top of [BTP HTTP Destinations](../services/consuming-services#using-destinations) that offer [various authentication strategies](https://help.sap.com/docs/connectivity/sap-btp-connectivity-cf/http-destinations) such as SAML 2.0 as required by many S/4 system endpoints. ### IAS App-2-App { #app-to-app } @@ -226,7 +226,7 @@ Prerequisites are identity instances on both consumer and provider sides, plus a ![External services](./assets/external-services.drawio.svg){width="500px" } CAP supports communication between arbitrary IAS endpoints and remains transparent for applications as it builds on the same architectural pattern of [remote services](#remote-services). -Technically, the connectivity component uses [IAS App-2-App flows](https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/consume-apis-from-other-applications) in this scenario which requires a token exchange from a consumer token into a token for the provider. +Technically, the connectivity component uses [IAS App-2-App flows](https://help.sap.com/docs/cloud-identity-services/cloud-identity-services/consume-apis-from-other-applications) in this scenario that requires a token exchange from a consumer token into a token for the provider. The latter is issued by IAS only if the consumer is configured with a valid IAS dependency pointing to the provider accordingly. :::tip @@ -273,7 +273,7 @@ The description helps administrators to configure the consumer application with How can proper authorization be configured for _technical clients without user propagation_? OAuth tokens presented by valid consumer requests from an App-2-App flow will have API claim `DataConsumer`, which is automatically mapped to a CAP role by the runtime. -Therefore, the corresponding CDS service can be protected by CAP role `DataConsumer` to authorize requests thoroughly: +Therefore, you can protect the corresponding CDS service by CAP role `DataConsumer` to authorize requests thoroughly: ::: code-group ```cds [/srv/authorization.cds] @@ -298,16 +298,16 @@ The API identifiers exposed by the IAS instance in list `provided-apis` are gran ::: warning Use different roles for technical and business users Use different CAP roles for technical clients without user propagation and for named business users. -Instead of using the same role, expose dedicated CDS services to technical clients which aren't accessible to business users and vice versa. +Instead of using the same role, expose dedicated CDS services to technical clients that are not accessible to business users and vice versa. ::: #### 2. Prepare and deploy the consumer application { #consumer } Like with xflights, clone [`xtravels-java`](https://github.com/capire/xtravels-java/tree/main) or, if already cloned and modified locally, reset to remote branch. -First, a BTP destination needs to be added that points to the provider service endpoint to be called (`URL`) and that contains the information about the IAS dependency to be called (`cloudsdk.ias-dependency-name`). +First, you need to add a BTP destination that points to the provider service endpoint to be called (`URL`) and that contains the information about the IAS dependency to be called (`cloudsdk.ias-dependency-name`). The name for the IAS dependency is flexible but **needs to match the chosen name in the next step** when [connecting consumer and provider in IAS](#connect). -The destination is required by the connectivity component to prepare the HTTP call accordingly. Also note that the authentication type of the destination is `NoAuthentication`, as the destination itself does not contribute to the authentication process. +The connectivity component requires the destination to prepare the HTTP call accordingly. Also note that the authentication type of the destination is `NoAuthentication`, as the destination itself does not contribute to the authentication process. ::: code-group @@ -390,7 +390,7 @@ cds up Remote HCQL service responded with HTTP status code '401', ... ``` -Technically, the remote service implementation will delegate the HTTP connection setup to the connectivity component, which can recognize by the type of destination that it needs to initiate an App-2-App flow. +Technically, the remote service implementation will delegate the HTTP connection setup to the connectivity component that can recognize by the type of destination that it needs to initiate an App-2-App flow. It then takes the token from the request and triggers an IAS token exchange for the target [IAS dependency](#connect) according to the user propagation strategy (technical communication here). As the IAS dependency is not created yet, IAS rejects the token exchange request and the call to the provider fails with `401` (not authenticated). @@ -438,8 +438,10 @@ To do so, assign a proper AMS policy (e.g., `admin`) to the test user as describ - **Don't write custom integration logic** for consumed services. Leverage CAP's remote service architecture instead to ensure a seamless integration experience. -- **Don't implement connectivity layer code** (e.g., to fetch or exchange tokens). +- **Don't implement connectivity layer code** (for example, to fetch or exchange tokens). Instead, rely on the shared connectivity component, which ensures centralized and generic processing of outbound requests. -- **Don't treat co-located services as external services**. -This introduces unnecessary communication overhead and increases total cost of ownership (TCO). +- **Don't treat co-located services as external services**. +This introduces unnecessary communication overhead and increases total cost of ownership. + + From d2c9474fbf163a5186e1a2d829bf012541d3e135 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Wed, 4 Feb 2026 10:30:06 +0100 Subject: [PATCH 412/439] proper title case, small edit --- guides/databases/_menu.md | 4 ++-- guides/databases/cap-level-dbs.md | 6 +++--- guides/databases/cdl-to-ddl.md | 8 ++++---- guides/databases/index.md | 12 ++++++------ 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/guides/databases/_menu.md b/guides/databases/_menu.md index 6ed4bd668d..ca989779dd 100644 --- a/guides/databases/_menu.md +++ b/guides/databases/_menu.md @@ -1,5 +1,5 @@ - -# [ CAP-level Database Support ](cap-level-dbs) + +# [ CAP-Level Database Support ](cap-level-dbs) # [ CDL Compiled to DDL ](cdl-to-ddl) # [ Adding Initial Data ](initial-data.md) # Deployed to ... diff --git a/guides/databases/cap-level-dbs.md b/guides/databases/cap-level-dbs.md index 55ab31dc3f..1cce945f91 100644 --- a/guides/databases/cap-level-dbs.md +++ b/guides/databases/cap-level-dbs.md @@ -94,10 +94,10 @@ The compiler translates this operator to the best-possible equivalent in the tar ## Standard Functions ###### Portable Functions -The following sections list standardized string, numeric, data/time, and aggregate functions supported by CAP, and guaranteed to work across all supported databases with feature parity. You can safely use these in CDS view definitions and runtime queries expressed in CQL. The compiler translates them to the best-possible database-specific native SQL equivalents. +The following sections list standardized string, numeric, date/time, and aggregate functions supported by CAP, and guaranteed to work across all supported databases with feature parity. You can safely use these in CDS view definitions and runtime queries expressed in CQL. The compiler translates them to the best-possible database-specific native SQL equivalents. > [!important] Function names are case-sensitive -> The names for standardized functions must be written exactly as listed above. For example, `toUpper` is invalid, while `toupper` is valid. Differently cased names might also work if they match native functions of the specific database, but are not guaranteed to be portable -> always use the exact casing as listed. +> The names for standardized functions must be written exactly as listed below. For example, `toUpper` is invalid, while `toupper` is valid. Differently cased names might also work if they match native functions of the specific database, but are not guaranteed to be portable -> always use the exact casing as listed. ### String Functions @@ -114,7 +114,7 @@ The following sections list standardized string, numeric, data/time, and aggrega - `substring(x,start, length)` - `matchespattern(x,pattern)` -In addition, to `concat()`, CAP also supports the common `||` operator for string concatenation in CQL queries, same as in SQL queries. For example, these two queries are equivalent: +In addition to `concat()`, CAP also supports the common `||` operator for string concatenation in CQL queries, same as in SQL queries. For example, these two queries are equivalent: ```sql SELECT concat (firstName,' ',lastName) as fullName from Authors; diff --git a/guides/databases/cdl-to-ddl.md b/guides/databases/cdl-to-ddl.md index ed862872fa..b48ef4f7a2 100644 --- a/guides/databases/cdl-to-ddl.md +++ b/guides/databases/cdl-to-ddl.md @@ -39,9 +39,9 @@ cds compile \* | grep entity | wc -l -### Database-specific Dialects +### Database-Specific Dialects -Add the `--dialect` option, to generate DDL for a specific databases. For example, to see the SAP HANA-specific variant, run: +Add the `--dialect` option to generate DDL for specific databases. For example, to see the SAP HANA-specific variant, run: ```shell cds compile \* --to sql --dialect hana @@ -63,7 +63,7 @@ code --diff _out/c/sqlite.sql _out/c/h2.sql ### Dialects by `cds env` Profiles -The dialect is automatically inferred from your project configuration, and the current profile, so you typically don't need to specify it explicitly. For example, if your project is configured to use SAP HANA in production and SQLite in development, the respective dialects will be applied automatically. +The dialect is automatically inferred from your project configuration and the current profile, so you typically don't need to specify it explicitly. For example, if your project is configured to use SAP HANA in production and SQLite in development, the respective dialects will be applied automatically. Try this out using the `--profile` option: ```shell @@ -129,7 +129,7 @@ Essentially, `cds deploy` calls `cds compile --to sql` under the hood, but goe - **Schema Evolution** – the `diff` shows additional `DROP TABLE` statements, which are a schema evolution strategy most suitable for development. For production, more sophisticated strategies are applied. Learn more about that in the [_Schema Evolution_](schema-evolution) guide. -- **Database-specific Artifacts** – for [SAP HANA](hana), the output of `cds deploy` is not a single SQL DDL script anymore; but a number of `.hdbtable`, `.hdbview`, and other so-called HDI artifacts are generated. +- **Database-Specific Artifacts** – for [SAP HANA](hana), the output of `cds deploy` is not a single SQL DDL script anymore; but a number of `.hdbtable`, `.hdbview`, and other so-called HDI artifacts are generated. > [!note] Ad-hoc Deployments > Without the `--dry` option, `cds deploy` would not only compile your CDS models to DDL, but would also do an ad-hoc deployment to the target database, if available. How that works is explained in more detail in the database-specific guides for [_SAP HANA_](hana), [_SQLite_](sqlite), and [_PostgreSQL_](postgres). diff --git a/guides/databases/index.md b/guides/databases/index.md index 1c05847606..a2f187c956 100644 --- a/guides/databases/index.md +++ b/guides/databases/index.md @@ -11,12 +11,12 @@ CAP application developers [focus on their domain](../../get-started/features#fo ### Best Practices, Served Out of the Box > [!tip] Served Out of the Box -> The CAP framework handles all compilation to DDL automatically, for example when you run `cds watch` or `cds deploy`. You typically don't need to worry about the details unless you want to inspect or customize the generated DDL statements. The guides in this section explain how things work under the hood. If you are on a fast track, you can safely skip them to great extent. +> The CAP framework handles all compilation to DDL automatically, for example when you run `cds watch` or `cds deploy`. You typically don't need to worry about the details unless you want to inspect or customize the generated DDL statements. The guides in this section explain how things work under the hood. If you are on a fast track, you can safely skip them to a great extent. The illustration below shows what happens automatically under the hood: - CDS models are compiled to database-native SQL/DDL -- which get deployed to the configured database, and +- which are deployed to the configured database, and - initial data from CSV files is loaded into the database tables - CQL queries from CAP services are served automatically. @@ -30,14 +30,14 @@ The illustration below shows what happens automatically under the hood: > - can be extended through event handlers, as any other CAP service > [!tip] Promoting Fast Inner-Loop Development -> Through the ability to easily swap production-grade databases like SAP HANA with SQLite or H2 in-memory databases during development, without any changes to CDS models nor implementations, we greatly promote inner-loop development with fast turnaround cycles, as well as speeding up test pipelines and minimize TCD. +> Through the ability to easily swap production-grade databases like SAP HANA with SQLite or H2 in-memory databases during development, without any changes to CDS models nor implementations, we greatly promote inner-loop development with fast turnaround cycles, as well as speeding up test pipelines and minimizing TCD. -### Database-independent Guides +### Database-Independent Guides The following guides explain the details of CAP-level database integration, which are mostly database-agnostic, and apply to all supported databases: -[ CAP-level Database Integration ](cap-level-dbs.md) +[ CAP-Level Database Integration ](cap-level-dbs.md) : How database-agnostic CDS models in CDL format are compiled to native DDL statements for different databases. [ CQL Compiled to SQL ](cdl-to-ddl.md) @@ -53,6 +53,6 @@ The following guides explain the details of CAP-level database integration, whic : Pointing out performance considerations, and common pitfalls. -### Database-specific Guides +### Database-Specific Guides These guides are complemented by database-specific guides that explain particularities and customizations for each supported database: [SAP HANA](hana.md), [SQLite](sqlite.md), [H2](h2.md), [PostgreSQL](postgres.md). From 48523e548b1ac6894692a1cd694aabbef8e2fcbf Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Wed, 4 Feb 2026 10:56:58 +0100 Subject: [PATCH 413/439] better list wrt accessibility --- guides/databases/index.md | 16 ++++++++-------- guides/databases/schema-evolution.md | 5 ++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/guides/databases/index.md b/guides/databases/index.md index a2f187c956..48608478e6 100644 --- a/guides/databases/index.md +++ b/guides/databases/index.md @@ -15,19 +15,19 @@ CAP application developers [focus on their domain](../../get-started/features#fo The illustration below shows what happens automatically under the hood: -- CDS models are compiled to database-native SQL/DDL -- which are deployed to the configured database, and -- initial data from CSV files is loaded into the database tables +- CDS models are compiled to database-native SQL/DDL statements. +- These statements are deployed to the configured database. +- Initial data from CSV files is loaded into the database tables. - CQL queries from CAP services are served automatically. ![Architecture diagram showing CAP database integration flow. Initial data in CSV files and CDS models in CDL and CQL format are compiled to native SQL and DDL statements, which are then deployed to a database. CAP Services query the database using CQL. Four database types are shown as supported options: SAP HANA, SQLite, H2, and PostgreSQL, all connecting to the central database component.](assets/overview.drawio.svg) > [!tip] Following the Calesi Pattern -> The implementations of the CAP database layers follow the design principles of CAP-level Service Integration: -> - Database Services are CAP services themselves, which... -> - provide database-agnostic interfaces to applications -> - provide mocks for local development out of the box -> - can be extended through event handlers, as any other CAP service +> The implementations of the CAP database layers follow the design principles of CAP-level Service Integration which means the following for database services: +> - They are CAP services themselves. +> - They provide database-agnostic interfaces to applications. +> - They provide mocks for local development out of the box. +> - They can be extended through event handlers, as any other CAP service. > [!tip] Promoting Fast Inner-Loop Development > Through the ability to easily swap production-grade databases like SAP HANA with SQLite or H2 in-memory databases during development, without any changes to CDS models nor implementations, we greatly promote inner-loop development with fast turnaround cycles, as well as speeding up test pipelines and minimizing TCD. diff --git a/guides/databases/schema-evolution.md b/guides/databases/schema-evolution.md index 975455cc9d..01b80d96b2 100644 --- a/guides/databases/schema-evolution.md +++ b/guides/databases/schema-evolution.md @@ -10,9 +10,8 @@ Schema evolution is the capability of a database to adapt its schema (tables, co During development, schema evolution is typically handled using a "drop-create" strategy, where you drop and recreate the existing databases or schemas based on the current CDS model. This approach is simple and effective, and most suitable for development phases, as it: -- Allows you to quickly iterate on your data models -- Makes incompatible changes the standard, such as: - - Adding, removing, or renaming entities and fields +- It allows you to quickly iterate on your data models. +- It makes incompatible changes the standard, such as adding, removing, or renaming entities and fields. You can see this in action when you run `cds deploy`, which generates the necessary SQL statements to drop existing tables and recreate them or new ones according to the current CDS definitions: From efe10668da9c00b37d864744a5bb917d8304b99d Mon Sep 17 00:00:00 2001 From: Mahati Shankar <93712176+smahati@users.noreply.github.com> Date: Wed, 4 Feb 2026 11:24:33 +0100 Subject: [PATCH 414/439] cosmetics --- guides/integration/calesi.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index 30c6987b95..5df0ecd576 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -9,10 +9,10 @@ Integrating remote services - from other applications, third-party services, or > [!tip] The 'Calesi' Pattern – Guiding Principles > > 1. Remote services are proxied by CAP services, ... → *everything's a CAP service* -> 2. consumed in protocol-agnostic ways → *... as if they were local* -> 3. mocked out of the box → *fast-track inner-loop development* -> 4. with varying implementations → *evolution w/o disruption* -> 5. extensible through event handlers → *intrinsic extensibility* +> 2. Consumed in protocol-agnostic ways → *... as if they're local* +> 3. Mocked out of the box → *fast-track inner-loop development* +> 4. With varying implementations → *evolution w/o disruption* +> 5. Extensible through event handlers → *intrinsic extensibility* > > => Application developers stay at CAP level -> *Focused on Domain* @@ -24,9 +24,9 @@ Integrating remote services - from other applications, third-party services, or ## Introduction & Overview -### As If They Were Local +### As If They’re Local -Service integration is much about consuming remote services from other applications, third-party services, or platform services. CAP greatly simplifies this by allowing to call remote services _as if they were local_. Let's see how this works: +With CAP, Service integration is greatly simplified. Consumption of remote services from other applications, third-party services, or platform services is as easy as calling them _as if they're local_: 1. Clone the bookshop sample, and start the server in a terminal: @@ -66,7 +66,7 @@ The graphic below illustrates what happened here: ![Diagram illustrating CAP-level service integration showing two scenarios: Local services where Consumer connects to Service via CQL, and Remote services where Consumer connects to Proxy via CQL, Proxy connects to Protocol Adapter via OData, and Protocol Adapter connects to Service via CQL. ](assets/remoting.drawio.svg) -Remote CAP services can be consumed using the same high-level, uniform APIs as for local services – i.e., **_as if they were local_**. `cds.connect` automatically constructs remote proxies, which translate all local requests into protocol-specific ones, sent to remote services. Thereby also taking care of all connectivity, remote communication, principal propagation, as well as generic resilience. +Remote CAP services can be consumed using the same high-level, uniform APIs as for local services – i.e., **_as if they're local_**. `cds.connect` automatically constructs remote proxies, which translate all local requests into protocol-specific ones, sent to remote services. Thereby also taking care of all connectivity, remote communication, principal propagation, as well as generic resilience. > [!note] Model Free > @@ -100,7 +100,7 @@ From a service integration perspective, this sample mainly shows a data federati The graphic below shows the flow of essential steps for service integration, which the following sections walk you through in detail: -![Workflow diagram showing five numbered steps of CAP-level service integration. Service Provider box on left contains step 1 Service Definition in blue and Domain Models in gray. Packaged API box in center shows step 2 Service Interface in light gray. Service Consumer box on right displays step 4 Consumption Views in light blue and step 5 Own Models in blue. Arrows connect the components left to right. Below, numbered list describes: 1 Expose Service Interfaces as usual, 2 Export APIs using cds export and npm publish, 3 Import APIs using cds import or npm add, 4 Add Consumption Views defining what to consume, 5 Use with own models as if they were local. +![Workflow diagram showing five numbered steps of CAP-level service integration. Service Provider box on left contains step 1 Service Definition in blue and Domain Models in gray. Packaged API box in center shows step 2 Service Interface in light gray. Service Consumer box on right displays step 4 Consumption Views in light blue and step 5 Own Models in blue. Arrows connect the components left to right. Below, numbered list describes: 1 Expose Service Interfaces as usual, 2 Export APIs using cds export and npm publish, 3 Import APIs using cds import or npm add, 4 Add Consumption Views defining what to consume, 5 Use with own models as if they're local. ](assets/overview.drawio.svg) @@ -656,7 +656,7 @@ Noteworthy aspects here are: ### Associations -With consumption views in place, you can now reference them from your models _as if they were local_, creating mashups of imported and local definitions. +With consumption views in place, you can now reference them from your models _as if they're local_, creating mashups of imported and local definitions. ::: code-group @@ -727,7 +727,7 @@ This is required as associations to non-exposed entities would be cut off, which #### Fiori Annotations -On top of the mashed up models we can add Fiori annotations as usual to serve Fiori UIs – again: _as if they were local_. For example, following are excerpts of Fiori annotations referring to the `A_BusinessPartner` entity imported from S/4 (via the `Customers` consumption view, and the association to that from the local `Travels` entity). +On top of the mashed up models we can add Fiori annotations as usual to serve Fiori UIs – again: _as if they're local_. For example, following are excerpts of Fiori annotations referring to the `A_BusinessPartner` entity imported from S/4 (via the `Customers` consumption view, and the association to that from the local `Travels` entity). ::: code-group ```cds [app/common/labels.cds] From f183bbed117b43e7c1715b4264f131556a5e0cb9 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Wed, 4 Feb 2026 13:13:28 +0100 Subject: [PATCH 415/439] improve list --- guides/databases/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guides/databases/index.md b/guides/databases/index.md index 48608478e6..def84a552c 100644 --- a/guides/databases/index.md +++ b/guides/databases/index.md @@ -25,9 +25,9 @@ The illustration below shows what happens automatically under the hood: > [!tip] Following the Calesi Pattern > The implementations of the CAP database layers follow the design principles of CAP-level Service Integration which means the following for database services: > - They are CAP services themselves. -> - They provide database-agnostic interfaces to applications. -> - They provide mocks for local development out of the box. -> - They can be extended through event handlers, as any other CAP service. +> - Provide database-agnostic interfaces to applications. +> - Provide mocks for local development out of the box. +> - Can be extended through event handlers, as any other CAP service. > [!tip] Promoting Fast Inner-Loop Development > Through the ability to easily swap production-grade databases like SAP HANA with SQLite or H2 in-memory databases during development, without any changes to CDS models nor implementations, we greatly promote inner-loop development with fast turnaround cycles, as well as speeding up test pipelines and minimizing TCD. From 2c63b55f5e4c879628725c311cec8895e5e915b8 Mon Sep 17 00:00:00 2001 From: Rene Jeglinsky Date: Wed, 4 Feb 2026 13:13:44 +0100 Subject: [PATCH 416/439] quick edit --- cds/cxl.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cds/cxl.md b/cds/cxl.md index dea73057d2..91c082b13f 100644 --- a/cds/cxl.md +++ b/cds/cxl.md @@ -340,7 +340,7 @@ that multiplies the two factors `price` and `quantity`.
-CAP supports a set of [portable functions](../guides/databases/cap-level-dbs#portable-functions) that can be used in all expressions. Those functions are passed through to the underlying database, allowing you to leverage the same functions for different databases, which greatly enhances portability. +CAP supports a set of [portable functions](../guides/databases/cap-level-dbs#portable-functions) that can be used in all expressions. The CAP compiler automatically translates these functions to database-specific native equivalents, allowing you to use the same functions across different databases, which greatly enhances portability. ## ref (path expression) { #ref } @@ -409,7 +409,7 @@ FROM ::: 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 it's author. +The association `author` defined in the `Books` entity relates a book to its author. ::: warning Flattening of to-many associations When navigating along a to-many association to a leaf element, the result is flattened: @@ -523,11 +523,11 @@ This allows you to specify conditions on subsets of associated entities, enablin ## infix filter { #infix-filter } -An infix in linguistics refer to a letter or group of letters that are added in the middle of a word to make a new word. +An infix in linguistics refers to a letter or group of letters that are added in the middle of a word to make a new word. If we apply this terminology to [path-expressions](#ref), an infix filter condition is an expression that is applied to a path-segment of a [path-expression](#ref). -This allows to filter the target of an association based on certain criteria. +This allows you to filter the target of an association based on certain criteria.
From 73fffff45d0bbf98450a6f2678e1db318d40b436 Mon Sep 17 00:00:00 2001 From: DJ Adams Date: Wed, 4 Feb 2026 12:37:56 +0000 Subject: [PATCH 417/439] Minor typo fixes to cds-ql.md (#2361) Noticed them when I was reading through this topic to work out how to modify queries properly! :-) (Now blogged: https://qmacro.org/blog/posts/2026/02/04/modifying-queries-replacing-the-where-clause/ ) --- node.js/cds-ql.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/node.js/cds-ql.md b/node.js/cds-ql.md index 4c43930ee9..270aaadef0 100644 --- a/node.js/cds-ql.md +++ b/node.js/cds-ql.md @@ -112,7 +112,7 @@ const cats = await cds.connect.to ('CatalogService') let books = await cats.run (query) ``` -> `CatalogService` might be a remote service connected via OData. In this case, the query would be translated to an OData request sent via http. +> `CatalogService` might be a remote service connected via OData. In this case, the query would be translated to an OData request sent via HTTP. The APIs are also available through [`cds.Service`'s CRUD-style Convenience API](core-services#crud-style-api), e.g.: @@ -281,7 +281,7 @@ cds.ql { You can also test-drive the query by executing it with a running application: ```sh -cds repl -u ql -r cap/samples/bookshpop +cds repl -u ql -r cap/samples/bookshop ``` ```js await cds.ql`SELECT from Authors { @@ -338,7 +338,7 @@ q1 === q2 //> true ## cds.ql.clone() {.method} -Use the `cds.ql.clone()` method to create clones of given queries, which can by plain CQN objects, or instances of `cds.Query` themselves. This is useful to avoid side effects when modifying queries prior to execution. The returned clone is always an instance of [`cds.Query`](#class-cds-ql-query). +Use the `cds.ql.clone()` method to create clones of given queries, which can be plain CQN objects, or instances of `cds.Query` themselves. This is useful to avoid side effects when modifying queries prior to execution. The returned clone is always an instance of [`cds.Query`](#class-cds-ql-query). For example, given this original query, which would be captured in CQN as shown below: @@ -1281,4 +1281,4 @@ TODO ### orders() {.method} -TODO \ No newline at end of file +TODO From 2196a7fdf79c6f66e2fa6a064085390bfdcc366f Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 4 Feb 2026 14:05:44 +0100 Subject: [PATCH 418/439] ... --- .../assets/calesi-overview.drawio.svg | 4 + .../assets/inner-loop-turntable.png | Bin 0 -> 1360760 bytes guides/integration/assets/overview.drawio.svg | 509 ------------------ guides/integration/calesi.md | 46 +- guides/integration/data-federation.md | 95 ++-- guides/integration/inner-loops.md | 185 +++++-- 6 files changed, 219 insertions(+), 620 deletions(-) create mode 100644 guides/integration/assets/calesi-overview.drawio.svg create mode 100644 guides/integration/assets/inner-loop-turntable.png delete mode 100644 guides/integration/assets/overview.drawio.svg diff --git a/guides/integration/assets/calesi-overview.drawio.svg b/guides/integration/assets/calesi-overview.drawio.svg new file mode 100644 index 0000000000..a52dba050a --- /dev/null +++ b/guides/integration/assets/calesi-overview.drawio.svg @@ -0,0 +1,4 @@ + + + +
Packaged API
Packaged API
Service Consumer
Service Consumer
Service Provider
Service Provider
Service Definition
Service Definit...
Service Interface
Service Interfa...
Consumption
Views
Consumption...
Domain
Models
Domain...
Own
Models
Own...
Expose Service Interfaces → (as usual)
Export APIs → cds export → npm publish
Import APIs → cds import or npm add
Add Consumption Views → what to consume
Use w/ own models → ... as if they were local
Expose Service Interfaces → (as usual)...
1
1
2
2
3
3
4
4
5
5
1
1
2
2
3
3
4
4
5
5
Other
APIs
Other...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/guides/integration/assets/inner-loop-turntable.png b/guides/integration/assets/inner-loop-turntable.png new file mode 100644 index 0000000000000000000000000000000000000000..afbb6a888df9d3750fd5bea04c1109a2553a55d3 GIT binary patch literal 1360760 zcmZ^~19W8Fwl*AgY^Re{Y}>YN+qP|WjE-%0)Ui=9JGO0q{ho90ckX}3_wO2ethwiW zo{8FPjoO$Mr6@0f0E-I?0s?{{B`K;50s@&20s=+|4fa>_zNj_!cYv@Ek`n>}X-I&3 zH-h|oOlTshEC&MOO%4JQ7zzUN`d1Zr3L0Rn>M__ITa_pc$;OjF8S zP7Z|nuM703-dRH2rCeX|H5eh9sk)R z|L*^A{yl={gZ{^3KG=VwA@lRW|62wl{EG&W1%tT%JHR+fYPo=bz@h!KgMwuJ#Qt0D zgq5nMtEQYRw~2!ty^*Pdu^GLmo#Q_&5MEF2zoMO)s}Z56ovpnKw|4*3z zsr=sr1!pU>zhC6P@?!e0wEm~=f8hVAj$6^n)67;=)XL7x-sPWKm{?gEc^UqnrvFV9 zaj0gxpq59wGe+AO|Parl{*8dsje^~yD$;

HZ(5|KD@#U)sNu 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

BVs%f2>6?YN#=@ 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%0Dcv9vvN0%a)gzB<@d7&t=~p9KLTg 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�_Ixp*oJT#mu4R{#JchyeGTx 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

R#x zNoPl6$3sU!p6?$>-e3T!!jxpkn4`3o4ISGe!RWCbvPI%gqA%`Xca#n;Do|hfSrO&u@04Xk~1%KvBBI0}})mtD-*%zxEmM_NlFUGbnCU?hL!|9$ho{Rp% zdAEOz2c?m#v20tow2AKYwIPvlQ&Tdk)e^iCn>khQWBh#7fkYsRjo>PVuV9Sc0S)8h zKzW_ChArn=AeZq%NwE@)DwbJdK$h^MPXUJ=PihvZ>QCFhtp!P^zqBP};AoqfHq*gs z@4i@%NL-O%0=Q`!IXRX{Rj|=MS=+LgMB!D*5j1x~zM*{aR$#UBVsg>~GPa+Y00eMP zC?W6(1oLJjp)7jT6xcMv2LQ;1U{w=s7@F(i9b27@#i|X1g_%r1OvG}Z;%!aTCLWZx z9oCj^;6GF-q1@*>3X z{wU{Uf}Zgc$3or;LmwG|7;{AH+;U@9KHFi@;(f*%OEB&64jk|W#A!^nv)I7Z2FQw^m2QKL=> ziBQa)Ug8u9b5t_FlRoJhE4|Emn;yHeRBS5AAxA$tS~F9UNbI-Mt+0)x-y{R#PfE$A z-lGfV>4f8o?381(vc3s$rX^7OsUt1UGGJ9m^(^B9hHZj~tcXt%5Gm-u`40)DQ)`}p z=IO}uImvEUd_^mg6JiaZ+MR5vgvxNR)`zeG4HgCP3=}k6 zUoX$t_$hkKI!&6Snk5TucplwD43*3RFFNk!l;u>$ff}S@EWROQBZ-&~u0`~sXpsaO zR(S!|(2raXpJL@|BE++^I4^6cc#t>cBC5t^#tQfeM3#c&sIXmi%sAFIBJl=A)~z>C zBTN7^Xm4x0zBgVRY9>|8nb6lJOT0;h;dDV3>4xu^#(}AJ(@wYx9MBRs!&eu)jmixs zNLgZHW2H!AvNYN*1I0ptntrk}(enzsf^ViDWmIUzIm(7Xm0M>KU4 z^&p7QN|8>BG1dtH(6YZ#UXIxJp%-7=hPViS5|YfZPf%zfR1G^SXo{I9Opu)~fJY#s zga7~lKmbWZK~!D$r=~?VIkdVgzBo@Y4kEP57+Vz=un~F5kILGy&f{cd>jxG#BZy*F zonI$>nfR3L`eh}m(TG8;en(maaaKMI1RN5i6W&t!O!%ag!beC>4TY=a-mIy>a)M&) z3=0v)j}T!fhkYh4CQ~&88Ai*kC5m#kk?B!X@|Sy*@1+AKvU7*1C-6OQ_CNuWm>uy% zk_cqm^&kZx7DW?(3rHy4B8(tfeQv1tXL#JwL)iyf!YRJTfiGf!uu?nQ;Xt`Yb!HWN2r&zcKaM~HPM0%5!+b1h2{l_47;8by%w8B9mWa!a;G0!T_mW zsv|PNMDrp=PJm4Kz`mi>-e%HxMqoU}m3Usb7p>yAM6@rihIZPRK3cBvfMFJLN_XHW z_Iaq)(6vsxl!&9AswwCDovJ4{!qnn@t*q|%dfT1uV5W6oTSuq6cYV3FCzF0aCkP5C zN(d4byrIl09a~k+P8&Cl1_SL|+(*5`W8v}%l0|odBJxUX_n%+7KRdTF-Cp8s5rNDc zYq(^j;sKLW?OtCt#O3G&Z*OjGZBy++2aFt_JJq4hNa%F?D-RxX4-617I$RNaC~h8& zh4bx=H3wQi;PSnnwtI7yOaJ;;zxucT*Z=w5x4%}8!}b}0m0$nI|7UA+U7`sG#7f4= zVQQBi?CnPkjyX!TujZ+`2$Ue!u{S?a#A&4-JA3=P*0Z6)D;`RxyFb`lUwg-^;&EX| z^%8BTaGs_p!}9%y0t!5T2VNc?2?`y;rybZf5i#Ia9^SWEgLkjYsyKyUL+Wf1RLRy; zl(gSpusyvcE5XFn#O!vui!1jG+rmG*b2fn&kQG0X6d_)5c5X?%3Pcx!>*8F_g>VuNk;(D(U;hQ7N33EK0v{wm*D(5vB^V}@ zdfnaIm9+BU$+HRKL6<$-N<#DMkEr@HzqG_#ef{zUD`ZvxVrlX1+ZUkMUs!g7`^W#q z|NQ52^Tpg74s>K^RiN@OpUc|2SGzK4UVJS<$eFSzQudA(xHC9BTtI{7kmGDy zP{jm%r31-0*xXo?lp@?95+t-^R8}S3Ok}y=r=Xf}w$a1@lBm>eON~=!G^?l*ARSAI z=p)WzR+^+}1(0ij5*E53C=EDCAC7?O&&eP%H_jlR%2VV3LF6fqFt+ucV9?1K64wlU z46k)_1g>NXR1)i#w_L}*=u~YMtcWj+-=BL22b8i?m*@L^-*^2*JTq2yU?AHk%lSk>_uFcpCl zmm&L9$JRfrQ_A+n%EcQS?_4YHa5cI!IQj17`{%FTJb(3m@8E2r)xR929VyFLiu8R< z3^w`+XA^bE)3Ch-kjcmBaU!j3U<*AHSzSMIUi9AP=7+a$zIXJSQ-aj^B@NBR)EdR6 zMbkGdnq>Uyf|8LAbfnbJ?(X@JytUVy+)p8Qs0rr5jTWlHT-nOTT9+M>=+VJ$g7YW>=Ne zreijN^+vUFctowX9W*w5jkG!G#=bsJ3vGErf47)neGDx*iYN~F-HbvRkS-I2s- zBJ{3eAEF)_;We2XsQ3;z*jva7Ojyqh{6v#*?&yeAj}Do>$K$))wFd zD|uU6p!=J5jlmNxr?~*Jo==dJYQ)nq<|fo)VEv0<`q_09y} zE?cBBBvaJ1d;FB6q;C5)cP;Q?;vB@`ym{%pdEbC`AqG$d617>Kp%{c5}GCcWjM^1#HBKKin??W%BCMJsl*Y3yrU?KG&w*_IC?_*;EBYgF`CVEz zi;yvVdC7i?u;OWts>c!Trm-sJ!C*p}C#Q-*R9;Lfr)IsKm0VN=yuRGMf=BLItv4FE zF0iCuYbY#R-x4vwN+x22o^=l-VgpdRYX^$`qy?V^j3Sim_siK~#ugpGtBXvF=ffz2 zYecI%>{E7Ub({v8CITfx@wi_->T(5%a)aQ4U*%8$NEE#Q4F#7t;mr%8Z@-2`b>vS} zVW!65S+gkVRHQ;2mGBIy#J7pK0M)1obGmKHbglZDqWP0Qe)KZlTmJIbU7z_P*s42_ zH}-~?U37~Fja-O zpZ24r?fdysh0J3$%} zq7f3KnL;-1F>ErF(cX<$o^T=Xnl^fHL+nC*gw(vEm6_{E09A)L6ULPwY2An#3Ub|y z@*|z3o!aZq&&s5NO|^2}ky&JwMFd7L#X-yP7QJR5h7r~@L*S@#UPE)7%-7>6Z;0uV1P-}7oc%5ldIf>Ofair!9nQ)-RmTA zh)XMNW3AKH4C8y~T!nV$L}~U`+vzLn|)kd;CzSNHE9Pswid{BrSw##dYL`(-t#)A^O zPjD%uqJ4EeJTBaqDA&~V-0WDnnV35c%J4fI1bF)kHDt)%X=4saE zh&Jg!^#TiTnIJ$R#)dt_HDqp}YQqo{VcAe3W+B@(Iw5VM;*c}r%TJOXoplX@pd;?B5I;q0(c8l zRR8_^pUn1`?Ke{TjKM z*R9lUu3OL%u|@|+ic&Zoy4Txugz?*#dxOJAkDrMxnGCzD29EP0Njcj|W++bioC)Ki!lbBe&=p`CZ7p0*nlsZl! zYKCf}%USo*zMOS)cyc&AmExA8r_R#7GdWQC(cm{1k%Ac2lOAljW$9c_*h!z_lE zi3s9^0wypvl;zW$*$VY%eKAd{g!-%C3M!)M<@9-r>|IZEMyI=%lRXtp&c|oY#%2A@ zosQ2QPtP5-`X{Ekx}dNDT|(GnTXhIT;$zDgU*)Kbs6+2kwh=K{;U+;VLzt>E(ngjo zGxRk=k6)QJ%n(VfasUyuQL83m1tY=#vJ9dauP-HX(~j1n`DtiTn2qX8+UHfuKyqJs zt;mUiYthCr5()g~omv&3A4ArNG8)gvfDnM7=9{<6)@_=1*|p?^40Bd@k!G1Yz5#MX zm91XoX(LyTgikF~q&}nIZ(r0me#Xoxd9&=Odz5K`roGs3RSY~ z&C7Z_lyV*MiC=V23NsA=r2%4$iQ7*7>tbddQzjcD;{j%Dtj4bqAQaF<8L7NC=iv_Yrl;vNP>C zmnFbQ^EnsP0}!6c#v3jC%}XR1tnE0yuSeI@|jpJ!FRW3Js!$Wu2qv zEIu!^Tha;yTs#6P3{Z*p+A&n53jm9?wHqFhqMIZ)0k8YfgKkWXNY%Pqb&*T?y!p=V z@T-$j%$=0uQS78BbxcfybkS2L=yrVpBY_YmPw*(h!tgSw>cVKmS^OE0-opH2UZ@CI zVm%o_aVz=jiy`PugNVqVxuMPkG2~p$GE72v+PrxMVlmcz7Tn^`nJ+)48Hw@P1O(8O z2@l7UgtB-dfZ$@V2utfJVmbZ$A4i1H3(eJURzdYn+*t{6Ysj*0)wl=1$5S`2C}_9j zomp@QLm06N^yp5F$Io$_0bgCC9|#JL61~X??q1D+{HYT+H1M(B1J`(*l=nb$^Xrl%db;!YtsFmZ$Du)dz6 z7b@YHrUYrf7k>cPEMM|M=v;lF^oM}C?j#MeT z3g}%3)anbclP9pF%@TDtg9v+8SR4SY5M+^Nd@)E6wmM>_Mud2b;SN5A;%X#bo#!H7*ZmI0 z5)ljNF3ug^j7{`vzDawmvtwy$HV?A6nbmiFrYCiZHEV1oIvqPD@t_zG{6iJdn=+nEC6Xt+oVZvDGfB)e z_)YGBefot^tQxQtYZzgAFWN9jAVM36&;SxPrJ8GX+5Jh`E2{%?FoRnu9q?ppaYnSp z1VM$EH-X99m(iJTDjpPJ1T4XLk!#`3;3;L;F$I)tzMCgXk<=#(l?oWUIcXqbc?LiQFnO|JyvvO3`1W-8vE~JyceDRl4 zEr*qL9N_9%OYRtp1-5kW$>Q>TR}{GrRq4;q8`8mnjT;yL?*IPRTiZMH3-@N{m!vT0 zT|@)irl#8(eE9SeN0@B9f4{l*et&;Yw!3@ekEpDAaCoT5rkMf^yd}DEti)foAV?-~ z5C{*CRB$fDz57pehfwVKXtx%3w%!2OCx7%gUp1~<%$SG|6v{=t|KOo5`xf1~MdEL^ zps5C+Vy5syk;V;?b^D5gNEAa{W45axJ~MTcN~hBg)`_yIsW-1*CORX>6tFf*mRS z+3QWU2tw+L3x)w6#qAdA zV~_w-GmF@oIec62Lg`X*VvCt+%{@M~j7u`Aoa~nR6iOk~@iC_cCVGO6-KLi& z5+U?ucgf&jA2+b-#cQldxdmGZK-^oL<3a82+BrzJcp|5zfCHW*K2p4;f=31{bi#I* zW+KXEuZ~}};#d3+CU7I*f_&%Z`xKe17O@1gFdkyvfb^x-E=r7lEy=Lk#cT!)i~=9D zE27k|P?q0$JZ9IL7Jjt~60J8F1*{@%hMi-@knR z!>ezef48-_JC@uF(Kx<|wIGnI07sTvjH|q!#Om@Qf%J<^0WgxxN7;hVI?gzBGiSrj zuN>zwA>~)43Y7Qjul`0Zj2x%zo>F%7~J=JeJ+;dIwyg zfmGVU^km7w9_j3MwgiFCzNK$m@Fx<|&6#j?7I>rm@G}8gi5#*akgiZRwN!3H0yXY& zANT-p+^!^D$R3ea9r`5ZRH9*6%hMaP^ZsmHuw(XeYIeN4I61pAHoH99TOOI6AC6xh zPh878yBe>o`*HCM-L$SJT7-vuCt(?uygs0@JmCxkCt)gJl*nL&{tIcCl8yIVnu0J! zEw}(j96>=6s~?h(EvH~2OIvPWqd*nX&{7lNh>2XT0(|e+A=V-S4qp^=p=B8XjF|9v zmJ_oxnbivQ_?rptPV%yOHzd@2TFGG?ql{W?4}%x==EMQ$QM1Z}_)+8D%_Ht^0vtNM zd%Hr#MkL>Q^C;ZQp?8Q1kYZ~z&)27)wBzxnHC7F5e z#sMz9d+XPH<2={tYm7EOnKgTetN}ep(lL_LrpdC3^ba7`wOHGXs@O$UwvCv=SXR*! zl&m#3jbJdctI2y0RhPG)k*jb~4vDSusqR!9ZBq1vxA~%Vu6tv1BgB|6w=c79@C#g` z3~_NC)tORd1&u!laL`v-DJ|>ywvE7YvC|T@HT?p5g5H}c~geOZ*gP>RM_=mT4 zdzR?|&jh(2GB~(}@nZ>`q=#V6P|mZ3{!6D*6H=Jm;aREiX_F*WCR&GJ${|lKh8P6m z7ie=YV8){MNF!%!a|DrPbn>!7v3mR93!RAr#R= z;V`+=XaI{zd#MMdRD|Rj1j49E;#P^Xh5=|u3*Vvg=7ur~BHs1l6McFX5F~gL0<3e% zwFpCi-meBAlz|4DK#W2Uge1s=XE2V~(r=7!y)Ze;Ko7ZkX%>`#E|{xVGe{g45PTHi zzz3GpU6Ge=6A=^(r&^sxIoi>hKLuiLo53{sYWyIq&ET;zo*c*LCM^-(c2&5?vyc~` zFvs@_w}rVv1QECme$tZvKMrspJk!w>P+PI5e|RjI9h~*5HHdDED-U`_3f#W*7==>2 zknD_#xj=-k$OhA;<@{T6x!fCIG^7$g1*>YzZZh+-MC#Yr6_j+PqJVY;QCy~c-n~FR z7s0T$wccHaUwB!xk+z5-xFplU2=T)My?|>>(vT(b0#R6|p$#6Oo6X<-diPoLivMgD z%^S0j9 z&}O6EVEt|k28=ayA#}yh3^^2Kn$g`ozL5U~AL3E;Hr3YX!7P-NoOCPBbtTlxOD~@m zQILKg^BvSjiKig3lUba4lcdxpj$;o+1bav#%BTn`EN8OKTeHwghZj{O5D6ySV_lm* z8DmkXvCo@fyAKE;qsbsZ8zHllUd~cSDRHrhL^0fNzzTvw0dA5_qoO$)0Rbe)_`wl0 zpax0K1|50?ruYCh-6x=S!vIJOX@MLJW?-gUWG0SAIf|{crY6Lop#)xHQYQ2nVUAhE z=J1zEH40H9XwulwXYpmsPfw|ju4%=;jK_*E6tnwrQw7MP3%C`U@^S-&+R3l0jH=NB z(JXnh?(}64y7nh10VZS#0|d^YYTzBSM~snx{#`-XO@M=~6rUogpxMNCLt{X~27|xS z>AFK&CMefm&$yDX1~)whIE@`8oiLfsSE^#Dy8)U2?vwZLj=;YpgOPA{VLTJ57W8CD zh#6Y#3RhV4tT$_8#=at>{2irFn7LCk`@>_zq(|CN8OG_P*QXo|rz+;m$faZlsRo+0 z=4G)O9F$C-V{NfVpoYVRK^$$4^BaY$K=GxluK!p%F1xcv)`2OBDdvIaVx#t~*EpH+O zcXhq6{NU-QpOF^$KbuR`N1UCtui*2a|Drdm4&Z?6K0VWGb$SCQd-B(2Iv>{GJ7IEc zdfxZl-QBV2wuy*+@KK=q-lNCw-oCc8o>B4o^-JraCAkfp0GeG|ek@f4fcz;2A+Q1) zgH$28*xuaiw0lzJ>43xi0TiJTi?4~FV*q8arYCtEGX6;qp$}?7u0VDnh#$z96I&SU zVlJ*dye}->Us`#%`rv73`&g-tX_)5Po4&%7%c~D^Ad6VY+?Nnf zFt|_p!locI@{{FcOP}y4MPqMA+{TLVKJ;zvY*q+2-s{|)qD^K! zIN9#fge`df6X69?8xymJr)%h)f#!?&Duig1xBL%;lp zuwRy;@mF?FV000Afd!tw7St&rggEwMC3JZDIzBRLGDizWA{Ib&MmpC~G-(F@%SHl9 z6Et&Lg#Pkp+%OA_>HSjYiB5(|E)_3vTd<%fVcJ+P*FrOzfh!vds8y7a(9y)CaLeGp zew^{{%ruMB(M9MU1;C0V7e=IX6<(i#iMi-h%P1zAJ_SUQ@`U3#w7P>@gi`t?3Py$q z($kC>gk5yuS@7o-qgUDt*Y zfuC4_xN_AfF$NOXqAwSpsuClroepEWyTkWuo8LZv@zvMg{Kv2UX8+*q!J}t#a_rlY zLs84^(n2;GydU9LnzweeuV;5+ZEFk+-Slt1KI-$j1%^i|-_y zQV|olBc9HB{rPAP1_OLsK8XWGpjtjUu_tCU$JMADJ-(hiI3L@;oOBHD(Zr0BFr%}bk#_Ie zd$RrT;gjj!;#hlbbb9tENs&mgH9=LK$pIKuLYq;caWn>K#3$OtTxgNG8P^nJ+ty1r z`!j~J*#7lWr{z;zrmtw3QWS!=lic+ri00tsY_>|B4yuOuV;2%NOF8Oq)WJO10=M{q zQ^aSrkjS0W3GHr|xZn}XPs$(DL`I1GCH|W>bAO2xzY{JRu{dA0x~JlcGG5sV6%J^S7*oU(i5<#KxR4Z` zWQaL+f|R3)iP1P{*PI_N5X)GP$U$od=XKKL^_AKgj5C}wuysGhN+JpfH`Xd=jJ1aV zP6(f52T<9u2n8uf8J?KpYLe|4qlg|SF<~QH>^-BmoPu#Goizo|P<~1giijy&s+${uQ^wbfHjGh05c3qdcVV94qIp)fm`ha#)170Vi=~OEk5(id5q;WP!0V zBh}JPbs`q*y5o;iqySwWg7_3TLFHP5w$cku??F;D8tkbbE`H zmW#?@%~5&mex3j-Rlj5RM4AkY%eImNeJS2a7w(J5U#E7%;K;_`5eYS<gfi;QsbFfGBS8bIXr2ukQm={$&?M^t*gYccRmu!b z>9=PNox|ETuwyM*vgRJ3cT)oyy}*WKBE*v=cTa+F=zgTKnc}Pjee_h3f$vrua4`l56gPpS4P}^u3oWr9 z{0#!IsX*ukA2;GJKS8bmdZVr=7n?>Q`trj18uSti9t2cFRE$|f|7jK*uA#5bv-?RU=Ikffuw2iP!|^;uIUYh)nbFkSGS6nhi%<5Y3^jC||jM zscOh3j1zY`zI64T{WX+0LYE$F;%+u<;tMe|o}%0>vvFWjm&YzPN^z7IZTJ|#ScAgy zbweWc@a&W8R2V|5MkVBG@md`$yJXk%)33MEWTY#k2OzwjVw#*GIQjeE-UeKw&P5vWpF*>cDe zW=>GD%+`HpMp(C~`l(i6DuXKYX=Kfii$cQPg%Jk;Csq!I01`zPTVfoQ61&Wqp+f0r z=iRB6z=0DO5C+I6fdw9|FEU)}Y%FmxKyN?_R;HFHLvleF-GH3jr5^jU%29ik`UWa@ zHt?(ri!4r<9kE9DnLF<(V9BWR0(WqR8uTRkDyZfP8jk6m6ui_7E&(O0C6X$K(JFpy zZ9COH)Ie3ZItw{LM*<^}nFdb_lYxv3gN&3;UX3l3*+2?W^rr3-sUaR@=%o0dU`j+T z-RHUo2%MM%k!F#-zCaL)61X=FvJ09(zCedg+G&|jTIGB9WDYZ^y zUR+&0|N1Wv_IB(aSXp@p_{xahfAGXM`Q&1RFlvDqtvWVJ;JP5wts!@1$8&KEe3h{E7wF z&5cbf_wQc6iSH{IJ;}!$=Z!%KAD;+U+w`3nN=tnki=?xb-52JU*icSXY`1!kpZ!#v zWo~{M$3d`768WMObVo3G$~r6ordd`L4a*LKQPafECIb_DJDZYP_IB2Y*!hK}#3wJ$ ze|Yg*;$dlJg*nx-J6!6=%uMQ6auuo;r!5O~N=$w>|JeBU)`#Ex?Z0ca`chqTk_Ig) zl4ZbC-50<8>g%ungZi&@omF9OEaX0T_=L+(H=+S9zaWSl3-GtSg$FH4AV|Z&6ijlq zODxTQ^}qfD-Jt7KEAy%tft?zfQwT)iRzhQWd6heef+-mkAjoWUgxR8ONkM`j_?J6v zGYHQg+JsnA7C{^$+XSTP=Y>A7t~>}|;K_BQlOUsVCbP2|cg_gE2tOwUK$-w+kF^3A z*?M+`Itd9E(W?gm!cgr^iUblPjKi(Op-7w{h~m0A2Gz(7z@G>EvQe^hfZ*iJMB0cW z@@guVK~RDzA^u`W8o}@yG@j;_{V4#-|%ZG zy+%Iy^rugsJVG9R6-qD>y;R!~VXQIXE+7&y(OiaS3dwIIb`!)=Cp9*tF^OukGtOyA zbv+U#S=-!^WtG^KL=^~;*m>#z(ugW~6Ouy!oSxA5{M@_@E&^SA%K17-Run1P1Q%D} z*|8=VyFD`}0hZTDioSol@$&7vZ@&9>Yj^Nweedzp&sQHm+uJ+jIm5Wlc#)!;R?dPN z_H&Ys*$GB>Eo~@)8~;zK8(LWyeybHN+RF_du{lM}as#$8H7BN!ndX~~<=4Z*ldbK& z5AQ#$Z>%wvdmU%UO8w#$5+kChd)!=)Bu7#{N&*$PKmA+)bN$1H zu$O_oc=3%GEXzt#g&>^)aO|_*>ex6CP|rxvgF2w)QBS_o7esv&gzunEfz!xPg<9q9>>$XPSz6ry6;=Y{vCwcrFG=E1SILPs*W*XmV+i-?%9krg7L81|N2i^-(%-wB+`FFG zb4=GrYalW*)g77YjZJp1#-^{vXD&vRQ<@Slj2Sv6D~zteY7-%CK&t9B8~)Rle8G%kHlbC*3(fD>}F@|L|AH-!?)LQX)b@eS}NO+v8| z!7YU(tG1SP8jWDkg{&SV7*X~a`nr1&-v-4p0Nln%$WNZ~)?G9PVbYsK92}Mns-{feI*Q3rCtHiuY4+II=a<(jVj?4(G44aa3N$-s$9P2 z4U&2K%yg{;$HR?Kmkk{~8{C9&4^a*JGFb6nAghpi~5Mi3Gpje?9u26WhqzaH1 zMQ3R-&nA7{7PctX@)f~5I11_K8?s3hz_WVy9UU^?vGdIcBDI6W=4F~zbwDFr^U?J* zbo&YzYx-^wo6}GuEquaGbC({`y;&GxQ3c7Ig-zc*<&E}k+XJ==R5Z{GYlor=ciHEn zDL6)1CWO1qIzmr7={G`$sscBZ;6V-_uA&D*PVsX*owuJ5jR!+IC8h`oa5uu>yuN@* zW|R#1R5#E#3yRo5mm!bJ6r)QrlH}!uW(Xh8^6ros=L*nLaV7wb>cUwlhd)DlU?rov zn{s>}^)KSDmh7EO>`a5`K2r`OIO{~BN<3RMX)v%Ejh9vKOF?ba?u!{p0Ey76?N}tU z!C9V4)~3o_X^>$6=D?CS_#+b24CD%5APJIpY5;n{Qz$uagh6&y zlnZCkL6~&MVSb60PGRZ*Cn*M;-U*^fPohzUnxrwZMh>0us)9h$mLtsR0tnJ~tSCgm zC@9PVsW0IR|NQ4(+V`tph^9({h^Qw*ZAQQ>Fl##I3#$UFaA8uV#gaQCgqnoDWXj}} zlh8y_nsZ@5z+618wTN*7Ard3;4j6&)qVj0E5N;w1p-CNi(BJ5T&~OFD(F{6)ydtUz zvv$8b6Wm61!D?PHMn8H{WWZtoz-W$y0bJNZlFi{sTtZA&Lgyf6@CJdcpu=TRCx*M} z(4a1R@k}-H@Ur{%zEmuk-D8)Rr_B^2jM0 zNkbc1=(OF2@8FI+Y$kxyyaajx3ZVi5o)AGWm)awf#S&V{BU&`UVV` zfDf2$+Dw|v^wjq72*i^3RxoRRN(+{Nled-SMFPfyA*3+4uG|}0gVH<%5kV7rbCIoY zDrKt}OUN#F7Zn&>s4L#FYkTzMvx0w=SaUEv7@g{HZKEagj<1f+olt zHu^D01H<4TV|YfO8<>*xK}({;)2Y^ArhC$vJyUnXA*Og|Z0gvs4K3c5DigJAX(t1{ zm@5WsZPgZ%0~^4d>vdr}K-TT~fAKVl3g-0o#yW42@KsAOB6xJn0i|<`_ZOEQ)UJ@> zV0T++gAWS=(hW3Bw2O#vSJl^$Exxn2&BsJ?mS)X;Yh&GVy7fs;jG6FTP0mP6CkV7o z;84@`4?CM{>Q?l6{Vajo4s)>2?e#u7JLVOO-Epo>tQ0Z{G|`(Cc35>PYC>aXPkOW#pybH_s2SeL8uS7TAy?gQD%`5v&R2Mxu820;1OUw7)zI?s* z{sV7vcz9&>|G~pgg!@v$5+hw)eR%tBetube#D(20k&u_o_n~nF+?GOp90g9)P zbrXw@V^(}!Y~B^OjFn8bII5Q`y?XDyzzHKN_$Pnv5~7ra67`i>PRcRnD9VHzFWcQN9x!?= z0VskCS`oUy^IkZ@C$nGdVD0To`+|76Tzd8dy&*yoZ~&8I1$$jY2u7iXocED~i{rnY zo;vN;oHEf~Pb4ajlt0Yo*9JiiD43s^k>Bq@i5s!cvtT}^n2Qd0fFR>J)h=2yvg?xz z>wXUsjHUw|XkV15_I)Hw;7{=np!Y>Yzzu*NQ<>VXWmRMF7P8R`G!X%&Y*KZe5E+!? zg2}|hMsC541%CfNX6Ehdr2~Wlu z_s!wdv8*F+Z-rhEbbKa$CU%iGBhI9}%+77V$7(lUOV=^bz?zMsp>n+4Lx#~oS;LT;^_3ko}h)5PQ2-9b%r|@Y{GnEO{7U;mBh6JS&j(x{3lC7KpU4Xc2@KfdvcLutbC{ z!pGrruwhA4G@VtMos~m`hlkH@^Qfve8^8Z~W**TA3p8G+tEs+shclmZ&pp>txkFbz ze0cZa?c1kMoVJFfl^bk^Tfe@rshkF&17*bMlQ1kz8NrOOQ66Dpg9}c zhsPcuiIOYk#3re384E&WZrb?AXw~GkLuY`W;UvZ(o(PsT73WW2ujnV2^ECKTc66`; zYM!*6u|bGE0u}5)jZ%toF=gy{SM#6evvfAso-TFIyAEO5m|5LeSbI1-+`R4%FIxSp z_V8-Cch%}&D5NrXp}ZQ-5+M>BfC6q|Np~S-V+gi_Ftn9-E zP_3qr-AfX|va**-6SO#uUhUt#c}O1ydU}?6L-e|bdt#?q4o3$+8G!L2h^ofvABDC3HzjL{bV!ICvOXyJqsPRX%& zDC}2aM-BY&CQHS|{xED@>9YnKdTri&iwjOMAjC{T=t=v{i{1+hXNfp_`l_!SJ*Z96 z2`=0~M$1zgTmLC%51ftACD!&4K5SDY_qRt7Y$&*P@eNwC~a!@Jq2)UxH{K}YTZ z5mnjZv_xRC@{M0Agc~Ae!v%LQ_rR2(2|)P_XfgB+)mRe*5ZXlK84ceusy88p@Diqx zrC}VhD$ofWpkcju*A8za>y~<|Em}ImL_ZF2@a3pi5g)E23IY{O2>vjHl68P9Ni?h) z=`LEq2-YcFGq08w9Np$lk|&II|1z`YPwg=CF@-HH&IxL2wG>WcNjJuEPBxVTRZ$z* z0YTXZsD#=u5{ScG=o2g&*SeuYTpbY#L*?X~sn+lVXg35HHohllL2%P2Q=Dj%Ibb$F zMZ@L&?lad>5NDBJZBJapaqy$H++LBW49BdU`xqm{(k{sm10Y_3Q0cWb-e%1AV92s9 zwcT94G(tp@aYh!vnO8#8;u9M1g(Og+*f&0w&<)2ww0M z{|CAngv?vN%ZB z#G%7-I)~FxF)7aVCHu>VP?o3`Ekk8Q09qtxY$t)JdMWh%r>LQ8s=smcQ>}DA%N8Ti-(x1V8ieCiX-WA6I zRXxC2*3F=*W{tTB4FiC(3CW%a9aJ_U>BOT2P)H}Qrc*Hsqb!G0aP+p3%99D} zK(4NFitUP>C9_x%g^1dMsal-KR&8lNiMwSZl3sw#bl6W;7quov4{(vINqa=j3EcSA zd{7{g#Rce-*vtJfClL+$O~|GoPu*qHDEVyVM(dO>f&n^e(hX=Bgv`-5ChY@7oaxl& zK5ZD15wl<7VO7Z90M?U&7lh`SlH1yHF$d$J8Aal!fM)4F#avjiZsZ>();w!SiXute zu8?9(gS_xN#erbFprtY9ePBNtb^@lA#DsH^6>i1U1_1bG>OHTpe$17RpHTw3ax?kn zS9ijsr>Lb6MlHY?4@N;-G#=_T23Fj`?fkU2a@HPTiHo^~snfw`Z_imgP$MNa(G40c z?1sx&iWD%sGcM;u-pw-`sIl#ioqdJsso_|Vypy=JX(45 z$+O|=n(T*@lf#Ib(^GR=QU##X6Zx09F+M#6FAluAe2DtN!-q!BEZ0Z8#duGYq>~^v)x;2JD5_IgmA~Pypy8e$TvV9uj-jI~2Bj*iC;iaAt_ za6GmK?9U4Me{P^(k(=VSr`*M0ZMFg#O zPZ5e=|C|4B zL@*7Cb!O}U==DZi8}Xf$wRM{|Yl!x4VGV>FJ8iL*cc_7CJ{e`R&!fhfvT z;V1DO5s@=dgQNX-Z@z!?`niyn_>pB^yLjA&!kFQR64HyVi?;up|NJi%9TBpEHXAG8 zw%9CnS$NZMjgUp0`PIjVwu(%E4|+{ob2O3h2$;p;o|`jIi_JyMDaTMIU-n{fu*JlJ z)T^A0+=Lr+E{{d-ig3ViWfg6e%S_ri&;&Eb0M$6|7Y?AA(2`C8cYWi5vpjX(>kl>_ zY~ZeRM6NY;H1h=CMDyfTguYEE{y@;|{6sKl<%Akdier%IjER^6BUGTLVg!7ojI(*= zs|6vqQ<*SeCx9aH>DiNqM`LTQR6sO6m8BzFjC7eT7}?)=B@!eUBfUkll$tu9ASqVS zgp-DXb==VxXPLwF9VTNDhk4)+7A}w64guMpxaU?B;J@C`M7$yd zC8{8QBiKE_06+jqL_t*8Aah5@OhK}jP>dhT3OqSH*+1Mm zJbq6u#BxbqB0))HGX?E7ae|1`RdOO0Bc?gB#O@EC9+qZHc3KNcAKUF75pUsIB3zU$ z7PwMtAwoT7O*We_6#T*(X|f`cYn9DyC*~B;P8k< zlO1R8)L><_wz_)hsMSOg$aFIG2L?kJMa9~%A}ZRAV(inub$pbziEM~2q*3%pH&v9$ zIB_CzWeLt62VZmMx)R!V*^ z7!1)GXGUo>KIcE*DT`?P^bG&-^y*f?W;`=Lb~1|$j=ANT{_wUty6p`vJHyM);0CXC z=8t6_I#sK?qErVL*lu`_tHDA9iqM7uV-OfSV9%b-TpylYoErP}tn@T2E((3ZK1~Uf ztn^y?c9skl93;av8xBz>I}~5Um#9TK#)R~1Vj3MdY!blZGhANUFQ;w-KbdW@E!FVq zS~Bpcok~$C@Q#zI>NxN~qvbeX4S9N}ym26*0uAh;_N*?vK}~BgrCn$ z7KG!rm<5i8jlFHHFZKDLpN_5e@80U07}Ib^Q_@lPn^>_-2-B8L;vBfUv+t`+Q=J|1O%kPKN|K4BTd@z0bDHLJ3FlErSat96hDSD z?qA|!nibJ7qiErxuJRd@YoHhOGr78u0fC0}sluEYxlQ1P(At}vBc#NS)C3iUNtyk` zNtlCVr6KWu@cU;gBX;39ZgEjpsvF*sv4Jo>@keHw#WAUB$#PN$Zd&)a0Zt*YJU0cMWz(>H^0!b`@ z0{m&$4<|X=eSTJfGCKuKpN0d~At52%n*31Q$ijb!^43v%I`N&qPz#p9FNin9gN1_% z8qIFRNYdto$nQQSR#=;!Bn#M!8t3KyrXM~;bWq1!FR8I8#Irg}-|oJ@9ez;-(3u@F zF@C*cH;eq{WwM*So{4y@dBm^iwz-PHLP+3Gyx?Ecp)gFj@#wI#Ml_^TN|x;KzwjKD zs72@^E5NbnF*x$lrkRHyGgiVAaR%;2qD@oChe)r?q4_czFtMJ*D@_Y_{G&(z7&aDW z``{g_6DcB*MDeoEKYR4ZVSB7>j_b9Z$YXaywE2(m4x<`Dbp`_`!3&?WO3b1kq)R#J z%YeWHe!c6P_yS2^`Uy$v&Lh6!>J!m^fo@thGL6nQ+!UMSc(W=(!_|dHXGPHVCLE#6 zw%8;!o9r(p->sI58|n@fiFzyUsBnpMyHYMEHKC%tHH&SfVgZ5{BFze{CdiU2@CN(T zp09OEnwid_wZZEv#+(s=swcV7jrE8c{poum$ibY2K6nW+!NtF)MLtq$5@*5%oOyDi z02qq~65S71hJi$VAVkoiVZk85NaBGTwgr4A<{F79Fob{$qG6Nz2wIIWF_XYNKNY8M zbi1Snx0PK1M4I(DQ4Jv25KLlHAdGT@u@AeEumuCOM#M=apc%oWxjw2#P;I7V%s$Zj z{?Q`@dp8c!Kv+Smrb9e}v%$yu0jmlI;eGU`E{3%`jrfT)BQn58j7gSgD%UpQGtGNN zI2)4wth!~(_FAV^!b;382^TaG{8G&ZU_4kA%@L1{Tw*r4!B5cwbU}3l@?hdw>;%yW zFL;Nh5>`g#a{;XhaD;5aZ;6pG7_d?@KEN8rk+3O*J4##Orpz5XR2>b5aKNQK3|~P9 zKM^2C7|~HJ2-C3WGX3RjghA=LQ^(Z?K=&j-pL83xfrxg%O;(_OV`M!hs@R;=TU3-` zCqEdPL$~fRRMYeYIV=#yUv-D@3a=-{#mE!zkx3+_Hw!CLRq_fOwGk7RPd7)_U#9;lb(n zghV)2e=yq*lIpy+wyM@Bv7#m@8!7P+o}ME`=NFC-j{@+S8|#Qi2Z!7@s~bSAtKyrP zPOpm{vfOx~+T$^I%3gjyS<&Yqg2U1A!Ls96J6(rks0rZk4uXMa%BSGyIdjAGEkaB8 zP@q82#BmyeE`F^`G2?}!gMB3}1Tm6va(Sab#@4$x$A>3x-@X)RSXo<<_aUsn_*YGX zp~>s#;R&P2l07;;vaN*&r)cQb_Lfo|3pWd2{p=S{o_^(gSNR&8X{PtV!Ct>NTxzX| zik#MfcRsw83BrLDGTpCt&;6nC&?!}zgcn8o*{@(tKJx_dZEe$$#6MQl~wiri+=wbyNTTPLXn zkS!7FrV1rQfM#*k+R^pF-o6Ne^N1X1l07VZ0Q@l?bJUushwz`S2`Gb9MTJ2roMB#( zU#ZA_gC-DDB#s<@k%gRlB`6>Wn*(dIF(Jtgxc^qDPmF{3(Q@{lppLL~%qdSf>t%JN zXWyOp3o|Uyn|@FHk4Hi}ii(R465a3L@BGv6UTp83?H*q3oLv>A7aCc`B5hlUw~|S!S;yvuly)v9x7&iCLNkPp zDf22*K2!M2YDQAka?k^XCgdd<0aaNx=X@lxdFY&k3)xnn!Uv*ME+~p2eusP8+(y<&ds#56W${BS0NtV?^ae+nVJk8E$bN3B+W>21oa@DD#Z_iR9WTz z$H7Klp$_T}SnvhnV~p50B*kNLtAfDoA&mMx^(Wh4YbkSHP%Gd2j(aHcQE$Bt_`4($6m!MF=SlMB3oO4*?l zm#~NrS(_x4Z)3i&@DPi9dj?HnJ9*6}>O#JN0-)4pU3BGf2WVy)Y044`T}Z;XK0;|Nt}0eiVgbL^_N5rTHz8Am0)99pT` zwE9KXtW;^($cZRG_9J$-!(}X5CJ5`%n8E;r?+`AiMC!)jM6)SCDB-AQaMmR-K<)|P z2-BGAfq+%1OqtJYp$UBb%#>lnMgL+bAu48Er6R{XQXkv)P9tETGu=uv=?gQPf_J1$ zvh7!x+sRVy1SS;d9)m?(fwDQe(^(;jdYm)7a2MawRwF|)SEgPnLPYcgFtOY$Z>s4~ zNGuTDrJ8SaI*h7748_K{Oef^Fym6BPh~|>%%G7p3P{_w7>PxF?Dx!g>Q(!MR{5r5^ zi%h5kWU6DI6LofX1t8)WP%$~WJw7Gt9L%}UxVS>Eh%u{WJ^ zzjTK%@Y%8|P8W(bD%->d2&L&<``}}m)5_B?M?jP(#;E+E1SDgWYX)-iJ^Y%fj)0gF zGlhW4^9GcdmsYbFNH-#$qyo`>v=r)Rv89Yf!Yj-GQ$Vc0ZF|RJ?~}$e!gH5>DVAx7 z{>?6TE*Y+|r3D>owozM1*Z?#I>~P{B50qok7>%<8$UE<`xw(Qu|Jn7O^-?2AcQkL> zkJ~^33P=lIA|%qE%M^x7rb%L9_-OYe>60=$-X5KRk1d_PSDWUcB@>!G#OVQIG)X-! zwj?^|^}!F=+CCQhu+}OKrXUt!Uyw2t5Ne>7&y*K*=O@rh6d)umL=nHl@0ctrrif|* zxC|bc!y5EB!JJ@UC5Hv}q3~>ZDwWd(l=9PLs9`SsF^oKJjyedd;Ut$p=m^=MCsX9L=FbGMq{duX8q%wd zxbDV^N?c~jPtK}Ql?D)%K>UFP-!&Fg0s#mN@Z}>6XzGgPalMSr__37{XV4Xg1u*i2 z^J9WOBSO_Z+q6KY3*C|KI+2CRjslpN$g|AiN z#cPMiAk5jr^K(Vi0;p_@%gI*ET$2|`NxfV2@AT-L(v^cnS&Z0PHr7;ZW=41sS!U&n zG_+KV(+t3{4Vbr&_AX{;REgq|u-5SoE;fFsHvo3FWp7exzk;G); zU=8s^Ib8hnY>sfY)S}!;kO`PwT;XhUo!q=^73*m=Lib-mz1lh2qHVj&&3oz;8vs<4WZeL zgsUvugAU9^*}0LZL0p6hf1W^SxXD1WFk#AI5-b;I(Xf2%kVJlUt8EA4^K7m$Fal3v zV^B{43lLP0i)S7bB%G0CG)8`WQH>XNw2+92e5hh@pDW#?Hfe=bMJ^H|#07%C@JM@; zEl>wAtn>z1z>=BQ-ew!YH4JeW-)Cm$Mz>d~WQn$TkxrDm8we+}NhXI#kerd)*XBz{ zmw-9mh}5mTMd20P0dD%EI}C#vga@kx7n4I+5yXKBW_8MFT>)B zA9ST?)xzzCW0{tf1Zj6C3*FoGr^oH})9%J(<>6#yU>oOn_U6QfP;^G9a7PzYYlFwr zainUi1t69K&C=-+uV1|s)n_ov2IEVUhVJ99U!0usFF*-kC}-InHnNzDFr-8PH6Rt& zQxRkH;S*9t*aDF-kNKngI&+p};7>mxG^_7;Kt+VZgKZ@(w?4cg!{iaD4FJZnGr0C! z+i&F~2zuBB5LGazzF}v4IvosFRNTO5{n09pbZYE_N1r4C{_0jOLUKn^lg%$mcdFFk z7#M&;K?i#~yf*1U!VvJ{q?PRtuikxlb8xu#=FK}K$J#$SJT?ni@>_4Wc6N6^{q&2a zZZF<~Fo1=tl=fVWpgucWcUGx7BP`6hd3y^K{gCm{Z_oBSicYLc*_cj`te!hih-&W) zR$1kvjVG40nJPQG`!?be5mtnyjI&EXNYmW3Y0lPdS)WGNHt18;R+O=(0~v%Nq#d}F zzWMz>{YsDsH>nKr;=6CQKD@PkhMDyJ_kT!*3gj&>PwZmKHAcfW;0zkBoE#s${r->p z2S@U3Q7!HewBofH$^O9y;SL!OGB&c4V{-QCvoBQECFTZ$RW{?v>EWrW8uQC?Sdfnm zCG-F4Kl^&Lx=OXt6FhTl+Uk+L?dkZ;^tj!ecc~mWC+jP!XW8S&{Zlwm7FLx8#rzyp z(k+~TB~XF2i&$DIE{!J%rbq})sed6Kcr;uYSln8W#lSq>+S*pMmRB#uz)W+9abn&O z9tp)uPDTJHJ!gieWDF}nK+NCTCL{bDs||A!IE(Xk<2dBS5E{-z!JbyZ)!?K*sK>cB z8j1=U9L6bq5H8IgyM!B~)Q!}$K8XE!R-DOrOkbzc4j{u#>;s{!vTc)BV$PTxgXy=G zO2&)3d!lT+D=TYSaC2qjSnyU%!Zw5y2la?x%Kq+-JSHOA?7*3unv|J}#Cy=8yc!hk zGeHsqb`+Wv>G<^VramhJLX*^m=`*orH7IanJX{mnidd3jmE;i-+%vh%;j$nmH#B$tXeXu0V4*T<(kaUZleOcI-eLR&X2EMagPe+ zZno*mvX=0uflQSG3NfUGh;J_uA|`nb5s`$&Etey7sTei8#Cf`Bs#?U(DH$&gm|h~B zF8=t(e`qbQ5TM_`e7(E9qx6nALN?_|%Hc1uV`9lc5Hl$W->hA$tFncv(Tj8DWUENLK`)|@SQVa+alWF3r6Y2A4CWO^zngFP8Q77Xzo zRwtmd>X%padmL)hsTc?Hi!=z#XB1$A3E*O{!)aT5n`e`_kIGj1r8D`R&;u`s&8JHzNs*4I|fGzrf1@u3^N6{PF#)y2NtIKSu|i z1{@Yl38@fMBXHuNDljDW%$Q62DdiQvN5H7|((}|&Ka{2(8{vtIbKN9jQ7>4Rm5^9u zIW{4rYCO`Zwi+Rhtob*RE$$q8EnlS`7hAQ$Oqyjgv#4uel+t?1lB>SLVoB@BhEDb? zT*Z9I&gz>7j)<~J?N%g`qoo(gS1BF|CZ>Y%@PwIGKOkn-31Rpq)3<#inM%o2N2bkO zns?pllsSiIKYs571o*3Wx5IBTj*N<;N>nv_>67U09$grDJ@^qLp@;Il<7qqLPpm4_ z$x1*>b!2cz@J0&9#nXb3!>5VBBOc}}771sXCeIllN&Ke;?hv%G5LvWVjLj(eGRC7o zQnCX|$ll0e09ulZlgvi1@n|#Z&nw1Y+-6iJNRjdI?ac*w7_ix?f#PO~D$9J;&nY}vT{JUp4-4Kj(L=Z)cgC_8SOF{47!=oj84j(Vz>;u=JMKxQtjgf>vSdFC zFFXgtoGP1;n=N8D%5(0YUucby&2b6~g&GKuY;#M?bw%Q(+x%plF#t2QlJ}m7wvPk| zc*`-c%3+w0MG^;<^-F#PD^qZLq-Gwew*W7n>ji^uF$L@MA1PAT@L~wYjIS+Fo0=;O zsI5r6qV|VNgAmPKVW=pssZIVKi_6_& zrcR^+lV*_K%?pu(4_XnPfF`pDMj?*Q$kKY2_l?kH{PLB3h@B<{uLNe(lvSV-Us=ot z7}IFxLZacC#vdjDJQc(F@=7IXonYkD=q)#|X$SS14&ab!8;bB-!dYCjt`6D_xCDSE z7uK}0rI9*EgdR5}3-9_h5#x{VC9cArV&2#prx&5 zj@}QsC?Y0Vr$@UJQ8Jptc*zJC;D z=JOA2WeoWdMD&Ga5Kvae>ND59ehD+W2MiOq4V#5$O$>$rnGQk&xBz7)_avw1IqWFa{@7{u`VFgXKZnPp-Hl|h+^ojEhNasW>Q@MZ{wGWXaEcG<6Sr`)RQw%=!g(- zbD8o-yZ~d+r@(n7eHf3yH{kUFQiwPKG|+=U#4P(vBVZct$;AEQ6*JxU8ulJ``}q11 z_&}hzAtnb107YUwm865~q18xeAn+xQ!D^+23yt}DU_rat+8kg@l@fqR4P65e?TT_q zNj(`%s6Gad#v4AOUA4fTX(pZ#hUvq4BB7**J3)ZdMX8~as+UBtCpzO{;2oPikVpKT zL%Z$B7Dg$u8)u`))aZ^|ovXq6S!Xouj?Sf5udYnyZWPU#oKK`qh;78{6N_V5WVew< zrG_nWTf{E+cXlq%MCL^UBoG{nwTn>ri9O#}NRCp-()se4S``=S))5iQ&p!XsLZJ!= z4<0>USY8sH5KmrNbNEumTZpy5EQKM38dZ~&MC`D`>2&O;M~|QNheNCP?lk2}DM*Gj z*+*&fToN9YSXb2HeP`>vb{r<++!l!kA|Tcuz3}(N*`=}(yE|`_&LYLEjv8@#hfq=85< zmsV}-`p(YY`Nibn(@#GA{0q3V8RW~azFc1!^t#X(gVE}EcQ3#H$I>GCf^cSzp~)2cOy+(zc~XYfjjG`1o^mNnU^V z+nwF-MJM2vMvfQ6LGJdqKD(adACkRH0dBhVj9@_Ee>{Q(|jp=fn2S(Gi?oDIX%|N9vD2$x#&$g#aNBH=mzf z$m-cq+$Fo#BTs2Da^ip(;wSW#zgr9(cIIw*N7Cg_hwMR>x7^A{; zg{Z;Y;=oBvQV+-H7QoMCUIc`>2YiWx%$-f5?yH^KCyzfP zrdY*aJo`#Q)ay5|-@Si}s&YhuTnE#GN3v6JBq|M@l5HXXf?bd`uUH~F&j#`UUs~J# zLA>CrQip{&v$%1vPPgKkZB*3IDx;0up2`Od)#XM8GuvUc< zzlf^MtpE`{A(EYl6L%wlA^ymDmY9_{r(lqU3)#|8;2rqeQj~}p&}%03;3x)cTzBmg|oNuL?l{>+++_j-k!!_>8~cFsSaTRNZXTr75Pmj_p!!F79Z zGZ;-4J7w=M5K!I+IDE9i<0i&#V^w^-e@dUgU|m5ak}6e<+-_sW>K1^Kx5~2v{L%z9^Yd z#+*?pw#Uy&EQydw6aoKC6EmlFDI*x0I{TKnku@km zPk{{IXYH42$^m$oOh7NRu1)QLTY#Mc5m>>OcVI-p=G|OyAhzOutx?p?M4I=ScY4n- z?q3KV3J9NUBoW$37${XUAXmi=!E)(C7R7rmjc z3>C9*E;Y!5Q6Y){gLv4#;1aPTz>xz)vU&*!>USU_BaBy)%oJwpHQQZOf>UAGo&yyQ ziQ)SIL=mrUt-(P##^u<9RRfw}#IJFfQF{oT0g4z14v6!SNvaHr)^MHOK$daSh_cEF z58jHoD6ryAJc15Gx*E~cReaqX5|k3QNgko3h;Gn>@dmVdR$WDsAiSKay+%3}k%TXD zqD01zM6^@+2;oYiK1?kRk)ULp0EWr*BY>cVRMlxdJWbp6x&P+*ueo%{0SrXW6Zz4 z<)|AMpYR@R_$;SO8iGXGID6EC5?86_SEY8USR+*pgCCnp_J<)ANpqzPD?_uOTMCMV zu_`OL*2GFY#SMyslmHXh>i@1K*axLM^(2G!>Uy)+^*a$q7MWvw*BU6Eav7K@c>azv z6BmFG@d%WO@gl6U_phZJE94+>1(is z9WZRJEIfv}=cLlGNwoR#LJ8V59e@g*higqbSMve@AM#7lM)No`0U0A6k71dqSJs<{S2*k*S{8NtPKhjM8cWglXy>MKmvbAWz#Z zvDTutWL1bGLw6*4+AR4Se=VR0N7O6-r1{J?vI2#GaC1>N4Rd+#>b}HUgaBKWRL{n- z#2`SG*TZboMa@D;+MdJXd_JFwX{cV1#Nu4G-%C5TsXIB~DK3ZI*;=%O0Kv}o z2MSK`!g75bUuuzmof|A!#JL*pUp}X*vINZ~&iT8G99S6y-2S!o4LdyOKUTjIisB>R zKmX?4+n29j{PD#fe=AV}#0@}nLj^-O8^hk7^N|iM6v~l*`Te&%aK-YN-vqVs+AX1R zXpK{YAebdq6xJU|QosznagMVKEh&1)BNW@Wah~pQ3Q4lum_&;$qb|F$@=+M==p*rZ zYeEVVEI)es$>*Pc`R9N6&+y{j{w^i>=+P%UF@}@H;;AC0#}+RfY%h+p^!nv@-+cSq zSKq%F*fnpIS7!%@`!dRx+buy9CJ2*`AJDNAX0+PwSvqOKtc1Xh(^VuvpPjvb{bn*g zN&U}ur~I>FXDH{Tm)aC+g0?zb9w)PMu7!t0E3C>NAD`H)61uecD5sr_c^`5T0Kdud z`1%+Bkwa(Re|Y!eo8Rvq?1?`N)v4?cvcX^3O>)(mgkVp9WL%sSw8xW?bs`Pjg6?26 zj9VB17jKSRZ90Mih;;MeLt1j{-CMaNC?spPw>Q?6N2_bx(_|<7SO5IyK!X^{y9!s2 zClbt21^Ra^$W;C-Jgkf)kPw0-U19<5OPGM;XaStD;t+C$9pm{EZO(R1)dsv-#>S$M zK~qN~y0vs6G@}@jpNB74#dCHu?sCWvxVR~y!+kBnKN2o;I=0BW2vR;r{1MKhFu}33X z2u)KYtE+I4l zm*RQ4ldpjY=>=fSkR;t*UT8vhavU%-krD4aNseVu3%SbJu}PcsPdSfF5d2l_2nCew zfjX4`l+KKET^5ya`A)!;V26@!MW8twweIr_TcMi~qnI0XD-@bWgdy1ru_wTkYCuhb5nz+Kz z6KK;#RYnjK&ap#dr~-1Nd&2N^L-LP0%k6{RUE?SH5)rh2hx$xKv3Z3r7|`Zx{-i)Q zC8Q>$0Y{m|Ok>Eh1x2pfEnubysZJ`|P@jGN*?O6W0gX3}&%>x*QT|L|K_+RL*kP5F467?S_VO4UgTKC=7Q6`vum3k&6h-+1HAMS1EN= z5io&O;C1(6I3PrSAYIWxADSOETzBLzHfZ{)&cMd^(l-o@BZo*DXAB+I{dr>+)YgVF z!Q;`~y+ZL>zLtd>^X~rTHsHQ{#Vj-(bxh5q7Fc+7L<7&0!Hpp`V#AolM*b>d4&@*t zMn7jYbOm==;Ii$##vHRdb=K-dB#C0k5R1nWGcIOUAZE<+s0E#JR*UD@Ey-K)J<@F8 z!-wJ0v-!rtXmMr3IwL0J-2DD@O1Ogz8wesa!rcNEdutnDvWznq;R#8kOpwZH*FL+A zMP$eby|NYVK>{7HiKOdd4I7U({rUeVz>%O&0!h(L{-*>%hG;bk^uQ$bD+mA`2#9|X zmp^n|SxyFK)JOM!hpn1e+~^*ubxSm&s}*zP)~m zRn0NPBVGoBITS$dI_e~8{H}aJf=eD@pmRacsb8=Fz!}M(1UR%9AFpgvEhM&=378O| zS@B!0a)2?uVN=u~w1mWfLLU|?v&|=~oiGUt4FTv;lLmttHBATkV5nw&7g^-|Y9BQgb!X&WK1cqBUqV`Z zbpY2Ur&qJNL*M8&88MluFbWvni-H8I!H=Rc+xw!qC1~zsMH&#F${2F8#=o~hj(rRX zZ)M3kp|A}5&ZP|Ig2O&76a0i75|*uKrV*m6D7Lr9Tz83|Aa)<||RVtl71G!rgvVAV8K zQLRuyEoghnMEv3`Rl|sxI-5eIy75V;(N&?-ABop$2Plf;!Z@-g0)=crO4hsY%@G`c zJvc2a`BM9rvr_-=Qc-{x3o#_s%fx4hs-bPqqLV{K$gi$GTOD#cEqWTJS?dBxgc#~d z47A*7!a*?FNQBSOEg&ICQiwv4e`{2xRWdeQY#2aiVP6#z90X{-**ZGbxPY&x5*OfV zntQqErVB!P^a{+Yg9eG-X-5LHJ2Wu z4?4>>l8e!@IBvvTd}*daz<^n}%KeseaRIFBEjxo6nQS>AHH^b$CTM*;<)vd|MSceU z74#2A?-AP2S`EyA!%wW25WDk?TMk}DzhsKzjarGk$TR^x$;fr;Dw!ZR#{>8~T;#os-hs%w=bZ4<@q>6x?XWdNf``}jwJV5z|z2zA@fDG8tu%0CnQ4fU_!PhV(MAkt(T1J?uEqfSfXG;TcLKzcc3-4yR!__Fa;@IESAR_T1}<)m^#q0 zrl?=yn10D+;?XzR#%@}X#^LIjL^oW{G|?lsJ9tb+UV?NPRbAyoBsPSR4bv}%B-USb zkz(nGcS;(QPGNq^62R>@T$<-K-7K|lJH6S?P>K4>-sqy$J8$)-w!4z#9I>T^z0)HC zv9@sm8(=m5GKhj_G7IsJUes~e*?rIbMKqF{9h$ngzh%YVo&~ucXXCLgNw2^C&2Z&` z*+s(#`!+zgFv#zJ`zz59DdvwK$*tJo3)n%=S>ut}ebMcWo__Y_#>T_m03D?gC6|gA zJ1fK&cTpzf?m6-dCJ( zI<_gMYlKqf6~JKB^SIx>etp2_pPha5_>-s4K9|nGVPIllwvYx5u8ijC0o$FIjUdC_ zLR9^MFvnu6!(@@DRX{e`xAvom$YfFrvocv=UwsM!%VE6in740UK}f32UBQTamu({y z5+a25cD6hPgN~@+D4CZij97zpc+0U%ozBYYnlOrBh5!l}^IwcVl?tSUaKx}oJdKbu zj?Au$;n1JJV`}E};K75v{XL)M)T}#uWno#sOL&2u;z$a~2ikf3^b-{@)U5E+{D1n> zRWdoAp*eKS~~JFK)^+UP4quPv61>2P6iC1 zSgPbzR4+j{8gz}OF~tJ(_)i>Md*?&SB4;UGV+&Ar5Z#)lhBRKTqnTM6=yTS9rGAh1e58N_f)O*0G2K z&%+wv62aya=kWFxX|@N0h2?I0Fv{+L+lABV#RqjV_Y~Qg?(LqOPVtj<^8uWlo{e{p z54t^z?YfGIg|M`iD+Q?7kVdFo@;u`#G^MH^an@XkcPA&pAn!Jt1Oyg!;}zV!#Ocf( zBoTt!1ixe?tn+zk!S>%`*X3*e;1EnyKc{pOqo-vs6nQ&%GlA~k{_?f;iL*N*n zfm9dfhBq;>wz-<3su2F6(R4(;hvrm$rtOxNhNHEw|Lp6hPd_sln*(2c_lMvA?pNC% z-kZ_qUw(m;g~p(jh3MF4@hl-~sAr?1b6fIAJ>yPxig)J1g%w}6gK$i?pUB`aG{@28 zgHXDA(2Q79H&a3cY>k`(KoT&P0FN&sGIHh)7;AwtkozVdMvr#YsipG9&7$D_;HEvgSngdc4Ho1Ga*&x#TYTZ~$5K_1o#B`m^2 zknmO5h4gL`G0g|U@NS(2NUtJ4l}*bQiB_Hl1~GKl-vpRx$uG3kpQ*$kB=?~ha6~2S ztpI$yjG9xCelE4&a1oQl_2gGpCc)FQ`a{#{~38!CRwZXrJw+Z-xKIA zdq#{F=sn^?>T|@krfqm@v2;UKr4r$0>*N&WMhl_780ERSd691x|E-FclJ1Pk+L1hG zca}jGGeyvW)QVR*o9cIt-Z4`m8s@o<@cxN9L6AgtRmhHAqPbjI{?+Uf^~MXe08Wxv zU=)}@qV~6w!g^=T8#pW=7kk%zWYKC3pZLK9!4%wJC763yvKRH!&COZz~h%>vh5@i#0MLEqbW;zP3cZR42_-xe__eSdL53rK7rl(N9 zw*s!>5fqHUSP)8>shlE&gr6hd=WbQs)Kqd1YHW;Jma$IF8gRIFsKun%tmbPjk$UM- zc0*a-ykauZH)W&>Gg|~_iP8;(l!ao0Q9a0eHt-Y|YFuHMjw6JwZ>7m3Yoom1IKUNP zLO!SkDp5~Tw27|JZ9H)3@V)z)>Br}n!p11vr2LL(ng4K#NcaE*qv;u&i4Xzc0ttYF z_OLIQCn^({UbsPE&V~iM9+2Rzt%F*yT&x$Eint4x%^yzAtn@Z5l!&ApbFvY)5HR6Y zoqy7klrRQPed5Hy1IR>|LknX+{19a-LLtkGgDG8-V^CFBLxE^@wbgO#g05|$ zHxZw8!3;#Aj|M$;&mxX80Oe7wz-O1f-BQF7(a8fRI^aE^W(6jK7Ms3!%Ondy;e}ir zEr`*01u4RJ}Qk!gbDzw8<&J~rz z|L_ySjosEf=tfirJO%?R!fm-THz#@$pmPGTS&Z{ApL6$=0o7XxQSPYHi=R4s!bmB$TO^scihjn z(I&nyNJDOLO*2R=hi0Qn{R^U1#s|wiZg2433<=W#Ac{g*oT6}U#f3>r>}i645J>__ z-f{p+>Q+jbFb4RQA19tm%7FlJYP4!eplZ*WjEb`yV^l=c*t0+g6XvF~)@@VIRAvmr z+>jU+MAN%M>i%S}P!|36;<|cdH<%?g4U~35gb-v>XsHyCVkjWN1)nu|%0v30RhJ#f zr70MJP7`znsIZKeWDPaKz&HGxO3!We`WBOvWRUI&bkL;0T)`HU$UOrVd@QMZeK46G zTTfDMX?fYcU(JY75=X-50D@X37pN*$2=EkEp%mD}sMN;|_kk5lGB)bXHJG?9D|Oj% zqx{f$1|jItY_nUbJn+dpN;GQ^zO=)? zMe#%*K!rjxrl8fO*@{%!(Wyou2RI5yK8D7yLCR>|LLP#-|P?}oH>hdIvYhDqFMV|(*?4!SE1%fg0 z>54^L2^e+TjVBMQZiXW_qb2VikFjxa#exS4VbGWbvm}2|WA3~m#D*Z0bJn$(mM2C^ z%4ctMfo+FE*K2jGgA|{JODc* z0l^IKc7Hr>#+(R2FwmrK`iaCyL`b#vpPBRjX> zz1i4&z;0h%Ss@ntoKW|jh|+9v+Js$bH0!KRDKNn@OI04A;&{EXI;KyaelGHYXBA#} z^Zj=el~9PRgp-4#p=I)Rmy8;%uE15V+k5)yXSRgcFeB!%_2J$A!QsF8`+qH>ae01f z6OA)xUVQUwN6Ef<^IYi;rx?f~vFa+vgsU*WC<8#1kVkfQ*e^3&T_3ED)bKml+eKZc zr_=pC)l~-~2u{D{wxA1;0pJML6lt1Qq4!)WoDl&!^r=8wFcO>kk5a zu~DZ{^m-`@fNn%HCsQGkt@rQD%>Dphotz2>SIJu_l;wST;;cej?@6QtL~MTNvt1}h z%cmx7=2b#f=>z{lo9Y2vH3P$Jysg>)^?&)V9oYg#D3XX~HE0QGNFcE~4ATl^A|^Q+ zQgJK>V-kNxRHqAC8U(7V3#JeRap#FAb(dfh5u-6Gxe~E z;JPMAsU^>fO++xIWk9;5gv2AFs(F6r=Q21jnt=h9n~jYuGAY)oZ9+0lOsXO%QS!8! zNok5e7w0p08m$TLi0zpgDH2H#Q4v2hsULF7+o=Xh*KkV{-ww(3DV4{xhC{%ebPOqJnU{&%%F(P5YKOGUlxGqXVd1v@=Rd3(2wE8B=OYtq)tf z-+uG$hj%;syS9+=SCIMe-R>^R&(@-AnSm`T^*K#llAGwynlZ&!8p4-yGxL7;DsPFLaQ>hZ*NzYE zbP(Z6p++b2Jb3uz$9wIqi3J~WY{0Jtne-_i|pBrM$;i&g_K79(ba{R6Zn{7PJApH zY$g9WMk(0h@y28bX=XpHD`1ykY&hAGq|UR{wstqiwqiXQHBPY%jUs8h6*ZTp#70Py z>MFh(J%z}zPx6mr4VoW9U@?Si^y)n>bAdl5dlFj#H1=$=;b|l+@1o=8xg5e~{6iL` ze5;w35>UhwcEJ9uM8UQMUasdZ$Ft}Ai#OxW-0etG<>BGnIm$f}&{B^|l~R@~7>b13 zCJhx_&7+G6rw%(XXk^hacbLv>)7AoWDvSj!NvMyysMn0+KXT4F@={vTW@bq;`;#dF z%BjQ6<~1p&HM?a%U*BSkKq)4|wv zn?m=jsE_vxbAp4~fdnqrH$wY?8TaGbx2&=b-GI2k|NfDDU{-lINdAluJagvA{SAH% z<3NYrbL9GUiq5iV6Bf#vb67?hmJEJ@SEl-4_@(Ip3;D=362xII8kNuHqJ*Rrm8_qK z+#Q^m0U(A%7=QG_^l)lSY%gQx;p@(qh}IZ#V+oDsiL6}MEutcooieR7*u16}NiF2S zz%Qep+>AzSG?6j0Lnz-MIlKLj?1f(BtS&fyOr&6?tqgHyos+RDz$AJCUs^U=FI}!I z#`lwzAri+^3a6wRLUN-pj+^D$X#LaC0N$PRB6FY#GhrNiMJucSI+{1j38^)}*yUY3 zNijCHU{dk>alf;DcD6sBS`l%W4n|;06k9{@4wdPOXH-GwIv~j^b6PGR$&%9uhV8Q8rB^KK8CnNv8oZtf&2>?gBmQXFu zbvJLy4TzEF6DrQ&Q;)rU#x`@!uHb8(XNZQlE%F3cq#*ve)lNI8H9XyUO^aAW8EmtjvnC7_R1$+n? zKty(FffNM?9ng~>`|`oFcLTZ~fAec5Q$P4X$oNc3XaTS3Piqiog1(QqE> z3Huh<*d+J@jGb7(-jjzS-roR9rWhh2&#lMeO*W0xGpu3oV5XNU9ha?7b!P3nR0xBp z$e=)Nj8*;8|M2V$aENB3NH`{|N|Af06rk`d?c;7hnA%Q1Gq=|35ui;*002M$Nklf9xxH3i@eF&kBC1#=s~)LiC&plx)gDdW%)*Z>rC zKmpWf$FO~%PmKZtLb1@_$1!tv-4BrgwTc+5bT*IhR`%X!<}iy;2nZ% zVJ_wuN+9TrA+a{xy0jqNreBr=pg{wi#@8zHFeF1J$pwK#c{EE`!j(C?S@=F565$Ao zX&H|QAVjbdRm2#H_3?!Q?mrV5QVu-Jv&7VzAyUXoQo;;z&sAT61T-z#X&C`|*V3FA-w4_)@+^8%nGYUC+rfS25 z8|;O*s^98y>t?O-A06xsSJwEv3}Eh{(xC#6DkQ)&2hBS5_WPI0aQ25Qszto`_BV9V zaP;7duYS($XJgQRd!ioQfs+vJ-e=O=9&&oTV{K*g@l&4RWbE*!pqLOPS7mb;gYb%~ zoJovGB`dBM3b`YDg2@f^hgV86+N?k?pBzbQ5t@;l4e%QeH|)CS;X993#ZBNjKG-!A z{_oa@H|rbgHbCHpr%yf+fWY7wWI8#qu1VbTRe@TAgOxP^dH42}=*imp10@Ke!m?Q* z5mMfO>F@7t+n&SsUw^Q{ZgDCsC!ND4>cOu$KHL)<;%ksp7G)Jlpik^X(UBDt3+)0B zW-+~(R2|S$K@^ECEF{G5d+_%7>+k-t+ZP)8baj2z61inv(n93H-hqH14$;h1Y}*z% z!2-46`h!oOeJ(uk{M&D(hkyV4_hjzogU9RZtLPEgAgKBO`G5FVVl8rLs1U}PZ6N0D zaYmvT5-4b0AHc5%WW@dgXvR5F#zg~sv?h*1$;ULS+zLqHCn1qgT?_{0MR`vWSDfsY ziq$~lSkn}MG3u<8;@sGuO&8k4bKy61SCUuz3-;b$U-s39RFyEPCAVs&n8L8%t%{U# zhqJ~-l%Qq3%j`ESp)Wq0Z!v~1u_h^AZmYOe@;FMVEnAjjtxRY`etTAk#F`?0Nw&b&v>{9e0xd})ltYz&x86Q|Lv1#Z*>oI7gnC3*8 zmhV^z-A-G-NJ^fF0lC2|&o;ox;ltB(tzBv4(wyph{mX)hNHi5SW8z>--dXCcjL0K8 zRZ-mk>)-zUKmGO(zy9^F-oAg&rrkTbT3j9|-64UKlvkrQ=5rR5=s|ivoM1d*Ilp?{ zuPQep55&y+PhL>%n;P2PFFt#jMgvc?a8L84cYyK&5ib-FAr)IZLFBM?u1x*zvtwZ~ zD1&cCZnI=Z!LsZ+K9xDJ&^{ecxAqR+ynna;a6}ae#`Ubp2=ciRv{2H57(}A@2AGXj zf@aiA@-0D-M{CD}xR`*0gnjfS_LFS?R4b^sbu3R*2^WP<6GA?)pa~;kU{d7K#{pDM zz=lCnkz*qY_vM#A`Q_jIhkyPTe`Ou%#dj}$``dr57U}mdpU*qMS;?TawQ!Tv?sLY~ zg?~EC?hdqIP?IE&`QrqWHYK|B8=-WU_DpQ@1y--n>EccHH~l zVLc9n&t&<=Mh+v$hX7IABIz?}p8;=$K@@Xn%UG}P&P;|)smKvef>mOs;3j4S3PqNI zoFzaZqlFpv=HRMH{9tZ|j zHMNCHtTkZ_-w?{+S4q6L9m<^ytUPd{FbgjXVoi{bM3Mw6!qCk4c;IG%OO;l8>t^R3 z^tvn(ODG_nY62lJS42u^i4jqkZIgcUZPLp__BjE8-icjv|AG`B&DT357SnF)cg-GgVu#!XM2p|`O-;Y@P)=}BJwMs0^0SK~bj0COK@~;qy9^)JqSK<2% zAb;RPBwLe>on8Ka)2`m`@ty-y4Bq#7_gKaCB8w{W!fBBR16c?OMR2zht4bmd7$#H% z8*wK*7rcmlD3uy-Bodye_fykly^B>wdy(`0%mcw)I!b&n&XvK6-B>wqE(?ztQ~5TL z)g=?XJLSO?!IMwk&*|Wr%m}Q~Yct=2SS^!!81YD!$#A7oQ6~|c*-DvF6hj+K#+g${ z78%gnhlglJr$8sEWTW5ZZ|FcQtgAe`m~eT>z`=K=t{D=>Or(fqU??rKkI_j?YG*pM z#YW}1EP*68k@zcq5xHrlOKvu^#=50bLX-E`05I_{H^Lm$MqJ^^sIc;ye*EnIBwQQ$_uw{tq#Iy|(Z09K|WsLgbQxKfu1 zWNXuvc8WMjITeeEAlwv_#Jl#Rcj9M4gR!GatMPzV^an60Aq(q1d^&^=qur+1C&Nfc)Kd}N#uKMSQ|MVd52RsloJqaYxHq+fF} zDkK!5&l1jT;x88NZ(n@}Y8(fd3m~BG#@^1hSb!V~ z4#oK7h}7JC^eG3_+f11o|**c>&updb< zw^fa|YMr^4pvJ-Ob}D_8=V(%7zvzY~1bgOXK&0$QUEmCeu_zR&spDx|vBsAi)Np)s zWK5j z7FO0bksE6l$c%t?Zt$xRg{Mwh$;7AWp-% z1VV(L`f5p@$N|Rw9FLFPAZ|jN_$}D;48u<3wbx%;8E&kts$zi0!tBi&SL}%!*;0Ce zvpqzRkV#qw-G0AqJX!%694k-&WI&t0dUSMpbTU1FC^dC#_vjB0lS;D~rB0&7&QTtT zrKMn}kkSQ`N^l{2I}El~t7SElCwN}=3PqBAO{ZdY2-i0$J27!?Q8E}nCSX9Sc+Su4 z-~@4!*}xeF0K_zu_{8Z-Q{_s#w@en}CqZx*uh*|^03(nO;=EmF2$Kl*oDeCHq*L-i z76+7>P7(xS^s}o7&zzcJQaC??i;As{D!@jD+rbkHDVv0_-HhriaV~}WE^kk!SNlif zfA`ye`{LEN%iTwP1t3$&f{)S_YkB?t-Ed`eesz9$a=d@AFaB+`I1N-x+<(R%d6`fQ zp_O;inVul}{zS=PRNU*HMm}VNMr-v`aKABk3zvP689O&fvou!h<~JK-Brpa z9&`B(0Lo}c4cazmmlPBaahPiA9V;0;9V;fJE~PXXkp(4c^At;sA0+Q1KA;KsD|*T( zb1Ki-DX~aU&)rsW+VKh5v5%#51Tia0I9YzIj1TU823LA66O8Z=>1VBvmTD{C$%HHt zB9vm~aYc+;Oe(s-A=~}G_z(W-Z~yK;{`|AAcX!^~&hz%otLNW-^Y-nlK~KdU=T8ka z=j0f0pa#hucm(+rOhs^B$*kdEI~l_Vzad-EjXEFIRV>2 zwt~hf+Q2Xq?1+(3XU762XlSOQSpXvb+D`eSs_ksuD@kIZI1h+q!zs~%)Ur4Lx55F@ zZpk5_UYP4+O{)To9nIIc1M@X z{e_jytJc8YmeZNVtNzN)<@_sAdHK0y<Y-#hx~h z=E6eJYIVV(m<6Mmjm3dW@QuT88sX|ewqDZ+puyBCftS-pv?i^?y!fb0 zSdmAA2VD~l^U`6AW@fBu3E9}C>P9!8-k`)^%&P_!mY6r;80p)1OF0XYl0}#R7%gD*uFu z%JwfB%Y(4+!|R97yjCOdtOtMGz82U9AXYAScIA{g5gstehAS$iKbcC<8m_;;LIx3W zj!RI!A?Y?~yNEekLcE|Gn*=XNw^+$609geYHCc#0LXtHd*5IxuAZTkt4rDP1kTI~2 zQ$e5pGe3Y6dx{qVR;8al-h-scF1&!wfyF&~2O(3w3oxY$0LwEajfDfWXm^HP6{hf{ z*CTBI7M5;#`EMSM>IH! zRT;zF{XhzGnl(a_K&R#cR&lLE`Pq-AUql2sC>iQel5u0YK&;@%rH`DMoqczFTJlCN zo2@8`ynKA=MbD;1kN7gP&N_MuDiNh1#+!{*=2c7pBKcUKKhmczcplBO7~~^S)dz>F zh+pTtjEwXCWt534MQNIgSa39gL)>Bc{+4Y2j0+oV$STTD$N<=&5M)f#3*W;a;2Re- z8AC zpq>CnD_I)}h(OklgA|@>)^Q=O5nLHl#dZlL5YUROBF$o=bR@VO#Dx>%CW#jV2;q}_ z&!o4=FajvO3z#y0#S1h@@Fx;c@Ps?G;U3=$KeF$x6sTpiKr-wprnMokp$f}I68+DKeONjmAz3$5krc6V_wXsxbKTHO<1S5mz< zJeggZ%q>h5rMgL#amFi~EheQ+i`D@6X~GlsDL7?pfiha+A3Cr^ngb5BTpdZp$luwv z;zr=v@-Q5%uuRK|oL+JQP9}|L60^wTJjao`l}kdB7*W__lKcg<8IewxSm~GOoaGP> zMMWH()u3LU!&z2WH&o6uBHtSl$4x~H)jgz<_?4SBSlO^Z^X!YC(B9JUd1?$tv z*75N^6Xx?Te`@7+e}C`o+t)9@f8ObhCZ`kam`IGVBnRB^eTnk#pZ{*-!4scTp2BKp z%C&BhE9$$-TcHrG)E=E2jz*gfYCS#Pw|7Qninu|$)5jW6CaHwxdiUm}M$wMME*mZjYu0^@LRYq$1!Z z54cJu2oW)mh&C>)4NmS*@E^FQ*9$M+9lYN@{p0hOrzf|I%d1zn^Y%H@n)Cjhb`wpRI6>)g@7Z=MBEyb#9ULBF@2I|zbWm{T$3^R6JD!UYWo6$-gHtUA zL8x*lW)%C1Ur5e@!t`={IJTkd<%@4O9z7ncsrAsBT#T6|JbarFmgW}iK7_nSfL^d7P2I-c3Sqy1kZG2NYZ_L zWcy=)u!-3x7D$med4*N6y1wztzy8}_{P{0G`|Ky2EYj%PZ~pM@H{Wc%SDt6~!INhx zP`%J=_ts9vR;A2}=OQ*fE2d1c3Xvw^0zZgFR2~pWBy7_Nr>KnN&kMiF_K{C1^u=#; zjMa=%qth|jCurxmTM1yuhMk#>7Vs!V6KloWx*DH2e?z?wTV5O`r5sXQyq0LDO34KD zXmvAHeF8P2fKACE$)5rr*%D*&TzwY-B#xB*=^9UFYUqpz1w8Qw`_5)>iPiD-?D%%! zWUhU_+&}NHPI@bs!_}+7=I!c(lcm0##G}SC4(EOro-t5lIA)gs)`3xFq-)0FGznVkUgc96;-3Qp74I9fqw0Kp7g4 zBKieu1WLTFdFypo{P`q;rdWQ$ag+n4E`lp0rYZ8yFd|fKM^}$y-rf{o@?cJ*wEcnp zM`x@YIfar|pq$I9wguWwidQkS_e?Yl!suk{5L8M+7(9Hl+p3sFQJ2=q98i^rM;d^3 zLg(2VpP(HnOzyDwK|S>>;=It#yhMK21#=K5(7LfEEx!P9yjE)N#sR?kCMc{1u@^`m zp%dnBiX~a0EqMa$5GD?p>O|#5i#O2#{$jDM_Iima&~4D1!(Tin;w-6EN&>Mrzaits zJ`SE6pvxi?V=%>C$?~yPl5gVdUfY2A-N40_gnOREoU2gVz zh%J`%%JU|F zB2YjOL5{AX7IRRjfR|yo00C_Pa<|pBl3_2K2?H0{KJ9hYEO7s#$RYDUHvo1mdE2fr zW-b@q#FZjg7-w@A7b2h*hq8$U-WlgYHmRo_)=T&gmneKRy}ng|gS?13E{*JbbCgHz z1W9HSCbN+;fhu>D5;1U~PV}n8GJYg}*os$bC!^6^c~oLo+%?ZeG{kX$I)XA%rnxd{ z>L%WGDrF)g6xkCns>FvhVGvP(fmqrJ>D*oG{SG8*IGJBOw+P)hx~X!aw6G)RZEe+^ zofl{49+!qgbVHmlpY|Ip1jp9SIJ8R(29P@3*&8y0gyg6juNZUt$3}dQ4Ues+FjWV5Yo5BX>%)cN7BY#)CsiPADg8P&g9O76Iye*w>|z5S60n zMn~vUV4|w>cMz8OlgTUrscJ-%wIXUvYMu>!gJtPsc3UhF$hgBJ$eT-9I|ZVx3@(O5 z5;*OMgn|fd`U9aV-WC~)bD0iGDQEK3V}H*iqN;SyP4(cm;YGLr5GyVwvAgv7~g;1Wf~7lJ`nHlbTDBp!jx<*z(4?IGXr zg73kQIfzhEC8{P2BM(AKyv)S?%Y>Zox0hAzX@kY044R8UYw=(*j?IEb6Ia0pD933v zF;%i9O)DX#ye&j1hOjVBb7x3eMSpT3*vM7ed4g=qIc_Q*fb9e|kTX)}!Qlj_LE|i` zL;f;&&kGz2#fZ?6e#jjGuw%m!74&S9Q_K=vP1}eutdsC?Yo;rkup2yikAMXfp{f5^AEaq0^oh5J3`XCW#b^;3R`GvEUL` z1?BuHw2XOU@mY&B2rej0=$cvMLVqEzyG0 zs~IcJ+iXwOLx+R?*~Q~lYusv`aYmL}r?ZO_`kk?9*pXgY1C2+su+X)q+8OGi4E(_q zLp1~@s?f&R=9I~)&G<81Dpt9i1(vT7F$bPJe#!&F(2k3}I6lUZk2aoIGIekvW6<}? zFPt16uB;5{_M^j{%?FRv``6vU-r@ePRm>S)n8x+>$)}%kkCi@D!jsvGjUGRF!h_?L zC|%jNdHnKvFx)sD+m|^u`0t+oBPVEej=1FV`J0j!-E4z1R;cl5P4P3 z$Aukn4&-EZ*>xhuR2gUdds{Y6kB=PSf~X7!M>s9^i!XluM;{$=CPrmpP-gbAk zdSWvVAMJ^FynjC$Z8(?4o$kl&P~wQzBd+`L2}5YK_VD$~SM9D!pLj9V8@LOON+Gud zWgO+0z|dlwm$dcaeYO{r?!u|Z$A{z7iR1&)O_G7c0v4m=B?Kyzw6c#uRSu;$hNIE{ z`G5THs(vWT`qkIJc>3%M!KBx(o;%p?Y6>%1yxw{DuGbyteQkYRph2AW+9|}-DN0)x zbf}#>#A$zh-BG(aM4`PT!9q<5v^4);{`0SKyGW1u3(^Rc{XdM|S(9X0av%2GW64-@ z->Ry+dKt_D&I~jl1VI2HibfjsCgX#Q#y6SqyXb4^1IYBu2boMVKFm-6C15a^neOSm zYp>k5$jF_)zu(O4;s_>FbaYhYjeF1WyS%wO~tPO&K^;)WCVf??2w8 z8Z;}R2+VFX)#*|ghhD(SVpNL@>eS4G?c{W1RJ4M7mKPU~PsHWZ1-gP!`xOaGJ{P${ zT|<_*vAi(kwAen71cqe8PGVMZ78WlwYN}?s(%A{>Cjf20fHW?OjFL_527ZVXYbV7z zvljYePsQNAotiy7KH1qj`sJ^F_44)6*WbQ+{`}4Bw{O@2*&t&hebUxh4-SWg!zst` z2s}BNiBeFPm#_gzOjF}yCvcpp6e9&Dd#LJ_8O;l*6;y}^Sg*-}iZ!tYF4dvIj>ZmM zu&R%;yz?|Y+q9DJwSeOuFMYWZdfb_99_ErYlWz=n2!OFXTRWNURdXc;ju?y?duC!^ z2c3Zi9Hxy8Kl}2xI|pyu{lV($3e%}9&KPxqzT`|;Ll>x-c{s~Wlv>CbB+{^WBS`oC zMkymIl&0ZW#SCJCn_WC_0A;)ep@?Bbvr3`>(|^HIW3*a%DiE{g79$F0q*UgFIPpgx zeg7Z*nc#YL-DFyoqz8Np?Q`9nbPn>zKg>XL-ql#Iy ztf!!u?H{a~+;o}f#|66>3lk1rgAHFp|*&9xFdiEe)D?lNWt=qev z?Ob`!%wNv5uN+eAJ>9aav!__E?1p%TDIsw@K3nT_nW6Dl!Ze{|j2iH8jwf#%oJsp} zBPH+;g{YE%Gu5xyaD+CuyD{*`uB!66NQcaVgZwcgpqs3`iBm9EI34jb$vD{&;t8t| z)2vI!oz_kR16YVkL8KFNg&#dm+vxC4rMWYzH2-^BjgR*dSHxbk#7#5-w~fKa`ss-R z7umJL(7WrW{_&K*wav0)dzCH0p7Eax2o!sf{_&mV?OBM*YIN<|KB`*%Jx7 z&Iyq?8=Dopi7qrR65&#wk5K2$t+M5qOD`D+8d=gY7Hf@*n6ZqbdNV*+^CfOQ4aO>f zEX{;%;%D+Vf;m01j5XqBri9}jxu%(E36Y6O-o)fBA0Bnssc;1Kh6cCPSUSkDvg}$T z%gSMtRk};awYuOKM2RpI!=7*=h(~|b+q@P43P0>=l-298^bN{18xOPC>u3GK2@-^G z`H}($$m#}9!w-1!SzWu?n?CVpEGeyrM-oTK?e%KBQw?~#^Zs(-S0BMiY}_n@CDS-; zu2a)x)~O?JF(N&in9EEyI2Z>w_)D>RE#UM9Y{ zRcywr%xla@;TBpbQIQlEAqnw$O@IKh#$>f5Hgx~uFyJk8cF_bFz9~)%`_?_A*vf&6 z#bZ88?T6ixCl%hS7glL@iXn$Po94d*z5cF2-*pT%@_o@OD2NvlWYzuQuI483!Bm`y zdjtDT=2Uj0;46~?4)le0WPlikM-2mpkHi+tZTEl{tFniVZ?kGzX;3B?1GF&&)!l+JTg~wbnDE z15=g=p5QuylU)O*$>d&n%HzgJCKH|J23LHUDFZ6xqzx?KYs5WZKyG&%7c8W? z32a?S4VUb}A$PT`otaS=Kq{i-1LTnGqOrJH9z;TBQTz9LiPvMUhZ%vn?A%EQq|CF7 zp9FLK27h6m>Ndm6%7h#SK_X^~1iHbT`CMS%L`d+mr)Cf)pGi%PNmVvFT!7JifnzM^3M5Sj__0Jvx$<$5OKiDi( z^CcV%;GhYP-P-#4=K7``{mM_Was@b4=x94|B6$vT96vTVSNUSh8Qd4{I62vKPO354 z-=QSLqKz%xc}K7;t!|u-PBrF$RXGpBA1TQ#MYq$k*@X1Th@g8`me&}}1kuIs|L7;n z%c~!J_#;(2);44}@SSHpk_?5Z$<@{MFMjvi{r&B%6Dzv8xMX3Q0k6o&)}!}9ho5)0 zU+?elDw)B1HIZ>k`EbzS02gP|^1+2Rq+JXAY`=M>E{2m?=^h~otL$%HK4;WJgSVD# z#fM5ZsXxtTw&rtzr9wczWDYSDfd-BPtnsi6|NW;Qe)#eC#a#CH_LK*N6RU!fEbLUk zi^j{(rmWZsl|a*x^dXF#0}1*=8!~X1KVv1CWgKfz3mAA&$O+n2Ep=WD2L*vN>7s~K zJjl_hgJsa%j78EbE*)Ei8*aCbxbf2uK9<+vM>yQw-C4BN#g5d$0?jSFwXyYHcb+_Q~DCp zmD1t4I*Rx?t4D}MiG=X+T2qBoxF`0hAg+1BrRvTNWPpwZNu#fPG0{L;j`*ZiYjh@A zlpZtvCAL(-y3x4>6J|n|DkOABB65g{#T#jDT$!?uvY!@usW}?XoA47$#(+=!fQYsB zbK~SBa~lQ#jMxVgJzKMdb}IhremQ1A4b2-ZX*f`oEZ_Va4Se@{H^5OvWTD57oLCzV zH%94t-948HRmU2^RJqTmRI-pj-J1GE;);+EH0?H zGh{TJoQ$&GtxZ;dG7`<$kvydEkN@Lx@jiqznE9+iq@`|c%X70}4Ek6?7A#~>B-U;@ zB`NC(yun+Z#;5odVR*Y?_2liVJg6(YN*l7GDHZ$!*;|jE{N$%U`=fvSr;na|V1j(} z=FKO6_sh>e{q*Eeecwx&Qv#FyVV~4w0nLPB{YGQ)3qlQT>K0%z9^(_%#9LfsHA)@; zFYCDEy?V#uV(1bMoZ>g){rc7ZsHn&30GoTOyY~-$26kDe1`M#25f>MUG$7jD{1lvHb8h$NMl73Q^m3Dr7*SyHGQtm#d`x?(gJV>nW!=_mFjO?^mrUj3q&*1 zd<^R<#u-rz)5ej`dYu8pN3H0FjzWZZnBihQ7Zg4gx{9G%C`(0y0jMjW$*gRgsK#Q6 zQ4{>+C3tTXjqA1AbNGf`GqLa4DfFgJ^}+7J2sEHs4MQ{!`lJT|Kmjm%KvUK>*BUe^ zf-=!&99?5zJn_DCR3--VI+@;}@>3S0;z-Btj2Kq60)j@&ANtBj-5Pr-Ha*(2-m=rd zk_g3!i(){>@bx7;%pFaG$y112G~8i+3Et?c%rsHD36tgJNh^UK$C0`be9;=1SGpam zxL{+iHwfcMo5r=^!8~384pb^5KET5yW0&@44zkA^T$!(f(Wrzp1HH)6ys;}ua~n0~ z!J0z?A^ZaX>7xQFGypQ|$x+idY$A(+Y<;|LRDdaRP$UVQdcw1C89Ls@aZJWxK(7X* z667G4$(7?2&D`>aJp%w}SJ}EFxx^G<#ccUF6LyP)=st z>CiJ`5cJlU`@wMA@I!oWf~S3!w%_yQ{cA5XWsU}m-xa75WYL9%bYoeY?>hg&x;=K1 zf35|}5rPUw1${=4|FvxKGa@W-Q*Mb*BLz@{3ZF&_5^@3Id;swm%0$Y*mGis* zI1KT6uvvbOFl2PO5efVe4>L(p=>o1z3DN|@y7k8L@aAT`og438nf>qI_jJy0ZcZF0 zK$`mRVGbyozk3`G3;7WcAXT?Yq4GbRKqd|sCLM%af z_*Sg}nIY0rkg7=R1Km>}B-F2`fCL^7;v!w^DKv%HQaJvlXW*Y^(~(pThPFGQ7vVC~ zCwVFxh!D;IX(T@gpfq!dws28$X630BCbdkHuxqtILfHu_F+;MhnWjLh(O|qO$fuN$ zjU@idJWfn->K{AUQuyx${aBoT@YZI2}b|_U%$sO7OIXt+cZC{L0 z7Z3d7W<%z}>I;#XP}GDeQa3)_uSek$4?}{%G6gV``#E#+oBV{4o#3Nhvd)PlyumO= z@HpL=orxtN__iU0U!f~oNX#j>S7Iw79fCf12G_AF4$j8(u%^g@8S}})Fgx{1Q34jL zm{N>6Y@Y%XY>k=&Vqtwp2LLp4f!p9y%T%;^Jm6IjO?SxS0rP^qDkdmy23o`wn@Ky- zhvgb*DVq`zgIvhZIoSkrh7gewVxyGxxydV=SZ_F)o|}-<-aWffw%^uZG7@oS?h#zse_UKHPZkA(wP;#UnzuO5tWqodTr7;hYvuEU zS;zy0*~9NWdEaL&X_M@2N^eTg=Gs2op@)j7|?8z5m3X1tP&==Dd$i zWIq1j<3F%^uW@_fl{)y~ zqwm?`U`IPY4Un8&TyF6@PM-3oC!uF_ZhSxs()(frTt%vBcl$N{&jBHRmHQ`N=(QPgeoiI z=nmqDV-$g~VtjS60C9U{U}fP0=YDcactiNfeZ-YwkTn7YnYLI_5;adxiM1I}SV5IR z+E9=dLQP3#-nC^h_tw#|Q{?h==HkjDc=`O9ydCF{iq%1s1$m63UoXujv*sh*XBXJ@O&6xZpdvk zM29S5j`YpDR(hB4rA6dLb4SVGryd;f|$#Xbm~*hq7= zS!>Am(BCUdk@(gh?*=%S0)8(O<<7#3ezfiOz-EPOfpjvXI9XKi`Hi%){q2{}zWM5A zy0y5x(N{rdu8mhY(wW<{fSHI)=JxtVbk*;a^$-h38lE5H;A5YoCN9N|VlWp5v`{-^-2Z})}$QW9hvRQptF1kiXD28xyGBGf#k0dWGEPeRl$AA3C ze@f=5k}p2_?e_Ne%NNhT`TFy|^1n7Tw!7%pAPwMr0!a444>Dz#wb^Ht|7iekCcVE* zk5Cc)SI&F)0C1J_$1$5ntijgtk<7k5Y}E__n=uzl9>2Oq>|t!%%P7|>xfCHH)z5Qk(zwQ1Y?mn#+WHu zE-ZqRd=r=TrL%L3t5b4~##3{bbM32k_p;N!&grwm$==drcX4WdNeQOo+mT`_=c;PT zd6`wMqj##2nK=}{Ru*Trb1gi|yCao0F{Z|HOMt-H4YE9}#aX5k5RI=b7b8p;rY_)^ z%dx=RQ^rs>U_&5QW^A42NRC8yT){ZS30Z1mKC)Ug`rCbOqL}fWUAB?__4ZS1e@M= z#L#W!_9(sKfRz-w10HvdrP#PJ$wVl>uI%6oiccOd3m#xtDAFFfNMq4vB0J^AaQt$c zE=spWF5C=4|9i(J5QoZaT^_O@n%6s4Ej?pgZh#po2yC(^&=EX<^oJPaRwIe3>*(N?;ugEN=LUL0Uit9IQIIAV{cnv-BJ-Kkl-ukAP6;> zr|w^j0Nr6i(=$+v4kNl)T0J)bPx}RJVAV^b;sDLGH;(4*M)5BIV1V3l-vf8b4Cu37 z8AbC#Xf82AhhY%ACObp(=lw1Dj*Y#;Gl@Z@VdQ{ASNy6u{+aLTQe-X5;Ew;8mA0Vb zZ`?&Aa`pB`^@{X`C^-gu#z|71aw=*wF33kvJizKBgTiWw?ux_|G#$unExUO9%{Ua3BPe=tg$j<_gBsxDlbIhcIeLoHCY)@G4Me z*M{d%S>sVY5*USCi@Os1upOqI^N@Ujw}Sdcx@fshhc;2URW-ov0VVer=JYp zHv{w>Q38%}aps7gzKFS@`p-}x#E;2u!hXnsf06?d;G#0z< zIN7j321|O^HS~Ez`&J|LkA=X=65`04-2zc2yNW;FCgln|Ob?<3G`A?>4lVe^nrFo^ zMGX?*29o6jAh}HjE6U?2IUPVU1z>CoDN<2@?Pfg&XU3FNsqjAz5t^Y}f{lc|xlWw{w<=K!U%;1g+rvlK13cvE8 zlIfY)MdT4(fOPkyj!flI7g6!TB4zU7+aQs#i?W7|S6P7eX2=9k0$x^$QUVyvN}p{K z$8)Wt>A7R2js^n-@Gcc7nC~eFxqorRliWoEe(Cg_1&4}Y1t(qu#q67vmYQK*O$^40 zwJi|xERIh^6Lc=fazzd-LkSz4j~5mOPaeOwva)Pm5Fp4Dmc1eS7Vigxo(KXVV$GT@ z*m%Ma_E#(A&n^{};J0ItmoHz~e$F=lgL655@WVgc-`?Ka-H{dIlv$?@2#rYa=Ky~D z<*$d!D{?)oZmz7ZpN&U2@a?PTmG3@h`})_P{f2;3G)!P8%fhf{X%8N*WDt*l>eV-2 zDxu-1+SkvXaSn&WMH2k#`Ij%AeYw0Y1Tdi0vQoIXAY*_9kK1`(Km12Ow!cQDg}1L> zaHtY{5>XnT+sc7iaWmBMtZg25UaYh5qE*^$87?9q$`sh7gYHFQ+q&ngKty66)IU$* zo3B0>1d+g!42!eV&8^4cEaEczhV<%f>V)3TvTH%KAmtRSuUq?LPh_eU7IK{J(GdZWj^XxizxnFf z*Iyj&Z_8NUe)aYG))VP1;RoFAftj|tnC9YFFC8QCQk1|EC13pRmt(We6zzJwy|ex8 zi*NV#<)oije#PXH;yK!^r^)~2fBLti!MeR78|ck7vE4t37Z*Y`DHbB61{(GNeDRiq zLP#Fo=Rql>8sTwba7y8lk-L{j5f@rrR?nYI!mz0odoNt>%vZ&_xHc8FM za41IKFD~paa4^bhd^2<*?{cN_qXpH#E zQbJq}S~zomA@sUtyZ`_|07*naR6Ne6uIP}vVPcDi@xtiCcgOoYeCOH|t;BO@X218n z4hd=tU ztyrO&qDt7B9%9OYGxLgQIX#@-;VO;W)i`NeK4uKL?ErGo3LK>MhKtTvYW4b*V1q6* zWy3r%q?kua3f0T3W2;^TB!mxWt7hOC%lW8@MBvS91|NY?O2{ln>AZOU{Qvs-&%gNM zcj6?X4;z~sKl;O;ZfSP;fv;oi7_e#KgZr8`hVP5Js{CJL7#2y7T#%>OK^qz>+kJp?oMu!y@QOB-{Z zIlo%4-%P@jnU+GV)*6Yo$`{+T%mj^io6a-u>MlAWylFpi1w^j0y35juQG+pN00myw z+wGhamnE8U$B)0x}7sjJf@fv7Aial_~Nm3*^o%rR&1v$7RdH*8Jk@z}n5b2>U6 z&P_W-LdqNiLfud-$28`@iOn33udR3K6os-V93HFhMOW~nUwCYi8yUwQzcT_%<%0i? z*pw0iSMuAL&M)4Poo=i$PIasq^p=6o*o7cYrXYeYRNCY6>8`?p!h4N@7yuxTu68G) zsCkl0_2Qf$#GJ@1&OS z&Z&J7A0Y8;xKq*BVT`C_E(CYNZPoeR2kX}AlRucbFq0*zT!3T&(Goi z!nx~i){F0SF}7bcK~#!(GbmFDZH_P`RBcZ8v%(W13OOW#<-Bo*cU<1GT6Ot262s~-O5n(jH`?+r7 znF!yonB&jn&cd7MY%S}-Pps#d%U4_hJ(_nCqruFR(+4%!rZ4zGH9XnGt=#FlD`2Lp zQHK^)c-=qDXrDC%=Vj)6O0Y?##kV`7)AFNO*m2mJdB1^{U4A%LZ83odn>TSdgy=#G zJEteh-EIyqeCOo`CHKN(b2E;uefUMQp((DAT@uGW6*R@~9+2ivgEJhG;vUl|RD(^- zsGUIB-HShP|21sZd^bj4nh#&>1@N3`u&?%dU6ZljPR9HqFsa&pSYo+RCBXWQxQhOhk-ani_;hCW2z7{vGJ;O%Xrig)+`Qh9&hk` z*AxvHW6XYr5JfN4j?ZnYor%!qSC&r0%(6bH3rqr}C>CmSu953-lwB=uruuy0F;ZDH z04Lvixb^{TSszB}7J5>xS%#VlniPE}F52YllTj&>i6{O3>(kNx+32y2_c{JK3LE)t zZrbe6+uDY^?tm}6aZ`EkC&vc6_S{S7IXGN1MPV{t&a+Wy`OGY8@-i!yUWGc_ zPqzAMnqJsnLyD2y1Ox*>qGRjMNg-*l;XCxlj{T(}DzvrC^Xe=DXvxAzas*0-kUZ7Ca=6BTZj0se9UD$4nHHh2 zmL(=N?O^GcBrqW7*3HeBfr*Wqm#_rR@m<$Qb$6AlaZilh8nO6D**1iqFcavyC!bx+ zTA3+AFz|0IXice}US)$J)X@e4=#rQ!v?_#}GNM#82#KYEdxQZH2grPl4bTd=t0|VK zz_r3RuHY(nYLI!xjFGz+V@4`vl?hV=hz8C{_UZw#ECgqZ1MR;CAv*w_wJT&G5|P45 z60#hlV`9zm2vtE`Dm^30s$IXswzxRI8cZldK0TW2j;wZf=g&H`=i)Vjn^!60#om)n ze$ALmv^{|&WgIh*uTaG)kWt7v7UV7de{*uYXJu5;E$vgb?2u@XM@s|@PROZ!EbGD2?Pik9PaJf%HeQUw*AW&UoWmKG8NS$JsDxZYnvxT z2A+TOjb!8>{NW#|;rOe+{l6F2*4XMiXW76x{*p?Vp89wH>;F8zh=p2z`7i$U($dPO zzx|aO5EjUljF7&8pkIIWB%s4?p}q4JSdviMTxR!-GBB7Zz7H z?S+5|lv>+-%ys9XbGvLEzTgb*?MMZYH1WXQj~_pM_2PwR-9H%ixxl_SSod;tyt?s- zFLioyEG2}!on3{Hewi#7NhLx{bKQaBl9EceuA`7?1 z5U?;D?7n(+a=fp7N3J}1`Vl5nDUS zCq87`4I*H(zq^f(m)9jLx8FQ}p(3ny4i1lBeEaK_wWk_6INbZ*4}NB(GGb<0l1h&E zw%=HGRs^QqZ!IpZ0aez8_8o%ro8SD$>3{t%{xMnfx6~Q}LrCQ6sC{ZYLICkX%sQtd zF(g0XGlem*KQU~#<}FH-Rsjx2kzDcGBw*#8R9|D@`k183iZ*?a#zdGj5{<#~PJ!GU zONr#L<~ognrTI+)0dPb)W~!Cf=SXk~$;n%c(zFF3nLKR4YynV`GdKIwA6hWHXclvJ zt78K2h0A?+L)jCq5G2sJ2tvL$*gW1B{p)3l_c#DJY&4@UnVKG6@d)mWHa7&GOd|=k zfW(W>iSt~<)}}6gpb!y+T>7};PriP)ilV_D#;c>5ZR6P zxt$nx=5`P5ioKA+)3O6C#W?n$zr(SdZLZ4cuJ!j?-mSdLbK0GB&c~IH^7?L+VTn?7RU1k(bw3$pibb4m{eUOmzj|icu!jk_lQ=4wDD-`PP$a{KDCf(TH@!L@~j&nukX2n5`6H4Zz{@_6!q+{&L^as ziFy4sle=Qp1D5M-rwF$5YlSM*`@y5MsRLOI8Mcg3IKsopbR_R$lUL{VyHLsoOfqX3BWQhbJ;ol%CZkp|z0(KYFdk#d(nb&~PsGN~IVUkQ%FVUX-r&#AQGGqADcwllb~lch7fY4@)> zgX>mTob}P#>fx2bP7C|zGCbzRAg_>p*11k9qQ$(3sR*+mgDkvL0ac_SL5ZbTbmQ)W zMhgQagR~J}ng{x7l(FNOeGhNTbnuoX?mB9uF>PI9FnOH5L$g?hkq!U&%%9D7p0{`% zBc2Dzf=0~dZOzT!sCf|H$WH@r0j_sf3^NvLR;`S~?`hFvCAMj~@x;KU zjw7#IWSxZv^HM4RW~Efu05b?{Tt*r-8JIAh*&#t09c7g*nXQJC)pB2&KlP+Px(KLj zzDPor!g!JV(kN3cz?UJE$cpWSUMxAyCW$fpoOfK{EDUDIbx`G{=!~}pbP#K`l!N=q zBFX|_(x>BsdcrFT2>^UT;5BdGb=16}$QRc+x|~dO1P>>qNk~cmFqPb z%?K`vS5U;iycBk=L8<#~>{!v<149q}LVColk8w+7vWo~x1jmNISJzY-EF z2N6W9eEu8DgZBa#?$QyNZB|zAo&YY*0AfI$zoUp+xro3+HJ?z^+}2?DzWFQy!K#Tk zj%-m}+hEplmiug<$fc67z;npL*UT9#z~XO(nRGXAjF{K_*5XSuo~r=TGfER zd*l6RCKE@3R>cuvpoPwyAQ#B_iay0MF;mpwO#twP4B{mLEJREIi`m8wtTB>5*a0n5 za>2ns36z8b`Tr=aHFv|9APpIDy!YFaQwJ)E-GqOu+6dQLI+&0g&(oBlDY+Zi7^nK43ShdN*pZ}NogQTiCJT` zQ2QNwgmh6EJ_B@KQ4UHJXxtez4tQp0kWe%VuC6EJ^C{Uqqk41_1l(^s5*^z->$B8g z{l%FNr-hvey9dGVSDFWsMXXRjFJk)qYPb27)IZRjcMa|Mwo$xyEtcl=-PQE%Te2k5 zyXk<3-@LU9o7mf@_MsWE9+V-Nypb61!MffB4F$s4kv0cm-KfE!DO&UnLx~78FVmoQ zu#!jM1hW+s86zHx*xbJ&OeIGy(BTG1G3u21h7EjWPeN&8$U!^VWYG^%Y6y`{F0r@W z2AIriwVx3Y{j5Rv5G5UY!5B7ZGy~X}zOZV7pkm__#WKrcFcAupgJvdos)K2aZh=N- zvOCF?L1_)2M{a4E?06zSnHf!@)U=x!qcO^&zf*N6S|{+x`%rR&O3Nl^L&3PLWf{v1 zU#qf?9!#;#c5l?_B)ZY+oY|%^+hY8UC#KIFi6C=U+N}8hT!%?FBXW=$q83I4n#{Mc zkOh(}!!L}?&dgfV`KbbWVok8+|FZc*17NskV{^+H91v*uQT5ER>nodC9DZt;wuNv& z_{>K~hn7R#W6Sl*+Pait3*ojA$Y6JLt7TXI`Qp+l;X4;bR6b*GXKigmBER5>o!2H( zD~#+|r=ooD@lPkFomM;b>cunrdF)yMfW7J*-Pdnku(x@RfA$yu4F5PKKm`dU5dbE9 zV7(W5Bt*Y?_1tZ8G}LOKen_UxGEP+0uLB2gpVe-==@onw$QUc0eR_O)k_CIEH*DdM zXP`cXRBmj5NL1U~?YEdj-nX+9j&`@DZ0N}F=LZ9<%=h$u@y#=PbokdBn~&k%C67?M zCU%Gxo7mgmmWj_;5@||exRVE@zzi4BeRubbR2RV&YDd`y?Mt2b_S>)UG$wEA{svM-oAR3Gb@s@D|33z7#&z}qOMBT{hj;!^7%KP z?QOr_dHY(+!$sxP+De=V5Wh(_TSW#1$_u86|D~Efn z#$8Qbcl!!nxA`FWXmN2BR0cxZO#hGn{h!Om!7SPI(rNKy_7*N1O z<|XoG={Re;oJR2^xjOz#t%|GI(Di2cvOZFS17p^ywkDG(Tz-*I7STZ`1yINxciJHo zBtCL0Ev>7_<)OyOn23&H<8t^_;Y9obu{EpBZf~CcV7n*=z^+$Zm+GNNMCtG}>Plsz zpS6I8bRqg6M$iOGqB!PSiwm+MRP>1!0}SD@5r$JO?qKEx35oJqB&28VUT%v5vUpUR z+nalgi_p4*q9mSV&x3=0e`{@-3MS4pE;I^%P%ql|T{~_AGNe$w^=MS5D{)Wg+=PcQ zqA4{MIzi6a7eTN+O!N`qnd@jzr*a@EJFYeDW09OcaWcO8;+y9ZAI{AYDi=%&ZS~|n zgttx|SaGL8Q@DfP2Y5iqDn+aVwzW+>_b;%Z3yeWye|{eDQ98^T>+2XiBgozvBchoA zg+{6nyXt<8c_T-rz*;>szUXoPM|)>fgC`6sXZ>pLb zV;n0&K>i{M#dXmOCR}qP=6AaQA2Vf&rWRtzkQwx4Od!5$#4?LEw;uiBPyXn?`t!fs zdi2rD7teq9yH9O7`RsSUmDtvC`G8=Y%tc*RA2z?BJ?3ylxM! z74PT{uR8s!p3k02UREBal|-`mAiMHr;?#W4Ysld)vQIlP*r(?7Ydpj?z}7^8e_}9X zcWzEfu%9zdQA~Um02XKVF|$Z8w~n8w=A~Fn@SZA$4nVQ@9Ap&>0X$SqR2LJB zrcV)*7vRGbRGD6bBvFZoF7y)Jczg1c7?JVQYUeh|%q#GjGQ&-T2lGcQ-Mu^q z7k<^_&dJE3o9=fDp9E$ky+gNkDnSi0=91e1k6R4T%s~O^F1j(E&fSY+2Il7N(j6Wu zl_s(iaAM;Y3*?c+3-SkFD+~|<*HhTb3mBnqvWvqzMu{VvA^00gDXHdd2x4SzqvZ6` z^jkj}Y(lz7z(*Bl^dCGEN@M2_6-(S6QS?SVp(>vB)Y7vt{{!)!X(KMp9bY9{S2{n? z6JL@Q<&b4?fYr5pfC0zql#P<<6X^BUpG-*EH+TtCMT?f#7y916%KHm@2T>&bB^E$;Ce08)opypAQ!ogaoY#0Wc|`{GRtX3JyX}axVwC39RrQc-mP&s@*66 z@y#q@&fuqIZM-@H27X3;e?p};a}cJ5ah)0z2y*>9Bx^?_ZV26(ot=(=LZ)Qt^cRJ-*DHb}%ui}1 zCB-+UHwq}aJmtiY0ntMY`4rh-km9D0X}r)D&p+D%#86tu7ex`~N$CoyBE_Px96fDI zGt9#qzyR{VOa6qhfD7(Yuu-ZuT$_;<$H@Vip_c$b!{KZ!pm57^6aXxqnr~1Ih>31Y z=a^5Hbj^OOGeOVLJ~A9ukAU61Yh=0wu3zL_Q1*lcJ#-9FxJB{i<@pXiiy4>3(^N%j z8d=LwgPHr64!{fp9!I9c%c?4q0ivM0wcOxVIM^Hq+iq^&z!)#fw^j$JU7J&BkH zioB1`&$uCM2s%nCKU|4)Bt)o-6qHRw19xTlBt<|Iyzs^c*xT0(EsbYN(>lI%r^~@; zQ8bU4Nh>(wPH2H=V`;*ds016ZZLl;9p9i=MYeI-x=aV{Kbm`@1$UW?jV0*4To|!$H6cNt0#IwtZk>lQlYt>0q9-e>-FZ3j} zdzZ@*E@O~7$d71}%p8Lvqt>w*mG6*k^mdA{Aq@}%LIu?do-YiBoFw%;ys)v|leSk_#r^!#zx(`?|8r_)UYSq6e9eJVzy15aNtp=;onEN! z;b_5atAm_gs1_69ChYCKy}WdIigP5LIxIPYkDc8`{MpT|$0&(0xl{^S=+WY+AeGc_sa!{r=OBC2LUoidm|`N*~$c!JCzgpEQD;YJ4e*A-1x=ySK8sLI&Xe z+1Hh`U%iy75U2b4YHRDs=A*|et832jknRD_M^9wV2}&$^v;XV-!q}-K$zh8y z4Daz`7ELm@)eer*9Zce@xbPsotMruF_UX2Lz|j*?gaeDc8E8c@*gPz zI%y%_d4`D;I21;@$9zA_=cD68wqklsz5=G4mcX$nI+NoU2Y9aPo}?XxV_&}b8mrPN zf;&Ck3|3B#4_>|anPx zOgzTu5T5*y5S0SRm2EZ=>6&G= zfTon7=P8!V;H7Y)Bo~Im)s-c)jj4i@AHq{WvUDTkPO;^>E3qyiBKuGnlsFrcjYPi^ zMoOd{_eihNE>05L^D7#IjTv-wdg@uOpf z&_J@@f!vgvDW@zIY5S$of>>fG@boNR` zp&3i&(?~hj?j9Z=g+w*QI)4}{FreK^mgim8tXK4DO*2uZ$uGEjVGuK*Kj>Xb9X*?y z(It3JOg4FaLWY2ZI_ehY;3fL$|3`qsvtAnazkm_nDYb_Lj8luaYJymHuoEw4N*GQe zdh4Gm+DsFc$M>zSpOE_!vR}!(k8lv@l|rn5CKUIfgo$9*>WYU%pXM_^Yia z?`xDuQw>i0R?68I@6xd`?c^v_q@Y49j-Dlvw-(dPRkOEhM6>G7#>cREEOT}&g(5Rq z6itB_tygWEY^e$pW8&x#&i6^=g^VOk2~#q{vR_f|`&{`ariqrxn2r;}hTEqfJpI`p z|H)5t{7Mc^J~-O_^{;;U^MC*E)L@3~L2tOEs;=TS;WGzs%?sQmc-zdG3FYIhkPl+@ zmS18jhnw8O)*&9Yt@y^MwmB621l(w1voZ}zdn@KVI_4KzN5`T#886Ed zN>L4MB_IXp*v2mArwK6{dMxh*Elo=>;N)9uT-?zQ=>E7CE4 zBYt76y0iH9;&$Ag@2@{PZ})EI7urKrrqIQbLyrp|M&fA!G;f%*lC#upSv)cpWg6MjG`OTJd|+Luaa0;! z_8B28zSaqLawh{#o3(J8+26a;LuA4`JX%oN#xC(F>p`|vg@7c_1Rk`c!JAywo>cqJw{@rSoCc+M-ue}s_(TOVd7sp8J;_r`cGSst4JW zndn}TKx^D5f^C-^^AJ$ck0sZQxwsZC3Fx=ssdD$xn`=_`G4Vj)WrN5_WoE3q!RptecKbKGnpc8p|Z z(dEplQAzH1i7rAS}{C^B}uL~6tu;0HVu2%)7>(}z&?)zwC?Cl-L=X@G3Chz#a> zPMWCNMu?~>-)&CONaj<{UXql9&_)_`tTnhoXZ{GlL?19Pm@_RGU?5CniXBxEVP|b1 zZggM8cHNX0mcZeSQ0A8q1)zCPWUVe7S179dM3n#; z`0~ogODShc3kOq#va=!AIQDlNn z{urI?i?`eKKtkb%J?4t;@E|aw{VEs%BU->(m;{4EvhajE0V#m!X0xOsgT@uA2Y(gi ztO$&_9iIZdQIq}$)N5~TEvQZVVQm4i z0>TnzsI{*q=Nwn3g5ZU1$cxK%BV4q)Y^SlJ8*?2Yfsti^DfX(V{N_ZwK>(LM%gS?J ztSqYd)J}r6n=_$WfMXIX&=&JzSKnOkAMQw|I6FC1>OLZG14c^5Cq6~Fa4zV|M^7Ge zR}5W_2BQ)?kxQ#+=lomSw^!GB-u$VP!#zpWiz`bg!bAM<`#)M*dAk1SG0R9u0_v5n zTv%M?gfpl4>OvvQtE-ml*$BhMMWspKzIiDYy|ML#v&QD`TL#OK1uOktA3R@w^_i@B zE5`IWw^8vr6Yt*6K64hR3Zp9d;X4W%2s%;Kj*s2jc`Jzn*;N=lIXRq5EMS78EkNPe zTrY4~%9OpL{O5ZgJawm_j>;FS>l%A$+5o~&E8qydB_5N*W{k={@c zp{h(|kptgW`cooY9R)PHU8kS8SzHD&5v9x%qo1xFB4>^=a8`|aC_EYk8X--2KGXz; zU;xM6S9uJocnpWjkKg<7{SSV$zWF}cVqQ6SW9-t-x)RE{3Lnl|GY*0f_$XzxoTpZd;L`aWfxYScfD?;1Seu z1dd3AG!3r%@zF`-(&jfQ6&GZ5s*p9)856D`=2kcNz1ffeB$n?R1(}T0hEeb^}qg#dPbQxdw z#`TTm1@%;f2pOXMFTx)6kt2(TxI_)Ex-TNPINBJ!$rWYL}DeR^zCz-?rY7}!xn56XWBPes^b=t@lgt&S4APk<5uEbKfX!V-4yh#D>Pd)5*Ep(~X)9JVo04FH@N7ryz+6Jb zR))biusoQP=Y#8s?Eg0x6D2eW#S>A;IV@J-%;roJ=dd`_{PcRlnNdeKlZO{K>ei?s zJYs_Omd?AwiQ&raaCOx7Wp!%lk^BznzYJujuAktS0OABMwu^k?;gO12d|BRa%oZ4e zMd=Ka#}cDBgr_Ie$ISS`X;(v8vKWveNzmuEpJOa;Ry#K3U5^uoojEy^zR_M(!a4c@ zOOh)Lax)P5WO!qtvKN`|0ug@kA{R3l41eLFigm({H-SNGld~V(_S!*IvDo0vR_D09 zZsu&W2;FIYaYMeE^UjBIcj0)sX+^lFtEh%f9^-qlu2P2INs9*swSc+zP_eU?;m7rpx zgI8sh`;BFsRh{gA(SCVZD&z-#UMM^m3nZWsx*&_K=FqOXgvCRpx(Y3caI#~yfvW+`R8ZFUt zPVi~-tS&tc@p=?ucj^Z#o}FD2vY};z1MR?LgkioGOgK9;dO8!_Z3hCG2shWODtRT$ zomztiYt<|*i(g{si3G@`XhzvM{kIi+-MHPaV~hC-D^yekeO&<_PpLL8NfXF|Gs6w% zP~;2QQg7G2$Y6{xz_361ma`?fM4QFAqAy|78zh_rLMPhA*2mZsZ@iZ&+vA0(tVOHF zlwuG{Q%C%2pT%7i349=Qp1O$hgm_;z&FV)xG`C)iIkG4)>g+mBZ<0O)b5eoAAOPfx z1{sCT`H$wJ-!+1R0~+J`1Q=~*g{FUDI! z7kI|yh+ zHOB&k@Y(zXe+iP-?gNd0iYtqh2qgAF80mNhxbE;IcJ+dm#KDU{VHM9%9iqnCH+W$A zHHxv66r-bN)kNIA=`=wEiiJdA8@~k>N=AXJXxF48(Tx<;+>~S}!e|=hq~uvytZvWj z98wE~W#Qko@nK}$7nM?mFQXz5qgHbPAcun!w%12zJL`iv1tJ&6xZF7~=~rpcX5>3XPo zvgsrF=9uN~r7tab`;u88WJ+616m3DEd`qayj8z&OpTQDFK0G@ew7OW-?0zufcQ|9% z?f}eSn#vlR9ziY`C%uC2ZU!f$W;ccf$3Q!@E?#h*+yNr`nPA#XTY^j?WUM5-LUJ!J z-x~~EA74btG)<8dlAf`c1={wJIp+e7$12z8eST`@Vtkd=?3)Rjqw$J-=UW?fCuWAT z^A|Rp2yFCLraB7}W3M|)=ktq4t@)$r&PjWI_wwdwV(QeyJ=b=uqZ%7_=}*qc+Gx#N zfA0+~p)L+8aYNiDp`HtD7qCef{9lY2qB}cpFL{EOl5tI>NQHDvPT3MC>+9>hEl2gO zuC4U?>bo&L68XZtXGh0}+ix#UPNy!_?-0`jwWHA)?*QjmPAI#0dwOWwf8!_odqn+2!Z4I!2K)nw%%ASbSI$%~`Nu7B7B+6F&5cJJdpobk7pKxPHa0fR#aA~Mgj&%^Vj-2=8L|m5UY;Ev z?e6WoJUQC8smGT0<>h4-JNWP>b-J)H44(=o%}gF0?Hm5tsc~;xP~^-L{k`4o(b=(^ z0cd{V$!@=TA>CAN=J$|(H=uv+@b(67?N=hp$YbvuULkV!(ZJgjM z()8xltLcCFCyGQ?@Mb|YsApgtE$Jv6e)Uy}uZde|!@dPlg}qo+j^_~_h<(L`Iu8=VTmJ>`?I%{)nsrZDMnduump61trSBS8#=1NRSK`GwWos zkG3UYG=zDJVWc|i?xsloH2cX3 zTT<(dQ)R`uStTTP-n=$&J9HqLdR$r<3^-fu*8btKM3p!(wR{&99Q#8kq=Rx%bPTD4 zSM9qdkj|(a@9po2q>&X*=|b2tN+a@W0?0CmF$&_8PfmK$Li~*TmmHJkB1q8Nh~usk zlyFJbcDp%}gEuaps#@~d3knf7&;0^9)U># z@Y-s6GmWrE;7zO)9A!M`7l_Sg-DVESAN3NYLlSfs(GXm5f0TU+xGtb+^V-4_1_rH-MJbln^hmzB+q3vET#y;ECc9hdM0*GOFz>>} zc;pv3LO|6ZoL(cX1oea|(LA~@#Et8o)IK$BYsxbLB|uPb-AW|N;ed)K$#)QKHYWu< z-GU&29l+d~;GqYgD2&d$Tp&di62%LI>1WV)9#kU4nLCr@86k4qNrHOH8V`pbef<4D z`}6Ybd$BQfsKw0P+ zkaU@D!=O5El%4PVRoMn()u;Jo=fXlsVDT1Cu%`wFnW4guHyQGI&Kf@u`av4gl&U#q zEN!Eaxx6xGqXNtx$fExghq<{~91aMc1gQD>7QFBg#PVXa+<9Da$Wv@g@=feE6JPX` zha(|*`Ii~*!)0)X4{?=r`!yYJv_RthXS@>;ylfv=XJTAVljj;633 zcd0x-!89xfsgA@&dkb;Q4re!*_weQ6*~Los$|dMo#!wcGxhQx!Voj7FqF#mm^!~jADc9_`)?r7iB zi*pqs-H!gA<|^<8do3<#*oIEAj41<+@sxXTaN@`@e9JLNCrnVc2KIo;q$KBz8{V>o zM7CONN(g*_2QcuXHEnY6s`|z)Kh1P%mCWvyX1t+$=KkzR!>sTSza>ZZ##x6CED-0_ zD<5HN59ZGpx>-Br+gq^=2Sr4Uwa(9R(apIH z!>0)1xgd@)f!3c`h4YM0DwO4kyttRu1vJLOXfFB`oPvKK8H0PMC*Q%7HSlPkw28`` zVK>BUNo_n*n5<^Ky9d)oM?q0sjJT$DesW%rJAsK>RYL}-;{kFZjNd&lWeNlbM4P`3 zm2Ik1()HtF$TG>>R9G?T{pbiwhSt0Zw{~1KQZzCyP3g-+fcH~HLyFL@;IZ&{v^olE zp&68$K@KDm#}Oi4akrA}kadNq3(o>ICryMEX==(@Ajw6EQDRt_7z{qMVxJ__WXJ5+ z0S!S!Es&BO5ivvNiKQIuP0n=02{?_U2&@9D)}?4;YS6=2j>!q`a#vTtH~!#lzUq z-S|*)2aN+r`{1Dx7XS%s24e|dC4U|OdIvH1rFVrJ5spR=gxR|xdZ;_dRI$lXhqc@t zB>;i2WCG#_B61PyZiPAQUYx+400zEdPa^J{lM%%s-~ylGLB{3fIAF1IS~ZIahp-7NU9xZ z5oClJJVQqCvtLPvPa}jzFd&5?bH6>C6a%e9TLfJ+=|A{_J-y)&7H8B>qhMmIL`!H@ z6M}u_h~~|~Lk3z1xC?CpO_4X>l+(8{p8t@Y4q4#`^awr}HqMSkG2oIMu0na@NvV@=tl$eF{l=%gt z<6ccgC8dw_;&1V37w+;U;%S8gTZ%1G7x2bBuCs?_p~DZ!rAe?K zU`Rx|v$qi*{2!$e1{R-MW62W?d&e#=tVF>uj-vgtjmr^nY;W^a>=P-a3CHLfRLwhZ z;2a_B@KxlfWM{_V6SRp*uk;c$WjI+ht+|iNWrwwAZQgNkUKo#B^Q=vd#6E>f*ilAW z0S@gnxpjJPCLK*#_B3$!=o$&4zVuO*O?)$%rV^Z?&+14dkw^Z8`0aAHzjg4R3LIk+lkkYa5U3syIHf_&uR!-2VP@3qx)VuIggPY9zN z?7amx6p3KiLoOl0Dlc0a62vtQPxd4-m_N0nu)|<5SXs8mXWq!D$(5CL8cV$l&cf3V z|G*vxwz_Tm@Ca{c$1A2i6zs5vqiPo%+Xx|WAk9c@DAe(yfGQ0w>%g&B@usAeOD@UA z<|DZtylg~Ko#cZLKemHJ^g;53y+5=IBrh#5$F!kuh4r!439(a6w$H_IPACWB^|R;e z>l;JmS{>u{>Jx4_{4pIKGqrZKd5lVUvVUYg#jz(tPyqfbZ{?!Sf|-lkRl8|Q2Y z7jcA@*BY_VE}S%>*X!P`)mcE04(FP1`(+z}k8e!2I`eqByR^7qe&KT?6@ZfqBBnWU z#a}^V&|^&%BydK#?ckTJGUFs)JaMNx>mSIaLlBi>agdDMk)(rU^z>m2nAz5~i~xW# zy>Ngur~Si&)zuZ6e*f*RtQ7&g`FBxpwzBiGI1*&2}81awDN zCZ1oMhB#gL{gkW=K0xszvgb-f^R)$WWgt`C%bxQW?% zanb)%|0=Q4^V%-tKIhi%{8>B{@!vjLIvCdkHm}p-hHR9FXJlAADh4 zl=TzMi{ zTGO&9cP-(6G?&HB___)TJv{Z|w<*qp7gtr~ z!Nb=pOG{XWCTDkDUYSiW46bi;pXEXLkLF_iNV9_E`P6V~FRZNn`9J&T|K)%EPZE*d z-Tvg)zx}IU{D-6CgGY~^JpK546vyJy5;bSwj_>YR8;fyBjU>H=)=RC?7&LjsiSr3D zVN_NM33H2A#Bek^2;0}*>$Y-) zl>kx9dF*sOYwL+fuEkhXit8lzRoYwPdg*R=Hz(%g5pE~bpCo78R1B}w1dt_JSqa70 z90Q)}U0A>X@OU0%Au&m7WSJeWCeD55U08LUzEyXFsR+I5m9}Sw-TrW<=WvuujNvwG z3pi1=g{$@g8Ri~|)@K8b#jdN-VtFXjX+-bsuGG)QH2Z$ z&4{W1f0UI}M~axg&1G|!qjA66GpktH7Sobpiz@&R74!oXWbpT|=1=C73oLe@%((j> zCmehmUnPWMP-mf=GNQJSwt^SeiS9I1t7l@#nOnJ|bP;PPQB*3ey-im$un^Tua?cX! zOTZ|s5j(GuvZm{r+eEmEzTW<28YAkoJ7`GY4 ziYn2!HwTO#vEvJ+4P#l_@zdNNzewst?eNzoL)_8a3@2CE#AVUDIgSkkP)AYDoVU0= z{GS-#Y(a`am`PtTbnjoRUU)OEn2$>3m7^PV@XiaKvTIuChX_>C0T}c}E?B|9)?TV| z+^XF;cRrO;1vI!TOx$;xiOH)eS7Q6dMTw)2OjuaNk6Pk^Bmp3=???}U{_f}W+8{u?8|6X&o80BUJ1kw*v3G z@?Q|xfC_(zN%D!%_D>AJo)vI0Q6`8+ogCb*;uYrF=Q8Dm$tz@Q4LYXVRNFXP$B(VWP!lNIYl)7Ht4^%S% zUY7>ptC_r(XzyAgWjKn5kxne+mc0?#DK2{G?%@m0H=W3Vhm9t41a}!AADOnNnen%^ zZrd)9+f%kjanJOU-D)>ToUM$sf<-z(Tc~5GuD0av&Y=jb8J7M)X~>Y2Pk22pD~0tRftr$pl|wqr0=?N3;?X|VHvjOy4WBAQ+a2cy;Kf%zEzI& zzHj6A|J5BeBG|#SqOTg+X%rV60^&dC*57~p;cr%XStTpCWe7JiSfo)#jog{ZFrk0%=TBA#H5Ru{duM$HVu0wGOmcsEYHETZdg-H11 zLEkl4V1woEPg0XSlmsB0G5|k@Ny`y!jA0fK<)R$T!bNvdpA`}kj{z_VoReteLk>v? zo@#>Wk=aanSu$)o`n^v>5N|TkQ_%1JB~?Xo3oR>m&xbNbeI9C;B3s zD`Z#8W+)L=5ZZ-BEkG>^nw!2=ddBr$r*%3SV;l1n)wF-AOsDMKDP5b3S-_h0r+y(8 z0vRcjQt)^X>aOh>UYQ4#_!_s01|W-PIr1&GwtiS`K!4W*^uM_Vo8|iHsvxT z5>bslG>=5XO$*3Uv|>r*z?Kssn6U9YlQ?NF;juA{_ z&F~-$!31eXLa(3Y1I>sy#7@v^RfyxpE8oF0H+PLsj|`LRVUML<7YT&l+^lUrTG`yP zqa_Cx+;-1ybjrFaKH!ojkLDH4dB(~}}9d>GRfp)T7e>1w7@1~N2aDhj- zESzy^7f<@p)3tk3K(OI%E+P$6a1V<#) zwdNfEyPpGZay}74$@-^&Gx=sI`}QbxS#>gQ*{LHOBgF$}4fpiwbO}% zM~@Uq;&rucAY+JtNMNWe+x06?~y7zc&L9)l%v!`VS94QKa3FvH@FYF7BOCf01g zF-E-@EHJ$MrTvVqRe9j`J&qsX?q8UgyR*KOoiZv2$Mv;SAiAR#ALQlEOpM0I+dFS4 z2fMHwF3dmU5ucr1@9dmBf4O~deBSGA92{NbWTqU}DZrFc$PQd-cO7MfCoO}}>IPA6 zErUO=zyL_lHg=)Ev-De#2RdcscJcI-%B*Vnqymdq6leYBt2=C_Jv_u1SO_xBd7jQ~ zRDVumol&+{94=*3*di*}$at~SNUX134WfLyU)@;^=78oLNtnao#n6a@K#9AXce(_( zynZ$A|D2wkkzs#&X{Uw;%HMz4^ODiV=%^7e(5pTpur!cE`ld`?6xbjO)N_M1~-K0E4>oRT~xn|hh_E<$yJuLJQ2SzlcBE6uP(pXsN z`1HuBx}&j^S8V*_INO6mb4Pirx0e`ERxom4bwYC3Pu3jSQI>?YQfq0JAjQUMDyPMz zd<9oTfBXpZC4JJUv!&IQ@Bi>efA&xR=?{PWQx!q}=5PPz*;ikE@#Uv~{quhh_d>|j znbU1iMC~Qm&||Vcp*wCWAp5*HR11n&fflE-u@$}XZxM^#=w z!57qk=ir*%L)VA|V(EBm(`*h7XO_OTYndDsSVT0SD+rV4OsBY;H3i(nbUd47D7hG- zBzC4aU1h{NoNOICZFagVuyoOyA1k>qT$}DMjk#Cz%afg@$@%4}cF%#Fa=Q8ptLKb> z+1}|)>xzj$%VWUs0ZT_Y_X)Ghsq=BO-5UI{tyg*S6O#-bXUaB~2d)E;VY5!q!SXLN zlmXu`GXiC}rBCp-C<$Svg)90HZf{<~i+DdROs2|xOZKVd1qO$VWe7<2GDeL>QZnw6 zHLm!1)S0JDvut#mkohfA>MGZ!P$AKMp1sI`yYGh>Sh=rC2V9qx>~n^=+|8z6~q07i6QfUQ}0 zLna&oQ~D2aFXJslF{^73m@79SsbAT&=r*o=>VAiIN#HL>I!m2ApJdV3f~}=DUTZVh ze475K8HQMPPv9?>dKks1ViVQ4?B?+tZUH9l6 z0@)>ify@Xv>8)jRPF=}t2#UzX{2`5I{ja-_3|&N;9CaZ{r!XwB9Mwz%MiSR8`Ym}h zI3K_~>acI2-JiTZGE3sf3m<}S({Kn&DZcK+FyWzC4*~>I^2i{U3@2bM{Ns_ut|e>tr;sGP5maM! z8?(l|2u}3EVda$ajc+gjG0dSGHh5v%-%F!Awh74RY0k zoGt7IpRCy6SwyB4?>)3DR7-@>CRz&Kf#K*ZWi_HhSf|-DXpdwjZh!(N;$Rcs`Gxa< zje;6Mon{vjtic{4MsSJ{CT0^i{Xx&T83u5yc74bDfN#)W0vD~<{E7WwSievQ?QX^k zNybRpO9p_`ATQUMP-0(tW`QRmUTDp!jh#2K*-62g!gCYVTYKpTLg$rFx* zbNEFUKY_=P``Ox$AM&P18z6mx2v3GUiMU1adX_#U?FR%I}`#}I6E zf+*wH2c9%LlvpPxC36xLk*p1&6EkuGC=gn<(aaKte+Cw5YC-+O_-DOEuul?me#FM zZ`#C5V348eJ4zN-Gc_BLu8P)4JL+54sx#L?c7AocFRaF$OR=Y9hhbNm2j)Q{Q85x> zPm^U)Q(>j9z*)A1$`xheMAB0%hHa28GcV{WrD}af>pFTiu4$Acfr_?@XiqwVhqVnG zMoUvm89h6{I=-+5&>7#%q=ekmOuN^e>h=z&XBOADb{%@Tv3We(xmsA*rB~bYqv^@h ziOCT$Y_)8*nY7cvLON>$Q38>FuAI`rg%DA=zFb~fVN~-BWKr0* z!h%)I)2jZy3=7As9v@i3FQeMHrHq_0{_Ih(R>hGtDTGYv(^7rTF<}v;RD^*rjI(dN zMNJ<$VD-{^|MHs`&sR6L!1nURGsDIeQJb@KFP?pCI%43huC0Ij)mQv>Ar7S?PEQXI zADki)n_G`JA3uHk~x<|_%ElP1L_lk%Txh^rlatJms=jD69lqc)tL9UZYg zh-+Y+*`NqS1-jsO>nZJ_sG#U<;n?1;IJ2A}ksSy||0Tc1Wj?uPHNXZEs~->IoErod z*myy8RkURIVXYU6tsaUDc>A4q5e$U5?u9f0^hNe|v$q(L<=VfH$PAL)uWA#JB&EuL|{*aRHPC`$;X_%1?s1##HCY!-+lE& zK_{sP9^Ba6)Jsx?6=`!vnbo@hA)*JY%wj}9Q&eL$xGINbIlL$qhvw}6^*{fQ#-qTk z3NJ^8$4X}CkL4dyDLAYf0%O#hb&hO7O_l(5L6p%W6oML;8n&*vMmM7Pkzl3$x|t2Y zZY=oZ?yFr8+_KNGToS@%B0GRlZYz-wQ2ZCVKqCgJ>HegDQjQ3t9 z0fesOK?@Ls*&)Lc;RY!%a`_<)SY^H_tf_|pSU{)0vSm3zQLiz^p27^zYI8kF90%sB zL{`z(fCX0EuX}oBtn3Q0KlvEDz$O`37 z1}(Q4nt%`x^ddaekAA8StQH?&QVB^$u*BSvv;elmnCO%qvgYC%Y00ZSxz6byJ;&@maWqSI{^@!o@h+@5O59Kz~`Ivnb>sEakI^ z!l0Dfi*-Pq<@{XEv28uKNeX)tp$`G|MuQj6ULPp%>zWc0g2M>yG>!eYxwYj6L+}Yu`HVUwg1wG5?2{_cMnst_ zrm4@eOygOmW!7qasK(_d2ax&{hN!>!>b9copr!nb0T-AE9Z|x^g2id%5>eG^DPoCA z@JIjIk4S-KO@tZ?v7kG#2txV-%&aw5AS6d4T7!cpN=bXB$ngEG1xGgam>5^@7X79~^T4m`qeK-N`3n}$QGa-E3m zsqt{Qzq|M1#W#mOpMH%m5GdaN;KQArJ7#yg(=nSyXC&LxR*AkLAzD1CEm?jFHm%iK zi&4R$H__CRZ-9NF6l3u+{j<&?MY}n#^KTG4#6~Nd^>8iaf`so;3EW=8Sf*4h6zlsw3#}T~BfY1C38c39lB^N;wgXZN8IoNCwtj?l0lWOHEw4H#q0zdhj%Lvi(Rq3sA9QuxI6mSLHIvOfxF#F{k}z+X#M$~mZU3O|=7^`& zaIl_&uiMMaMs}b)M}@+P=?rX7Zg|#HCMjYi)jj0{B-IPQOeH^YI}whFqOPB*X*WC9 zyWrsQc4}~43!Ru`49dP=>h)KFJ_BM_?&Tc{q6#u&S=D#Bud zBt^pkHxikPJZ#9l^1CJ$`i4hlZ7Z|+rm0NK7@V>&oAHH?@&6mqNN)(Xjc#V zq?iF6>mVngvIX8&N|3~pW|bva1D$cv!*u{Cz$dW2VOt6Gs9MG)%^-SyWqg?eQQzn% zrNfLbnbm6z>i0Rio%R8D(r1LnHLACkJwI8##qZKZp^r|UxgHm809hm83>)Bs80a^uapDiU%)lLu20VcT}yj;Ta@;szORjVp&nPO&U`^b_5e2f1in} z>=D3uXT5Vs#wvY-vfLaSO2+O^lg<;yOL?=76{Vr#VN61o>P-mve%Vtf9{WpChEAh_ zKfsRxLbjI*>%f0aPb-xf1n;~naO8f3DzizxGNugjLKVy}GZ&{tIj+j=Js6Je+WPeT z95jqKX*FRQz;Jb^)!G}5j9p@$ulj(Ay;O9(Kt?v{z2)}tY37vG#;4g)wGP00S{9%$hos|yR_Vu0IR?oV{AX0d@pD}l*- zC?i<$6x}WAo~NKuAe%Q1&tf!m;y_+To#~ky!YGh^$gCEtjaOP?3SDL36<%l;nE%T` ze|fP!yh;rb?LZt?COu386krt@Uk*ozJXT;Vg?}{>OsQSsq&lEASXTQ<4h(VT{#5rNl!r=QGB{SGtZNz$`9g zs+O;16)q15HNx8E@(?U6X_y!SW{=L2`nU#?+TU^wVh12)cu9oR(+9xhlFt50+}(P;(5frt&J_?Dm;vHhKMUZRLKVAE{>h_ zPmXAw8=D(Qg(00n%4}e>Nerdrj4TQkFp;=caT`{K)wNZI3w1{LS}7oM8g^g3K*Q#P zPwyq@x~^qK3zC6=>7;yQ5(37j5_YAi&)6HJ+dKZ`7eD^sqyJR43uBGz9y9|ZofE7q zuNb8xh3Cg27Z^KiVf*mi_hTj5+R{(p@YMJmOR$~msr?W(Hnzy*M|%gzTH46Q=C&A+ zDt66FpFerLeg6?TIq?7@+{46hj>)~Z-nOfTmWb1oR>mcCH5~L*UFeVcZUPX^_5~j- zEOa*Rh)hw(BNC1}4_NVK>=Z^Pn=WKsj+OOw<_z5fL#jFKnw2)|fLwYR!vQMwt12XJ zX9Pj}5URnru-nUDfAvMw85`E%;RY|kpn`-aO&;Pgo_4g5#t4gKihANLrp&xp26Ri|6sV&Lmphq9 z-hHrhcWa%%zP8dlQ8ZO77Ou*E)@&#cgKdMjH42oe{TN7zqR5NV6lRds)BhY?v-JNk z{p_5Q@d%)hkgqG=9@3%q2cbfu76cKcKCDGrn&@z#JIqchXs{m%Yo`e!9TSl7NvSaw zmLBNzc9OIArV=WlFeVafYj`g7>$V1k44@eI8=6OawdiK)Q&vs(vfRjGS2UIw$z&

mJyyF;R9E0KVH>9MiMRl||VM(YK4Y`x|Ks$&d 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 W^ZVZEC|I%c5xR9f{}h2B&@p>8(EED$018LSK+ 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%0AxU$zirzgKuH%f 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

&eXPHN7%kg7%KrC^mgQ$ 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 z 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

#x4~<)1aHEm~r-@>S{V>SQBB_R+zWr3DWB4)3^d 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

ZyHRtxQ9S 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 B+(7^U literal 0 HcmV?d00001 diff --git a/guides/integration/assets/overview.drawio.svg b/guides/integration/assets/overview.drawio.svg deleted file mode 100644 index 1cbf80ba10..0000000000 --- a/guides/integration/assets/overview.drawio.svg +++ /dev/null @@ -1,509 +0,0 @@ - - - - - - - - - - -
-
-
- Packaged API -
-
-
-
- - Packaged API - -
-
-
- - - - - - - -
-
-
- Service Consumer -
-
-
-
- - Service Consumer - -
-
-
- - - - - - - -
-
-
- Service Provider -
-
-
-
- - Service Provider - -
-
-
- - - - - - - - - - - - - - - -
-
-
- Service Definition -
-
-
-
- - Service Definit... - -
-
-
- - - - - - - - - - - -
-
-
- Service Interface -
-
-
-
- - Service Interfa... - -
-
-
- - - - - - - - - - - -
-
-
- Consumption -
- Views -
-
-
-
- - Consumption... - -
-
-
- - - - - - - -
-
-
- Domain -
- Models -
-
-
-
- - Domain... - -
-
-
- - - - - - - -
-
-
- Own -
- Models -
-
-
-
- - Own... - -
-
-
- - - - - - - -
-
-
-
- - Expose Service Interfaces → - - (as usual) - - -
- - Export APIs → - - cds export - - → - - npm publish - - -
-
- - Import APIs → - - cds import - - or - - npm add - - -
-
- - Add Consumption Views → - - what to consume - - -
-
- - Use w/ own models → ... - - as if they were local - - -
-
-
-
-
-
-
- - Expose Service Interfaces → (as usual)... - -
-
-
- - - - - - - -
-
-
- 1 -
-
-
-
- - 1 - -
-
-
- - - - - - - -
-
-
- 2 -
-
-
-
- - 2 - -
-
-
- - - - - - - -
-
-
- 3 -
-
-
-
- - 3 - -
-
-
- - - - - - - -
-
-
- 4 -
-
-
-
- - 4 - -
-
-
- - - - - - - -
-
-
- 5 -
-
-
-
- - 5 - -
-
-
- - - - - - - -
-
-
- 1 -
-
-
-
- - 1 - -
-
-
- - - - - - - -
-
-
- 2 -
-
-
-
- - 2 - -
-
-
- - - - - - - -
-
-
- 3 -
-
-
-
- - 3 - -
-
-
- - - - - - - -
-
-
- 4 -
-
-
-
- - 4 - -
-
-
- - - - - - - -
-
-
- 5 -
-
-
-
- - 5 - -
-
-
- - - - - - - - - - - -
-
-
- Other -
- APIs -
-
-
-
- - Other... - -
-
-
-
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index 5df0ecd576..c2e7ecadca 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -22,9 +22,9 @@ Integrating remote services - from other applications, third-party services, or -## Introduction & Overview +## Preliminaries -### As If They’re Local +### Teaser With CAP, Service integration is greatly simplified. Consumption of remote services from other applications, third-party services, or platform services is as easy as calling them _as if they're local_: @@ -72,15 +72,24 @@ Remote CAP services can be consumed using the same high-level, uniform APIs as f > > Note that in the exercise above, the consumer side didn't even have any information about the service provider, except for the URL endpoint and protocols served, which it got from the service binding. In particular no API/service definitions at all – neither in *CDS*, *OData*, nor *OpenAPI*. -The remainder of this guide goes beyond such simple scenarios -and covers all the aspects of CAP-level service integration in detail. +### Overview + +While the above teaser nicely demonstrates the simplicity of CAP-level service integration, CAP can facilitate real-life integration scenarios even more, if we've captured APIs in CDS models. The remainder of this guide walks us through the steps to provide and share such APIs, import them to consuming apps as CDS models and use these in there as if they were local. The graphic below shows the flow of essential steps involved: + +![Workflow diagram showing five numbered steps of CAP-level service integration. Service Provider box on left contains step 1 Service Definition in blue and Domain Models in gray. Packaged API box in center shows step 2 Service Interface in light gray. Service Consumer box on right displays step 4 Consumption Views in light blue and step 5 Own Models in blue. Arrows connect the components left to right. Below, numbered list describes: 1 Expose Service Interfaces as usual, 2 Export APIs using cds export and npm publish, 3 Import APIs using cds import or npm add, 4 Add Consumption Views defining what to consume, 5 Use with own models as if they're local. +](assets/calesi-overview.drawio.svg) + + +#### + + ### The XTravels Sample -In this guide we'll use the _XTravels_ sample application as our running example. It's a modernized adaptation of the renowned [ABAP Flight reference sample](https://help.sap.com/docs/abap-cloud/abap-rap/abap-flight-reference-scenario), reimplemented using CAP and split into two microservices: +In this guide we use the _XTravels_ sample application as our running example. It's a modernized adaptation of the [ABAP Flight reference sample](https://help.sap.com/docs/abap-cloud/abap-rap/abap-flight-reference-scenario), reimplemented using CAP and split into two microservices: - The [*@capire/xflights*](https://github.com/capire/xflights) service provides flight-related master data, such as *Flights*, *Airports*, *Airlines*, and *Supplements* (like extra luggage, meals, etc.). It exposes this data via a CAP service API. @@ -96,17 +105,13 @@ The resulting entity-relationship model looks like that: From a service integration perspective, this sample mainly shows a data federation scenario, where the application consumes data from different upstream systems (XFlights and S/4HANA) – most frequently in a readonly fashion – to display it together with the application's local data. -### Workflow Overview - -The graphic below shows the flow of essential steps for service integration, which the following sections walk you through in detail: -![Workflow diagram showing five numbered steps of CAP-level service integration. Service Provider box on left contains step 1 Service Definition in blue and Domain Models in gray. Packaged API box in center shows step 2 Service Interface in light gray. Service Consumer box on right displays step 4 Consumption Views in light blue and step 5 Own Models in blue. Arrows connect the components left to right. Below, numbered list describes: 1 Expose Service Interfaces as usual, 2 Export APIs using cds export and npm publish, 3 Import APIs using cds import or npm add, 4 Add Consumption Views defining what to consume, 5 Use with own models as if they're local. -](assets/overview.drawio.svg) +#### Getting Started -#### Getting Started... +[`cap/samples`]: #getting-started -Let's dive into the details of CAP-level service integration, using the XTravels sample as our running example. Clone both repositories as follows to follow along: +So, let's dive into the details of CAP-level service integration, using the XTravels sample as our running example. Clone both repositories as follows to follow along: ```sh mkdir -p cap/samples @@ -116,9 +121,10 @@ git clone https://github.com/capire/xtravels ``` + ## Providing CAP-level APIs -In case of CAP service providers, as for [*@capire/xflights*](https://github.com/capire/xflights) in our [sample scenario](#the-xtravels-sample), you define [CAP services](../services/index) for all inbound interfaces, which includes (private) interfaces to your application's UIs, as well as public APIs to any other remote consumers. +In case of CAP service providers, as for [*@capire/xflights*](https://github.com/capire/xflights), you define [CAP services](../services/index) for all inbound interfaces, which includes (private) interfaces to your application's UIs, as well as public APIs to any other remote consumers. ### Defining Service APIs @@ -447,7 +453,7 @@ npm add @capire/xflights-data This makes the exported models with all accompanying artifacts available in the target project's `node_modules` folder. In addition, it adds a respective package dependency to the consuming application's *package.json* like this: ::: code-group -```json [package.json] +```json [xtravels/package.json] {... "dependencies": { ... "@capire/xflights-data": "0.1.12" @@ -512,7 +518,7 @@ Instead of importing the same APIs repeatedly in each project, you can import th For the _XTravels_ sample, we did so with the [`@capire/s4`](https://github.com/capire/s4) sample package, which we created as follows. -1. We started a new CAP project – get the outcome from Github to follow along: +1. We started a new CAP project – clone the repository into the [`cap/samples`] folder we created in the beginning and open it in VS Code to follow along: ```shell git clone https://github.com/capire/s4.git @@ -773,7 +779,7 @@ There are similar references to `Flights` entity from xflights in other parts of ### Mocked Out of the Box -With mashed up models, you can run applications in _'airplane mode'_ without upstream services running. CAP mocks imported services automatically _in-process_ with mock data in the same _in-memory_ database as your own data. +With mashed up models in place, we can run applications in _'airplane mode'_ without upstream services running. CAP mocks imported services automatically _in-process_ with mock data in the same _in-memory_ database as our own data. 1. Start the xtravels application locally using `cds watch` as usual, and note the output about the integrated services being mocked automatically: @@ -801,7 +807,9 @@ With mashed up models, you can run applications in _'airplane mode'_ without ups > > The mocked-out-of-the-box capabilities of CAP, with remoted services mocked in-process and a shared in-memory database, allows us to greatly speed up development and time to market. For real remote operations there is additional investment required, of course. But the agnostic nature of CAP-level Service Integration also allows you to spawn two working tracks running in parallel: One team to focus on domain and functionality, and another one to work on the integration logic under the hood. -We'll learn more about mocking and inner loop development in the [next chapter](./inner-loops). +Learn more about mocking and inner loop development in the [*Inner Loop Development*](./inner-loops) guide. + + #### Integration Logic Required @@ -968,7 +976,7 @@ await s4.read`A_BusinessPartner`.limit (3) // shorthand // [!code focus] ``` ::: -Read the same data via the `s4.capire.s4.Customers` consumption view: +Read the same data via the `sap.capire.s4.Customers` consumption view: ```js const { Customers } = cds.entities ('sap.capire.s4') await s4.read (Customers) .limit (3) // [!code focus] @@ -1000,7 +1008,7 @@ Watch the log output in the second terminal to see the translated OData requests ``` ::: -CRUD some data into remote `A_BusinessPartner` entity, still via the `s4.capire.s4.Customers` consumption view: +CRUD some data into remote `A_BusinessPartner` entity, still via the `sap.capire.s4.Customers` consumption view: ```js await s4.insert ({ ID: '123', Name: 'Sherlock' }) .into (Customers) await s4.create (Customers, { ID: '456', Name: 'Holmes' }) diff --git a/guides/integration/data-federation.md b/guides/integration/data-federation.md index d634656c35..ff19f5cef6 100644 --- a/guides/integration/data-federation.md +++ b/guides/integration/data-federation.md @@ -1,47 +1,35 @@ # CAP-level Data Federation -CAP applications can integrate and federate data from multiple external data sources, enabling seamless access and manipulation of distributed data. This guide provides an overview of the core concepts and techniques for implementing data federation in CAP applications, including service-level replication, HANA virtual tables, synonyms, and data products. +CAP applications can integrate and federate data from multiple external data sources, enabling close access to distributed data. This guide provides an overview of the core concepts and techniques for implementing data federation in CAP applications, and how CAP helps solving this generically, and thus serving data federation out of the box. {.abstract} +[[toc]] -## Introduction & Motivation -Displaying external data in lists commonly requires fast access to that data. Relying on live calls to remote services per row is clearly not an option, as that would lead to poor performance, excessive load on server, and a nightmare regarding resilience. Instead, we somehow need to ensure that all required data is available locally, so that it can be accessed fast and reliably by UIs, using good old SQL JOINs. +## Preliminaries -For example, we saw the need for that already in the [CAP-level Service Integration](calesi.md#integration-logic-required) guide, where the `Customer` field in the travel requests list is populated from the remote S/4 Business Partner service, but missing when running the services separately: +### Prerequisites -1. First run these commands **in two separate terminals**: +You should be familiar with the content in the [_CAP-level Service Integration_](calesi.md) guide, as we build upon that foundation here. In particular, you should have read and understood these sections: - ```shell :line-numbers=1 - cds mock apis/capire/s4.cds - ``` - ```shell :line-numbers=2 - cds mock apis/capire/xflights.cds - ``` +- [*Overview* of *CAP-level Service Integration*](calesi.md#overview) +- [_Providing & Exporting APIs_](calesi.md#providing-cap-level-apis) +- [_Importing APIs_](calesi.md#importing-apis) +- [_Consumption Views_](calesi.md#consumption-views) + +In addition, you should have read the introduction to [the _XTravels_ sample](calesi.md#the-xtravels-sample) application, which we continue to use as our running example. -2. Start the xtravels server as usual **in a third terminal**, and note that it now _connects_ to the other services instead of mocking them: - ```shell :line-numbers=3 - cds watch - ``` - ```zsh - [cds] - connect to sap.capire.s4.business-partner > odata { - url: 'http://localhost:54476/odata/v4/s4-business-partner' - } - ``` - ```zsh - [cds] - connect to sap.capire.flights.data > hcql { - url: 'http://localhost:54475/hcql/data' - } - ``` -2. Open the Fiori UI in the browser again -> data from the S/4 service is missing now, as we have not yet implemented the required custom code for the actual data integration, the same applies to the flight data from _xflights_: +### Motivation + +There are many scenarios where data from remote services needs to be in close access locally. For example when we display lists of local data joined with remote data, as we introduce in the [*CAP-level Service Integration*](calesi.md#integration-logic-required) guide: ![XTravels Fiori list view showing a table of travel requests, with the Customer column empty.](assets/xtravels-list-.png) ![XTravels Fiori details view showing a travel requests, with the flights data missing](assets/xtravels-bookings-.png) -In addition, when we again look into the log output, we see some bulk requests like shown below, which indicates that the Fiori client is desparately trying to fetch the missing customer data. If we'd scroll the list in the UI this would repeat like crazy. +When we run that and look into the log output of the xtravels app server, we see some bulk requests as shown below, which indicates that the Fiori client is desparately trying to fetch the missing customer data. If we'd scroll the list in the UI this would repeat like crazy. @@ -80,27 +68,52 @@ In addition, when we again look into the log output, we see some bulk requests l ``` +Relying on live calls to remote services per row is clearly not an option. Instead, we'd rather ensure that data required in close access is really available locally, so it can be joined with own data using SQL JOINs. This is what _data federation_ is all about. + -## Get The XTravels Sample -In the [`@capire/xtravels`](https://github.com/capire/xtravels) app we accomplished that with a simple, yet quite effective data replication solution, which automatically replicates data as documented below. -Clone the project from GitHub and open it in VS Code to follow along: +### The XTravels Sample -```shell -git clone https://github.com/capire/xtravels.git cap/samples/xtravels -code cap/samples/xtravels +We'll use the same [XTravels sample](calesi.md#the-xtravels-sample) and setup as in the [_CAP-level Service Integration_](calesi.md) guide. If you haven't done so already, clone the required repositories to follow along: + +```sh +mkdir -p cap/samples +cd cap/samples +git clone https://github.com/capire/xtravels +git clone https://github.com/capire/xflights +git clone https://github.com/capire/s4 ``` +[@capire/xtravels]: https://github.com/capire/xtravels +[@capire/xflights]: https://github.com/capire/xflights +[@capire/s4]: https://github.com/capire/s4 + + + ## Federated Consumption Views -Tag [consumption views](calesi#consumption-views) with the `@federated` annotation, to express your intent to have that data federated, i.e. in close access locally. For example, we did so in out consumption view for S/4 Business Partners: +Tag [consumption views](calesi#consumption-views) with the `@federated` annotation, to express your intent to have that data federated, i.e. in close access locally. For example, we did so in our consumption view for entities imported from XFlights as well as for the S/4 Business Partners entity: ::: code-group -```cds :line-numbers=4 [apis/capire/s4.cds] -@federated entity Customers as projection on S4.A_BusinessPartner { ... } + +```cds :line-numbers [apis/capire/xflights.cds] +@federated entity Flights as projection on x.Flights { ... } +@federated entity Supplements as projection on x.Supplements { ... } ``` + +::: +::: code-group + +```cds :line-numbers [apis/capire/s4.cds] +@federated entity Customers as projection on S4.A_BusinessPartner { + BusinessPartner as ID, + PersonFullName as Name, + LastChangeDate as modifiedAt, +} where BusinessPartnerCategory == 1; // 1 = Person +``` + ::: > [!tip] Stay Intentional -> What, not how! -> Minimal Assumptions @@ -108,9 +121,9 @@ Tag [consumption views](calesi#consumption-views) with the `@federated` annotati > By tagging entities with `@federated` we stay _intentional_ about **_what_** we want to achieve, and avoid any premature assumptions about **_how_** things are actually implemented. => This allows CAP runtimes – or your own _generic_ solutions, as in this case – to choose the best possible implementation strategies for the given environment and use case, which may differ between development, testing, and production environments, or might need to evolve over time. -## Generic Implementation +## Service-level Replication -Here's the complete code, as found in [`srv/data-federation.js`](https://github.com/capire/xtravels/blob/main/srv/data-federation.js): +Next we implement a generic solution for data federation, which automates the basic hard-coded approach for data federation presented [before](calesi#data-federation). Here's the complete code, as found in [`srv/data-federation.js`](https://github.com/capire/xtravels/blob/main/srv/data-federation.js): ::: code-group ```js:line-numbers [srv/data-federation.js] @@ -135,7 +148,7 @@ PROD || cds.on ('loaded', csn => { PROD || cds.once ('served', () => Promise.all (feed.map (async each => { const srv = await cds.connect.to (each.remote) srv._once ??=! srv.on ('replicate', replicate) - await srv.schedule ('replicate', each) .every ('3 seconds') + await srv.schedule ('replicate', each) .every ('10 minutes') }))) // Event handler for replicating single entities @@ -158,9 +171,7 @@ const is_remote = srv => cds.requires[srv]?.credentials?.url Let's have a closer look at this code, which handles these main tasks: 1. **Prepare Persistence** – When the model is `loaded`, before it's deployed to the database, we collect all to be `@federated` entities, check whether their respective services are remote, and if so, turn them into tables for local replicas (line 11). - -2. **Setup Replication** – Later when all services are `served`, we connect to each remote one (line 20), register a handler for replication (line 21), and schedule it to be invoked every three seconds (line 22). - +2. **Setup Replication** – Later when all services are `served`, we connect to each remote one (line 20), register a handler for replication (line 21), and schedule it to be invoked repeatedly (line 22). 3. **Replicate Data** – Finally, the `replicate` handler implements a simple polling-based data federation strategy, based on `modifiedAt` timestamps (lines 28-32), with the actual call to remote happening on line 29. > [!tip] CAP-level Querying -> agnostic to databases & protocols diff --git a/guides/integration/inner-loops.md b/guides/integration/inner-loops.md index b8cecaa97c..9836a02c37 100644 --- a/guides/integration/inner-loops.md +++ b/guides/integration/inner-loops.md @@ -1,35 +1,151 @@ # Inner-Loop Development -## Mocked Out of the Box +CAP promotes fast inner-loop development by allowing us to easily swap production-grade services with local mocks during development, without any changes to CDS models nor implementations. Similar in the context of application service integration, imported APIs of remote services and applications can be mocked out of the box in consuming applications. This in turn greatly promotes decoupled parallel development of distributed teams working on different microservices. +{.abstract} -In same process ... +[[toc]] -```shell -cds watch -``` -```zsh -... -[cds] - mocking sap.capire.flights.data { - at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], - decl: '@capire/xflights-data/services.csn:3' -} -... + +## Preliminaries + +### What is Inner Loop? + +![inner-loop-turntable](assets/inner-loop-turntable.png){.ignore-dark style="width:50%; border-radius: 22px; float: right; margin-top: -3em"} + +Many of us likely remember that turntable thing in the playgrounds: stay close to the center – the inner loop –, and it rotates at ultimate speed, lean out and it slows down. + +We see similar effects when we have to run through full *code - build - deploy* cycles to see the effects of our work in cloud development. And it's not only the turnaround times for individual developers, it's also the runtime for tests, the operating costs induced by both, the impact on support (local setups allow to reproduce things, complex setups don't), up to severe resilience issues (whenever a cloud service isn't available development stops for whole teams). + +Here's a very rough comparison from a real world example: + +| Aspect | Cloud-Based | Local Inner Loop | Gain | +|-----------------------------------|:-----------:|:----------------:|:------:| +| Turnaround times | 6+ min | 2 sec | > 100x | +| Test pipelines | 40+ min | 4 min | > 10x | +| Support time to reproduce/resolve | hours, days | minutes | > 10x | +| Resilience re service outages | poor | ultimate | | +| Operating costs / TCD | high | low | | + + + +### The XTravels Sample + +We'll use the same [XTravels sample](calesi.md#the-xtravels-sample) and setup as in the [_CAP-level Service Integration_](calesi.md) guide. If you haven't done so already, clone the required repositories to follow along: + +```sh +mkdir -p cap/samples +cd cap/samples +git clone https://github.com/capire/xtravels +git clone https://github.com/capire/xflights +git clone https://github.com/capire/s4 ``` -Open UI → flights data displayed +[@capire/xtravels]: https://github.com/capire/xtravels +[@capire/xflights]: https://github.com/capire/xflights +[@capire/s4]: https://github.com/capire/s4 + + + +## Mocked Out of the Box + +Within the context of application service integration and microservice architecture, we'd need to mock remote services in a consuming app to reach inner loop. CAP greatly does that for us, based on: + +- A CDS service definition is all we need to serve a fully functional OData service +- APIs imported via `cds export` and `cds import` are CDS service definition +- ⇒ CAP can serve/mock remote APIs out of the box + +Let's demonstrate that within the xtravels project... + + + +### In-Process, Shared DB – `cds watch` + +With mashed up models in place, we can run applications in _'airplane mode'_ without upstream services running. CAP mocks imported services automatically _in-process_ with mock data in the same _in-memory_ database as our own data. + +1. Start the xtravels application locally using `cds watch` as usual, and note the output about the integrated services being mocked automatically: + + ```shell :line-numbers=1 + cds watch + ``` + + ```zsh + [cds] - mocking sap.capire.s4.business-partner { + at: [ '/odata/v4/s4-business-partner' ], + decl: 's4/external/API_BUSINESS_PARTNER.csn:7' + } + ``` + + ```zsh + [cds] - mocking sap.capire.flights.data { + at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], + decl: 'xflights/apis/data-service/services.csn:3' + } + ``` + +2. Open the Fiori UI in the browser -> it displays data from both, local and imported entities, seamlessly integrated as shown in the screenshot below (the data highlighted in green is mocked data from `@capire/s4`). + +![XTravels Fiori list view showing a table of travel requests, with the Customer highlighted in green.](assets/xtravels-list.png) + + + +### Separate Processes – `cds mock` + +We can also use `cds mock` to mock remote services in separate processes, which brings us closer to the target setup: + +1. First run these commands **in two separate terminals**: + + ```shell :line-numbers=1 + cds mock apis/capire/xflights.cds + ``` + + ```shell :line-numbers=2 + cds mock apis/capire/s4.cds + ``` + +2. Start the xtravels server as usual **in a third terminal**, and note that it now _connects_ to the other services instead of mocking them: + + ```shell :line-numbers=3 + cds watch + ``` + + ```zsh + [cds] - connect to sap.capire.s4.business-partner > odata { + url: 'http://localhost:54476/odata/v4/s4-business-partner' + } + ``` + + ```zsh + [cds] - connect to sap.capire.flights.data > hcql { + url: 'http://localhost:54475/hcql/data' + } + ``` + +3. Open the Fiori UI in the browser again -> data from the S/4 service is missing now, as we have not yet implemented the required custom code for the actual data integration, the same applies to the flight data from _xflights_: + +![XTravels Fiori list view showing a table of travel requests, with the Customer column empty.](assets/xtravels-list-.png) + +![XTravels Fiori details view showing a travel requests, with the flights data missing](assets/xtravels-bookings-.png) + + + + > [!tip] Mocking for Inner-Loop Development -> A service definition is all we need to serve fully functional OData services. Hence, service APIs imported via `cds import` are automatically mocked by CAP runtimes during development. This allows us to develop and test integrated applications in fast inner loops, without the need to connect to real remote services.\ -> See also: [_Inner-Loop Development_](#inner-loop-development) section further below. +> A service definition is all we need to serve fully functional CAP services via OData or HCQL. Hence, service APIs imported via `cds import` are automatically mocked by CAP runtimes during development. This allows us to develop and test integrated applications in fast inner loops, without the need to connect to real remote services. + +> [!tip] Decoupled Development → Contracts First +> +> Local inner loops allow promote decoupled development of separate parts / applications / microservices in larger solution projects. Each team can focus on their local domain and functionality with the required remote services mocked for them based on imported APIs. These APIs are the contracts between the individual teams. -> [!tip] Decoupled Inner-Loop Development -> CAP runtimes automatically mock imported service APIs during development, allowing us to develop and test integrated applications in fast inner loops, without the need to connect to real remote services. This decouples inner-loop development from external dependencies, speeding up development and increasing resilience. +> [!tip] Fast-track Inner-Loop Development → Spawning Parallel Tracks +> +> The mocked-out-of-the-box capabilities of CAP, with remoted services mocked in-process and a shared in-memory database, allows us to greatly speed up development and time to market. For real remote operations there is additional investment required, of course. But the agnostic nature of CAP-level Service Integration also allows you to spawn two working tracks running in parallel: One team to focus on domain and functionality, and another one to work on the integration logic under the hood. -## Providing Mock Data +### Providing Mock Data There are different options to provide initial data, test data, and mock data: @@ -43,42 +159,11 @@ For Java, make sure to add the `--with-mocks` option to the `cds deploy` command [Learn more about *Adding Initial Data*](../databases/initial-data) {.learn-more} -## Using `cds mock` - -Run this in terminal 1: - -```shell -cds mock db/xflights.cds -``` - -```zsh -... -[cds] - mocking sap.capire.flights.data { - at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], - decl: '@capire/xflights-data/services.csn:3' -} -... -``` - -Run this in terminal 2: - -```shell -cds watch -``` - -```zsh -[cds] - connect to sap.capire.flights.data > hcql { - url: 'http://localhost:56350/hcql/data' -} -``` - -Open UI → flights data missing -This is because the CAP runtime now detected that services with that name are served by different processes within our local binding environment now, so we don't mock them in-process any longer. -## Test in `cds repl` +## Test-drive w/ `cds repl` From 71ed63168e41fc53d1e07ca553ea82adec7dc312 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 4 Feb 2026 14:11:18 +0100 Subject: [PATCH 419/439] Reverted back to "as if they were local" --- guides/integration/calesi.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index c2e7ecadca..a46d8db39f 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -9,7 +9,7 @@ Integrating remote services - from other applications, third-party services, or > [!tip] The 'Calesi' Pattern – Guiding Principles > > 1. Remote services are proxied by CAP services, ... → *everything's a CAP service* -> 2. Consumed in protocol-agnostic ways → *... as if they're local* +> 2. Consumed in protocol-agnostic ways → *... as if they were local* > 3. Mocked out of the box → *fast-track inner-loop development* > 4. With varying implementations → *evolution w/o disruption* > 5. Extensible through event handlers → *intrinsic extensibility* @@ -26,7 +26,7 @@ Integrating remote services - from other applications, third-party services, or ### Teaser -With CAP, Service integration is greatly simplified. Consumption of remote services from other applications, third-party services, or platform services is as easy as calling them _as if they're local_: +With CAP, Service integration is greatly simplified. Consumption of remote services from other applications, third-party services, or platform services is as easy as calling them _as if they were local_: 1. Clone the bookshop sample, and start the server in a terminal: @@ -66,7 +66,7 @@ The graphic below illustrates what happened here: ![Diagram illustrating CAP-level service integration showing two scenarios: Local services where Consumer connects to Service via CQL, and Remote services where Consumer connects to Proxy via CQL, Proxy connects to Protocol Adapter via OData, and Protocol Adapter connects to Service via CQL. ](assets/remoting.drawio.svg) -Remote CAP services can be consumed using the same high-level, uniform APIs as for local services – i.e., **_as if they're local_**. `cds.connect` automatically constructs remote proxies, which translate all local requests into protocol-specific ones, sent to remote services. Thereby also taking care of all connectivity, remote communication, principal propagation, as well as generic resilience. +Remote CAP services can be consumed using the same high-level, uniform APIs as for local services – i.e., **_as if they were local_**. `cds.connect` automatically constructs remote proxies, which translate all local requests into protocol-specific ones, sent to remote services. Thereby also taking care of all connectivity, remote communication, principal propagation, as well as generic resilience. > [!note] Model Free > @@ -80,7 +80,7 @@ Remote CAP services can be consumed using the same high-level, uniform APIs as f While the above teaser nicely demonstrates the simplicity of CAP-level service integration, CAP can facilitate real-life integration scenarios even more, if we've captured APIs in CDS models. The remainder of this guide walks us through the steps to provide and share such APIs, import them to consuming apps as CDS models and use these in there as if they were local. The graphic below shows the flow of essential steps involved: -![Workflow diagram showing five numbered steps of CAP-level service integration. Service Provider box on left contains step 1 Service Definition in blue and Domain Models in gray. Packaged API box in center shows step 2 Service Interface in light gray. Service Consumer box on right displays step 4 Consumption Views in light blue and step 5 Own Models in blue. Arrows connect the components left to right. Below, numbered list describes: 1 Expose Service Interfaces as usual, 2 Export APIs using cds export and npm publish, 3 Import APIs using cds import or npm add, 4 Add Consumption Views defining what to consume, 5 Use with own models as if they're local. +![Workflow diagram showing five numbered steps of CAP-level service integration. Service Provider box on left contains step 1 Service Definition in blue and Domain Models in gray. Packaged API box in center shows step 2 Service Interface in light gray. Service Consumer box on right displays step 4 Consumption Views in light blue and step 5 Own Models in blue. Arrows connect the components left to right. Below, numbered list describes: 1 Expose Service Interfaces as usual, 2 Export APIs using cds export and npm publish, 3 Import APIs using cds import or npm add, 4 Add Consumption Views defining what to consume, 5 Use with own models as if they were local. ](assets/calesi-overview.drawio.svg) @@ -662,7 +662,7 @@ Noteworthy aspects here are: ### Associations -With consumption views in place, you can now reference them from your models _as if they're local_, creating mashups of imported and local definitions. +With consumption views in place, you can now reference them from your models _as if they were local_, creating mashups of imported and local definitions. ::: code-group @@ -733,7 +733,7 @@ This is required as associations to non-exposed entities would be cut off, which #### Fiori Annotations -On top of the mashed up models we can add Fiori annotations as usual to serve Fiori UIs – again: _as if they're local_. For example, following are excerpts of Fiori annotations referring to the `A_BusinessPartner` entity imported from S/4 (via the `Customers` consumption view, and the association to that from the local `Travels` entity). +On top of the mashed up models we can add Fiori annotations as usual to serve Fiori UIs – again: _as if they were local_. For example, following are excerpts of Fiori annotations referring to the `A_BusinessPartner` entity imported from S/4 (via the `Customers` consumption view, and the association to that from the local `Travels` entity). ::: code-group ```cds [app/common/labels.cds] From 160f93b667e9af9186ea34829c474019552f0d0f Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 4 Feb 2026 15:35:23 +0100 Subject: [PATCH 420/439] Update inner-loops.md --- guides/integration/inner-loops.md | 241 ++++++++++++++++++++++++------ 1 file changed, 195 insertions(+), 46 deletions(-) diff --git a/guides/integration/inner-loops.md b/guides/integration/inner-loops.md index 9836a02c37..f2f287554c 100644 --- a/guides/integration/inner-loops.md +++ b/guides/integration/inner-loops.md @@ -34,18 +34,24 @@ Here's a very rough comparison from a real world example: We'll use the same [XTravels sample](calesi.md#the-xtravels-sample) and setup as in the [_CAP-level Service Integration_](calesi.md) guide. If you haven't done so already, clone the required repositories to follow along: -```sh +```sh :line-numbers mkdir -p cap/samples cd cap/samples -git clone https://github.com/capire/xtravels +git clone https://github.com/capire/xtravels git clone https://github.com/capire/xflights git clone https://github.com/capire/s4 +echo '{"workspaces":["xflights","xtravels","s4"]}' > package.json +npm install ``` [@capire/xtravels]: https://github.com/capire/xtravels [@capire/xflights]: https://github.com/capire/xflights [@capire/s4]: https://github.com/capire/s4 +> [!note] +> +> Line 6 above turns the `cap/samples` folder into a root for `npm workspaces`. For the time being this simply optimizes the `npm install`. We'll revisit that in chapter [*Using `npm` Workspaces*](#using-npm-workspaces) below. + ## Mocked Out of the Box @@ -92,37 +98,34 @@ With mashed up models in place, we can run applications in _'airplane mode'_ wit ### Separate Processes – `cds mock` -We can also use `cds mock` to mock remote services in separate processes, which brings us closer to the target setup: +###### cds-mock -1. First run these commands **in two separate terminals**: - - ```shell :line-numbers=1 - cds mock apis/capire/xflights.cds - ``` - - ```shell :line-numbers=2 - cds mock apis/capire/s4.cds - ``` - -2. Start the xtravels server as usual **in a third terminal**, and note that it now _connects_ to the other services instead of mocking them: - - ```shell :line-numbers=3 - cds watch - ``` +We can also use `cds mock` to mock remote services in separate processes, which brings us closer to the target setup: - ```zsh - [cds] - connect to sap.capire.s4.business-partner > odata { +1. From within the xtravels project's root folder `cap/samples/xtravels`, start by mocking the remote services in separate terminals, then start xtravels server in a third terminal: + + ```shell :line-numbers=1 + cds mock apis/capire/xflights.cds + ``` + ```shell :line-numbers=2 + cds mock apis/capire/s4.cds + ``` + ```shell :line-numbers=3 + cds watch + ``` + Note in the log output of the xtravels server that it now _connects_ to the other services instead of mocking them: + ```zsh + [cds] - connect to sap.capire.s4.business-partner > odata { url: 'http://localhost:54476/odata/v4/s4-business-partner' - } - ``` - - ```zsh - [cds] - connect to sap.capire.flights.data > hcql { + } + ``` + ```zsh + [cds] - connect to sap.capire.flights.data > hcql { url: 'http://localhost:54475/hcql/data' - } - ``` + } + ``` -3. Open the Fiori UI in the browser again -> data from the S/4 service is missing now, as we have not yet implemented the required custom code for the actual data integration, the same applies to the flight data from _xflights_: +2. Open the Fiori UI in the browser again -> data from the S/4 service is missing now, as we have not yet implemented the required custom code for the actual data integration, the same applies to the flight data from _xflights_: ![XTravels Fiori list view showing a table of travel requests, with the Customer column empty.](assets/xtravels-list-.png) @@ -130,8 +133,6 @@ We can also use `cds mock` to mock remote services in separate processes, which - - > [!tip] Mocking for Inner-Loop Development > A service definition is all we need to serve fully functional CAP services via OData or HCQL. Hence, service APIs imported via `cds import` are automatically mocked by CAP runtimes during development. This allows us to develop and test integrated applications in fast inner loops, without the need to connect to real remote services. @@ -163,38 +164,175 @@ For Java, make sure to add the `--with-mocks` option to the `cds deploy` command +## Run with Real Services + +Instead of mocking required services by the imported APIs [using `cds mock` as shown above](#cds-mock), we can also run the real *xflights* service from its respective home folder which we [cloned already in the beginning](#the-xtravels-sample). We can combine that with `s4` still mocked from the imported API, as above. + +Do so by running the following commands from within the `cap/samples` root folder in separate terminals, and in that order: + +```shell :line-numbers=1 +cd xtravels; cds mock apis/capire/s4.cds +``` +```shell :line-numbers=2 +cds watch xflights +``` +```shell :line-numbers=3 +cds watch xtravels +``` + +In the log output of the xtravels server we should see that it _connects_ to the other services, in the same way as above: +```zsh +[cds] - connect to sap.capire.s4.business-partner > odata { + url: 'http://localhost:54476/odata/v4/s4-business-partner' +} +``` +```zsh +[cds] - connect to sap.capire.flights.data > hcql { + url: 'http://localhost:54475/hcql/data' +} +``` + +[Go on as above...](#cds-mock) + + + ## Test-drive w/ `cds repl` +We can use `cds repl` to experiment the options to send requests and queries to remote services interactively. Do so as follows... +From within the xtravels project's root folder `cap/samples/xtravels`, start by mocking the remote services in separate terminals, then start xtravels server within `cds repl` (instead of `cds watch`) in a third terminal: -```shell -cds repl ./ +```shell :line-numbers=1 +cd xtravels; cds mock apis/capire/s4.cds +``` + +```shell :line-numbers=2 +cds watch xflights ``` +```shell :line-numbers=3 +cds repl xtravels +``` + +Within the REPL, connect to local and remote services: + ```js +const TravelService = await cds.connect.to ('TravelService') const xflights = await cds.connect.to ('sap.capire.flights.data') -await xflights.read `Flights { - ID, date, departure, - origin.name as ![from], - destination.name as ![to] -}` +const s4 = await cds.connect.to ('sap.capire.s4.business-partner') ``` -⇒ equally works for both, xflights api mocked locally, as well as running remotely +Read data directly from the remote `A_BusinessPartner` entity. +```js +await s4.run (SELECT.from`A_BusinessPartner`.limit (3)) +await s4.read`A_BusinessPartner`.limit (3) // shorthand // [!code focus] +``` +> The variant on line 2 is a convenient shorthand for the one on line 1. +::: details See results output ... -## Using Workspaces +```zsh +=> [ + { + BusinessPartner: '000001', + PersonFullName: 'Mrs. Theresia Buchholm', + LastChangeDate: '2024-01-19', + LastChangeTime: '21:48:32', + BusinessPartnerCategory: '1' + }, + { + BusinessPartner: '000002', + PersonFullName: 'Mr. Johannes Buchholm', + LastChangeDate: '2024-01-08', + LastChangeTime: '11:22:01', + BusinessPartnerCategory: '1' + }, + { + BusinessPartner: '000003', + PersonFullName: 'Mr. James Buchholm', + LastChangeDate: '2022-11-04', + LastChangeTime: '15:27:46', + BusinessPartnerCategory: '1' + } +] +``` + +::: + +Read the same data via the `sap.capire.s4.Customers` consumption view: + +```js +const { Customers } = cds.entities ('sap.capire.s4') +await s4.read (Customers) .limit (3) // [!code focus] +``` -Instead of exercising a workflow like that again and again: +::: details See results output ... + +```zsh +=> [ + { ID: '000001', Name: 'Mrs. Theresia Buchholm', modifiedAt: '2024-01-19' }, + { ID: '000002', Name: 'Mr. Johannes Buchholm', modifiedAt: '2024-01-08' }, + { ID: '000003', Name: 'Mr. James Buchholm', modifiedAt: '2022-11-04' } +] +``` + +Note how field names and structure are adapted to our domain. +::: + +::: details See OData requests ... +Watch the log output in the second terminal to see the translated OData requests being received by the remote service, for example: + +```zsh +[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { + '$top': '3' +} +``` + +```zsh +[odata] - GET /odata/v4/s4-business-partner/A_BusinessPartner { + '$select': 'BusinessPartner,PersonFullName,LastChangeDate', + '$top': '3' +} +``` + +::: + +CRUD some data into remote `A_BusinessPartner` entity, still via the `sap.capire.s4.Customers` consumption view: + +```js +await s4.insert ({ ID: '123', Name: 'Sherlock' }) .into (Customers) +await s4.create (Customers, { ID: '456', Name: 'Holmes' }) +await s4.read`ID, Name` .from (Customers) .where`length(ID) <= 3` +await s4.update (Customers,'123') .with ({ modifiedAt: '2026-01-01' }) +await s4.delete (Customers,'123') +await s4.delete (Customers) .where`ID = ${'456'}` +``` + +Go on like that and try out similar requests with the other services, that is, `TravelService` and `xflights`. For the latter you might run into `401` errors, in that case run the following once in the REPL to run in privileged mode: + +```js +cds.User.default = cds.User.privileged +``` + + + + + + +## Using `npm` Workspaces + +So far we assumed we mainly wirked within the *xtravels* project, and we consumed thte APIs from xflights via `npm publish` / `npm install` . There might be situations where we would want to shortcut this process. For example, we might want to consume a very latest version of the xflights API, which is not yet published to the *npm* registry. Or we might even want to work on both projects simultaneously, and test our latest changes to *xflights* in *xtravels* in close loops. + +So, in essence, instead of exercising a workflow like that again and again: - ( *develop* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) -... we can use *npm workspaces* technique to work locally and speed up things as follows: +... we can use *npm workspaces* technique to work locally and speed up things as follows (we did that already above, shown here again for local completeness): ```shell -mkdir -p cap/works; cd cap/works +mkdir -p cap/samples; cd cap/samples git clone https://github.com/capire/xflights git clone https://github.com/capire/xtravels echo '{"workspaces":["xflights","xtravels"]}' > package.json @@ -243,6 +381,13 @@ cds watch xtravels } ``` +> [!tip] +> +> So, using `npm` workspaces we've streamlined our workflows as follows: +> +> - Before: ( *change* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) +> - After: ( *change* → *export* ) → ( *consume* ) + ## Using Proxy Packages @@ -343,8 +488,12 @@ cds watch xtravels } ``` -Which means we've streamlined our workflows as follows: -- Before: ( *change* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) -- Step 1: ( *change* → *export* ) → ( *consume* ) -- Step 2: ( *change* ) → ( *consume* ) + +> [!tip] +> +> So, in total, we've streamlined our workflows as follows: +> +> - Before: ( *change* → *export* → *publish* ) → *npmjs.com* → ( *update* → *consume* ) +> - Step 1: ( *change* → *export* ) → ( *consume* ) +> - Step 2: ( *change* ) → ( *consume* ) From 0c2bba043cd1c5d0f1813a4f414305c0fbb67944 Mon Sep 17 00:00:00 2001 From: Mahati Shankar <93712176+smahati@users.noreply.github.com> Date: Wed, 4 Feb 2026 15:49:43 +0100 Subject: [PATCH 421/439] cosmetics --- guides/integration/calesi.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index a46d8db39f..f6e7e7dcc2 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -70,7 +70,7 @@ Remote CAP services can be consumed using the same high-level, uniform APIs as f > [!note] Model Free > -> Note that in the exercise above, the consumer side didn't even have any information about the service provider, except for the URL endpoint and protocols served, which it got from the service binding. In particular no API/service definitions at all – neither in *CDS*, *OData*, nor *OpenAPI*. +> Note that in the exercise above, the consumer side didn't even have any information about the service provider, except for the URL endpoint and protocols served, which it got from the service binding. In particular no API/service definitions at all – neither in *CDS*, *OData*, nor in *OpenAPI*. @@ -98,7 +98,7 @@ In this guide we use the _XTravels_ sample application as our running example. I ![XTravels application interface showing a travel request form. The interface displays customer information including name, email, and address fields highlighted in green, sourced from S/4HANA. Below that, a flight booking section shows departure and arrival airports, dates, and times highlighted in blue, sourced from the XFlights service. The layout demonstrates data federation from multiple backend systems presented in a unified user interface. ](assets/xtravels-screenshot.png) -The resulting entity-relationship model looks like that: +The resulting entity-relationship model: ![Architecture diagram showing three systems: XFlights on the left containing Flights, Airlines, and Airports entities in light blue, XTravels in the center containing Travels, Bookings, and Supplements entities in darker blue, and S/4HANA on the right containing Customers entity in gray. Arrows connect Bookings to Flights, Travels to Customers, and Bookings to Supplements, illustrating data relationships between the systems in a federated service integration pattern. ](assets/xtravels-sample.drawio.svg) @@ -159,10 +159,10 @@ Let's have a closer look at the denormalized view for _Flights_, which basically } excluding { flight }; // which we flattened above ``` -Reason for this more complicated definition is that we need to preserve the primary keys elements `flight.ID` and `date`, as OData disallows entities without keys. +This definition is more complicated because we need to preserve the primary keys elements `flight.ID` and `date`, as OData disallows entities without keys. > [!tip] Use Case-Oriented Services -> Denormalized views are a common means to tailor provided APIs in a use case-oriented way. While normalization is required _within_ _XFlights_ to avoid redundancies, we flatten it here, to make life easier for external consumers. \ +> Denormalized views are a common way to tailor provided APIs to fit your use case. While normalization is required _within_ _XFlights_ to avoid redundancies, we flatten it here, to make life easier for external consumers. \ > => See also: [_Use Case-Oriented Services_](../../get-started/bookshop#use-case-specific-services) in the getting started guide. > @@ -186,11 +186,11 @@ Exporting APIs to apis/data-service ... /done. ``` -By default, output goes to an `./apis/` subfolder, where `` is the `.cds` file basename. Use the `--to` option to specify a different output folder. +By default, it outputs to an `./apis/` subfolder, where `` is the `.cds` file's basename. Use the `--to` option to specify a different output folder. #### Exported Service Definitions -The key ingredient of the generated output is the `services.csn` file, which contains a cleansed, ***interface-only*** part of your service definition. It includes the _inferred elements signature_ of served entities but removes all projections to underlying entities and their dependencies. +The essential component of the generated output is the `services.csn` file, which contains a cleansed, ***interface-only*** version of your service definition. It includes the _inferred element signatures_ of served entities but removes all projections to underlying entities and their dependencies. To get an idea of the effect, run `cds export` in dry-run mode like this: @@ -399,7 +399,7 @@ Within the [_capire_](https://github.com/capire) org, we're publishing to [GitHu ```sh npm login --scope=@capire --registry=https://npm.pkg.github.com ``` -As password you're using a Personal Access Token (classic) with `read:packages` scope (for retrieving and installing a package). Read more about that in the [_GitHub Packages_](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#authenticating-to-github-packages) docs. +As for the password, use a 'Personal Access Token (classic)' with the `read:packages` scope (for retrieving and installing a package). Read more about that in the [_GitHub Packages_](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-npm-registry#authenticating-to-github-packages) docs. ::: ::: details Not using npm registries ... @@ -423,14 +423,14 @@ capire-xflights-data-0.1.13.tgz > [!warning] > -> Not using package registries like *npm* or *Maven* also means you'll loose all their support for semver-based dependency management. +> Not using package registries like *npm* or *Maven* also means that you'll loose all their support for semver-based dependency management. ::: > [!tip] Best Practice: Using Proven Standards -> CAP leverages standard and widely adopted package management tools and practices, such as _npm_ or _Maven_, for sharing and distributing reuse packages. This allows you to use established and battle-tested workflows and tools for versioning, publishing, consuming, and upgrading packages. At the same time it allows us to not reinvent those wheels, and focus on what matters most: allowing you to focus on domain, and be as productive as possible. +> CAP leverages standard and widely adopted package management tools and practices, such as _npm_ and _Maven_ for sharing and distributing reuse packages. This allows you to use established and battle-tested workflows and tools for versioning, publishing, consuming, and upgrading packages. At the same time it allows us to not reinvent those wheels, and focus on what matters most: allowing you to focus on domain, and be as productive as possible. @@ -438,13 +438,13 @@ capire-xflights-data-0.1.13.tgz ## Importing APIs -On the consumer side, like [*@capire/xtravels*](https://github.com/capire/xtravels) in our [sample scenario](#the-xtravels-sample), we import packaged APIs as provided before using `npm add`, or other APIs from non-CAP sources using `cds import` as outlined below. +On the consumer side, like [*@capire/xtravels*](https://github.com/capire/xtravels) in our [sample scenario](#the-xtravels-sample), we import packaged APIs from CAP and non-CAP sources using `npm add` and `cds import` respectively. ### Packaged APIs -Packaged APIs provided by CAP service providers are imported to consuming applications like that: +Import packaged APIs provided by CAP service providers like that: ```shell npm add @capire/xflights-data @@ -513,9 +513,9 @@ srv/external ### Reuse Packages -Instead of importing the same APIs repeatedly in each project, you can import them once and share them as reusable packages. These packages use the same techniques as `cds export` and provide the same plug & play convenience. +If you find yourself importing the same APIs every time in new projects, you can create a package that imports the APIs once and reuse it instead. Reusable packages use the same techniques as `cds export` and provide the same plug & play convenience. -For the _XTravels_ sample, we did so with the [`@capire/s4`](https://github.com/capire/s4) sample package, which we created as follows. +For the _XTravels_ sample, we created the [`@capire/s4`](https://github.com/capire/s4) reuse package as follows: 1. We started a new CAP project – clone the repository into the [`cap/samples`] folder we created in the beginning and open it in VS Code to follow along: @@ -588,7 +588,7 @@ npm add @capire/s4 ``` > [!tip] Pre-built Integration Packages -> In effect, pre-built integration packages apply the same best practice techniques as the `cds export` command does when generating [Packaged APIs](#packaged-apis). Such packages can be reused in any CAP project by a simple `npm add` command, thereby avoiding the need to re-import raw API definitions in each consuming project from scratch. Last but not least, they allow central version management based _npm_ and _Maven_. +> In effect, pre-built integration packages apply the same best practice techniques as the `cds export` command does when generating [Packaged APIs](#packaged-apis). Such packages can be reused in any CAP project by a simple `npm add` command, thereby avoiding the need to re-import raw API definitions in each consuming project from scratch. Last but not least, they allow central version management based on _npm_ and _Maven_. @@ -599,12 +599,12 @@ npm add @capire/s4 With imported APIs, you can now use them in your own models. For example, the XTravels application combines customer data from SAP S/4HANA with travels and flight bookings from xflights. With the integrated models, you can already run the application, as CAP [mocks integrations automatically](#mocked-out-of-the-box). For real integration, you'll need [custom code](#integration-logic), which we'll cover later. > [!tip] AI Agents 'capire' CAP -> We can use AI agents to help us analysing and understanding our models. Actually, the following sections are based on a response by *Claude Sonnet* to the question: *"Find and explain all references"*, with the entity definition for the `Flights` consumption view selected as context. +> We can use AI agents to help us analyse and understand our models. Actually, the following sections are based on a response by *Claude Sonnet* to the question: *"Find and explain all references"*, with the entity definition for the `Flights` consumption view selected as context. ### Consumption Views -Imported APIs often contain more entities and elements than you need. So as a next step we first create *Consumption Views* to capture what you actually want to use, focusing on entities and elements you need close access to. +Imported APIs often contain more entities and elements than you need. So, before we continue, we first create *Consumption Views* to capture what you actually want to use, focusing on entities and elements you need close access to. Create two new files `apis/capire/xflights.cds` and `apis/capire/s4.cds`: @@ -639,7 +639,7 @@ namespace sap.capire.s4; ``` ::: -Noteworthy aspects here are: +The noteworthy aspects here are: - We map names to match our domain, e.g., `A_Business_Partner` -> `Customers`, and choose simpler names for the elements we want to use. From 8e57112945455dd61615b5bfff8407c31fb7b9e0 Mon Sep 17 00:00:00 2001 From: Vladislav Leonkev <131776471+vl-leon@users.noreply.github.com> Date: Wed, 4 Feb 2026 16:01:03 +0100 Subject: [PATCH 422/439] fix features folder (#2360) --- guides/extensibility/feature-toggles.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/extensibility/feature-toggles.md b/guides/extensibility/feature-toggles.md index 42f792d269..2b8c174c07 100644 --- a/guides/extensibility/feature-toggles.md +++ b/guides/extensibility/feature-toggles.md @@ -76,7 +76,7 @@ Add a subfolder per feature to folder *fts* and put `.cds` files into it. The na ### Feature *fts/isbn* -Create a file *fiori/fts/isbn/schema.cds* with this content: +Create a file *fts/isbn/schema.cds* with this content: ```cds using { CatalogService, sap.capire.bookshop.Books } @@ -101,7 +101,7 @@ Note that all features will be deployed to each tenant database in order to allo ### Feature *fts/reviews* -Create a file *fiori/fts/reviews/schema.cds* with this content: +Create a file *fts/reviews/schema.cds* with this content: ```cds using { CatalogService } from '../../app/browse/fiori-service'; From 25bcd64ed68c5a36056ad69cd60b16a46d74beb6 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 4 Feb 2026 16:17:36 +0100 Subject: [PATCH 423/439] . --- cds/cxl.md | 2 +- guides/databases/cap-level-dbs.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cds/cxl.md b/cds/cxl.md index 91c082b13f..c040557504 100644 --- a/cds/cxl.md +++ b/cds/cxl.md @@ -340,7 +340,7 @@ that multiplies the two factors `price` and `quantity`.

-CAP supports a set of [portable functions](../guides/databases/cap-level-dbs#portable-functions) that can be used in all expressions. The CAP compiler automatically translates these functions to database-specific native equivalents, allowing you to use the same functions across different databases, which greatly enhances portability. +CAP supports a set of [portable functions](../guides/databases/cap-level-dbs#portable-functions) that can be used in all expressions. The CAP compiler, and the CAP runtimes, automatically translate these functions to database-specific native equivalents, allowing you to use the same functions across different databases, which greatly enhances portability. ## ref (path expression) { #ref } diff --git a/guides/databases/cap-level-dbs.md b/guides/databases/cap-level-dbs.md index 1cce945f91..e6aae447bd 100644 --- a/guides/databases/cap-level-dbs.md +++ b/guides/databases/cap-level-dbs.md @@ -94,7 +94,7 @@ The compiler translates this operator to the best-possible equivalent in the tar ## Standard Functions ###### Portable Functions -The following sections list standardized string, numeric, date/time, and aggregate functions supported by CAP, and guaranteed to work across all supported databases with feature parity. You can safely use these in CDS view definitions and runtime queries expressed in CQL. The compiler translates them to the best-possible database-specific native SQL equivalents. +The following sections list standardized string, numeric, date/time, and aggregate functions supported by CAP, and guaranteed to work across all supported databases with feature parity. You can safely use these in CDS view definitions and runtime queries expressed in CQL. The compiler, and the CAP runtimes, translate them to the best-possible database-specific native SQL equivalents. > [!important] Function names are case-sensitive > The names for standardized functions must be written exactly as listed below. For example, `toUpper` is invalid, while `toupper` is valid. Differently cased names might also work if they match native functions of the specific database, but are not guaranteed to be portable -> always use the exact casing as listed. From 10ffb8da57de820df5080f5de62b7cc38365b3ec Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 4 Feb 2026 17:01:13 +0100 Subject: [PATCH 424/439] Flattened menu for Security & Data Privacy --- guides/security/_menu.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/guides/security/_menu.md b/guides/security/_menu.md index 5a9c859657..2c5bcadfdf 100644 --- a/guides/security/_menu.md +++ b/guides/security/_menu.md @@ -1,15 +1,15 @@ -# [Security Overview](overview) -## [Authentication](authentication) -## [CAP-level Users](cap-users) -## [CAP-level Authorization](authorization) -## [Outbound Authentication](remote-authentication) +# [Concepts & Architecture](overview) +# [Authentication](authentication) +## [Users & Roles](cap-users) +## [Principal Propagation](remote-authentication) +# [Authorization](authorization) -# [Data Privacy Overview](data-privacy) +# [Data Privacy](data-privacy) ## [Personal Data](dpp-annotations) ## [Audit Logging](dpp-audit-logging) ## [Personal Data Manager](dpp-pdm) -# [Product Security Overview](data-protection) -## [SAP Standard](../../../guides/security/product-standards) +# [Product Security](data-protection) +# [SAP Security Standards](../../../guides/security/product-standards) From fde8911205c996e866f7fe3f62138b72d175d357 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Wed, 4 Feb 2026 17:37:00 +0100 Subject: [PATCH 425/439] Fixed text and line colors (had some alpha) --- guides/integration/assets/calesi-overview.drawio.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/integration/assets/calesi-overview.drawio.svg b/guides/integration/assets/calesi-overview.drawio.svg index a52dba050a..93aeb54a7c 100644 --- a/guides/integration/assets/calesi-overview.drawio.svg +++ b/guides/integration/assets/calesi-overview.drawio.svg @@ -1,4 +1,4 @@ -
Packaged API
Packaged API
Service Consumer
Service Consumer
Service Provider
Service Provider
Service Definition
Service Definit...
Service Interface
Service Interfa...
Consumption
Views
Consumption...
Domain
Models
Domain...
Own
Models
Own...
Expose Service Interfaces → (as usual)
Export APIs → cds export → npm publish
Import APIs → cds import or npm add
Add Consumption Views → what to consume
Use w/ own models → ... as if they were local
Expose Service Interfaces → (as usual)...
1
1
2
2
3
3
4
4
5
5
1
1
2
2
3
3
4
4
5
5
Other
APIs
Other...
Text is not SVG - cannot display
\ No newline at end of file +
Packaged API
Packaged API
Service Consumer
Service Consumer
Service Provider
Service Provider
Service Definition
Service Definit...
Service Interface
Service Interfa...
Consumption
Views
Consumption...
Domain
Models
Domain...
Own
Models
Own...
Expose Service Interfaces → (as usual)
Export APIs → cds export → npm publish
Import APIs → cds import or npm add
Add Consumption Views → what to consume
Use w/ own models → ... as if they were local
Expose Service Interfaces → (as usual)...
1
1
2
2
3
3
4
4
5
5
1
1
2
2
3
3
4
4
5
5
Other
APIs
Other...
Text is not SVG - cannot display
\ No newline at end of file From e1a156df2de4260cf3f95dd59f1920e37d09b2ec Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Wed, 4 Feb 2026 17:52:47 +0100 Subject: [PATCH 426/439] Remove useless local link --- guides/databases/postgres.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/guides/databases/postgres.md b/guides/databases/postgres.md index c83ce55d0f..50923f9d15 100644 --- a/guides/databases/postgres.md +++ b/guides/databases/postgres.md @@ -79,8 +79,6 @@ Output: } ``` -[See also the general information on installing database packages](index#setup-configurationmore} - ## Provisioning a DB Instance To connect to a PostgreSQL offering from the cloud provider in Production, leverage the [PostgreSQL on SAP BTP, hyperscaler option](https://discovery-center.cloud.sap/serviceCatalog/postgresql-hyperscaler-option). For local development and testing convenience, you can run PostgreSQL in a [docker container](#using-docker). @@ -617,7 +615,7 @@ If the changes in the model could lead to data loss, an error is raised. ## Migration { .node } -Thanks to CAP's database-agnostic cds.ql API, we're confident that the new PostgreSQL service comes without breaking changes. +Thanks to CAP's database-agnostic cds.ql API, we're confident that the new PostgreSQL service comes without breaking changes. ### `cds deploy --model-only` From d78f10dee1ad6db411c687ef37b181930afc0c5c Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Wed, 4 Feb 2026 17:53:44 +0100 Subject: [PATCH 427/439] Toggle don't interfere on non-toggled pages --- .vitepress/theme/components/implvariants/ImplVariants.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.vitepress/theme/components/implvariants/ImplVariants.vue b/.vitepress/theme/components/implvariants/ImplVariants.vue index c7e8f95b6f..8cb0c2ef38 100644 --- a/.vitepress/theme/components/implvariants/ImplVariants.vue +++ b/.vitepress/theme/components/implvariants/ImplVariants.vue @@ -12,6 +12,8 @@ const toggle = typeof localStorage !== 'undefined' ? useVariant() : () => {} const knownImplVariants = ['node', 'java'] onMounted(() => { + if (!supportsVariants.value) return + let check = currentCheckState() // Persist value even intially. If query param was used, users expect to get this value from now on, even if not using the query anymore. const variantNew = check ? 'java' : 'node' From 68cb1c5ce559fc1565d188f485252f7e6254ee59 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Wed, 4 Feb 2026 18:04:18 +0100 Subject: [PATCH 428/439] Toggle don't interfere on non-toggled pages II --- .vitepress/theme/components/implvariants/ImplVariants.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/.vitepress/theme/components/implvariants/ImplVariants.vue b/.vitepress/theme/components/implvariants/ImplVariants.vue index 8cb0c2ef38..77cd77426e 100644 --- a/.vitepress/theme/components/implvariants/ImplVariants.vue +++ b/.vitepress/theme/components/implvariants/ImplVariants.vue @@ -95,6 +95,7 @@ transition: none !important; } watchEffect(() => { + if (!supportsVariants.value) return setTimeout(() => { // otherwise DOM is not ready if (typeof document !== 'undefined') { animationsOff(() => setClass(currentCheckState()) ) From a4536d9f8171afcf94123a81603b9e995a131001 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Thu, 5 Feb 2026 08:14:38 +0100 Subject: [PATCH 429/439] polished slogans --- index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.md b/index.md index 8a7b589d3e..25959f0697 100644 --- a/index.md +++ b/index.md @@ -36,8 +36,8 @@ features: icon: ⭕️ details: •  Jumpstart & Grow as you go...
- •  Fast local inner loops
- •  Decoupled dev tracks
+ •  Inner loop fast tracks
+ •  Decoupled dev teams
link: get-started/ linkText: Getting Started From ed15c09244807133af430081c39f52da7c1dafd4 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Thu, 5 Feb 2026 08:34:55 +0100 Subject: [PATCH 430/439] polishing --- guides/integration/inner-loops.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/integration/inner-loops.md b/guides/integration/inner-loops.md index f2f287554c..06b84e0c3a 100644 --- a/guides/integration/inner-loops.md +++ b/guides/integration/inner-loops.md @@ -16,11 +16,11 @@ CAP promotes fast inner-loop development by allowing us to easily swap productio Many of us likely remember that turntable thing in the playgrounds: stay close to the center – the inner loop –, and it rotates at ultimate speed, lean out and it slows down. -We see similar effects when we have to run through full *code - build - deploy* cycles to see the effects of our work in cloud development. And it's not only the turnaround times for individual developers, it's also the runtime for tests, the operating costs induced by both, the impact on support (local setups allow to reproduce things, complex setups don't), up to severe resilience issues (whenever a cloud service isn't available development stops for whole teams). +We see similar effects when running through full *code - build - deploy - start* cycles to see the effects of incremental changes in traditional cloud development setups. And it's not only the turnaround times for individual developers, it's also the runtime for tests, the operating costs induced by both, the impact on support (local setups allow to reproduce things, complex setups don't), up to severe resilience issues (whenever a cloud service isn't available development stops for whole teams). Here's a very rough comparison from a real world example: -| Aspect | Cloud-Based | Local Inner Loop | Gain | +| Aspect | Overly Cloud-Based | Local Inner Loop | Gain | |-----------------------------------|:-----------:|:----------------:|:------:| | Turnaround times | 6+ min | 2 sec | > 100x | | Test pipelines | 40+ min | 4 min | > 10x | From d476a32e114a40678a4fe277503a9b80b6b4bb13 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Thu, 5 Feb 2026 08:36:03 +0100 Subject: [PATCH 431/439] polishing --- guides/integration/inner-loops.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/integration/inner-loops.md b/guides/integration/inner-loops.md index 06b84e0c3a..ccb263ecdc 100644 --- a/guides/integration/inner-loops.md +++ b/guides/integration/inner-loops.md @@ -16,7 +16,7 @@ CAP promotes fast inner-loop development by allowing us to easily swap productio Many of us likely remember that turntable thing in the playgrounds: stay close to the center – the inner loop –, and it rotates at ultimate speed, lean out and it slows down. -We see similar effects when running through full *code - build - deploy - start* cycles to see the effects of incremental changes in traditional cloud development setups. And it's not only the turnaround times for individual developers, it's also the runtime for tests, the operating costs induced by both, the impact on support (local setups allow to reproduce things, complex setups don't), up to severe resilience issues (whenever a cloud service isn't available development stops for whole teams). +We see similar effects when running through full *code - build - deploy - start* cycles to see the effects of incremental changes in overly cloud-based development models. And it's not only the turnaround times for individual developers, it's also the runtime for tests, the operating costs induced by both, the impact on support (local setups allow to reproduce things, complex setups don't), up to severe resilience issues (whenever a cloud service isn't available development stops for whole teams). Here's a very rough comparison from a real world example: From 351c27b51196056470ce998047f4bce500659bba Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Thu, 5 Feb 2026 08:50:43 +0100 Subject: [PATCH 432/439] polishing --- guides/integration/inner-loops.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/guides/integration/inner-loops.md b/guides/integration/inner-loops.md index ccb263ecdc..0203e50912 100644 --- a/guides/integration/inner-loops.md +++ b/guides/integration/inner-loops.md @@ -21,12 +21,12 @@ We see similar effects when running through full *code - build - deploy - start* Here's a very rough comparison from a real world example: | Aspect | Overly Cloud-Based | Local Inner Loop | Gain | -|-----------------------------------|:-----------:|:----------------:|:------:| -| Turnaround times | 6+ min | 2 sec | > 100x | -| Test pipelines | 40+ min | 4 min | > 10x | -| Support time to reproduce/resolve | hours, days | minutes | > 10x | -| Resilience re service outages | poor | ultimate | | -| Operating costs / TCD | high | low | | +|-----------------------------------|:------------------:|:----------------:|:------:| +| Turnaround times | 6+ min | 2 sec | > 100x | +| Test pipelines | 40+ min | 4 min | > 10x | +| Support time to reproduce/resolve | hours, days | minutes | > 10x | +| Resilience re service outages | poor | ultimate | high | +| Operating costs / TCD | high | low | high | From 1ece44cf367b808cb04da0a94fdfb18969f58113 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Thu, 5 Feb 2026 08:52:53 +0100 Subject: [PATCH 433/439] wording --- guides/integration/inner-loops.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guides/integration/inner-loops.md b/guides/integration/inner-loops.md index 0203e50912..5108d8444f 100644 --- a/guides/integration/inner-loops.md +++ b/guides/integration/inner-loops.md @@ -1,7 +1,7 @@ # Inner-Loop Development -CAP promotes fast inner-loop development by allowing us to easily swap production-grade services with local mocks during development, without any changes to CDS models nor implementations. Similar in the context of application service integration, imported APIs of remote services and applications can be mocked out of the box in consuming applications. This in turn greatly promotes decoupled parallel development of distributed teams working on different microservices. +CAP promotes fast inner-loop development by allowing us to easily swap production-grade services with local mocks during development, without any changes to CDS models nor implementations. Similar in the context of application service integration, imported APIs of remote services and applications can be mocked out of the box in consuming applications. This in turn greatly promotes decoupled parallel development across distributed teams working on different microservices. {.abstract} [[toc]] From 145712bee1d9a4b0f498757c484fae28804a80b2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Feb 2026 09:26:35 +0100 Subject: [PATCH 434/439] Update dependency cspell to v9.6.4 (#2359) 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/) | |---|---|---|---| | [cspell](https://cspell.org/) ([source](https://redirect.github.com/streetsidesoftware/cspell/tree/HEAD/packages/cspell)) | [`9.6.3` → `9.6.4`](https://renovatebot.com/diffs/npm/cspell/9.6.3/9.6.4) | ![age](https://developer.mend.io/api/mc/badges/age/npm/cspell/9.6.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/cspell/9.6.3/9.6.4?slim=true) | --- ### Release Notes
streetsidesoftware/cspell (cspell) ### [`v9.6.4`](https://redirect.github.com/streetsidesoftware/cspell/blob/HEAD/packages/cspell/CHANGELOG.md#v964-2026-02-04) [Compare Source](https://redirect.github.com/streetsidesoftware/cspell/compare/v9.6.3...v9.6.4) ##### Fixes
fix: add --no-dictionary option to lint command (#​8514) ##### fix: add --no-dictionary option to lint command ([#​8514](https://redirect.github.com/streetsidesoftware/cspell/pull/8514))
--- ### 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 | 230 +++++++++++++++++++++++----------------------- 1 file changed, 115 insertions(+), 115 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1ea978dc4..c8681a7292 100644 --- a/package-lock.json +++ b/package-lock.json @@ -369,9 +369,9 @@ } }, "node_modules/@cspell/cspell-bundled-dicts": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.6.3.tgz", - "integrity": "sha512-0Ibx+ynlSd8wMAoUmc2Ck4SDN27eJheM45aCmCvCA8saROwkDh7j8zBz7aTTUTtFN+pcotJoNxr71LLD+KXhgQ==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-9.6.4.tgz", + "integrity": "sha512-OIiPQuB7XQ6rnUv4KaCwHr9vNwbh6VZ4GfgQjcThT0oz0hkL6E5Ar3tq54K9jyqE9ylcHqpRuXUgnKgio6Hlig==", "dev": true, "license": "MIT", "dependencies": { @@ -440,22 +440,22 @@ } }, "node_modules/@cspell/cspell-json-reporter": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.6.3.tgz", - "integrity": "sha512-4jhqXKGCFAQXomtk4/Ldy/GiGEocC61v8GISiUgn1mH+HPgEvkJijyxKRNFYvzXOoJr4y0KrkGBoKk5FI7cipw==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-json-reporter/-/cspell-json-reporter-9.6.4.tgz", + "integrity": "sha512-rGYSDnDWACrUyovfN8M/LM8CCFSKjYd2kehbNS7YMPk0Jk+rLk6sgt5WYu3ty45otXCkiO07bjUo/81wBLet7A==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "9.6.3" + "@cspell/cspell-types": "9.6.4" }, "engines": { "node": ">=20" } }, "node_modules/@cspell/cspell-performance-monitor": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-9.6.3.tgz", - "integrity": "sha512-Y1I0wg7MUTouubREyPeTJe2dKNbBZPBnd6kDNcVet5DRZ3Cck2udS9m1a6DhJO2sGQgHTBULPDBEUU5tcAZ+nQ==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-performance-monitor/-/cspell-performance-monitor-9.6.4.tgz", + "integrity": "sha512-exuqxV1IVfZkasg57ZjUbaHeZDd6Mdbsbe5FBT3+XaVnRij+wpY2oEW9+kIOL5MOQE3bgQKgu37iMtA1NlCrGA==", "dev": true, "license": "MIT", "engines": { @@ -463,9 +463,9 @@ } }, "node_modules/@cspell/cspell-pipe": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.6.3.tgz", - "integrity": "sha512-Q0M58JbgHWOOOYvSyBodEysXLP5t8Q58Ff08msj2/XxRFpowR4iIUyfg3k+/d06uyOy89l+RD5AmyTEa5410xg==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-pipe/-/cspell-pipe-9.6.4.tgz", + "integrity": "sha512-vVxajTG9Ko01oHk8HPsMLajcLrd9AfkOk6vdgFI4FD7ZPq1CY0hfTmfmJ8bzZ4/QkqXglTvePdSgHQVJeltwWw==", "dev": true, "license": "MIT", "engines": { @@ -473,9 +473,9 @@ } }, "node_modules/@cspell/cspell-resolver": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.6.3.tgz", - "integrity": "sha512-yUMTC8vl+LeRcIeXRrxn0GXL+rurf4OR3uyqZbG6bbtuttvq/Icleeibv9Wts+n700HLp+sVXJ7BrCn0Ehobsw==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-resolver/-/cspell-resolver-9.6.4.tgz", + "integrity": "sha512-3xsgZEqqH9Uj8ZYLBnWbnsHz8wphgaeuWKcNDqgwoMjvwTMQLGoXjHht8Jx5yxd2e080lB7fJax8TaBdCzmFFA==", "dev": true, "license": "MIT", "dependencies": { @@ -486,9 +486,9 @@ } }, "node_modules/@cspell/cspell-service-bus": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.6.3.tgz", - "integrity": "sha512-gDUDq0PcMcdSG/5HwaQzkptn29E0zCWJUqmP0W/4scSC80AVh/8hgws4tuqv1GWvr4MiBZhIbUEO4f3Pc58OYQ==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-service-bus/-/cspell-service-bus-9.6.4.tgz", + "integrity": "sha512-oGNEzP1gJ43rLklJQjOk5PsfX0mZkLjV19djGptb9xZQeC2qAUxnaAbZtWt5CE8ni2iiTaRmgNRbUqAhRCnjew==", "dev": true, "license": "MIT", "engines": { @@ -496,9 +496,9 @@ } }, "node_modules/@cspell/cspell-types": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.6.3.tgz", - "integrity": "sha512-oDTzZ2kG/jJk3TaupESUckDraGJbBpRBEW1xgTrWyIU+uGwdmMXPcGr9XZq9dRS5Zxm01nTgLwxpVM/3BVTvWQ==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-types/-/cspell-types-9.6.4.tgz", + "integrity": "sha512-lf6d+BdMkJIFCxx2FpajLpqVGGyaGUNFU6jhEM6QUPeGuoA5et2kJXrL0NSY2uWLOVyYYc/FPjzlbe8trA9tBQ==", "dev": true, "license": "MIT", "engines": { @@ -506,13 +506,13 @@ } }, "node_modules/@cspell/cspell-worker": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/cspell-worker/-/cspell-worker-9.6.3.tgz", - "integrity": "sha512-zZccf1jLSrqIvlYAqwnnBi4RrLVfSEfWT4eYpiyIzHXHMzWnkUXEstQCG6LFK4L9A44M/w9s8szi7R4DLBzKsA==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/cspell-worker/-/cspell-worker-9.6.4.tgz", + "integrity": "sha512-anacKDOZzDfPzuDeFOXGI2tFBYiRRCSnIZP/AOyJ9zTvEQcqq5p/ak18nJ5OQyDr2NG7ovJiCDT5YNiH2Vdg/g==", "dev": true, "license": "MIT", "dependencies": { - "cspell-lib": "9.6.3" + "cspell-lib": "9.6.4" }, "engines": { "node": ">=20.18" @@ -944,13 +944,13 @@ "license": "MIT" }, "node_modules/@cspell/dynamic-import": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.6.3.tgz", - "integrity": "sha512-J2RArbv02H0fZCZxfGe2RjhEBFrcBlWgEESh2kDdF3CyoXBoPneevS5L3X4dk2XpOR0LU6bCJEsVIuzJqoFDbw==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/dynamic-import/-/dynamic-import-9.6.4.tgz", + "integrity": "sha512-1VnL9ahT3s17DLWl4MeO1pYg7zcVT3X9cKynI2/U86zNK5xMGS5icvjp7X65tsCAVNcWOtkqVFfrxi7kWxn67g==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.6.3", + "@cspell/url": "9.6.4", "import-meta-resolve": "^4.2.0" }, "engines": { @@ -958,9 +958,9 @@ } }, "node_modules/@cspell/filetypes": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.6.3.tgz", - "integrity": "sha512-FocAActFpUanhQblokOQYlsV3yt3xC6FNMnziGURG9f1a5LYPGwmb6v40qkkhsTwK8L9L7Ai1KRtPJ3zyowNCA==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/filetypes/-/filetypes-9.6.4.tgz", + "integrity": "sha512-a1aZ/8vGnhTknxTukjzo3m8CISyHW2MWnbedywg5SDEl5RMJitmzX90QZiQdSvEcqzqmtoAgSEZNBT2LX2gIKg==", "dev": true, "license": "MIT", "engines": { @@ -968,9 +968,9 @@ } }, "node_modules/@cspell/rpc": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/rpc/-/rpc-9.6.3.tgz", - "integrity": "sha512-D8ouhYPOZR11CI66GKsFu/05sSTSjxwfyUsTZ0m7lQOcILxkJ0P/y4DJ9HffFT6uY62mEbxDeibvlfCLBzWO4w==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/rpc/-/rpc-9.6.4.tgz", + "integrity": "sha512-vGI1788Rx5Yml9N1/pD4zGd8Vrchi2Y01ADf9NiiOaNVVdf4PU1GCssLCsiIzhYQneErpQ8pJi/mS2F/QMZbRA==", "dev": true, "license": "MIT", "engines": { @@ -978,9 +978,9 @@ } }, "node_modules/@cspell/strong-weak-map": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.6.3.tgz", - "integrity": "sha512-2OmE4RCSJG1mAfVsZqEvThJaQY//rYjDBycHfb1pfLb3KlV+O5jNKlYrI6E/+JpiTb1cI9MnzIRw6uzTPgCN1g==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/strong-weak-map/-/strong-weak-map-9.6.4.tgz", + "integrity": "sha512-AQrUbA0JUOEQgwItnfUQ6Ydk0hWY/uV3VhLwZWyrnT9eiQynmTnRTHtOCkkSl9+M4P0N4Raa2eGFRLcPAFksaw==", "dev": true, "license": "MIT", "engines": { @@ -988,9 +988,9 @@ } }, "node_modules/@cspell/url": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.6.3.tgz", - "integrity": "sha512-k+o5Dp8Hp8mjex8Lpe9m9B4LsrMoEzAaaYfvagUPQW1BKPwi3ugkH9YkC7uUOvzD6hOWq77WJZ2t946zY2NDSg==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/@cspell/url/-/url-9.6.4.tgz", + "integrity": "sha512-h6VMlb7bDyGJfwLtipxxtHlT+ojzUXZz14AqZ/NEzY3LfOhfJTGpRcWLYFsgG/L0Ma4qjsYbPJt/Sj1C14j0VA==", "dev": true, "license": "MIT", "engines": { @@ -3907,29 +3907,29 @@ } }, "node_modules/cspell": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.6.3.tgz", - "integrity": "sha512-eGfq/qCJXDNLtqvwo3RFOJ8ECQD45NSEqlEdxJPdMlu/MA7YXSm4QptkJTybdodZmQpIGNpAz8UtVjKwhseqZg==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/cspell/-/cspell-9.6.4.tgz", + "integrity": "sha512-rZJmgcyBGKX3KcJ3KC9JYVHeKhDEVbmCheSp8eRGMYw6MCG9o7FHqQjGA/u4lEu4A0psr7ACP/5ym/QHyntRbA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-json-reporter": "9.6.3", - "@cspell/cspell-performance-monitor": "9.6.3", - "@cspell/cspell-pipe": "9.6.3", - "@cspell/cspell-types": "9.6.3", - "@cspell/cspell-worker": "9.6.3", - "@cspell/dynamic-import": "9.6.3", - "@cspell/url": "9.6.3", + "@cspell/cspell-json-reporter": "9.6.4", + "@cspell/cspell-performance-monitor": "9.6.4", + "@cspell/cspell-pipe": "9.6.4", + "@cspell/cspell-types": "9.6.4", + "@cspell/cspell-worker": "9.6.4", + "@cspell/dynamic-import": "9.6.4", + "@cspell/url": "9.6.4", "ansi-regex": "^6.2.2", "chalk": "^5.6.2", "chalk-template": "^1.1.2", "commander": "^14.0.3", - "cspell-config-lib": "9.6.3", - "cspell-dictionary": "9.6.3", - "cspell-gitignore": "9.6.3", - "cspell-glob": "9.6.3", - "cspell-io": "9.6.3", - "cspell-lib": "9.6.3", + "cspell-config-lib": "9.6.4", + "cspell-dictionary": "9.6.4", + "cspell-gitignore": "9.6.4", + "cspell-glob": "9.6.4", + "cspell-io": "9.6.4", + "cspell-lib": "9.6.4", "fast-json-stable-stringify": "^2.1.0", "flatted": "^3.3.3", "semver": "^7.7.3", @@ -3947,13 +3947,13 @@ } }, "node_modules/cspell-config-lib": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.6.3.tgz", - "integrity": "sha512-gQnpAzyf7rPaIb2hjVDtkvfhNc+7hAeHjK+RFAHj7fXiMfdPOWMxnl5IZBOdd9aYHZzVbxYkeyvJbLwF4M3YSg==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/cspell-config-lib/-/cspell-config-lib-9.6.4.tgz", + "integrity": "sha512-MecJNR9bIlcPBhyZFsXP6Q2n8qQ2IR9N9HiIz0yh0gBNVydp3LR5JITP5Ji8m7hexmZzVeoXms/dVN74XbS95g==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-types": "9.6.3", + "@cspell/cspell-types": "9.6.4", "comment-json": "^4.5.1", "smol-toml": "^1.6.0", "yaml": "^2.8.2" @@ -3963,16 +3963,16 @@ } }, "node_modules/cspell-dictionary": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.6.3.tgz", - "integrity": "sha512-y5te3Wu89WIdUYPYqMKUliviFxSu7xImuEacct6f2XFQd2c4G9vNduRMJjHKJT49cwkRM/fZKtOzJyPy8jzQ4g==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/cspell-dictionary/-/cspell-dictionary-9.6.4.tgz", + "integrity": "sha512-Ik9ZQVqV/fJfMt5X6IkC7yHGVH46/qjcqCNWwrMSwvROLM3SemNxxZoLvh0wi0GXz9WF1lHcxLJVdeKUk6QB8g==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-performance-monitor": "9.6.3", - "@cspell/cspell-pipe": "9.6.3", - "@cspell/cspell-types": "9.6.3", - "cspell-trie-lib": "9.6.3", + "@cspell/cspell-performance-monitor": "9.6.4", + "@cspell/cspell-pipe": "9.6.4", + "@cspell/cspell-types": "9.6.4", + "cspell-trie-lib": "9.6.4", "fast-equals": "^6.0.0" }, "engines": { @@ -3980,15 +3980,15 @@ } }, "node_modules/cspell-gitignore": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.6.3.tgz", - "integrity": "sha512-S6XAddSjGEP7opCfEkhWaTnNVCI8ypdyZWgOW/gUW3VMpq8zK7OJ/ddyOLUCIMW1Qwtkx7X4Mf06xJSBWEjKjQ==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/cspell-gitignore/-/cspell-gitignore-9.6.4.tgz", + "integrity": "sha512-a8asE9BsjJgJ506WUGh5VHrTdVEE8hWELjCJB2atPrW6iY5e4aCIugy0gkRC1ZH9/TseadlmMLrFzHUkJUjzsg==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.6.3", - "cspell-glob": "9.6.3", - "cspell-io": "9.6.3" + "@cspell/url": "9.6.4", + "cspell-glob": "9.6.4", + "cspell-io": "9.6.4" }, "bin": { "cspell-gitignore": "bin.mjs" @@ -3998,13 +3998,13 @@ } }, "node_modules/cspell-glob": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.6.3.tgz", - "integrity": "sha512-tcyQP0LXoAEExVzWZMxW4afyo7w/8nea0wskoWQ4G+k36Gk6P52CARARFymHCH4IZLbbybZuLoVDxQ6OgIm3fQ==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/cspell-glob/-/cspell-glob-9.6.4.tgz", + "integrity": "sha512-253VrjbR8QU15h8GtpDQLX5Ti9uNSuNod2T7f8YEElQOb9I/kUXoCj3Cq4P390IC99klqSHIDxHsxd77ex19lA==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/url": "9.6.3", + "@cspell/url": "9.6.4", "picomatch": "^4.0.3" }, "engines": { @@ -4012,14 +4012,14 @@ } }, "node_modules/cspell-grammar": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.6.3.tgz", - "integrity": "sha512-26Pn/zo9hY3/5hGkM4tpV/Nnn4Op1J0DGnA34vA/lDBGtDOFexUEcUHZOieuNtCvZO735ltZPrP3zVxts1CwRg==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/cspell-grammar/-/cspell-grammar-9.6.4.tgz", + "integrity": "sha512-rvZyTB45/XSRWx7eAsrvTTAZvBTREr/2G2JWVMdqrptFyq1XReAKHhw/x1HJkNgWC9LKAK3bVQJpjLsNG37U9A==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-pipe": "9.6.3", - "@cspell/cspell-types": "9.6.3" + "@cspell/cspell-pipe": "9.6.4", + "@cspell/cspell-types": "9.6.4" }, "bin": { "cspell-grammar": "bin.mjs" @@ -4029,43 +4029,43 @@ } }, "node_modules/cspell-io": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.6.3.tgz", - "integrity": "sha512-dZYowJVTWPEjik3y/UrJnX/3PG20N1jgnP//lwX6cLGtHjv05W89lnHxsh5Suzxf3mkN/YZ1JUgmxdjj9HduNw==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/cspell-io/-/cspell-io-9.6.4.tgz", + "integrity": "sha512-bmvJ4yn5QK2FZWTkZA4sx2qJqIi8BrUUUV7W209drSwkYjhJtXqP0RyF6Qx4Xuu2D1s0UilEtO5Jd+E9UJkQ6w==", "dev": true, "license": "MIT", "dependencies": { - "@cspell/cspell-service-bus": "9.6.3", - "@cspell/url": "9.6.3" + "@cspell/cspell-service-bus": "9.6.4", + "@cspell/url": "9.6.4" }, "engines": { "node": ">=20" } }, "node_modules/cspell-lib": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.6.3.tgz", - "integrity": "sha512-LFZsCWJX5EjcD0EzF/tb9Sx1d/nKEW6436EDqqb5u/Vxr86LxgX9RbhwkHI7e0XyX3YV64QzPrYGvEkXEuGsCQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspell/cspell-bundled-dicts": "9.6.3", - "@cspell/cspell-performance-monitor": "9.6.3", - "@cspell/cspell-pipe": "9.6.3", - "@cspell/cspell-resolver": "9.6.3", - "@cspell/cspell-types": "9.6.3", - "@cspell/dynamic-import": "9.6.3", - "@cspell/filetypes": "9.6.3", - "@cspell/rpc": "9.6.3", - "@cspell/strong-weak-map": "9.6.3", - "@cspell/url": "9.6.3", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/cspell-lib/-/cspell-lib-9.6.4.tgz", + "integrity": "sha512-fUodKcIHTwvokuowB25XyFzBxlk73yj1QRw2por3BxDz9fAim1zAIohAPAnGuzj3LowYnTMjHLYE7RFDUSxy5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspell/cspell-bundled-dicts": "9.6.4", + "@cspell/cspell-performance-monitor": "9.6.4", + "@cspell/cspell-pipe": "9.6.4", + "@cspell/cspell-resolver": "9.6.4", + "@cspell/cspell-types": "9.6.4", + "@cspell/dynamic-import": "9.6.4", + "@cspell/filetypes": "9.6.4", + "@cspell/rpc": "9.6.4", + "@cspell/strong-weak-map": "9.6.4", + "@cspell/url": "9.6.4", "clear-module": "^4.1.2", - "cspell-config-lib": "9.6.3", - "cspell-dictionary": "9.6.3", - "cspell-glob": "9.6.3", - "cspell-grammar": "9.6.3", - "cspell-io": "9.6.3", - "cspell-trie-lib": "9.6.3", + "cspell-config-lib": "9.6.4", + "cspell-dictionary": "9.6.4", + "cspell-glob": "9.6.4", + "cspell-grammar": "9.6.4", + "cspell-io": "9.6.4", + "cspell-trie-lib": "9.6.4", "env-paths": "^4.0.0", "gensequence": "^8.0.8", "import-fresh": "^3.3.1", @@ -4079,16 +4079,16 @@ } }, "node_modules/cspell-trie-lib": { - "version": "9.6.3", - "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.6.3.tgz", - "integrity": "sha512-bTlL3UjcBJyQXx67RMFcgHh0AXKd2w6Zw8iZkAcU7KVgAgRpGwCiF3LJLHignnMm+Pn8D3Xrx0raENaMh4uGaQ==", + "version": "9.6.4", + "resolved": "https://registry.npmjs.org/cspell-trie-lib/-/cspell-trie-lib-9.6.4.tgz", + "integrity": "sha512-JKwyRtyybbaTrixwI1OgU5Hvva2Z5zHVWl92WBa9U7KijAyiD/Ehp3T3DCYuBwGks7egw7MgWPySkXXnpme6mw==", "dev": true, "license": "MIT", "engines": { "node": ">=20" }, "peerDependencies": { - "@cspell/cspell-types": "9.6.3" + "@cspell/cspell-types": "9.6.4" } }, "node_modules/cssesc": { From 1261d3199631bcf30532caa65084095b355d6580 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Thu, 5 Feb 2026 10:32:56 +0100 Subject: [PATCH 435/439] Refined menu structure and titles in security --- guides/security/_menu.md | 2 +- guides/security/cap-users.md | 3 +-- guides/security/overview.md | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/guides/security/_menu.md b/guides/security/_menu.md index 2c5bcadfdf..00050967e2 100644 --- a/guides/security/_menu.md +++ b/guides/security/_menu.md @@ -2,7 +2,7 @@ # [Concepts & Architecture](overview) # [Authentication](authentication) ## [Users & Roles](cap-users) -## [Principal Propagation](remote-authentication) +## [Outbound Authentication](remote-authentication) # [Authorization](authorization) # [Data Privacy](data-privacy) diff --git a/guides/security/cap-users.md b/guides/security/cap-users.md index 0a8eed1511..f6d567da81 100644 --- a/guides/security/cap-users.md +++ b/guides/security/cap-users.md @@ -19,7 +19,7 @@ status: released -# CAP-level Users { #cap-users } +# CAP-level Users & Roles { #cap-users } @@ -1752,4 +1752,3 @@ Prefer using [Remote Services](#remote-services) built on Cloud SDK rather than - **Don't choose entity attributes as AMS Attributes whose relevance is too small**. Such attributes should have a broad, domain-wide relevance and be applicable across multiple entities. Typically, only a limited number of attributes (less than 10) meet this criterion. Exposing entity-specific attributes as AMS attributes can lead to unnecessary complexity and reduced reusability. - diff --git a/guides/security/overview.md b/guides/security/overview.md index b760ffad73..3b60ec9a08 100644 --- a/guides/security/overview.md +++ b/guides/security/overview.md @@ -5,7 +5,7 @@ status: released uacp: Used as link target from SAP Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/9186ed9ab00842e1a31309ff1be38792.html --- -# Security Overview +# Overview of Security Concepts and Architecture {{ $frontmatter.synopsis }} From d1ddb984bfca3c14787b9bf0b1d0d7df96062ef9 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Thu, 5 Feb 2026 10:44:59 +0100 Subject: [PATCH 436/439] Publish link to data-federation --- guides/integration/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/integration/index.md b/guides/integration/index.md index a49403134d..0042f3e2a0 100644 --- a/guides/integration/index.md +++ b/guides/integration/index.md @@ -8,8 +8,8 @@ CAP applications integrate at multiple levels — from reusing services and data [CAP-level Service Integration](calesi.md) : Learn how to consume and expose services using CAP's built-in service integration features (Calesi), enabling seamless communication between services at the framework level. -[CAP-level Data Federation](data-federation.md) -: On top of CAP-level service integration, CAP provides advanced data federation capabilities out-of-the-box, including service-level replication, HANA virtual tables, synonyms, and SAP data products. +[CAP-level Data Federation](data-federation.md) +: On top of CAP-level service integration, CAP provides advanced data federation capabilities out-of-the-box, including service-level replication, HANA virtual tables, synonyms, and SAP data products. [Reuse and Compose](reuse-and-compose) : Explore in this guide how to reuse and compose enhanced solutions by reusing modular services from other projects, and adapt them to your needs with solution-specific projections and extensions. From 3637e7e006b2327351ee146814bbaabd24876eeb Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Thu, 5 Feb 2026 10:52:51 +0100 Subject: [PATCH 437/439] Link to inner-loop from index page --- guides/integration/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/guides/integration/index.md b/guides/integration/index.md index 0042f3e2a0..b304ac1f38 100644 --- a/guides/integration/index.md +++ b/guides/integration/index.md @@ -11,6 +11,9 @@ CAP applications integrate at multiple levels — from reusing services and data [CAP-level Data Federation](data-federation.md) : On top of CAP-level service integration, CAP provides advanced data federation capabilities out-of-the-box, including service-level replication, HANA virtual tables, synonyms, and SAP data products. +[Inner Loop Development](inner-loops.md) +: Decouple parallel development across distributed teams by swapping production-grade services with local mocks during development. In the context of application service integration, mock imported APIs of remote services in consuming applications. + [Reuse and Compose](reuse-and-compose) : Explore in this guide how to reuse and compose enhanced solutions by reusing modular services from other projects, and adapt them to your needs with solution-specific projections and extensions. From 51c6c8240cd0e201a0e8a50d1ea7253417a4eca1 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Thu, 5 Feb 2026 11:33:46 +0100 Subject: [PATCH 438/439] polished syntax diagram --- cds/assets/cxl/ref.drawio.svg | 110 ++-------------------------------- 1 file changed, 4 insertions(+), 106 deletions(-) diff --git a/cds/assets/cxl/ref.drawio.svg b/cds/assets/cxl/ref.drawio.svg index cfb78f48bc..159f1386a5 100644 --- a/cds/assets/cxl/ref.drawio.svg +++ b/cds/assets/cxl/ref.drawio.svg @@ -1,106 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - a scalar element is a primitive field (e.g., String, Integer, Decimal, Boolean, Date/Time, UUID) without nested structure or associations - - - - - - - a scalar element is a primitive field (e.g., String, Integer, Decimal, Boolean, Date/Time, UUID) without nested structure or associations - - - leaf element - - - - - - - - - - structured element - - - - - - - - - - association - - - - - - - - - - - infix filter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - - \ No newline at end of file + + + +a scalar element is a primitive field (e.g., String, Integer, Decimal, Boolean, Date/Time, UUID) without nested structure or associationsa scalar element is a primitive field (e.g., String, Integer, Decimal, Boolean, Date/Time, UUID) without nested structure or associationsleaf elementstructassociationinfix filter \ No newline at end of file From d3d4a066b32f082b05d425c1d85fe2217eb12364 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Thu, 5 Feb 2026 14:28:11 +0100 Subject: [PATCH 439/439] Fix cxl diag in dark mode --- cds/assets/cxl/ref.drawio.svg | 114 ++++++++++++++++++++++++++++++++-- 1 file changed, 110 insertions(+), 4 deletions(-) diff --git a/cds/assets/cxl/ref.drawio.svg b/cds/assets/cxl/ref.drawio.svg index 159f1386a5..c08297d0bb 100644 --- a/cds/assets/cxl/ref.drawio.svg +++ b/cds/assets/cxl/ref.drawio.svg @@ -1,4 +1,110 @@ - - - -a scalar element is a primitive field (e.g., String, Integer, Decimal, Boolean, Date/Time, UUID) without nested structure or associationsa scalar element is a primitive field (e.g., String, Integer, Decimal, Boolean, Date/Time, UUID) without nested structure or associationsleaf elementstructassociationinfix filter \ No newline at end of file + + + + + + + + + + + + + + + + + + a scalar element is a primitive field (e.g., String, Integer, Decimal, Boolean, Date/Time, UUID) without nested structure or associations + + + + + + + a scalar element is a primitive field (e.g., String, Integer, Decimal, Boolean, Date/Time, UUID) without nested structure or associations + + + leaf element + + + + + + + + + + struct + + + + + + + + + + association + + + + + + + + + + + infix filter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file