From d6b2b3625eb741be481c1e69bac7f68b80f0135b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:14:15 +0200 Subject: [PATCH 01/49] chore: Update CLI texts (#2749) 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 | 2 +- tools/assets/help/cds-version.out.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/assets/help/cds-version-md.out.md b/tools/assets/help/cds-version-md.out.md index 2e4e8b5e9..a26485020 100644 --- a/tools/assets/help/cds-version-md.out.md +++ b/tools/assets/help/cds-version-md.out.md @@ -4,7 +4,7 @@ | Package | Version | Location | | -------------------- | ------- | ------------------------------------------------------------------ | - | @sap/cds-dk (global) | 10.0.3 | .../node_modules/@sap/cds-dk | + | @sap/cds-dk (global) | 10.0.4 | .../node_modules/@sap/cds-dk | | @sap/cds | 10.0.3 | .../node_modules/@sap/cds | | @sap/cds-compiler | 7.0.1 | .../node_modules/@sap/cds-compiler | | @sap/cds-fiori | 2.3.0 | .../node_modules/@sap/cds-fiori | diff --git a/tools/assets/help/cds-version.out.md b/tools/assets/help/cds-version.out.md index b3bb48b31..0ea03b648 100644 --- a/tools/assets/help/cds-version.out.md +++ b/tools/assets/help/cds-version.out.md @@ -2,7 +2,7 @@
> cds version - @sap/cds-dk (global) 10.0.3 .../node_modules/@sap/cds-dk + @sap/cds-dk (global) 10.0.4 .../node_modules/@sap/cds-dk @sap/cds 10.0.3 .../node_modules/@sap/cds @sap/cds-compiler 7.0.1 .../node_modules/@sap/cds-compiler @sap/cds-fiori 2.3.0 .../node_modules/@sap/cds-fiori From 7abbffc43faf6a34d825d68537199a5cf6e5e6fa Mon Sep 17 00:00:00 2001 From: ecklie <52252271+ecklie@users.noreply.github.com> Date: Thu, 16 Jul 2026 11:38:12 +0200 Subject: [PATCH 02/49] fix typos in tms docu (#2752) --- guides/multitenancy/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guides/multitenancy/index.md b/guides/multitenancy/index.md index 043093c2f..1e23ec6f7 100644 --- a/guides/multitenancy/index.md +++ b/guides/multitenancy/index.md @@ -928,9 +928,9 @@ To group the tenant containers of many applications or microservices in a common **Option 1: Configure the same `hana_tenant_prefix`** : You can configure the same [`hana_tenant_prefix`](#mandatory-specify-a-unique-prefix-for-the-sap-hana-tenant-name) many applications or microservices. With that, the SAP HANA tenant ID is generated in the same way for each subscriber tenant. -: If you choose this options, the following preconditions need to be met +: If you choose this option, the following preconditions need to be met - The subscriber tenant ID (BTP tenant ID) needs to be the same for all applications or microservices. -- All applications or microservices need to use the [same database](#configure-mtxs-for-tenant-management-service). +- All applications or microservices need to use the [same database](#configure-mtxs-for-tenant-management-service) for the same subscriber tenant. **Option 2: Pass the SAP HANA Tenant ID with a Subscription** From ccd9f53a9b3983165334a88491b10346672eece0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jul 2026 17:20:56 +0200 Subject: [PATCH 03/49] Update dependency adm-zip to ^0.6.0 (#2745) 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/) | |---|---|---|---| | [adm-zip](https://redirect.github.com/cthackers/adm-zip) | [`^0.5.10` → `^0.6.0`](https://renovatebot.com/diffs/npm/adm-zip/0.5.18/0.6.0) |  |  | --- ### Release Notes--- ### Configuration 📅 **Schedule**: (UTC) - 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 | 14 +++++++------- package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index c088223cc..b38443caf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@capire/docs", - "version": "2026.6.0", + "version": "2026.6.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@capire/docs", - "version": "2026.6.0", + "version": "2026.6.1", "license": "SEE LICENSE IN LICENSE", "devDependencies": { "@cap-js/cds-typer": "^0", @@ -20,7 +20,7 @@ "@types/adm-zip": ">=0.5.0", "@types/express": "latest", "@typescript-eslint/parser": "^8.0.0", - "adm-zip": "^0.5.10", + "adm-zip": "^0.6.0", "express": "^5", "fflate": "^0.8.2", "globals": "^17.4.0", @@ -2966,13 +2966,13 @@ } }, "node_modules/adm-zip": { - "version": "0.5.18", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.18.tgz", - "integrity": "sha512-ufJnssQGbxzLNS1Ho9bCtX4rQKCCvoVuDLHoJyc3F9dOGDB4BkWs2Ci0kv53lqocAEQ/Cbi+I2XCsNYGqVYqng==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.6.0.tgz", + "integrity": "sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==", "dev": true, "license": "MIT", "engines": { - "node": ">=12.0" + "node": ">=14.0" } }, "node_modules/ajv": { diff --git a/package.json b/package.json index 033b51ba9..d108cd7e8 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@types/adm-zip": ">=0.5.0", "@types/express": "latest", "@typescript-eslint/parser": "^8.0.0", - "adm-zip": "^0.5.10", + "adm-zip": "^0.6.0", "express": "^5", "fflate": "^0.8.2", "globals": "^17.4.0", From 5b5f030d1a093e5fa83ab5db3dc9839feddb19be Mon Sep 17 00:00:00 2001 From: Christian Georgicthackers/adm-zip (adm-zip)
### [`v0.6.0`](https://redirect.github.com/cthackers/adm-zip/blob/HEAD/history.md#060--2026-07-10) [Compare Source](https://redirect.github.com/cthackers/adm-zip/compare/v0.5.18...v0.6.0) \================== Security - Fixed CVE-2026-39244: a crafted archive declaring a huge uncompressed size could force an unbounded `Buffer.alloc` (memory exhaustion / DoS) before any validation. Allocation is now bounded by the data actually present — STORED output is sized from the real bytes, DEFLATED output is grown by the inflater and capped at the declared size ([#568](https://redirect.github.com/cthackers/adm-zip/issues/568)) - Hardened the internal entry-name lookup table against object injection: entry names come from untrusted archives, and a name such as `__proto__` previously resolved to `Object.prototype`, crashing `addFile` and hiding the entry from `getEntry`/`readFile`. The table is now prototype-less Bug fixes - Fixed a regression (0.5.15) that rejected valid archives using a data descriptor (general-purpose bit 3). The payload is now validated against the authoritative central-directory CRC instead of requiring/parsing the trailing descriptor ([#548](https://redirect.github.com/cthackers/adm-zip/issues/548), [#533](https://redirect.github.com/cthackers/adm-zip/issues/533), [#554](https://redirect.github.com/cthackers/adm-zip/issues/554)) - Fixed `extractAllTo`/`extractAllToAsync` not restoring directory permissions with `keepOriginalPermission`; directory modes are applied after their contents are written, deepest path first, and no longer lock the extractor out of a restrictive directory ([#530](https://redirect.github.com/cthackers/adm-zip/issues/530)) - Fixed infinite recursion in `addLocalFolder` when a folder contains a symlink pointing back to an ancestor (e.g. workspace `node_modules`); the walk now tracks resolved real paths and skips already-visited directories ([#541](https://redirect.github.com/cthackers/adm-zip/issues/541)) - Fixed an uncaught exception (`ERR_INVALID_ARG_TYPE`) that crashed the process when `writeFileToAsync` could not open the target file (bad permissions, invalid filename, exhausted file descriptors); write failures are now reported through the callback and write errors are no longer silently swallowed ([#470](https://redirect.github.com/cthackers/adm-zip/issues/470), [#459](https://redirect.github.com/cthackers/adm-zip/issues/459), [#402](https://redirect.github.com/cthackers/adm-zip/issues/402)) - Fixed directory entries reporting an empty `name` (e.g. `a/b/c/` now returns `c`) ([#466](https://redirect.github.com/cthackers/adm-zip/issues/466)) - Fixed `extractEntryTo` flattening subdirectories when `maintainEntryPath` is false; the structure below the extracted directory is now preserved instead of collapsing (and overwriting) files by basename ([#306](https://redirect.github.com/cthackers/adm-zip/issues/306)) - Fixed a failed `utimes` aborting extraction; setting the modification time is now best-effort and never fails extraction of already-written content ([#379](https://redirect.github.com/cthackers/adm-zip/issues/379)) - Fixed `test()` always returning false for any archive containing a file (it indexed the entries array with an entry object instead of reading the entry); it now correctly verifies each entry's CRC Performance - Faster entry sorting when writing archives with many entries: names are decoded once instead of on every comparison (about 6× faster sort for large archives) Added - Bundled TypeScript type definitions (`types.d.ts`), so `@types/adm-zip` is no longer required Notes - Behavior change: `extractEntryTo(dir, target, /* maintainEntryPath */ false)` now preserves subdirectories beneath the extracted directory rather than flattening them - Behavior change: extraction no longer fails when the modification time cannot be setDate: Fri, 17 Jul 2026 17:09:30 +0200 Subject: [PATCH 04/49] chore: vitepress 2.0.0-alpha.18 (#2755) --- .vitepress/config.js | 5 - package-lock.json | 1854 +++++++++--------------------------------- package.json | 3 +- 3 files changed, 400 insertions(+), 1462 deletions(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index b2baa5b6a..6a69c765d 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -97,11 +97,6 @@ const config = defineConfig({ vite: { plugins: [...playground.plugins()], - esbuild: { - supported: { - 'top-level-await': true //browsers can handle top-level-await features in special cases - }, - }, build: { chunkSizeWarningLimit: 6000, // chunk for local search index dominates }, diff --git a/package-lock.json b/package-lock.json index b38443caf..5e8d4c260 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,9 +27,8 @@ "htmlparser2": "^12", "monaco-editor": "^0.55.1", "sass": "^1.62.1", - "vite": "^8", "vite-plugin-cds": "^0.3.1", - "vitepress": "2.0.0-alpha.17" + "vitepress": "2.0.0-alpha.18" } }, "node_modules/@babel/helper-string-parser": { @@ -210,448 +209,6 @@ "tslib": "^2.4.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -927,296 +484,89 @@ "markdown-it": "^14.2.0" }, "peerDependenciesMeta": { - "markdown-it": { - "optional": true - } - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", - "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@tybys/wasm-util": "^0.10.3" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1" - } - }, - "node_modules/@oxc-project/types": { - "version": "0.139.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", - "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", - "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.3", - "is-glob": "^4.0.3", - "node-addon-api": "^7.0.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.6", - "@parcel/watcher-darwin-arm64": "2.5.6", - "@parcel/watcher-darwin-x64": "2.5.6", - "@parcel/watcher-freebsd-x64": "2.5.6", - "@parcel/watcher-linux-arm-glibc": "2.5.6", - "@parcel/watcher-linux-arm-musl": "2.5.6", - "@parcel/watcher-linux-arm64-glibc": "2.5.6", - "@parcel/watcher-linux-arm64-musl": "2.5.6", - "@parcel/watcher-linux-x64-glibc": "2.5.6", - "@parcel/watcher-linux-x64-musl": "2.5.6", - "@parcel/watcher-win32-arm64": "2.5.6", - "@parcel/watcher-win32-ia32": "2.5.6", - "@parcel/watcher-win32-x64": "2.5.6" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", - "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", - "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", - "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", - "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", - "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", - "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "markdown-it": { + "optional": true + } } }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", - "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", - "cpu": [ - "arm64" - ], + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" + "dependencies": { + "@tybys/wasm-util": "^0.10.3" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" } }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", - "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", - "cpu": [ - "arm64" - ], + "node_modules/@oxc-project/types": { + "version": "0.139.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", "dev": true, - "libc": [ - "musl" - ], "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "url": "https://github.com/sponsors/Boshen" } }, - "node_modules/@parcel/watcher-linux-x64-glibc": { + "node_modules/@parcel/watcher": { "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", - "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", - "cpu": [ - "x64" - ], + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", "dev": true, - "libc": [ - "glibc" - ], + "hasInstallScript": true, "license": "MIT", "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" + }, "engines": { "node": ">= 10.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" } }, - "node_modules/@parcel/watcher-linux-x64-musl": { + "node_modules/@parcel/watcher-android-arm64": { "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", - "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { "node": ">= 10.0.0" @@ -1226,10 +576,10 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-win32-arm64": { + "node_modules/@parcel/watcher-darwin-arm64": { "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", - "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", "cpu": [ "arm64" ], @@ -1237,7 +587,7 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">= 10.0.0" @@ -1247,18 +597,18 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-win32-ia32": { + "node_modules/@parcel/watcher-darwin-x64": { "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", - "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", "cpu": [ - "ia32" + "x64" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "darwin" ], "engines": { "node": ">= 10.0.0" @@ -1268,10 +618,10 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@parcel/watcher-win32-x64": { + "node_modules/@parcel/watcher-freebsd-x64": { "version": "2.5.6", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", - "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", "cpu": [ "x64" ], @@ -1279,7 +629,7 @@ "license": "MIT", "optional": true, "os": [ - "win32" + "freebsd" ], "engines": { "node": ">= 10.0.0" @@ -1289,99 +639,14 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", - "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", - "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", - "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", - "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", - "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", - "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", - "cpu": [ - "arm64" - ], - "dev": true, "libc": [ "glibc" ], @@ -1391,15 +656,19 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", - "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", "cpu": [ - "arm64" + "arm" ], "dev": true, "libc": [ @@ -1411,15 +680,19 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", - "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", "cpu": [ - "ppc64" + "arm64" ], "dev": true, "libc": [ @@ -1431,19 +704,23 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", - "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", "cpu": [ - "s390x" + "arm64" ], "dev": true, "libc": [ - "glibc" + "musl" ], "license": "MIT", "optional": true, @@ -1451,13 +728,17 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", - "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", "cpu": [ "x64" ], @@ -1471,13 +752,17 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", - "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", "cpu": [ "x64" ], @@ -1491,13 +776,17 @@ "linux" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", - "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", "cpu": [ "arm64" ], @@ -1505,37 +794,22 @@ "license": "MIT", "optional": true, "os": [ - "openharmony" + "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", - "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "1.11.1", - "@emnapi/runtime": "1.11.1", - "@napi-rs/wasm-runtime": "^1.1.6" + "node": ">= 10.0.0" }, - "engines": { - "node": "^20.19.0 || >=22.12.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", - "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", "cpu": [ - "arm64" + "ia32" ], "dev": true, "license": "MIT", @@ -1544,13 +818,17 @@ "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", - "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", "cpu": [ "x64" ], @@ -1561,34 +839,17 @@ "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", - "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", - "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", - "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", "cpu": [ "arm64" ], @@ -1597,12 +858,15 @@ "optional": true, "os": [ "android" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", - "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", "cpu": [ "arm64" ], @@ -1611,12 +875,15 @@ "optional": true, "os": [ "darwin" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", - "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", "cpu": [ "x64" ], @@ -1625,26 +892,15 @@ "optional": true, "os": [ "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", - "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", - "cpu": [ - "arm64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", - "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", "cpu": [ "x64" ], @@ -1653,84 +909,36 @@ "optional": true, "os": [ "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", - "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", - "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", "cpu": [ "arm" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", - "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", - "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", "cpu": [ "arm64" ], "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", - "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", - "cpu": [ - "loong64" - ], - "dev": true, "libc": [ "glibc" ], @@ -1738,48 +946,17 @@ "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", - "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", - "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", - "cpu": [ - "ppc64" - ], - "dev": true, - "libc": [ - "glibc" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", - "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", "cpu": [ - "ppc64" + "arm64" ], "dev": true, "libc": [ @@ -1789,14 +966,17 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", - "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", "cpu": [ - "riscv64" + "ppc64" ], "dev": true, "libc": [ @@ -1806,29 +986,15 @@ "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", - "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "libc": [ - "musl" ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", - "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", "cpu": [ "s390x" ], @@ -1840,12 +1006,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", - "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", "cpu": [ "x64" ], @@ -1857,12 +1026,15 @@ "optional": true, "os": [ "linux" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", - "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", "cpu": [ "x64" ], @@ -1874,26 +1046,15 @@ "optional": true, "os": [ "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", - "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", - "cpu": [ - "x64" ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", - "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", "cpu": [ "arm64" ], @@ -1902,40 +1063,51 @@ "optional": true, "os": [ "openharmony" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", - "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", "cpu": [ - "arm64" + "wasm32" ], "dev": true, "license": "MIT", "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", - "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", "cpu": [ - "ia32" + "arm64" ], "dev": true, "license": "MIT", "optional": true, "os": [ "win32" - ] + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", - "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", "cpu": [ "x64" ], @@ -1944,21 +1116,17 @@ "optional": true, "os": [ "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", - "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", - "cpu": [ - "x64" ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] + "license": "MIT" }, "node_modules/@sap/cds": { "version": "10.0.3", @@ -2117,38 +1285,63 @@ } }, "node_modules/@shikijs/transformers": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.23.0.tgz", - "integrity": "sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-4.3.1.tgz", + "integrity": "sha512-z6ir0bGDgWcF2FduktEfPgIsdOtIlDiLAjFBgBzE42Q9xHbkkIXZtORHzlLVB71iZP9elEcqKg6keajvOUwE2A==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "3.23.0", - "@shikijs/types": "3.23.0" + "@shikijs/core": "4.3.1", + "@shikijs/types": "4.3.1" + }, + "engines": { + "node": ">=20" } }, "node_modules/@shikijs/transformers/node_modules/@shikijs/core": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", - "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.1.tgz", + "integrity": "sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "3.23.0", + "@shikijs/primitive": "4.3.1", + "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@shikijs/transformers/node_modules/@shikijs/primitive": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.1.tgz", + "integrity": "sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "4.3.1", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" } }, "node_modules/@shikijs/transformers/node_modules/@shikijs/types": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", - "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.3.1.tgz", + "integrity": "sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==", "dev": true, "license": "MIT", "dependencies": { "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" + }, + "engines": { + "node": ">=20" } }, "node_modules/@shikijs/twoslash": { @@ -2293,7 +1486,8 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/express": { "version": "5.0.6", @@ -2651,14 +1845,14 @@ "license": "MIT" }, "node_modules/@vue/compiler-core": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.38.tgz", - "integrity": "sha512-s99aGxWYig9ErHbct27KXEGhrBYlRI6c4MwAgXErOAbX9xiW37/uMa+XUDO69zLz83dng8UUZ70CTOJrLrYrEQ==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.39.tgz", + "integrity": "sha512-16KBTEXAJCpDr0mwlw+AZyhu8iyC7R3S2vBwsI7QnWJU6X3WKc9VKeNEZpiMdZ569qWhz9574L3vV55qRL0Vtw==", "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.7", - "@vue/shared": "3.5.38", + "@vue/shared": "3.5.39", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" @@ -2678,28 +1872,28 @@ } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.38.tgz", - "integrity": "sha512-JTqp25l8aFfJYF7/KmsXZjAxJz7T+SjmTJLoXVjHtc2BrSgSiW2n9Aem/cWq1OPe68A8JL06B3eVdhlP0H4TVw==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.39.tgz", + "integrity": "sha512-oQPigALqYbNxTNPvNgSOe+czwVExfbVF02lz8jP0S3AXJiu3jxYDygNUiqSep4ezzW8XgnubqH63My2A7JR/vg==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.38", - "@vue/shared": "3.5.38" + "@vue/compiler-core": "3.5.39", + "@vue/shared": "3.5.39" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.38.tgz", - "integrity": "sha512-DuA2GiZawSEW442iw/9+Fkol8hTgb4Ke5KkhmSry65QA7YuyMbIdy8p0XZRMvNwJdgRz307W8g1CSzdvS4nuNg==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.39.tgz", + "integrity": "sha512-d0ki86iOyN8LoZPBmk5SJWNwHP19CnDDCfuo//+2WJa2g5Ke0Jay983PIBIcSSzldC68I8DrD5GrHV3OSDfodg==", "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.7", - "@vue/compiler-core": "3.5.38", - "@vue/compiler-dom": "3.5.38", - "@vue/compiler-ssr": "3.5.38", - "@vue/shared": "3.5.38", + "@vue/compiler-core": "3.5.39", + "@vue/compiler-dom": "3.5.39", + "@vue/compiler-ssr": "3.5.39", + "@vue/shared": "3.5.39", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.15", @@ -2707,43 +1901,43 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.38.tgz", - "integrity": "sha512-7s+W5Gc42FGxZMcuwl8H5B29T8BJPMdBT7KHFE+BbAuZ/iTEdTtv7z2XiMjiaUUw4w3ZcCEdHs36RuYJ2VA7bA==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.39.tgz", + "integrity": "sha512-Ce7/wvwMHai74bdszfXExdazFigYnlF9zgCmEQUcM1j0fOymlouZ7XilTYNo8oUjhlnjYOZbGrcYKuqjz89Ucw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.38", - "@vue/shared": "3.5.38" + "@vue/compiler-dom": "3.5.39", + "@vue/shared": "3.5.39" } }, "node_modules/@vue/devtools-api": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.1.3.tgz", - "integrity": "sha512-73NMCvxXh8Hyozc/jiwqTFWVcCMyi11U1zmrq4DoukQJnuo8JHt6FsNu4HdeUDa8SpIp5vb7Q22GWgIq0efsXg==", + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-8.1.5.tgz", + "integrity": "sha512-YJipMVAKe5wT5CWf5kTYCaNV7NMNjFVxJkIkJaJ4W/nCxEBzlZzrOsYKeCymdCrFZmBS/+wTWFoUs3Jf/Q6XSQ==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-kit": "^8.1.3" + "@vue/devtools-kit": "^8.1.5" } }, "node_modules/@vue/devtools-kit": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.1.3.tgz", - "integrity": "sha512-cRn7GXiCQkMYU2Z3h3pM4YO/ndbx9FY1yLDAqIqPLcmIq4H6zAOJHein6tvZU3AfPwgrodqLiPBEF+YQaS8AxA==", + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-8.1.5.tgz", + "integrity": "sha512-FcSAxsi4eWuXLCB7Rv9lj0aIVHHPNVQ2BazGf4RJTc2JCqb4BQg0hk87ZFhminCfl+mD5OUI0rX2cgyu4kJOGA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/devtools-shared": "^8.1.3", + "@vue/devtools-shared": "^8.1.5", "birpc": "^2.6.1", "hookable": "^5.5.3", "perfect-debounce": "^2.0.0" } }, "node_modules/@vue/devtools-shared": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.1.3.tgz", - "integrity": "sha512-CM3uIPL+v+lrJUk33+pxspYo0MhuMWlCvf7zC9fybifvCPyM2jUbYRPwoYEJgYbwRqPikm5HozbUhp60MF2QuA==", + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-8.1.5.tgz", + "integrity": "sha512-mhT4zcPFhF+Xk1O4BfhhrbXzpmfqY03fS6xGpcllbQG7lDjhQf8pQHcTIhqQIYx1hfwtHmk/6jM96ele0UxPqQ==", "dev": true, "license": "MIT" }, @@ -2764,57 +1958,57 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.38.tgz", - "integrity": "sha512-pG6LV/NDNRbKizcUjFFLAfjaL8mcv4DmR9avNcUw2gDHBzZneuS2TWCmp633ynzxz9YYKNeEPK2I8Wraqy2HUQ==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.39.tgz", + "integrity": "sha512-TpsuBJ9gGlZa5d23XcM2y8EXanz9dZeVDQBXRwzy46ItgvM+rWpzs+UVM0wcRLxGvcav0HE5jz2gNL53xlRAog==", "dev": true, "license": "MIT", "dependencies": { - "@vue/shared": "3.5.38" + "@vue/shared": "3.5.39" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.38.tgz", - "integrity": "sha512-iyW8WVfF1CpCXxncZY5Ei6rSd6oZr5DgEom//fUjRBRl56AXPD+s9ATvukRt77ZFTuYlnVA1bxY+dJB94tWVYw==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.39.tgz", + "integrity": "sha512-9GLtNyRvPAUMbX+7ono0RC2j0guo2LXVi8LvcmAooImACUKm0oFf0jjwbX8/H0AE/t1nxhAkn8RSl9PMCzzxZw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.38", - "@vue/shared": "3.5.38" + "@vue/reactivity": "3.5.39", + "@vue/shared": "3.5.39" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.38.tgz", - "integrity": "sha512-apX2wt9sdfDshS+a2xueFZLVpt0GkRJZSoPmrW/SA4yzXTznhfcMVW59gr7h4YQeY0vJhdJkk2rsIDwgfFgC5A==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.39.tgz", + "integrity": "sha512-7Y6aAGboKcXAZ3ECuUy7RrS5yy2r47dhTp2SKaJmYxjopImaVFaNa5Ne66NwGovsrxVAl5S5rwc7m22UG7Lmww==", "dev": true, "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.38", - "@vue/runtime-core": "3.5.38", - "@vue/shared": "3.5.38", + "@vue/reactivity": "3.5.39", + "@vue/runtime-core": "3.5.39", + "@vue/shared": "3.5.39", "csstype": "^3.2.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.38.tgz", - "integrity": "sha512-vue8vbf2QlV4quHqzwmJy6dWfmRhP1J8l4wtZg60CL6VoKqcPY2oe7may3+1d9qfpedjK5PRLFqd5k3Isj9mUw==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.39.tgz", + "integrity": "sha512-yZSakiAGw85rZfG7UM8akMnIF+FmeiNk47uvHf2nVBBSe+dIKUhZuZq9+XgJhbV3nS5Z4ALH23/MpXofW+mbcw==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.38", - "@vue/shared": "3.5.38" + "@vue/compiler-ssr": "3.5.39", + "@vue/shared": "3.5.39" }, "peerDependencies": { - "vue": "3.5.38" + "vue": "3.5.39" } }, "node_modules/@vue/shared": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.38.tgz", - "integrity": "sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.39.tgz", + "integrity": "sha512-l1rrBtBfTnmxvtsvdQDXltUUy8S1Y+ZaqdfUzmAnJkTd8Z8rv5v/ytW+TKiqEOWyHPoqtPlNFSs0lhRmYVSHVA==", "dev": true, "license": "MIT" }, @@ -3514,48 +2708,6 @@ "node": ">= 0.4" } }, - "node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" - } - }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -6023,51 +5175,6 @@ "@rolldown/binding-win32-x64-msvc": "1.1.5" } }, - "node_modules/rollup": { - "version": "4.62.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", - "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.9" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.62.2", - "@rollup/rollup-android-arm64": "4.62.2", - "@rollup/rollup-darwin-arm64": "4.62.2", - "@rollup/rollup-darwin-x64": "4.62.2", - "@rollup/rollup-freebsd-arm64": "4.62.2", - "@rollup/rollup-freebsd-x64": "4.62.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", - "@rollup/rollup-linux-arm-musleabihf": "4.62.2", - "@rollup/rollup-linux-arm64-gnu": "4.62.2", - "@rollup/rollup-linux-arm64-musl": "4.62.2", - "@rollup/rollup-linux-loong64-gnu": "4.62.2", - "@rollup/rollup-linux-loong64-musl": "4.62.2", - "@rollup/rollup-linux-ppc64-gnu": "4.62.2", - "@rollup/rollup-linux-ppc64-musl": "4.62.2", - "@rollup/rollup-linux-riscv64-gnu": "4.62.2", - "@rollup/rollup-linux-riscv64-musl": "4.62.2", - "@rollup/rollup-linux-s390x-gnu": "4.62.2", - "@rollup/rollup-linux-x64-gnu": "4.62.2", - "@rollup/rollup-linux-x64-musl": "4.62.2", - "@rollup/rollup-openbsd-x64": "4.62.2", - "@rollup/rollup-openharmony-arm64": "4.62.2", - "@rollup/rollup-win32-arm64-msvc": "4.62.2", - "@rollup/rollup-win32-ia32-msvc": "4.62.2", - "@rollup/rollup-win32-x64-gnu": "4.62.2", - "@rollup/rollup-win32-x64-msvc": "4.62.2", - "fsevents": "~2.3.2" - } - }, "node_modules/router": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", @@ -6755,223 +5862,60 @@ } }, "node_modules/vitepress": { - "version": "2.0.0-alpha.17", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-2.0.0-alpha.17.tgz", - "integrity": "sha512-Z3VPUpwk/bHYqt1uMVOOK1/4xFiWQov1GNc2FvMdz6kvje4JRXEOngVI9C+bi5jeedMSHiA4dwKkff1NCvbZ9Q==", + "version": "2.0.0-alpha.18", + "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-2.0.0-alpha.18.tgz", + "integrity": "sha512-Lk1G2/QqSf+MwNLICl9fmzWOtoCEwjZoWgaQy41QvWTfcGpLE9XwJDbcCyES/9rj6R2g1zFqFvLVkYKLLDALFw==", "dev": true, "license": "MIT", "dependencies": { - "@docsearch/css": "^4.5.3", - "@docsearch/js": "^4.5.3", - "@docsearch/sidepanel-js": "^4.5.3", - "@iconify-json/simple-icons": "^1.2.69", - "@shikijs/core": "^3.22.0", - "@shikijs/transformers": "^3.22.0", - "@shikijs/types": "^3.22.0", + "@docsearch/css": "^4.6.3", + "@docsearch/js": "^4.6.3", + "@docsearch/sidepanel-js": "^4.6.3", + "@iconify-json/simple-icons": "^1.2.87", + "@shikijs/core": "^4.3.0", + "@shikijs/transformers": "^4.3.0", + "@shikijs/types": "^4.3.0", "@types/markdown-it": "^14.1.2", - "@vitejs/plugin-vue": "^6.0.4", - "@vue/devtools-api": "^8.0.5", - "@vue/shared": "^3.5.27", - "@vueuse/core": "^14.2.0", - "@vueuse/integrations": "^14.2.0", - "focus-trap": "^8.0.0", + "@vitejs/plugin-vue": "^6.0.7", + "@vue/devtools-api": "^8.1.4", + "@vue/shared": "^3.5.39", + "@vueuse/core": "^14.3.0", + "@vueuse/integrations": "^14.3.0", + "focus-trap": "^8.2.2", "mark.js": "8.11.1", "minisearch": "^7.2.0", - "shiki": "^3.22.0", - "vite": "^7.3.1", - "vue": "^3.5.27" + "shiki": "^4.3.0", + "vite": "^8.1.3", + "vue": "^3.5.39" }, "bin": { "vitepress": "bin/vitepress.js" }, "peerDependencies": { "markdown-it-mathjax3": "^4", - "oxc-minify": "*", "postcss": "^8" }, "peerDependenciesMeta": { "markdown-it-mathjax3": { "optional": true }, - "oxc-minify": { - "optional": true - }, "postcss": { "optional": true } } }, - "node_modules/vitepress/node_modules/@shikijs/core": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", - "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.5" - } - }, - "node_modules/vitepress/node_modules/@shikijs/engine-javascript": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.23.0.tgz", - "integrity": "sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2", - "oniguruma-to-es": "^4.3.4" - } - }, - "node_modules/vitepress/node_modules/@shikijs/engine-oniguruma": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", - "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2" - } - }, - "node_modules/vitepress/node_modules/@shikijs/langs": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", - "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0" - } - }, - "node_modules/vitepress/node_modules/@shikijs/themes": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", - "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "3.23.0" - } - }, - "node_modules/vitepress/node_modules/@shikijs/types": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", - "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/vitepress/node_modules/shiki": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.23.0.tgz", - "integrity": "sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "3.23.0", - "@shikijs/engine-javascript": "3.23.0", - "@shikijs/engine-oniguruma": "3.23.0", - "@shikijs/langs": "3.23.0", - "@shikijs/themes": "3.23.0", - "@shikijs/types": "3.23.0", - "@shikijs/vscode-textmate": "^10.0.2", - "@types/hast": "^3.0.4" - } - }, - "node_modules/vitepress/node_modules/vite": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.5.tgz", - "integrity": "sha512-KuOaNhcnGFN2zIPGA7wRmzF+lJA1sea7rHq17aiJ++9lzY1WWG6Jpwqwe1KNbRVPIqHmr8GLYx7jbrQcN/7/ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.27.0", - "fdir": "^6.5.0", - "picomatch": "^4.0.3", - "postcss": "^8.5.6", - "rollup": "^4.43.0", - "tinyglobby": "^0.2.15" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "jiti": ">=1.21.0", - "less": "^4.0.0", - "lightningcss": "^1.21.0", - "sass": "^1.70.0", - "sass-embedded": "^1.70.0", - "stylus": ">=0.54.8", - "sugarss": "^5.0.0", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, "node_modules/vue": { - "version": "3.5.38", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.38.tgz", - "integrity": "sha512-vAMKHfImQlYSy0C+PBue4s3ERZ2xGKfgZg5GXAsLInq1dyh2H78ILVP5sK0KPFPVW4kv+OGCIvBEondcjpZp7A==", + "version": "3.5.39", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.39.tgz", + "integrity": "sha512-xmZCYabFGcirU8r0fTuvl/LICc1OU620rnqepaJDL/a141ZigkG7AyaxQLdqJ02ZRYzWe6YPaDHeQx7MfknQfA==", "dev": true, "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.38", - "@vue/compiler-sfc": "3.5.38", - "@vue/runtime-dom": "3.5.38", - "@vue/server-renderer": "3.5.38", - "@vue/shared": "3.5.38" + "@vue/compiler-dom": "3.5.39", + "@vue/compiler-sfc": "3.5.39", + "@vue/runtime-dom": "3.5.39", + "@vue/server-renderer": "3.5.39", + "@vue/shared": "3.5.39" }, "peerDependencies": { "typescript": "*" diff --git a/package.json b/package.json index d108cd7e8..5e238c166 100644 --- a/package.json +++ b/package.json @@ -35,8 +35,7 @@ "htmlparser2": "^12", "monaco-editor": "^0.55.1", "sass": "^1.62.1", - "vite": "^8", "vite-plugin-cds": "^0.3.1", - "vitepress": "2.0.0-alpha.17" + "vitepress": "2.0.0-alpha.18" } } From ebb8db916ad556d3a10f2918960d739773b265a4 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Fri, 17 Jul 2026 19:49:34 +0200 Subject: [PATCH 05/49] Fix content width of shortcuts table (#2756) Allow the shortcuts table content to grow again. --- .vitepress/theme/components/ShortcutsList.vue | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.vitepress/theme/components/ShortcutsList.vue b/.vitepress/theme/components/ShortcutsList.vue index 7b88de875..40f068f78 100644 --- a/.vitepress/theme/components/ShortcutsList.vue +++ b/.vitepress/theme/components/ShortcutsList.vue @@ -6,7 +6,7 @@ × Keyboard Shortcuts
-+
{{ cmd.name }} @@ -194,8 +194,11 @@ td, th { /* Modal Content */ .modal-content { position: relative; + display: flex; + flex-direction: column; overflow: hidden; resize: both; + box-sizing: border-box; background-color: var(--vp-c-bg-soft); margin: 10% auto; border: 1px solid var(--vp-c-divider); @@ -219,6 +222,9 @@ td, th { /* Modal Body */ .modal-body { + flex: 1 1 auto; + min-height: 0; + overflow: auto; font-size: 14px; } From 74ef10aedcdbaa9c9423db79331775891dbb8bf4 Mon Sep 17 00:00:00 2001 From: ecklie <52252271+ecklie@users.noreply.github.com> Date: Fri, 17 Jul 2026 19:50:20 +0200 Subject: [PATCH 06/49] more details about t0 tenant (#2739) Co-authored-by: Steffen Waldmann--- guides/multitenancy/index.md | 8 +++--- guides/multitenancy/mtxs.md | 47 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/guides/multitenancy/index.md b/guides/multitenancy/index.md index 1e23ec6f7..d386e72e5 100644 --- a/guides/multitenancy/index.md +++ b/guides/multitenancy/index.md @@ -316,7 +316,7 @@ In a first terminal, start the MTX sidecar process: [cds] - serving cds.xt.JobsService { path: '/-/cds/jobs' } ``` - In addition, we can see a `t0` tenant being deployed, which is used by the MTX services for book-keeping tasks. + In addition, we can see a [`t0` tenant]./mtxs#about-technical-tenant-t0) being deployed, which is used by the MTX services for book-keeping tasks. ```log [cds] - loaded model from 1 file(s): @@ -894,7 +894,7 @@ To help ensure that the generated SAP HANA tenant UUID is unique within a region like `prefix-${org}-${space}` in Cloud Foundry. :::warning Prefix is mandatory -The cds/requires/cds.xt.DeploymentService/hdi/create/hana_tenant_prefix configuration is mandatory to ensure that the internal tenant `t0` is created with its own SAP HANA tenant. +Thecds/requires/cds.xt.DeploymentService/hdi/create/hana_tenant_prefix configuration is mandatory to ensure that the internal tenant [`t0`](./mtxs#about-technical-tenant-t0) is created with its own SAP HANA tenant. ::: :::warning Length restriction @@ -952,8 +952,8 @@ To group the tenant containers of many applications or microservices in a common } } ``` - The `hana_tenant_id` must be a valid UUID and must be unique per subscriber tenant. Specifying `hana_tenant_id` overrides the prefix settings mentioned earlier, - except for the internal tenant `t0`. Also ensure that the ID is unique within a region. + The `hana_tenant_id` must be a valid UUID and must be unique per subscriber tenant. Specifying `hana_tenant_id` overrides the prefix settings mentioned earlier, + except for [the internal tenant t0](./mtxs#about-technical-tenant-t0). Also ensure that the ID is unique within a region. : **... in CAP Java** diff --git a/guides/multitenancy/mtxs.md b/guides/multitenancy/mtxs.md index f7c9ce043..61dff7e99 100644 --- a/guides/multitenancy/mtxs.md +++ b/guides/multitenancy/mtxs.md @@ -1597,6 +1597,53 @@ The job and task status can take on the values `QUEUED`, `RUNNING`, `FINISHED` a +## About technical Tenant `t0` + +`t0` is a technical tenant used by `@sap/cds-mtxs`. It is a dedicated database container that stores operational metadata. The application's domain model is **not** deployed to `t0`. + +#### What `t0` stores + +| Entity | Purpose | +|--------|---------| +| `cds.xt.Tenants` | Registry of all subscribed tenants with their metadata, schema info, and version | +| `cds.xt.Jobs` | Async job state for operations like `subscribe`, `upgrade`, `extend` | +| `cds.xt.Tasks` | Individual tasks within a job (one per tenant per operation) | + + +#### Lifecycle of `t0` + +The `t0` tenant is automatically created or updated at startup of the MTX sidecar. + +##### Schema evolution + +Each startup checks if `t0` needs redeployment. If the schema is up-to-date, no action is taken. + +##### Special constraints for `t0` + +- Never uses `hana_tenant_id` from subscription parameters for [SAP HANA TMS v2](./index#sap-hana-tms-v2) +- Never applies `dataEncryption` +- Never applies the application's `cdsc` compiler options + + +#### Configuring a different Tenant Name for `t0` + +The default tenant name is `'t0'`. It can be customized via configurationcds/requires/multitenancy/t0 or environment variable `CDS_REQUIRES_MULTITENANCY_T0=my-custom-t0`. + +This is useful for scenarios where the `'t0'` name must vary per deployment (e.g., when multiple apps share the same Service Manager instance and need distinct `t0` containers). + +#### Default `database_id` and `lazyT0` + +By default, `t0` is created on server startup without an explicit `database_id`. This means it uses the Service Manager's default (primary) HANA database associated with the service instance or the database that is configured for thecds/requires/cds.xt.DeploymentService/hdi/create/database_id + +[Learn more about DeploymentService configuration.](./mtxs.md#deployment-config){.learn-more} + +##### `lazyT0` configuration + +The creation of the `t0` tenant can be deferred using configurationcds/requires/cds.xt.DeploymentService/lazyT0 . + +With that, the `t0` tenant is only created together with the first subscription. Before the first tenant is subscribed, `t0` is created with the same onboarding parameters (including `database_id`) as the subscribing tenant. This can be useful if the `database_id` is not known when deploying the MTX sidecar. + + ## [Old MTX Reference](old-mtx-apis) {.toc-redirect} [See Reference docs for former 'old' MTX Services.](old-mtx-apis){.learn-more} From 698816dbdf30bdee6e7f421648c2c14605ec5203 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jul 2026 19:52:37 +0200 Subject: [PATCH 07/49] Update shiki monorepo to v4.3.1 (#2722) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@shikijs/monaco](https://redirect.github.com/shikijs/shiki) ([source](https://redirect.github.com/shikijs/shiki/tree/HEAD/packages/monaco)) | [`4.3.0` → `4.3.1`](https://renovatebot.com/diffs/npm/@shikijs%2fmonaco/4.3.0/4.3.1) |  |  | | [@shikijs/vitepress-twoslash](https://redirect.github.com/shikijs/shiki) ([source](https://redirect.github.com/shikijs/shiki/tree/HEAD/packages/vitepress-twoslash)) | [`4.3.0` → `4.3.1`](https://renovatebot.com/diffs/npm/@shikijs%2fvitepress-twoslash/4.3.0/4.3.1) |  |  | --- ### Release Notes--- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/capire/docs). Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package-lock.json | 104 +++++++++++++++++++++++----------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5e8d4c260..efa58e7a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1183,14 +1183,14 @@ } }, "node_modules/@shikijs/core": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.0.tgz", - "integrity": "sha512-EooU3i9F6IAE8kEu+AnGf9DFZWkQBZ+hJn3tLVbsH+61mtQiva5biai66fAA6nvFPXkLgvrh7BrR7YcJU83xQQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-4.3.1.tgz", + "integrity": "sha512-ANMDxuaPsNMdDC1m4vfvhlDmJweMwkE5XitTwrq2rWHx5jM+dlm4MmHt2PP6t0uejfR77SuhrhJ0zEijIF/uhA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/primitive": "4.3.0", - "@shikijs/types": "4.3.0", + "@shikijs/primitive": "4.3.1", + "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4", "hast-util-to-html": "^9.0.5" @@ -1200,13 +1200,13 @@ } }, "node_modules/@shikijs/engine-javascript": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.3.0.tgz", - "integrity": "sha512-hTv/KiFf2tpiqlACPiztGGurEARWIutB8YUhcrA1pUC7VzzwKO+g5crUocrLztrZ5ro5Z4hbXg7bYclETn3gSQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-4.3.1.tgz", + "integrity": "sha512-JBItcnPuYq7jVJdZo/vMj94r+szT7XEjHFX+mvFDGSEIbVAXAGyHAHzhbWzpGOwYidCZrErJLLgn2PVeiokHnQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0", + "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "oniguruma-to-es": "^4.3.6" }, @@ -1215,13 +1215,13 @@ } }, "node_modules/@shikijs/engine-oniguruma": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.3.0.tgz", - "integrity": "sha512-1vMdN3gHfnKfLYwecUI2ITJI4RhHt96xEaJumVn7Heb0IlJ8WQMIH0Voak+2j22BpSNKdnOfB/pCTPnPm2gq7A==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-4.3.1.tgz", + "integrity": "sha512-OXyNMzg0pews+msMj4cHeqT4xiYKKvbnn6VbdAXxfoFl3SSx4fJTc8FadECuc5/H9p3BzhNAoAUXKwAu9rWYhg==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0", + "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2" }, "engines": { @@ -1229,27 +1229,27 @@ } }, "node_modules/@shikijs/langs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.3.0.tgz", - "integrity": "sha512-rnlqFbBRSys9bT4gl/5rw9RnS0W/I84ZldXPkO7cvlEMoV85TyF/aU01N7/NbSR776RNLjrJKjfFUXJR6wN1Cg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-4.3.1.tgz", + "integrity": "sha512-m0l9nsDqgBHvbZbk7A0/kXz/impK3uB/c6rAn6Gpg/uPtdZRQ+alsN/17MU5thb68XTj/4DxkZAotrM0GGSpDQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0" + "@shikijs/types": "4.3.1" }, "engines": { "node": ">=20" } }, "node_modules/@shikijs/monaco": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/monaco/-/monaco-4.3.0.tgz", - "integrity": "sha512-1V6Yzhg6S3L1yv4uqpPRFQNOD19oyt9r/NnORVRCEZBrrYfUa4srjcxi77ToMrmAUb8wXMBHYyqL2SwIrIDZEQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/monaco/-/monaco-4.3.1.tgz", + "integrity": "sha512-A8lB7DKVMWmT+EgzBQkw7pqMsc1NUogRM+CEyv3ldl0CcTctPd0oz7Lcb0d1iZmWYO3WJdpMUuISS4GAexHvhA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "4.3.0", - "@shikijs/types": "4.3.0", + "@shikijs/core": "4.3.1", + "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2" }, "engines": { @@ -1257,13 +1257,13 @@ } }, "node_modules/@shikijs/primitive": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.0.tgz", - "integrity": "sha512-CPkz64PTa5diRW1ggzMZH9VM/du4RNChYgVtgqrFcgruvIybmCvySv8GkiHSczUHXYuuR8TdKEwFx+UnZMpgdg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/primitive/-/primitive-4.3.1.tgz", + "integrity": "sha512-CXQRQOYy1leqQ8ceTeJdmXv/bsUY++6QyLpXJ94LZAAYj5X2SKRdc5ipguv4NPyGVKItB2PPwUpRNe0Sjh5S1A==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0", + "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" }, @@ -1272,13 +1272,13 @@ } }, "node_modules/@shikijs/themes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.3.0.tgz", - "integrity": "sha512-Avgt05YiT+Y3prjIc9lmQxhJzHBcCfR6cjiFW4OyaMBbt2A6trX5rfjUzx+Vj/mE9qpArYjatnqo9XPjQNW/AQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-4.3.1.tgz", + "integrity": "sha512-dgpoJ4WqNi2yTmizQHBJ5zcX6j2lE6icN/0yt4l1kkf16jrY/pwPLoTb1ETsWMz0OBLf9ZNvwmxft+cH+N9qSA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/types": "4.3.0" + "@shikijs/types": "4.3.1" }, "engines": { "node": ">=20" @@ -1345,14 +1345,14 @@ } }, "node_modules/@shikijs/twoslash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-4.3.0.tgz", - "integrity": "sha512-9tM/GWduKcWCU2jJIUqJZBxnyX/6iXtWov5rWmqcTnokHWIOxBL6nktx+HuzqB7/v3ApTahKT/TfRqBl+mFsOQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/twoslash/-/twoslash-4.3.1.tgz", + "integrity": "sha512-xK8inH/gK++1V4rTxrwCwjvaNwkkJ7oDjOIpdqONVxIpAFnVC3gzqjH5KiXGTelUcxpUJ3PtOKWct1YQ0kAloA==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "4.3.0", - "@shikijs/types": "4.3.0", + "@shikijs/core": "4.3.1", + "@shikijs/types": "4.3.1", "twoslash": "^0.3.9" }, "engines": { @@ -1363,9 +1363,9 @@ } }, "node_modules/@shikijs/types": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.3.0.tgz", - "integrity": "sha512-oc8b9U2SYvofKZk8e/737nIX0qwf6eV2vHFATeObAu7r+mUVpLs8Re0BmVkIjAWAYgkmG/CzLNo7rzuBzRu/wQ==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-4.3.1.tgz", + "integrity": "sha512-CHFxE0jztBIZRHH6gxXE7DXUCFXjReEGxZ/j0rfSLGKZuwp2xBYycEP14875DSa9KLL/6700oxIq6oO6ef9K2g==", "dev": true, "license": "MIT", "dependencies": { @@ -1377,13 +1377,13 @@ } }, "node_modules/@shikijs/vitepress-twoslash": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-4.3.0.tgz", - "integrity": "sha512-gMvbh6CvBAiSorLAUVdgSBfHS3GQvOi3I/NGXUnAj3VZPwnuzni/pSCcrI8Pzmyjzcw/3Yxd/gOYam8teyAo+Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@shikijs/vitepress-twoslash/-/vitepress-twoslash-4.3.1.tgz", + "integrity": "sha512-IZ+LTUPaXjQAUkOcTKh/QBOMLZ/y8uJksqyDRbeUwBxQAFhAD3r9NWcNpMU0rNMeOHaSj5Da6P1Cswgnpg8gmQ==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/twoslash": "4.3.0", + "@shikijs/twoslash": "4.3.1", "floating-vue": "^5.2.2", "lz-string": "^1.5.0", "magic-string": "^0.30.21", @@ -1392,7 +1392,7 @@ "mdast-util-gfm": "^3.1.0", "mdast-util-to-hast": "^13.2.1", "ohash": "^2.0.11", - "shiki": "4.3.0", + "shiki": "4.3.1", "twoslash": "^0.3.9", "twoslash-vue": "^0.3.9", "vue": "^3.5.38" @@ -5313,18 +5313,18 @@ } }, "node_modules/shiki": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.3.0.tgz", - "integrity": "sha512-NKKjWzR6LIGL3sXBrWDw9sDS9cxx42/DkysaNqJEeOWE8Kix5gpak0bc00OfDVEO4oyXSyz8+aRaqKoBD1yo7A==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-4.3.1.tgz", + "integrity": "sha512-oR+qDVi2OjX1tmDpyv+3KviX01KzO6Af+0NNnKnsp9491UEGz2YpxTuJboS/6VhYpTdqzmuJBuiTlrAWWJAssw==", "dev": true, "license": "MIT", "dependencies": { - "@shikijs/core": "4.3.0", - "@shikijs/engine-javascript": "4.3.0", - "@shikijs/engine-oniguruma": "4.3.0", - "@shikijs/langs": "4.3.0", - "@shikijs/themes": "4.3.0", - "@shikijs/types": "4.3.0", + "@shikijs/core": "4.3.1", + "@shikijs/engine-javascript": "4.3.1", + "@shikijs/engine-oniguruma": "4.3.1", + "@shikijs/langs": "4.3.1", + "@shikijs/themes": "4.3.1", + "@shikijs/types": "4.3.1", "@shikijs/vscode-textmate": "^10.0.2", "@types/hast": "^3.0.4" }, From f3ce71f4190768d53668ebd0e595051d6ce8dfb1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jul 2026 19:53:09 +0200 Subject: [PATCH 08/49] Update dependency @typescript-eslint/parser to v8.64.0 (#2737) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.62.1` → `8.64.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.62.1/8.64.0) |  |  | --- ### Release Notesshikijs/shiki (@shikijs/monaco)
### [`v4.3.1`](https://redirect.github.com/shikijs/shiki/releases/tag/v4.3.1) [Compare Source](https://redirect.github.com/shikijs/shiki/compare/v4.3.0...v4.3.1) ##### 🚀 Features - Add `type` field for `ThemedToken` - by [@ije](https://redirect.github.com/ije) in [#1293](https://redirect.github.com/shikijs/shiki/issues/1293) [(585b5)](https://redirect.github.com/shikijs/shiki/commit/585b5e61) ##### [View changes on GitHub](https://redirect.github.com/shikijs/shiki/compare/v4.3.0...v4.3.1)--- ### Configuration 📅 **Schedule**: (UTC) - 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 efa58e7a9..cf77f7ff4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1649,16 +1649,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/parser": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.62.1.tgz", - "integrity": "sha512-sPhE4iHuJDSvoAiec+Ro8JyXw8f0ql13HFR82P99nCm9GwTEKG0KYLvDe6REk8BCXuit6vJAv/Yxg5ABaNS2rA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.64.0.tgz", + "integrity": "sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.62.1", - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/typescript-estree": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1", + "@typescript-eslint/scope-manager": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/typescript-estree": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "debug": "^4.4.3" }, "engines": { @@ -1674,14 +1674,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.1.tgz", - "integrity": "sha512-yQ3RgY5RkSBpsNS1Bx/JQEcA24FOSdfGktoyprAr5u18390UQdtVcfnEv4nIrIshNnavlVyZBKxQwT1fIAE6cg==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.64.0.tgz", + "integrity": "sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.62.1", - "@typescript-eslint/types": "^8.62.1", + "@typescript-eslint/tsconfig-utils": "^8.64.0", + "@typescript-eslint/types": "^8.64.0", "debug": "^4.4.3" }, "engines": { @@ -1696,14 +1696,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.1.tgz", - "integrity": "sha512-r4d249KbQ1SFdpeStvob8Ih6aPPIzfqllPVOtvhve6ZcpuVcYo5/7zUWckKpHE7StASX4kTKZTLf0WQm/wPkcg==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.64.0.tgz", + "integrity": "sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1" + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1714,9 +1714,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.1.tgz", - "integrity": "sha512-xadytJqX9vJVQ2fdQjkcIVigwaOJNWkpjdLt6cEQ+xPnrI1fkp+/jZE/I97k9KUjqtpd25i0HeyZf3T6dutv2g==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.64.0.tgz", + "integrity": "sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==", "dev": true, "license": "MIT", "engines": { @@ -1731,9 +1731,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.1.tgz", - "integrity": "sha512-ooCzJFaf+Hg+uG6fA3NRFGuFjlfNlDhBthbv4ZPU/0elCAFUfnyXUvf/WOpHz/jYwSmvU2GkR2LtyUfy1AxZ1Q==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.64.0.tgz", + "integrity": "sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==", "dev": true, "license": "MIT", "engines": { @@ -1745,16 +1745,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.1.tgz", - "integrity": "sha512-xMcW9oP9u7fAMXYs9A65CVmtLQe2r//oXINHfi8HV+oiqhih17sbLdhXr4540YWlgpDKQdY854OL5ZrdCiQsAA==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.64.0.tgz", + "integrity": "sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.62.1", - "@typescript-eslint/tsconfig-utils": "8.62.1", - "@typescript-eslint/types": "8.62.1", - "@typescript-eslint/visitor-keys": "8.62.1", + "@typescript-eslint/project-service": "8.64.0", + "@typescript-eslint/tsconfig-utils": "8.64.0", + "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/visitor-keys": "8.64.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -1773,13 +1773,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.62.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.1.tgz", - "integrity": "sha512-4g3BLxfdTMy8iZG0MaBkadnlRrCJ74cQiFbyEVMrkwIoqdyaXXQM22cotDvrl4x28wgIZ9rEJRoM+mmhSJpJ1g==", + "version": "8.64.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.64.0.tgz", + "integrity": "sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.1", + "@typescript-eslint/types": "8.64.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { From 6d9eed22bfe7030be804283545e10e951a4f25a0 Mon Sep 17 00:00:00 2001 From: Steffen Waldmanntypescript-eslint/typescript-eslint (@typescript-eslint/parser)
### [`v8.64.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8640-2026-07-13) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.63.0...v8.64.0) This was a version bump only for parser to align it with other projects, there were no code changes. See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.64.0) for more information. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. ### [`v8.63.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8630-2026-07-06) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.62.1...v8.63.0) This was a version bump only for parser to align it with other projects, there were no code changes. See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.63.0) for more information. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.Date: Sat, 18 Jul 2026 13:31:13 +0200 Subject: [PATCH 09/49] chore(ci): Update workflow dependencies (#2724) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Huh, those should have been caught by Renovate/Dependabot… --- .github/workflows/main.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b8a996c67..36fe73a71 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,13 +25,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Setup Pages - uses: actions/configure-pages@v5 + uses: actions/configure-pages@v6 - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: - node-version: 22 + node-version: 24 cache: 'npm' - run: npm ci - run: npm run lint @@ -58,4 +58,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v4 + uses: actions/deploy-pages@v5 From 9ea5222884511cf2f304016f1794b2c01168cba1 Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Mon, 20 Jul 2026 09:19:09 +0200 Subject: [PATCH 10/49] Fix config popup for strings with colons (#2757) `cds.requires.db.credentials.url: :memory:` is currently rendered incorrectly for the JS variant: Fixed:
--- .vitepress/theme/components/ConfigInspect.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vitepress/theme/components/ConfigInspect.vue b/.vitepress/theme/components/ConfigInspect.vue index 617720ef7..73f4be510 100644 --- a/.vitepress/theme/components/ConfigInspect.vue +++ b/.vitepress/theme/components/ConfigInspect.vue @@ -120,7 +120,7 @@ pkgStr.value = JSON.stringify(pkg, null, 2) rcJsonStr.value = JSON.stringify(pkg.cds??{}, null, 2) - rcJsStr.value = 'exports.' + Object.keys(pkg.cds??{})[0] + ' = ' + (JSON.stringify(Object.values(pkg.cds??{})[0], null, 2)??'').replaceAll('"', '') + rcJsStr.value = 'exports.' + Object.keys(pkg.cds??{})[0] + ' = ' + (JSON.stringify(Object.values(pkg.cds??{})[0], null, 2)??'').replace(/"([^"]+)":/g, '$1:') rcYmlStr.value = yaml.stringify(pkg.cds) let envKey = fqn.replaceAll('_', '__').replaceAll(keyDel, '_') From 287ab266637f3d148bd66e3ebb5cd37a128fb1b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Jeglinsky?=
Date: Mon, 20 Jul 2026 11:27:38 +0200 Subject: [PATCH 11/49] Update CODEOWNERS for maha to replace rene (#2758) --- .github/CODEOWNERS | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 32a416ac8..dc22b16aa 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,11 +2,11 @@ # We start with defining ownership globally and later on can get more granular. # General content -* @renejeglinsky @danjoa +* @smahati @danjoa -node.js/ @smahati @renejeglinsky @danjoa -java/ @smahati @renejeglinsky @danjoa -tools/ @chgeo @swaldmann @renejeglinsky +node.js/ @smahati @danjoa +java/ @smahati @danjoa +tools/ @chgeo @swaldmann @smahati # Infra .github/ @chgeo @swaldmann From 8c8b3f1d67cae4e2e844aa4c51e92bde9fadef0e Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Tue, 21 Jul 2026 15:17:57 +0200 Subject: [PATCH 12/49] Fix external link icon for Safari (#2762) Looked broken in Safari: Root cause: VitePress uses an invisible Unicode character for the icon pseudo-element, and Safari can render that as square/tofu blocks with some fonts --- .vitepress/theme/styles.scss | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.vitepress/theme/styles.scss b/.vitepress/theme/styles.scss index 53d60534e..109b207e0 100644 --- a/.vitepress/theme/styles.scss +++ b/.vitepress/theme/styles.scss @@ -358,6 +358,22 @@ img, video.bright { white-space: nowrap; } +// Safari may render the invisible Unicode marker used by VitePress as tofu blocks. +// Apply this workaround only to Safari-capable engines. +@supports (font: -apple-system-body) and (-webkit-appearance: none) { + .vp-external-link-icon::after, + .external-link-icon-enabled :is(.vp-doc a[href*='://'], .vp-doc a[target='_blank']):not(:is(.no-icon, svg a, :has(img, svg)))::after { + content: ''; + display: inline-block; + width: 11px; + height: 11px; + padding-left: 0; + margin-left: 4px; + line-height: 1; + vertical-align: text-top; + } +} + From d01a5a0810bb4311a9b20720768a1b3022c18293 Mon Sep 17 00:00:00 2001 From: Steffen Weinstock <79531202+stewsk@users.noreply.github.com> Date: Wed, 22 Jul 2026 06:39:35 +0200 Subject: [PATCH 13/49] Clarify ":1" syntax in infix filter (#2760) --- cds/cdl.md | 8 +++++++- cds/cql.md | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/cds/cdl.md b/cds/cdl.md index 48cad8ff5..0f117c6ed 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -1154,7 +1154,7 @@ entity P_Authors as projection on Authors { In this example, in addition to `books` projection `P_Authors` has a new association `availableBooks` that points only to those books where `stock > 0`. -If the filter condition effectively reduces the cardinality of the association +If the filter condition effectively reduces the cardinality of the association (or composition) to one, you should make this explicit in the filter by adding a `1:` before the condition: ```cds @@ -1164,6 +1164,12 @@ entity P_Employees as projection on Employees { } ``` +::: warning `:1` doesn't itself reduce the cardinality +The `:1` syntax itself has no effect on the cardinality. It is only an information by the developer +that the specified condition reduces the cardinality of the association or composition to one. +::: + + Filters usually are provided only for to-many associations, which usually are unmanaged. Thus publishing with a filter is almost exclusively used for unmanaged associations. Nevertheless you can also publish a managed association with a filter. This will automatically diff --git a/cds/cql.md b/cds/cql.md index 3e2abae87..dfe91df2b 100644 --- a/cds/cql.md +++ b/cds/cql.md @@ -354,6 +354,11 @@ If an infix filter effectively reduces the cardinality of a *to-many* associatio SELECT name, books[1: favorite=true].title from Authors ``` +::: warning `:1` has no effect on result set +The `:1` syntax in the filter has no effect on the result. It is only an information by the developer +that the specified condition reduces the result to a single entry. +::: + ### Exists Predicate Use a filtered path expression to test if any element of the associated collection matches the given filter: From d03a0a2147271e73ed528d50890fa3a1105a154b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 22 Jul 2026 06:13:48 +0000 Subject: [PATCH 14/49] chore: Update CLI texts (#2763) 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 | 6 +++--- tools/assets/help/cds-version.out.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/assets/help/cds-version-md.out.md b/tools/assets/help/cds-version-md.out.md index a26485020..5fe656538 100644 --- a/tools/assets/help/cds-version-md.out.md +++ b/tools/assets/help/cds-version-md.out.md @@ -4,9 +4,9 @@ | Package | Version | Location | | -------------------- | ------- | ------------------------------------------------------------------ | - | @sap/cds-dk (global) | 10.0.4 | .../node_modules/@sap/cds-dk | - | @sap/cds | 10.0.3 | .../node_modules/@sap/cds | - | @sap/cds-compiler | 7.0.1 | .../node_modules/@sap/cds-compiler | + | @sap/cds-dk (global) | 10.0.5 | .../node_modules/@sap/cds-dk | + | @sap/cds | 10.0.4 | .../node_modules/@sap/cds | + | @sap/cds-compiler | 7.0.2 | .../node_modules/@sap/cds-compiler | | @sap/cds-fiori | 2.3.0 | .../node_modules/@sap/cds-fiori | | @cap-js/db-service | 3.0.1 | .../node_modules/@cap-js/db-service | | @cap-js/sqlite | 3.0.2 | .../node_modules/@cap-js/sqlite | diff --git a/tools/assets/help/cds-version.out.md b/tools/assets/help/cds-version.out.md index 0ea03b648..5c5d6275d 100644 --- a/tools/assets/help/cds-version.out.md +++ b/tools/assets/help/cds-version.out.md @@ -2,9 +2,9 @@
> cds version - @sap/cds-dk (global) 10.0.4 .../node_modules/@sap/cds-dk - @sap/cds 10.0.3 .../node_modules/@sap/cds - @sap/cds-compiler 7.0.1 .../node_modules/@sap/cds-compiler + @sap/cds-dk (global) 10.0.5 .../node_modules/@sap/cds-dk + @sap/cds 10.0.4 .../node_modules/@sap/cds + @sap/cds-compiler 7.0.2 .../node_modules/@sap/cds-compiler @sap/cds-fiori 2.3.0 .../node_modules/@sap/cds-fiori @cap-js/db-service 3.0.1 .../node_modules/@cap-js/db-service @cap-js/sqlite 3.0.2 .../node_modules/@cap-js/sqlite From 111a7be27cd103f67a1dc516d739d9629be74938 Mon Sep 17 00:00:00 2001 From: David H LamDate: Wed, 22 Jul 2026 09:38:25 +0200 Subject: [PATCH 15/49] Added dev trace output section to Java observability page (#2753) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Document the built-in dev-mode trace tree that renders CAP service dispatch hierarchy as indented timing trees in the console log. Covers activation logic, configuration, example output, and relationship to the OpenTelemetry Java Agent. --------- Co-authored-by: René Jeglinsky --- java/operating-applications/observability.md | 50 ++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/java/operating-applications/observability.md b/java/operating-applications/observability.md index 69a3fc7e2..6df21e1d3 100644 --- a/java/operating-applications/observability.md +++ b/java/operating-applications/observability.md @@ -610,6 +610,56 @@ class CatalogServiceHandler implements EventHandler { ``` +#### Dev Trace Output { #dev-trace-output } + +In non-production profiles, CAP Java automatically logs completed request traces as indented timing trees to the console. This gives immediate visibility into which services, handlers, and database queries contribute to request latency — without any external tooling or agent setup. + +::: tip +This feature is auto-enabled in development and disabled when the OpenTelemetry Java Agent is detected or in production profiles. No dependencies or JVM flags are required. +::: + +##### Example Output + +A request to `GET /odata/v4/CatalogService/Books` produces: + +```log +elapsed times (trace 4a1f7b2c...): + 0.00 → 26.34 = 26.34 ms RequestContext 1 [tenant=t1] + 0.12 → 25.89 = 25.77 ms CatalogService (READ) [entity=Books] + 1.45 → 24.20 = 22.75 ms PersistenceService (READ) + 2.10 → 23.80 = 21.70 ms CQN SELECT CatalogService.Books +``` + +##### Configuration + +The feature is controlled by cds.telemetry.dev-output.enabled : + +| Value | Behavior | +|-------|----------| +| _not set_ | Auto-enabled in non-production when no OTel agent is detected | +| `true` | Enabled (unless OTel agent is present) | +| `false` | Disabled | + +To suppress the trace output via log level instead: + +```properties +logging.level.com.sap.cds.telemetry=WARN +``` + +##### Relationship to the OpenTelemetry Java Agent + +The dev trace output and the [OpenTelemetry Java Agent](#agent-extension) serve complementary purposes: + +| | Dev Trace Output | OpenTelemetry Java Agent | +|---|---|---| +| **Use case** | Local development | Production observability | +| **Setup** | Zero config | Agent JAR + exporter config | +| **Span level** | CAP services, handlers, CQN | JVM frameworks (Spring MVC, JDBC) | +| **Output** | Console log | Jaeger, Dynatrace, Cloud Logging | + +When the OpenTelemetry Java Agent is detected at startup, the dev trace output is automatically disabled to avoid conflicts. + + ### Dynatrace { #dynatrace } [Dynatrace](https://www.dynatrace.com/support/help) is a comprehensive platform that delivers analytics and automation based on monitoring events sent by the backend services. From d9e5e10730184b113b12442f626ea1ab2e22087b Mon Sep 17 00:00:00 2001 From: Christian GeorgiDate: Thu, 23 Jul 2026 15:00:09 +0200 Subject: [PATCH 16/49] Improve docs for `cds bind` in tests (#2765) Triggered by a user issue: - Mention `cds bind --exec` for integration tests - Add a section in the cds.test docs about such cloud integration tests. --- node.js/cds-test.md | 10 ++++++++++ tools/cds-bind.md | 22 +++++++++++++--------- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/node.js/cds-test.md b/node.js/cds-test.md index 7ecf182e8..af2b80f2c 100644 --- a/node.js/cds-test.md +++ b/node.js/cds-test.md @@ -163,6 +163,16 @@ cds test The last one, `cds test` is a thin wrapper around [Node's built-in test runner](https://nodejs.org/api/test.html), which makes it easier to fetch tests and provides a cleaner output. +#### Testing with Cloud Services + +To run integration tests against cloud services (for example, SAP HANA), wrap the test execution with `cds bind --exec`: + +```sh +cds bind --exec -- node --test +``` + +[Learn more about hybrid testing with `cds bind`.](../tools/cds-bind#integration-tests){.learn-more} + ::: tip Writing runner-agnostic tests To keep your tests portable across different test runners, it's recommended to avoid using runner-specific features and stick to the common APIs provided by `cds.test`, in particular via [`cds.test.expect`](#expect), which are designed to work across different runners. This way, you can easily switch between different test runners as shown above without having to change your test code. -> Learn more in section [Runner-Agnostic Tests](#runner-agnostic-tests) below. ::: diff --git a/tools/cds-bind.md b/tools/cds-bind.md index a1086df92..0a0619e63 100644 --- a/tools/cds-bind.md +++ b/tools/cds-bind.md @@ -514,17 +514,21 @@ Learn how to do hybrid testing using the XSUAA or IAS + AMS service(s) in the [C `cds bind` can be handy for testing with real cloud services in your CI/CD pipeline. -Configure your required bindings for testing and save them to your project's _package.json_ file for your tests' profile: +#### Local: `cds bind --exec` + +For local hybrid testing, the simplest approach is to wrap your test command with `cds bind --exec`, which resolves bindings and provides them via `VCAP_SERVICES`: ```sh -cds bind -2 integration-test-hana -o package.json -4 integration-test +cds bind -2 integration-test-hana --profile integration-test --exec -- npm run integration-test ``` -No credentials are saved! +No credentials are written to disk. -In your CI/CD pipeline you can resolve the bindings and inject them into the test commands: +#### CI/CD Pipelines: Export Resolved Bindings -```sh +For CI/CD environments where you want explicit control, export the resolved credentials before running tests: + +```sh :line-numbers # Login cf auth $USER $PASSWORD # Optional if your bindings have org and space removed to be agnostic @@ -540,10 +544,10 @@ export cds_requires="$(cds env get requires --resolve-bindings)" # [!code highl 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). +The following notes explain the highlighted lines: +- Line 7: With `CDS_ENV`, you specify the [configuration profile](../node.js/cds-env#profiles) for the test, where you previously put the service binding configuration. Note that setting the profile alone does not resolve any credentials yet. +- Line 10: `cds env get requires --resolve-bindings` prints the `requires` section of the configuration and resolves the credentials of the service bindings from the cloud. The script puts it into the `cds_requires` environment variable that is translated back to the [`cds.requires` configuration](../node.js/cds-env#services) by all subsequent `cds` commands and the tests. +- Line 13: In `npm run integration-test`, any test code can run, for example, `node --test` or `vitest` using [`cds.test`](../node.js/cds-test). From 5d28303ea8174b9ce2982f51981ce18861007071 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 15:22:42 +0200 Subject: [PATCH 17/49] Update dependency com.sap.cds:cds4j-api to v5.0.1 (#2766) 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/)) | `5.0.0` → `5.0.1` |  |  | --- ### Configuration 📅 **Schedule**: (UTC) - 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 6a69c765d..3446db0d6 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -135,7 +135,7 @@ if (!siteURL.pathname.endsWith('/')) siteURL.pathname += '/' config.themeConfig.capire = { versions: { java_services: '5.0.0', - java_cds4j: '5.0.0', + java_cds4j: '5.0.1', cloud_sec_ams: '3.8.1' }, gotoLinks: [], From c913b45986a7e2de7521e791f735edf2b3e47564 Mon Sep 17 00:00:00 2001 From: Johannes Vogt Date: Fri, 24 Jul 2026 14:11:11 +0200 Subject: [PATCH 18/49] update vite-plugin-cds (#2773) Fixes local docs/node.js/cds-test --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index cf77f7ff4..c756c5399 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5848,9 +5848,9 @@ } }, "node_modules/vite-plugin-cds": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/vite-plugin-cds/-/vite-plugin-cds-0.3.4.tgz", - "integrity": "sha512-O4fybEdWfpX6m7CVIIP0cQdqWz0Ci2yniXt4DJfQpbUsMTUONsmBZrWi3a+rDr1r/kWdoBPmGKaow0HhtWMeUA==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/vite-plugin-cds/-/vite-plugin-cds-0.3.5.tgz", + "integrity": "sha512-c45IMO7M36O83YL31JRFQKMeZXzPraauiuYeFiPTg4F7NZWyAa1AiNWftOzpuAV5ysbUCttlTxWcqHbxn/Gpjg==", "dev": true, "license": "MIT", "workspaces": [ From 83183fffccb24876d1eec3fe74160255bff7b2da Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 09:29:02 +0200 Subject: [PATCH 19/49] Update dependency com.sap.cds:cds-services-api to v5.0.1 (#2776) 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) | `5.0.0` → `5.0.1` |  |  | --- ### Configuration 📅 **Schedule**: (UTC) - 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 3446db0d6..540ba5d6b 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -134,7 +134,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: '5.0.0', + java_services: '5.0.1', java_cds4j: '5.0.1', cloud_sec_ams: '3.8.1' }, From 3f38477f51e471ce60de6181d32e099652284fd1 Mon Sep 17 00:00:00 2001 From: DJ Adams Date: Tue, 28 Jul 2026 11:45:10 +0100 Subject: [PATCH 20/49] Minor adjustments to mcp.md (#2772) Some minor mods to the MCP topic. - Fixed a typo - Reworded the "Using Specific MCP Services" heading - Gnashed my teeth in angst over what to do about the phrase "MCP server" which is valid but potentially misleading (as they are not really separate servers, but endpoints served from the CAP server on 4004, for example), and ended up adding a "TIP" section which may help - Re-titled the topic to avoid the tautology ("MCP Protocol" -> "Model Context Protocol Protocol") :-) --- guides/protocols/mcp.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/guides/protocols/mcp.md b/guides/protocols/mcp.md index 96268437e..5f6dd7ab8 100644 --- a/guides/protocols/mcp.md +++ b/guides/protocols/mcp.md @@ -3,7 +3,7 @@ synopsis: > Expose CAP services via the Model Context Protocol for seamless AI agent integration. --- -# MCP Protocol Adapter +# Model Context Protocol Adapter @@ -116,9 +116,9 @@ annotate CatalogService with @mcp:'books' > From the perspective of a developer in a CAP-based project, `@mcp` is just another protocol for your services, similar to `@odata`, `@graphql`, `@rest`, or `@hcql`. The adapter takes care of the rest, with all the standard CAP features you know working out of the box also with MCP, including annotations like `@cds.query.limit`, etc. -### Using Specific MCP Services +### Tailored services for MCP use -In case you want to serve tailor the entities or elements served via MCP you can also create specific services for MCP and annotate only those with `@mcp`. For example, you could create a `BooksService` that only exposes a subset of the entities of the `AdminService` like that: +In case you want to tailor the entities or elements served via MCP you can also create specific services for MCP and annotate only those with `@mcp`. For example, you could create a `BooksService` that only exposes a subset of the entities of the `AdminService` like that: ::: code-group ```cds [srv/books-service.cds] @@ -321,9 +321,12 @@ INFO com.sap.cds.adapter.mcp.McpServlet : Received MCP query request for entity ### Autowired MCP Clients -Whenever you start your application, the MCP adapter automatically registers all MCP endpoints with local MCP clients – currently supported for [Claude Code](https://code.claude.com/docs) and [Opencode](https://opencode.ai/) - so you can just go ahead and run queries from your MCP client without any additional configuration. This makes it super easy to test and interact with your services via MCP during development. +Whenever you start your application, the MCP adapter automatically registers all MCP servers with local MCP clients – currently supported for [Claude Code](https://code.claude.com/docs) and [Opencode](https://opencode.ai/) - so you can just go ahead and run queries from your MCP client without any additional configuration. This makes it super easy to test and interact with your services via MCP during development. -During startup, the generated MCP servers and their URL are added to the client-specific configuration files like that: +> [!tip] MCP servers +> Note the distinction between the CAP server that listens on a certain port, and MCP servers which are just endpoints provided and served by the CAP server. We use the term "MCP server" despite this, to align with MCP terminology. + +During startup, information about the MCP server endpoints is added to the client-specific configuration files like that: ::: code-group ```json [~/.claude.json] From 82dc88374de3f97197446b7eb1fdeaf0c8c2a3e8 Mon Sep 17 00:00:00 2001 From: Maximilian Eckert Date: Tue, 28 Jul 2026 12:46:17 +0200 Subject: [PATCH 21/49] Add SAP API Policy note to MCP adapter doc (#2764) Co-authored-by: Marvin Lindner Co-authored-by: Simon Engel Co-authored-by: Daniel Hutzel --- guides/protocols/index.md | 4 ++-- guides/protocols/mcp.md | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/guides/protocols/index.md b/guides/protocols/index.md index 19f517248..f17282223 100644 --- a/guides/protocols/index.md +++ b/guides/protocols/index.md @@ -8,7 +8,7 @@ CAP supports the following service protocols: - **OData**: A widely used protocol for building and consuming RESTful APIs. CAP provides built-in support for OData v2 and v4, allowing you to easily expose your data models as OData services. - **OpenAPI**: A specification for building APIs that allows you to define your API endpoints, request/response formats, and authentication methods. CAP can generate OpenAPI specifications for your services, enabling easy integration with other systems. - **AsyncAPI**: A specification for defining asynchronous APIs, such as those using messaging protocols. CAP supports AsyncAPI for building event-driven applications and integrating with messaging systems. -- **MCP**: Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. +- **MCP**: Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. ## Using Protocols in CAP To use a specific protocol in your CAP application, you typically need to configure your service definitions and handlers accordingly. Here are some general steps to get started: @@ -25,7 +25,7 @@ For more detailed information on each protocol and how to implement them in CAP, - [OData APIs](odata.md) - [OpenAPI](openapi.md) - [AsyncAPI](asyncapi.md) -- [MCP](mcp.md) +- [MCP](mcp.md) These guides provide step-by-step instructions, examples, and best practices for working with each protocol in your CAP applications. diff --git a/guides/protocols/mcp.md b/guides/protocols/mcp.md index 5f6dd7ab8..bc73834b4 100644 --- a/guides/protocols/mcp.md +++ b/guides/protocols/mcp.md @@ -17,7 +17,9 @@ The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open- > > In parallel, there's also the *MCP Server* plugin ([*@cap-js/mcp-server*](https://github.com/cap-js/mcp-server)), which serves a different purpose, though, that is: AI-assisted *development* of CAP projects. - +> [!warning] SAP API Policy Applies +> +> The [SAP API Policy](https://help.sap.com/doc/sap-api-policy) remains applicable even when exposing data via MCP. Before exposing any SAP service or data through an MCP endpoint, ensure your use case complies with the SAP API Policy and any applicable licensing terms. ## Preliminaries @@ -71,10 +73,8 @@ Add this to the *srv/pom.xml*: ``` -Make sure internal artifactory is configured for Maven build as described in [*Java > Getting Started > Setting Up Local Development*](../../java/getting-started.md#local). - - +Make sure internal artifactory is configured for Maven build as described in [*Java > Getting Started > Setting Up Local Development*](../../java/getting-started.md#local). ## Serving MCP From c6761c418ba263d8840e98e7d7bf09633a67f979 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Tue, 28 Jul 2026 12:52:54 +0200 Subject: [PATCH 22/49] Fixed dependency to monaco-editor --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5e238c166..4b53a2679 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "fflate": "^0.8.2", "globals": "^17.4.0", "htmlparser2": "^12", - "monaco-editor": "^0.55.1", + "monaco-editor": "^0", "sass": "^1.62.1", "vite-plugin-cds": "^0.3.1", "vitepress": "2.0.0-alpha.18" From 4541f31f57daf04b3c67ef815c2da8c9939f898c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mirko=20G=C3=BCnther?= <15120217+mgnther@users.noreply.github.com> Date: Tue, 28 Jul 2026 12:54:20 +0200 Subject: [PATCH 23/49] docs: Enhance MCP documentation. (#2743) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enhance MCP documentation with a disclaimer on productive usage and architecture guidance. Co-authored-by: Mirko Günther Co-authored-by: Daniel Hutzel --- guides/protocols/mcp.md | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/guides/protocols/mcp.md b/guides/protocols/mcp.md index bc73834b4..b4c7e7961 100644 --- a/guides/protocols/mcp.md +++ b/guides/protocols/mcp.md @@ -5,7 +5,11 @@ synopsis: > # Model Context Protocol Adapter - +> [!warning] +> The CAP MCP adapter is in **Beta** status and is **not intended for production use**. +> +> The CAP MCP adapter is designed exclusively to expose custom CAP application services via MCP. +> It is not an endorsed pathway for exposing or proxying SAP Application APIs directly via MCP to agents. For endorsed architectures covering agentic access to SAP APIs, please refer to the reference architectures published on the **[SAP Architecture Center](https://architecture.learning.sap.com/docs/ref-arch/98efa0)**. The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open-source standard that enables direct integration between large language model (LLM) applications and external data sources. Any CAP service can be turned into an MCP server, allowing AI agents and LLM-powered tools to interact with the service without additional implementation work. All that is required is annotating it with [ `@mcp`](#serving-mcp). From CAP perspective MCP is just another protocol which we serve similar to _OData_, _GraphQL_, _REST_, or _HCQL_. @@ -494,5 +498,12 @@ Future versions of the adapter may add support for data changes using CREATE, UP ### Prompt Injection Attacks > [!caution] -> The MCP adapter does not perform any input validation or output validation regarding prompt injections. -> Hence, for production use cases ensure you use infrastructure and practices that mitigate prompt injection risks and connect only to trusted MCP agents (for example, Joule). +> The MCP adapter does not perform any input or output validation regarding prompt injection attacks. +> Agents can potentially be manipulated by data returned from the service to execute unintended actions. For any deployment ensure you use infrastructure and practices that mitigate prompt injection risks and connect only to trusted MCP agents (e.g., Joule). + +### Missing Governance Controls + +> [!caution] +> The adapter provides no built-in governance features: there is no rate limiting, no audit logging of agent actions, no approval workflows for sensitive operations, and no policy enforcement layer. Before using MCP in a productive environment, put appropriate controls for example by using MCP Gateway of SAP Integration Suite or integrate with SAP Agent Gateway (not GA yet). +> +> In particular, the CAP MCP adapter must not be used as a gateway or proxy for SAP Application APIs, as doing so bypasses the governance, authentication, and compliance controls those APIs require. Any use of SAP Application APIs must be in accordance with the [SAP API Policy](https://help.sap.com/docs/business-accelerator-hub/sap-business-accelerator-hub/sap-api-policy). For endorsed patterns on agentic access to SAP Application APIs, consult the [SAP Architecture Center](https://architecture.learning.sap.com/docs/ref-arch/98efa0) reference architectures. From 8e6a6a7d7e5c5b515ea6270e0eb0a15a65cb84cd Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Tue, 28 Jul 2026 13:16:02 +0200 Subject: [PATCH 24/49] Fine-tuned adherance to API Policy --- guides/protocols/index.md | 4 ++-- guides/protocols/mcp.md | 31 +++++++++++++++++-------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/guides/protocols/index.md b/guides/protocols/index.md index f17282223..97c59c02f 100644 --- a/guides/protocols/index.md +++ b/guides/protocols/index.md @@ -8,7 +8,7 @@ CAP supports the following service protocols: - **OData**: A widely used protocol for building and consuming RESTful APIs. CAP provides built-in support for OData v2 and v4, allowing you to easily expose your data models as OData services. - **OpenAPI**: A specification for building APIs that allows you to define your API endpoints, request/response formats, and authentication methods. CAP can generate OpenAPI specifications for your services, enabling easy integration with other systems. - **AsyncAPI**: A specification for defining asynchronous APIs, such as those using messaging protocols. CAP supports AsyncAPI for building event-driven applications and integrating with messaging systems. -- **MCP**: Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. +- **MCP**: Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. ## Using Protocols in CAP To use a specific protocol in your CAP application, you typically need to configure your service definitions and handlers accordingly. Here are some general steps to get started: @@ -25,7 +25,7 @@ For more detailed information on each protocol and how to implement them in CAP, - [OData APIs](odata.md) - [OpenAPI](openapi.md) - [AsyncAPI](asyncapi.md) -- [MCP](mcp.md) +- [MCP](mcp.md) These guides provide step-by-step instructions, examples, and best practices for working with each protocol in your CAP applications. diff --git a/guides/protocols/mcp.md b/guides/protocols/mcp.md index b4c7e7961..28cad478c 100644 --- a/guides/protocols/mcp.md +++ b/guides/protocols/mcp.md @@ -3,27 +3,29 @@ synopsis: > Expose CAP services via the Model Context Protocol for seamless AI agent integration. --- -# Model Context Protocol Adapter - -> [!warning] -> The CAP MCP adapter is in **Beta** status and is **not intended for production use**. -> -> The CAP MCP adapter is designed exclusively to expose custom CAP application services via MCP. -> It is not an endorsed pathway for exposing or proxying SAP Application APIs directly via MCP to agents. For endorsed architectures covering agentic access to SAP APIs, please refer to the reference architectures published on the **[SAP Architecture Center](https://architecture.learning.sap.com/docs/ref-arch/98efa0)**. +# Model Context Protocol Adapter The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open-source standard that enables direct integration between large language model (LLM) applications and external data sources. Any CAP service can be turned into an MCP server, allowing AI agents and LLM-powered tools to interact with the service without additional implementation work. All that is required is annotating it with [ `@mcp`](#serving-mcp). From CAP perspective MCP is just another protocol which we serve similar to _OData_, _GraphQL_, _REST_, or _HCQL_. + +> [!caution] SAP API Policy Applies! +> When exposing CAP services through MCP, ensure your use cases comply with the [SAP API Policy](https://help.sap.com/doc/sap-api-policy) and any applicable licensing terms. +> In particular, the CAP MCP adapter, as documented herein, is designed exclusively to expose _custom_ CAP application services via MCP. +> It is not an endorsed pathway for exposing or proxying _SAP Application APIs_ directly via MCP. +> For endorsed architectures covering agentic access to SAP APIs, please refer to the reference architectures published on the +> **[SAP Architecture Center](https://architecture.learning.sap.com/docs/ref-arch/98efa0)**. + + [[toc]] + > [!note] > > This guide is about the *MCP Adapter* – for example, as provided through the [*@cap-js/mcp*](https://github.com/cap-js/mcp) plugin – which powers domain-specific application use cases, for example, to respond to questions for CAP-based applications like *"List all overstocked books"*. > > In parallel, there's also the *MCP Server* plugin ([*@cap-js/mcp-server*](https://github.com/cap-js/mcp-server)), which serves a different purpose, though, that is: AI-assisted *development* of CAP projects. -> [!warning] SAP API Policy Applies -> -> The [SAP API Policy](https://help.sap.com/doc/sap-api-policy) remains applicable even when exposing data via MCP. Before exposing any SAP service or data through an MCP endpoint, ensure your use case complies with the SAP API Policy and any applicable licensing terms. + ## Preliminaries @@ -498,12 +500,13 @@ Future versions of the adapter may add support for data changes using CREATE, UP ### Prompt Injection Attacks > [!caution] -> The MCP adapter does not perform any input or output validation regarding prompt injection attacks. +> The MCP adapter does not perform any input validation or output validation to prevent prompt injection attacks. > Agents can potentially be manipulated by data returned from the service to execute unintended actions. For any deployment ensure you use infrastructure and practices that mitigate prompt injection risks and connect only to trusted MCP agents (e.g., Joule). ### Missing Governance Controls > [!caution] -> The adapter provides no built-in governance features: there is no rate limiting, no audit logging of agent actions, no approval workflows for sensitive operations, and no policy enforcement layer. Before using MCP in a productive environment, put appropriate controls for example by using MCP Gateway of SAP Integration Suite or integrate with SAP Agent Gateway (not GA yet). -> -> In particular, the CAP MCP adapter must not be used as a gateway or proxy for SAP Application APIs, as doing so bypasses the governance, authentication, and compliance controls those APIs require. Any use of SAP Application APIs must be in accordance with the [SAP API Policy](https://help.sap.com/docs/business-accelerator-hub/sap-business-accelerator-hub/sap-api-policy). For endorsed patterns on agentic access to SAP Application APIs, consult the [SAP Architecture Center](https://architecture.learning.sap.com/docs/ref-arch/98efa0) reference architectures. +> The adapter itself does not provide any built-in governance features: there is no automatic rate limiting, no specific audit logging of agent actions, no approval workflows for sensitive operations, and no policy enforcement layer. Before using MCP in a productive environment, put appropriate controls for example by using MCP Gateway of SAP Integration Suite or integrate with SAP Agent Gateway (not GA yet). + +> [!caution] +> The CAP MCP adapter must not be used as a gateway or proxy for SAP Application APIs, as doing so bypasses the governance, authentication, and compliance controls those APIs require. Any use of SAP Application APIs must be in accordance with the [SAP API Policy](https://help.sap.com/docs/business-accelerator-hub/sap-business-accelerator-hub/sap-api-policy). For endorsed patterns on agentic access to SAP Application APIs, consult the [SAP Architecture Center](https://architecture.learning.sap.com/docs/ref-arch/98efa0) reference architectures. From 3f01ec9e3f50ad99406e7b33188f09659db30e47 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 16:19:13 +0200 Subject: [PATCH 25/49] Update dependency @sap/cds to v10.0.4 (#2774) 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/) | [`10.0.3` → `10.0.4`](https://renovatebot.com/diffs/npm/@sap%2fcds/10.0.3/10.0.4) |  |  | --- ### Configuration 📅 **Schedule**: (UTC) - 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 c756c5399..3254cd8cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1129,9 +1129,9 @@ "license": "MIT" }, "node_modules/@sap/cds": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-10.0.3.tgz", - "integrity": "sha512-S9q8vcJXzIsO4KC49sb9JLIhY/k0MJTZcgEOzmhvoBW/lWLLR79Oci0xmyQqSxJwwzjavR9mW8I4wbMJQQMVAA==", + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-10.0.4.tgz", + "integrity": "sha512-+Il9ft2VELzzROI7QANDffMzeXdfZr1URF8H5kBm6zH0KcXhpRVZTohWXCwptfwIv4b57fPIOiRbLVK0L9GfFw==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { From a00f632a42f542786e46fe49365910a3527040d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 16:19:32 +0200 Subject: [PATCH 26/49] Update dependency @cap-js/cds-typer to v0.40.1 (#2771) 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/) | |---|---|---|---| | [@cap-js/cds-typer](https://cap.cloud.sap/) ([source](https://redirect.github.com/cap-js/cds-typer)) | [`0.40.0` → `0.40.1`](https://renovatebot.com/diffs/npm/@cap-js%2fcds-typer/0.40.0/0.40.1) |  |  | --- ### Release Notes --- ### Configuration 📅 **Schedule**: (UTC) - 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 3254cd8cf..e31f65002 100644 --- a/package-lock.json +++ b/package-lock.json @@ -82,9 +82,9 @@ } }, "node_modules/@cap-js/cds-typer": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@cap-js/cds-typer/-/cds-typer-0.40.0.tgz", - "integrity": "sha512-8UWwa4q6DL1vRCq7KwwLXtLAHHkMI6HoPXsIXLVvRMaW11xvtSkMFHcaNjR8WBlccZTA7RWIqHavgKbq57zpKg==", + "version": "0.40.1", + "resolved": "https://registry.npmjs.org/@cap-js/cds-typer/-/cds-typer-0.40.1.tgz", + "integrity": "sha512-uc2LE/hiFfdecp8p+XUYAYCckLeJJF/y/sYy8fIWbBDtZMBr9S3LHveb7PCkBCgbuBegwPuPwzmAJjTiaSjt2A==", "dev": true, "license": "Apache-2.0", "bin": { From 82810b808227ec8305382a6b6ea050bfb1b41d29 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 14:19:52 +0000 Subject: [PATCH 27/49] Update dependency sass to v1.102.0 (#2770) 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/) | |---|---|---|---| | [sass](https://redirect.github.com/sass/dart-sass) | [`1.101.0` → `1.102.0`](https://renovatebot.com/diffs/npm/sass/1.101.0/1.102.0) |  |  | --- ### Release Notescap-js/cds-typer (@cap-js/cds-typer)
### [`v0.40.1`](https://redirect.github.com/cap-js/cds-typer/blob/HEAD/CHANGELOG.md#0401---2026-07-21) [Compare Source](https://redirect.github.com/cap-js/cds-typer/compare/v0.40.0...v0.40.1) ##### Added ##### Changed ##### Deprecated ##### Removed ##### Fixed - Events with dotted names (e.g. `service S { event X.Y : {...} }`) now generate a properly namespaced class `namespace X { class Y }` instead of producing duplicate top-level identifiers. - Event names now use the service-relative name (e.g. `'X.Y'` without preceeding `S`), matching the name the CDS runtime uses when registering and emitting such events. - Entity elements of named struct types used within CDS aspects are now correctly flattened when using `--inlineDeclarations flat`. ##### Security--- ### Configuration 📅 **Schedule**: (UTC) - 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 e31f65002..196da243b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5200,9 +5200,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.101.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.101.0.tgz", - "integrity": "sha512-OL3GoQyoUdDt843DpVmDO6y2k1sc5IhUDSpu8XucEI+35neq5QivZ1iuegnpraEVTJXlQGK1gl27zKcTLEPbQw==", + "version": "1.102.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.102.0.tgz", + "integrity": "sha512-NSOyTnaQF7rTAEOtI2fwb386vL+akyiQLBZu8Na7hXCb+umJy0GAqlcMIaqACZ6Z1VgTBS4K9PG6B3IdjHGJsw==", "dev": true, "license": "MIT", "dependencies": { From 4b6490a9337c1a58d1e5b698f46fcbb1eeed75fb Mon Sep 17 00:00:00 2001 From: Mahati Shankar <93712176+smahati@users.noreply.github.com> Date: Tue, 28 Jul 2026 16:21:02 +0200 Subject: [PATCH 28/49] Remove Node/Java toggle and unify cloud foundry deployment docs (#2775) --- guides/deploy/to-cf.md | 58 ++++++++++++------------------------------ 1 file changed, 16 insertions(+), 42 deletions(-) diff --git a/guides/deploy/to-cf.md b/guides/deploy/to-cf.md index 2648dfe56..4de62bbe8 100644 --- a/guides/deploy/to-cf.md +++ b/guides/deploy/to-cf.md @@ -1,7 +1,6 @@ --- synopsis: > A comprehensive guide on deploying applications built with SAP Cloud Application Programming Model (CAP) to SAP BTP Cloud Foundry environment. -impl-variants: true --- # Deploy to Cloud Foundry @@ -18,43 +17,32 @@ After completing the functional implementation of your CAP application by follow First, you apply these steps manually in an ad-hoc deployment, as described in this guide. Then, after successful deployment, you automate them using [CI/CD pipelines](cicd). -sass/dart-sass (sass)
### [`v1.102.0`](https://redirect.github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#11020) [Compare Source](https://redirect.github.com/sass/dart-sass/compare/1.101.7...1.102.0) - Use the 2.4 gamma transfer function for rec2020, as specified by the latest draft of CSS Color 4. ### [`v1.101.7`](https://redirect.github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#11017) [Compare Source](https://redirect.github.com/sass/dart-sass/compare/1.101.6...1.101.7) - No user-visible changes. ### [`v1.101.6`](https://redirect.github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#11016) [Compare Source](https://redirect.github.com/sass/dart-sass/compare/1.101.5...1.101.6) - No user-visible changes. ### [`v1.101.5`](https://redirect.github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#11015) [Compare Source](https://redirect.github.com/sass/dart-sass/compare/1.101.4...1.101.5) - No user-visible changes. ### [`v1.101.4`](https://redirect.github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#11014) [Compare Source](https://redirect.github.com/sass/dart-sass/compare/1.101.3...1.101.4) - Avoid emitting `rgb()` or `rgba()` functions with non-percent decimal channels. Older browsers only support integer values or (potentially decimal) percentages for these functions, so in order to preserve backwards-compatibility while retaining full precision for modern browsers, legacy colors that contain at least one non-integer channel will now use percentages for their channels (for example, `rgb(0%, 100%, 50%)` rather than `rgb(0, 255, 127.5)`). - Fix a bug where the values of plain-CSS `if()` expressions were emitted using their `meta.inspect()` format rather than their CSS serialization format. ### [`v1.101.3`](https://redirect.github.com/sass/dart-sass/blob/HEAD/CHANGELOG.md#11013) [Compare Source](https://redirect.github.com/sass/dart-sass/compare/1.101.0...1.101.3) - No user-visible changes.- ## Prerequisites The following sections are based on a new project that you can create like this: - - -```sh +::: code-group +```sh [Node.js] cds init bookshop --nodejs --add sample cd bookshop ``` - -::: details Alternatively, download or clone the sample repository - -Exercise the following steps in the [`@capire/bookshop` sample](https://github.com/capire/bookshop): - -```sh -git clone https://github.com/capire/bookshop +```sh [Java] +cds init bookshop --java --add sample cd bookshop ``` - ::: -- -- -```sh -cds init bookshop --java --add sample +::: details Alternatively, use the ready-to-deploy sample project +::: code-group +```sh [Node.js] +git clone https://github.com/capire/bookshop cd bookshop ``` - -> If you want to use a ready-to-be-deployed sample, see our [java/samples](https://github.com/sap-samples/cloud-cap-samples-java). - -[Learn more about Setting Up Local Development.](../../java/getting-started#local){.learn-more} -+```sh [Java] +git clone https://github.com/sap-samples/cloud-cap-samples-java +cd cloud-cap-samples-java +``` +:::
@@ -80,17 +68,13 @@ npm -g outdated #> check whether @sap/cds-dk is listed npm i -g @sap/cds-dk #> if necessary ``` -- -Likewise, ensure the latest version of `@sap/cds` is installed in your project: +For Node.js projects, ensure that the latest version of `@sap/cds` is installed in your project: ```sh npm outdated #> check whether @sap/cds is listed npm i @sap/cds #> if necessary ``` -- #### 3. Cloud MTA Build Tool {#mbt} - Run `mbt` in a terminal to check whether you've installed it. @@ -123,17 +107,7 @@ The `cds add` command ensures required services are configured correctl ### 1. SAP HANA Database - - -While you used SQLite as a low-cost stand-in during development, you use an SAP HANA Cloud database for production: - -- -- -While you used SQLite or H2 as a low-cost stand-in during development, you use an SAP HANA Cloud database for production: - -+While you used SQLite (Node.js) or SQLite/H2 (Java) as a low-cost stand-in during development, you use an SAP HANA Cloud database for production: ```sh cds add hana @@ -384,7 +358,7 @@ We recommend setting up [Dependabot](https://docs.github.com/en/code-security/de -## Upgrade Tenants {.java} +## Upgrade Tenants in Java The CAP Java SDK offers `main` methods for Subscribe/Unsubscribe in the classes `com.sap.cds.framework.spring.utils.Subscribe/Unsubscribe` that can be called from the command line. This way, you can run the tenant subscribe/unsubscribe for the specified tenant. This triggers your custom handlers, which is useful for local testing scenarios. From 0e7b2c9ce7744ca38e6727714150fe0bc23b10c9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 28 Jul 2026 22:08:36 +0200 Subject: [PATCH 29/49] Update dependency @typescript-eslint/parser to v8.65.0 (#2768) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://redirect.github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.64.0` → `8.65.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.64.0/8.65.0) |  |  | --- ### Release Notes--- ### Configuration 📅 **Schedule**: (UTC) - 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 196da243b..66304af10 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1649,16 +1649,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/parser": { - "version": "8.64.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.64.0.tgz", - "integrity": "sha512-KA0OshtlcCCXmbfqyZkM5pV3/WNraJf7DkJRLpyrmwPtud57H5BDX7C3k0LPSPxpprfRL+cJDGabF10mvNCoCw==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", + "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.64.0", - "@typescript-eslint/types": "8.64.0", - "@typescript-eslint/typescript-estree": "8.64.0", - "@typescript-eslint/visitor-keys": "8.64.0", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", "debug": "^4.4.3" }, "engines": { @@ -1674,14 +1674,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.64.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.64.0.tgz", - "integrity": "sha512-tk4WpOJ6IEbGrVHaNmM0YRrwAD3exZlIK3iadQNAxh4YKk6jvUQ4ecq18n+v7+meh+cJ3j+D8nbk8sRKhlwLQg==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", + "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.64.0", - "@typescript-eslint/types": "^8.64.0", + "@typescript-eslint/tsconfig-utils": "^8.65.0", + "@typescript-eslint/types": "^8.65.0", "debug": "^4.4.3" }, "engines": { @@ -1696,14 +1696,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.64.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.64.0.tgz", - "integrity": "sha512-CXEaFdYXjSTgKhisNkwCcJwTP8Pl+fmRrEQrri4nm3vU743bALrxzLmq7fHG/7e6a5xO0lDYeURpZmBuhHk54w==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz", + "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.64.0", - "@typescript-eslint/visitor-keys": "8.64.0" + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1714,9 +1714,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.64.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.64.0.tgz", - "integrity": "sha512-2yo8rRNKuzbVWQp5kslhANqZ2uDAeROQHBRZNPu8JDsHmeFNj/XJJhX/FhNUWmkHHvoNsKa6+tHJiig87EzsQw==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz", + "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==", "dev": true, "license": "MIT", "engines": { @@ -1731,9 +1731,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.64.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.64.0.tgz", - "integrity": "sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz", + "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==", "dev": true, "license": "MIT", "engines": { @@ -1745,16 +1745,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.64.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.64.0.tgz", - "integrity": "sha512-Pztpsn1aCE1oWDvDEfUk31nngvvF7vUB5SwHFEaZIFpvw7WJtqUHHL4plBZDA9HfWJJjL13BdG0YrJInTUvoVA==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz", + "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.64.0", - "@typescript-eslint/tsconfig-utils": "8.64.0", - "@typescript-eslint/types": "8.64.0", - "@typescript-eslint/visitor-keys": "8.64.0", + "@typescript-eslint/project-service": "8.65.0", + "@typescript-eslint/tsconfig-utils": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -1773,13 +1773,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.64.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.64.0.tgz", - "integrity": "sha512-mrtuL8Nsn6gi2H4mo5KMTp823M+3Q19Ew/i+Zlikq20tIMm99C3Ez0dCmkWWnxut20esQvTg8aUSEhMcAOXhEw==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz", + "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.64.0", + "@typescript-eslint/types": "8.65.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { From 4a0b35eb4846223e26dc2105ee60ddb6760c8a42 Mon Sep 17 00:00:00 2001 From: Johannes Vogel <31311694+johannes-vogel@users.noreply.github.com> Date: Wed, 29 Jul 2026 11:55:39 +0200 Subject: [PATCH 30/49] update the ft provider snippet (#2780) use middlewars.add instead of bootstrap event to only add feature toggles for authenticated users. Co-authored-by: sjvans <30337871+sjvans@users.noreply.github.com> --- 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 97c06dbfb..4f503f348 100644 --- a/guides/extensibility/feature-toggles.md +++ b/guides/extensibility/feature-toggles.md @@ -387,10 +387,10 @@ So, to add support for a specific feature toggles management you can add a simpl ```js const cds = require ('@sap/cds') -cds.on('bootstrap', app => app.use ((req,res,next) => { +cds.middlewares.add((req,res,next) => { req.features = req.headers.features || 'isbn' next() -})) +}, { before: 'ctx_model' }) ``` ## Feature-Toggled Custom Logic From 4c320971bd75aa5080187d80427f707cdc48fc7a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 29 Jul 2026 13:09:53 +0000 Subject: [PATCH 31/49] chore: Update CLI texts (#2779) 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 | 6 +++--- tools/assets/help/cds-version.out.md | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/tools/assets/help/cds-version-md.out.md b/tools/assets/help/cds-version-md.out.md index 5fe656538..654ef348c 100644 --- a/tools/assets/help/cds-version-md.out.md +++ b/tools/assets/help/cds-version-md.out.md @@ -4,9 +4,9 @@ | Package | Version | Location | | -------------------- | ------- | ------------------------------------------------------------------ | - | @sap/cds-dk (global) | 10.0.5 | .../node_modules/@sap/cds-dk | - | @sap/cds | 10.0.4 | .../node_modules/@sap/cds | - | @sap/cds-compiler | 7.0.2 | .../node_modules/@sap/cds-compiler | + | @sap/cds-dk (global) | 10.0.6 | .../node_modules/@sap/cds-dk | + | @sap/cds | 10.0.5 | .../node_modules/@sap/cds | + | @sap/cds-compiler | 7.0.3 | .../node_modules/@sap/cds-compiler | | @sap/cds-fiori | 2.3.0 | .../node_modules/@sap/cds-fiori | | @cap-js/db-service | 3.0.1 | .../node_modules/@cap-js/db-service | | @cap-js/sqlite | 3.0.2 | .../node_modules/@cap-js/sqlite | diff --git a/tools/assets/help/cds-version.out.md b/tools/assets/help/cds-version.out.md index 5c5d6275d..2aa25b10f 100644 --- a/tools/assets/help/cds-version.out.md +++ b/tools/assets/help/cds-version.out.md @@ -2,9 +2,9 @@typescript-eslint/typescript-eslint (@typescript-eslint/parser)
### [`v8.65.0`](https://redirect.github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8650-2026-07-20) [Compare Source](https://redirect.github.com/typescript-eslint/typescript-eslint/compare/v8.64.0...v8.65.0) ##### 🚀 Features - add warning when TS 7 is detected ([#12529](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12529)) - **parser:** add onUnsupportedTypeScriptVersion option to error on unsupported TypeScript versions ([#12465](https://redirect.github.com/typescript-eslint/typescript-eslint/pull/12465)) ##### ❤️ Thank You - Evyatar Daud [@StyleShit](https://redirect.github.com/StyleShit) - Josh Goldberg ✨ - Kirk Waiblinger [@kirkwaiblinger](https://redirect.github.com/kirkwaiblinger) - 송재욱 See [GitHub Releases](https://redirect.github.com/typescript-eslint/typescript-eslint/releases/tag/v8.65.0) for more information. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website.> cds version - @sap/cds-dk (global) 10.0.5 .../node_modules/@sap/cds-dk - @sap/cds 10.0.4 .../node_modules/@sap/cds - @sap/cds-compiler 7.0.2 .../node_modules/@sap/cds-compiler + @sap/cds-dk (global) 10.0.6 .../node_modules/@sap/cds-dk + @sap/cds 10.0.5 .../node_modules/@sap/cds + @sap/cds-compiler 7.0.3 .../node_modules/@sap/cds-compiler @sap/cds-fiori 2.3.0 .../node_modules/@sap/cds-fiori @cap-js/db-service 3.0.1 .../node_modules/@cap-js/db-service @cap-js/sqlite 3.0.2 .../node_modules/@cap-js/sqlite From 33ae62d42782cc590f4ac98b35a9264866bed0b0 Mon Sep 17 00:00:00 2001 From: RobinDate: Thu, 30 Jul 2026 08:55:32 +0200 Subject: [PATCH 32/49] docs: add RestTestClient integration testing example (#2782) ## What Adds a `RestTestClient` example alongside the existing `MockMvc` example in the Java integration testing guide (`java/developing-applications/testing.md`). ## Why Spring Framework 7.0 introduced `RestTestClient`. This documents it as an equivalent alternative for CAP Java integration tests. ## Details - Splits the **Integration Testing** section into **Using MockMvc** (unchanged) and **Using RestTestClient**. - The `RestTestClient` code is copied from the [CAP Java bookshop sample](https://github.com/SAP-samples/cloud-cap-samples-java/blob/main/srv/src/test/java/my/bookshop/CatalogServiceITest.java) (uses `@AutoConfigureRestTestClient` + `@Autowired RestTestClient` and the typed `.value(String.class, ...)` assertion). - States both approaches are equivalent with no preference. - Links the Spring [MockMvc](https://docs.spring.io/spring-framework/reference/testing/mockmvc.html) and [RestTestClient](https://docs.spring.io/spring-framework/reference/testing/resttestclient.html) reference docs. --- java/developing-applications/testing.md | 42 +++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/java/developing-applications/testing.md b/java/developing-applications/testing.md index 3de9421fa..5d8cfa68b 100644 --- a/java/developing-applications/testing.md +++ b/java/developing-applications/testing.md @@ -217,9 +217,11 @@ For a more extensive version of the previous `CatalogServiceTest` snippets, have Integration tests enable us to verify the behavior of a custom event handler execution doing a roundtrip starting at the protocol adapter layer and going through the whole CAP architecture until it reaches the service and event handler layer and then back again through the protocol adapter. -As the services defined in our `CDS model` are exposed as `OData` endpoints, by using [MockMvc](https://docs.spring.io/spring-framework/reference/testing/mockmvc.html) we can simply invoke a specific `OData` request and assert the response from the addressed service. +As the services defined in our `CDS model` are exposed as `OData` endpoints, we can simply invoke a specific `OData` request and assert the response from the addressed service. Spring provides two clients for this purpose: [MockMvc](https://docs.spring.io/spring-framework/reference/testing/mockmvc.html) and, since Spring Framework 7.0 (Spring Boot 4.x), the [RestTestClient](https://docs.spring.io/spring-framework/reference/testing/resttestclient.html). Both approaches perform an equivalent server-side roundtrip through the whole CAP architecture without starting a servlet container, so you can pick whichever fits your style — there's no preference. However, with RestTestClient you can also switch to real HTTP communication for either testing your complete HTTP layer or remote services. -The following demonstrates this by invoking a `GET` request to the `OData` endpoint of our `Books` entity, which triggers the execution of the `discountBooks` method of the `CatalogServiceHandler` in our example: +The following demonstrates this by invoking a `GET` request to the `OData` endpoint of our `Books` entity, which triggers the execution of the `discountBooks` method of the `CatalogServiceHandler` in our example. + +#### Using MockMvc ```java @SpringBootTest @@ -247,6 +249,42 @@ public class CatalogServiceITest { } ``` +#### Using RestTestClient + +The same test can be written with `RestTestClient`, which offers a fluent, [WebTestClient](https://docs.spring.io/spring-framework/reference/testing/webtestclient.html)-style API: + +```java +@SpringBootTest +@AutoConfigureRestTestClient +public class CatalogServiceITest { + + private static final String booksURI = "/api/browse/Books"; + + @Autowired + private RestTestClient client; + + @Test + public void discountApplied() { + client.get().uri(booksURI + "?$filter=stock gt 200&top=1") + .exchange() + .expectStatus().isOk() + .expectBody() + .jsonPath("$.value[0].title") + .value(String.class, title -> assertThat(title).contains("11% discount")); + } + + @Test + public void discountNotApplied() { + client.get().uri(booksURI + "?$filter=stock lt 100&top=1") + .exchange() + .expectStatus().isOk() + .expectBody() + .jsonPath("$.value[0].title") + .value(String.class, title -> assertThat(title).doesNotContain("11% discount")); + } +} +``` + ::: tip Check out the version in our [CAP Java bookshop sample project](https://github.com/SAP-samples/cloud-cap-samples-java/blob/main/srv/src/test/java/my/bookshop/CatalogServiceITest.java) for additional examples of integration testing. ::: From d8d05540d2fa4b2c5166463cdbf8465d03ffff89 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Fri, 31 Jul 2026 09:06:07 +0200 Subject: [PATCH 33/49] Clean up and revise frontmatter like `synopsis` (#2789) - Use Vitepress standard [`description` field](https://vitepress.dev/reference/frontmatter-config#description) instead of `synopsis`. - Add `description` where it was missing - Revisit existing `description`/`synopsis` fields for grammar and style - Remove unused frontmatter entries `breadcrumbs`, `index`, `label`, `#layout`, `status`, `section`, `shorty` --- .vitepress/config.js | 2 +- .vitepress/theme/components/IndexList.vue | 2 +- .vitepress/theme/components/indexFilter.ts | 2 +- cds/annotations.md | 7 +- cds/aspects.md | 3 +- cds/cdl.md | 13 +- cds/common.md | 3 +- cds/compiler/hdbcds-to-hdbtable.md | 4 +- cds/compiler/v2.md | 19 +-- cds/cql.md | 10 +- cds/cqn.md | 5 +- cds/csn.md | 4 +- cds/cxl.md | 20 +-- cds/cxn.md | 8 +- cds/index.md | 3 +- cds/models.md | 14 +- cds/types.md | 5 +- get-started/bookshop.md | 3 +- get-started/concepts.md | 5 +- get-started/feature-matrix.md | 3 +- get-started/features.md | 3 +- get-started/get-help.md | 2 + get-started/index.md | 3 +- get-started/learn-more.md | 14 +- guides/databases/cap-level-dbs.md | 5 + guides/databases/cdl-to-ddl.md | 5 + guides/databases/h2.md | 4 + guides/databases/hana-native.md | 6 +- guides/databases/hana.md | 3 +- guides/databases/index.md | 14 +- guides/databases/initial-data.md | 5 + guides/databases/new-dbs.md | 4 + guides/databases/performance.md | 9 +- guides/databases/postgres.md | 4 + guides/databases/schema-evolution.md | 23 +-- guides/databases/sqlite.md | 14 +- guides/databases/vector-embeddings.md | 11 +- guides/deploy/build.md | 3 +- guides/deploy/cicd.md | 5 +- guides/deploy/health-checks.md | 3 +- guides/deploy/index.md | 2 + guides/deploy/microservices.md | 3 +- guides/deploy/to-cf.md | 6 +- guides/deploy/to-kyma.md | 8 +- guides/domain/index.md | 6 +- guides/domain/temporal-data.md | 6 +- guides/events/core-concepts.md | 9 +- guides/events/event-hub.md | 7 +- guides/events/event-mesh.md | 5 +- guides/events/event-queues.md | 5 +- guides/events/index.md | 6 +- guides/events/is-aem.md | 3 +- guides/events/messaging.md | 10 +- guides/events/s4.md | 3 +- guides/extensibility/customization.md | 10 +- guides/extensibility/feature-toggles.md | 4 +- guides/extensibility/index.md | 8 +- guides/index.md | 4 +- guides/integration/calesi.md | 4 + guides/integration/data-federation.md | 5 + guides/integration/index.md | 5 + guides/integration/inner-loops.md | 4 + guides/integration/platform/attachments.md | 35 ++-- guides/integration/platform/audit-logging.md | 37 +++-- guides/integration/platform/ias-xsuaa.md | 9 +- guides/integration/platform/notifications.md | 7 +- guides/integration/platform/telemetry.md | 7 +- guides/integration/plugins-guide.md | 6 +- guides/integration/reuse-and-compose.md | 4 + guides/integration/service-bindings.md | 5 + guides/multitenancy/index.md | 4 +- guides/multitenancy/mtxs.md | 7 +- guides/multitenancy/old-mtx-apis.md | 4 +- guides/multitenancy/old-mtx-migration.md | 5 +- guides/protocols/asyncapi.md | 4 +- guides/protocols/core-data-apis.md | 7 +- guides/protocols/index.md | 5 + guides/protocols/mcp.md | 2 +- guides/protocols/odata.md | 7 +- guides/protocols/openapi.md | 4 +- guides/protocols/protocol-adapters.md | 5 + guides/querying/index.md | 5 +- guides/security/authentication.md | 5 +- guides/security/authorization.md | 28 ++-- guides/security/cap-users.md | 149 +++++++++--------- guides/security/data-privacy.md | 11 +- guides/security/data-protection.md | 18 +-- guides/security/dpp-annotations.md | 5 +- guides/security/dpp-audit-logging.md | 5 +- guides/security/dpp-drm.md | 5 +- guides/security/dpp-pdm.md | 5 +- guides/security/index.md | 8 +- guides/security/overview.md | 11 +- guides/security/remote-authentication.md | 5 +- guides/services/constraints.md | 3 +- guides/services/consuming-services.md | 2 +- guides/services/custom-actions.md | 3 +- guides/services/custom-code.md | 5 +- guides/services/index.md | 4 +- guides/services/media-data.md | 3 +- guides/services/providing-services.md | 2 + guides/services/served-ootb.md | 3 +- guides/services/status-flows.md | 3 +- guides/uis/analytics.md | 4 +- guides/uis/fiori.md | 5 + guides/uis/i18n.md | 2 + guides/uis/index.md | 4 +- guides/uis/localized-data.md | 3 +- guides/uis/vue-react.md | 5 + java/auditlog.md | 5 +- java/building-plugins.md | 5 +- java/cap-plugins-in-spring-boot-apps.md | 5 +- java/cds-data.md | 4 +- java/change-tracking.md | 25 ++- java/cqn-services/application-services.md | 6 +- java/cqn-services/index.md | 3 +- java/cqn-services/persistence-services.md | 8 +- java/cqn-services/remote-services.md | 4 +- java/developing-applications/building.md | 5 +- java/developing-applications/configuring.md | 4 +- java/developing-applications/index.md | 5 +- java/developing-applications/properties.md | 3 +- java/developing-applications/running.md | 12 +- java/developing-applications/testing.md | 2 +- java/event-handlers/changeset-contexts.md | 4 +- java/event-handlers/index.md | 5 +- java/event-handlers/indicating-errors.md | 4 +- java/event-handlers/request-contexts.md | 8 +- java/event-queues.md | 3 +- java/fiori-drafts.md | 6 +- java/getting-started.md | 6 +- java/index.md | 4 +- java/messaging.md | 8 +- java/migration.md | 4 +- java/multitenancy-classic.md | 7 +- java/multitenancy.md | 17 +- java/operating-applications/dashboard.md | 9 +- java/operating-applications/index.md | 5 +- java/operating-applications/observability.md | 5 +- java/operating-applications/optimizing.md | 2 +- java/reflection-api.md | 4 +- java/security.md | 19 ++- java/services.md | 3 +- java/spring-boot-integration.md | 5 +- java/versions.md | 5 +- java/working-with-cql/index.md | 5 +- java/working-with-cql/query-api.md | 20 +-- java/working-with-cql/query-execution.md | 5 +- java/working-with-cql/query-introspection.md | 4 +- node.js/app-services.md | 3 +- node.js/authentication.md | 6 +- node.js/best-practices.md | 3 +- node.js/cds-compile.md | 2 + node.js/cds-connect.md | 5 +- node.js/cds-env.md | 6 +- node.js/cds-facade.md | 3 +- node.js/cds-i18n.md | 3 +- node.js/cds-log.md | 5 +- node.js/cds-plugins.md | 3 +- node.js/cds-ql.md | 5 +- node.js/cds-reflect.md | 6 +- node.js/cds-serve.md | 3 +- node.js/cds-server.md | 3 +- node.js/cds-test.md | 3 +- node.js/cds-tx.md | 4 +- node.js/cds-utils.md | 3 +- node.js/core-services.md | 2 + node.js/databases.md | 8 +- node.js/event-queues.md | 3 +- node.js/events.md | 7 +- node.js/fiori.md | 3 +- node.js/index.md | 4 +- node.js/messaging.md | 14 +- node.js/remote-services.md | 5 +- node.js/streaming.md | 5 +- node.js/typescript.md | 6 +- plugins/index.md | 3 +- tools/apis/cds-add.md | 4 +- tools/apis/cds-build.md | 3 +- tools/apis/cds-import.md | 2 +- tools/apis/index.md | 4 +- tools/cds-bind.md | 3 +- tools/cds-cli.md | 2 +- tools/cds-editors.md | 2 +- tools/cds-lint/index.md | 4 +- .../rules/assoc2many-ambiguous-key/index.md | 4 - .../rules/auth-no-empty-restrictions/index.md | 4 - .../auth-restrict-grant-service/index.md | 4 - .../cds-lint/rules/auth-use-requires/index.md | 4 - .../rules/auth-valid-restrict-grant/index.md | 4 - .../rules/auth-valid-restrict-keys/index.md | 4 - .../rules/auth-valid-restrict-to/index.md | 4 - .../rules/auth-valid-restrict-where/index.md | 4 - .../case-sensitive-well-known-events/index.md | 3 - .../rules/extension-restrictions/index.md | 4 - tools/cds-lint/rules/index.md | 4 +- .../rules/latest-cds-version/index.md | 4 - .../rules/no-cross-service-import/index.md | 3 - tools/cds-lint/rules/no-db-keywords/index.md | 4 - .../rules/no-deep-sap-cds-import/index.md | 3 - .../rules/no-dollar-prefixed-names/index.md | 4 - .../rules/no-escaped-anno-brackets/index.md | 4 - .../cds-lint/rules/no-java-keywords/index.md | 4 - .../cds-lint/rules/no-join-on-draft/index.md | 4 - .../rules/no-shared-handler-variable/index.md | 3 - .../rules/sql-cast-suggestion/index.md | 4 - .../rules/sql-null-comparison/index.md | 4 - .../rules/start-elements-lowercase/index.md | 4 - .../rules/start-entities-uppercase/index.md | 4 - .../use-cql-select-template-strings/index.md | 3 - .../cds-lint/rules/valid-csv-header/index.md | 4 - tools/cds-typer.md | 4 +- tools/index.md | 7 +- 213 files changed, 669 insertions(+), 727 deletions(-) diff --git a/.vitepress/config.js b/.vitepress/config.js index 540ba5d6b..00aa5d5a9 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -164,7 +164,7 @@ config.themeConfig.search = { tokenize: text => text.split( /[\n\r #%*,=/:;?[\]{}()&]+/u ), // simplified charset: removed [-_.@] and non-english chars (diacritics etc.) processTerm: (term, fieldName) => { term = term.trim().toLowerCase().replace(/^\.+/, '').replace(/\.+$/, '') - const stopWords = ['frontmatter', '$frontmatter.synopsis', 'and', 'about', 'but', 'now', 'the', 'with', 'you'] + const stopWords = ['frontmatter', '$frontmatter.description', 'and', 'about', 'but', 'now', 'the', 'with', 'you'] if (term.length < 2 || stopWords.includes(term)) return false if (fieldName === 'text') { diff --git a/.vitepress/theme/components/IndexList.vue b/.vitepress/theme/components/IndexList.vue index 9ad27c66b..dea64e8b6 100644 --- a/.vitepress/theme/components/IndexList.vue +++ b/.vitepress/theme/components/IndexList.vue @@ -11,7 +11,7 @@ diff --git a/.vitepress/theme/components/indexFilter.ts b/.vitepress/theme/components/indexFilter.ts index fd2328c21..c268ee162 100644 --- a/.vitepress/theme/components/indexFilter.ts +++ b/.vitepress/theme/components/indexFilter.ts @@ -31,7 +31,7 @@ export default (pages:ContentDataCustom[], basePath:string):ContentDataCustom[] url: p.url, title: p.title, frontmatter: { - synopsis: p.frontmatter.synopsis + description: p.frontmatter.description }, // this data is inlined in each index page, so omit unnecessary data src:undefined, html:undefined, excerpt:undefined diff --git a/cds/annotations.md b/cds/annotations.md index c1b56e2bc..6d6d5afdc 100644 --- a/cds/annotations.md +++ b/cds/annotations.md @@ -1,15 +1,12 @@ --- -# layout: cds-ref -shorty: Annotations -synopsis: > +description: > Find here a reference and glossary of common annotations intrinsically supported by the CDS compiler and runtimes. -status: released uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/855e00bd559742a3b8276fbed4af1008.html --- # Common Annotations -{{ $frontmatter.synopsis }} +{{ $frontmatter.description }} [Learn more about the syntax of annotations.](./cdl#annotations){.learn-more} diff --git a/cds/aspects.md b/cds/aspects.md index 96868685c..966c5f75d 100644 --- a/cds/aspects.md +++ b/cds/aspects.md @@ -1,7 +1,6 @@ --- -synopsis: > +description: > Discusses the differences of the mixin-based approach of Aspects to inheritance as known from languages like Java. -status: released --- # Aspect-Oriented Modeling diff --git a/cds/cdl.md b/cds/cdl.md index 0f117c6ed..9487f7826 100644 --- a/cds/cdl.md +++ b/cds/cdl.md @@ -1,7 +1,6 @@ --- -# shorty: Definition Language -synopsis: > - Specification of the definition language used to model data models and services in an easy and user-centric syntax. Includes a reference and overview of all CDS concepts and features with compact examples. +description: > + Specification of the definition language used to model data models and services in an easy, user-centric syntax, including a reference and overview of all CDS concepts and features with compact examples. #permalink: /cds/cdl/ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/855e00bd559742a3b8276fbed4af1008.html --- @@ -285,7 +284,7 @@ CDL supports line-end, block comments, and *doc* comments as in Java and JavaScr /** doc comment */ ``` -#### Doc Comments +#### Doc Comments A multi-line comment of the form `/** … */` at an [annotation position](#annotation-targets) is considered a *doc comment*: @@ -451,7 +450,7 @@ 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). @@ -858,7 +857,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/cdl-to-ddl#cdspersistenceskip). 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/cdl-to-ddl#cdspersistenceskip). 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. @@ -934,7 +933,7 @@ entity Addresses { ``` -### Managed (To-One) Associations +### Managed (To-One) Associations ###### managed-associations For to-one associations, CDS can automatically resolve and add requisite foreign key elements from the target's primary keys and implicitly add respective join conditions. diff --git a/cds/common.md b/cds/common.md index ffba589a5..f3ad9fac1 100644 --- a/cds/common.md +++ b/cds/common.md @@ -1,6 +1,5 @@ --- -# layout: cds-ref -synopsis: > +description: > Introduces @sap/cds/common, a prebuilt CDS model shipped with @sap/cds that provides common types and aspects. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/855e00bd559742a3b8276fbed4af1008.html --- diff --git a/cds/compiler/hdbcds-to-hdbtable.md b/cds/compiler/hdbcds-to-hdbtable.md index c0863a491..35e8ff653 100644 --- a/cds/compiler/hdbcds-to-hdbtable.md +++ b/cds/compiler/hdbcds-to-hdbtable.md @@ -1,6 +1,6 @@ --- -# layout: cds-ref -status: released +description: > + Step-by-step instructions for migrating SAP HANA database deployments from the deprecated `hdbcds` format to `hdbtable`. --- # Moving From _.hdbcds_ To _.hdbtable_ diff --git a/cds/compiler/v2.md b/cds/compiler/v2.md index d85e5f591..24138db70 100644 --- a/cds/compiler/v2.md +++ b/cds/compiler/v2.md @@ -1,18 +1,13 @@ --- -shorty: Compiler v2 -synopsis: > - This document describes the upgrade to compiler version 2, released March 2021. As both compiler version 1 and version 2 are out of maintenance by now, - we expect that all projects have already upgraded. If in doubt, run `cds v` to find out which version of the CAP modules you have in use. - -# layout: cds-ref -status: released +description: > + Describes the upgrade to CDS compiler version 2 (released March 2021), which is now out of maintenance and expected to already be in use by all projects. --- # Upgrade to Compiler v2 -{{ $frontmatter.synopsis }} +{{ $frontmatter.description }} CDS compiler version 2 brings numerous improvements, which allow us to significantly streamline model processing going forward. Changes mostly affect internal implementations of the compiler and nonpublic parts of the artifacts produced by the compiler (CSN, EDMX, ...), hence are unlikely to be observed by users of CDS. @@ -636,7 +631,7 @@ CAP Java supports using CDS models that have been compiled with the CDS complier 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`! ::: @@ -711,7 +706,7 @@ CAP Java allows to [provide initial data](../../guides/databases/initial-data) t mv bookshop-Books_texts.csv bookshop-Books.texts.csv ``` -::: warning +::: warning If a CSV file has already been deployed to a productive SAP HANA schema it can't be renamed any longer. To support this situation cds deploy as well as the CSV data loader in CAP Java still suppport CSV files with a `_texts` suffix. ::: @@ -754,7 +749,7 @@ In this example, the return type of the `cancel` function is automatically expos With compiler v1 this change was also reflected in the CSN. With compiler v2 this is not the case any longer. -::: warning +::: warning If types are used in a service that are defined outside of the service the [generated accessor interface](../../java/cds-data#generated-accessor-interfaces) will change when upgrading from compiler v1 to v2! ::: @@ -838,7 +833,7 @@ OData, however, does not support anonymous types. Hence, the compiler will autom In this example the compiler generated the type `Person_emails` in the OData service `hr`. -::: warning +::: warning If an inline defined type is used in a service the [generated accessor interface](../../java/cds-data#generated-accessor-interfaces) will change (an inner interface is generated) when upgrading from compiler v1 to v2! ::: diff --git a/cds/cql.md b/cds/cql.md index dfe91df2b..bf8d5154f 100644 --- a/cds/cql.md +++ b/cds/cql.md @@ -1,7 +1,5 @@ --- -# layout: cds-ref -shorty: Query Language -synopsis: > +description: > Specification of the CDS Query Language (aka CQL) which is an extension of the standard SQL SELECT statement. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/855e00bd559742a3b8276fbed4af1008.html --- @@ -422,14 +420,14 @@ where the corresponding type can be deduced: type Status : String enum { open; closed; in_progress; }; entity OpenOrder as projection on Order { - + case status when #open then 0 when #in_progress then 1 end as status_int : Integer, (status = #in_progress ? 'is in progress' : 'is open') - as status_txt : String, - + as status_txt : String, + } where status = #open or status = #in_progress; ``` diff --git a/cds/cqn.md b/cds/cqn.md index 1a0ee89cf..28e30176b 100644 --- a/cds/cqn.md +++ b/cds/cqn.md @@ -1,9 +1,6 @@ --- -# layout: cds-ref -shorty: Query Notation -synopsis: > +description: > Specification of the Core Query Notation (CQN) format that is used to capture queries as plain JavaScript objects. -status: released --- # Query Notation (CQN) diff --git a/cds/csn.md b/cds/csn.md index 27384f77b..291549766 100644 --- a/cds/csn.md +++ b/cds/csn.md @@ -1,7 +1,5 @@ --- -# layout: cds-ref -shorty: Schema Notation -synopsis: > +description: > Specification of CSN, CDS' canonical format for representing CDS models as plain JavaScript objects, similar to JSON Schema. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/855e00bd559742a3b8276fbed4af1008.html --- diff --git a/cds/cxl.md b/cds/cxl.md index d54d55101..41936fe71 100644 --- a/cds/cxl.md +++ b/cds/cxl.md @@ -1,5 +1,5 @@ --- -synopsis: > +description: > Specification of the CDS Expression Language (CXL) used to capture expressions in CDS. --- @@ -121,7 +121,7 @@ This syntax diagram describes the possible expressions: > [Operators](#xpr), > [Literals](#val), > [Functions](#func), -> +> > Used in: > [Calculated Elements](#in-calculated-elements), > [Annotations](#in-annotations), @@ -249,8 +249,8 @@ Compared to the previous example, we now use the expression directly in the quer to calculate the total value of all books in stock. -## Path Expressions (`ref`) -###### ref +## Path Expressions (`ref`) +###### ref A `ref` (short for reference) is used to refer to an element within the model. It can be used to navigate along path segments. Such a navigation is often @@ -260,7 +260,7 @@ referred to as a **path expression**. > Using: > [Infix Filters](#infix-filters) -> +> > Used in: > [Expressions](#expr) @@ -400,7 +400,7 @@ This allows you to specify conditions on subsets of associated entities, enablin 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, an infix filter condition is an expression +If we apply this terminology to path expressions, an infix filter condition is an expression that is applied to a path segment of a path expression. This allows you to filter the target of an association based on certain criteria. @@ -408,7 +408,7 @@ This allows you to filter the target of an association based on certain criteria > Using: > [Expressions](#expr) -> +> > Used in: > [Path Expressions](#ref) @@ -554,7 +554,7 @@ As depicted in below excerpt of the syntax diagram for `expr`, CXL supports all > Using: > [Expressions](#expr) -> +> > Used in: > [Expressions](#expr) @@ -578,7 +578,7 @@ Following table gives an overview of the guaranteed supported operators in CXL: > [!tip] Bivalent `==` and `!=` Operators > In addition to standard SQL's `=` and `<>` operators, CXL also supports `==` and `!=` as bivalent variants as opposed to the trivalent semantics of `=` and `<>` when it comes to null handling. Learn more about this in the [_Bivalent `==` and `!=` Operators_](../guides/databases/cap-level-dbs#bivalent--and--operators) section of the databases documentation. -> [!tip] Ternary `?:` Operator +> [!tip] Ternary `?:` Operator > In addition to the standard SQL `case when then` expression, CXL also supports the ternary `?:` operator as a more concise syntax for simple case expressions. Learn more about this in the [_Ternary `?:` Operator_](../guides/databases/cap-level-dbs#ternary--operator) section of the databases documentation. @@ -590,7 +590,7 @@ Following table gives an overview of the guaranteed supported operators in CXL: > Using: > [Expressions](#expr) -> +> > Used in: > [Expressions](#expr) diff --git a/cds/cxn.md b/cds/cxn.md index 9fd2814fb..1dec06d2d 100644 --- a/cds/cxn.md +++ b/cds/cxn.md @@ -1,7 +1,5 @@ --- -# layout: cds-ref -shorty: Expressions -synopsis: > +description: > Specification of the Core Expression Notation (CXN) used to capture expressions as plain JavaScript objects. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/855e00bd559742a3b8276fbed4af1008.html --- @@ -137,10 +135,10 @@ Examples: ```js [dev] cds repl -> cds.parse.expr(`x<9`) == +> cds.parse.expr(`x<9`) == {xpr:[ {ref:['x']}, '<', {val:9} ]} -> cds.parse.expr(`x<9 and (y=1 or z=2)`) == +> cds.parse.expr(`x<9 and (y=1 or z=2)`) == {xpr:[ {ref:['x']}, '<', {val:9}, 'and', {xpr:[ {ref:['y']}, '=', {val:1}, 'or', {ref:['z']}, '=', {val:2} diff --git a/cds/index.md b/cds/index.md index 25daf6972..2462f843e 100644 --- a/cds/index.md +++ b/cds/index.md @@ -1,5 +1,6 @@ --- -status: released +description: > + Core Data Services (CDS) is CAP's modeling language for declaratively capturing service definitions, data models, queries, and expressions. --- # Core Data Services (CDS) diff --git a/cds/models.md b/cds/models.md index d0cdd739c..39393ec30 100644 --- a/cds/models.md +++ b/cds/models.md @@ -1,14 +1,12 @@ --- -# layout: cds-ref -synopsis: > +description: > Introduces the fundamental principles of CDS models. -status: released --- # On The Nature of Models -{{ $frontmatter.synopsis }} +{{ $frontmatter.description }} ## Metaphysics of Languages @@ -20,17 +18,17 @@ For example, a *data model describes the type structure (commonly also called *' ### Representations -Models can come in different *representations*, which follow different *syntaxes*. For example, we use the *CDL* syntax for *human-readable* representations of CDS models, while CSN is an *object notation*, that is a special form of *syntax*, used for *machine-readable* representations of CDS models. +Models can come in different *representations*, which follow different *syntaxes*. For example, we use the *CDL* syntax for *human-readable* representations of CDS models, while CSN is an *object notation*, that is a special form of *syntax*, used for *machine-readable* representations of CDS models. -::: details On CSN representations... +::: details On CSN representations... -We can go one meta-level further and distinguish between different representations of CSN representations: in a Node.js process at runtime they are just native in-memory JavaScript objects, when shared they are serialized to JSON format, which can in turn be translated to YAML, and so forth. When we create CSN objects at runtime, they could be plain JavaScript code. +We can go one meta-level further and distinguish between different representations of CSN representations: in a Node.js process at runtime they are just native in-memory JavaScript objects, when shared they are serialized to JSON format, which can in turn be translated to YAML, and so forth. When we create CSN objects at runtime, they could be plain JavaScript code. ::: ### Reflections -CDS models can be compiled to other languages, that play in the same fields, yet not covering the same information, but rather with some loss of information — we call these '*reflections*'. +CDS models can be compiled to other languages, that play in the same fields, yet not covering the same information, but rather with some loss of information — we call these '*reflections*'. Examples are: diff --git a/cds/types.md b/cds/types.md index 748431d5e..c324ead13 100644 --- a/cds/types.md +++ b/cds/types.md @@ -1,9 +1,6 @@ --- -# layout: cds-ref -shorty: Built-in Types -synopsis: > +description: > Find here a brief overview of the predefined types shipped with CDS. -status: released --- diff --git a/get-started/bookshop.md b/get-started/bookshop.md index 2d9baedc9..d8747cf8e 100644 --- a/get-started/bookshop.md +++ b/get-started/bookshop.md @@ -1,5 +1,6 @@ --- -notebook: true +description: > + A step-by-step walkthrough building a simple bookshop application to gain hands-on experience with core CAP concepts and best practices. uacp: This page is linked from the Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/29c25e504fdb4752b0383d3c407f52a6.html --- diff --git a/get-started/concepts.md b/get-started/concepts.md index 6f87b036b..ac3530c28 100644 --- a/get-started/concepts.md +++ b/get-started/concepts.md @@ -1,5 +1,6 @@ --- -status: released +description: > + An overview of CAP's primary building blocks and core concepts, such as domain-driven modeling, service-centric runtimes, and querying. --- # Core Concepts of CAP @@ -704,7 +705,7 @@ Your application models are your services, also served automatically by generic Behind the scene - that is, in the **outer hexagon** containing stuff, you as an application developer should not see - the CAP runtime employs Protocol Adapters, which translate requests from (and to) low-level protocols like HTTP, REST, OData, GraphQL, ... to protocol-agnostic CAP requests and queries for inbound and outbound communication. ---> ***Inbound*** Communication +--> ***Inbound*** Communication : Requests your application *receives*. --> ***Outbound*** Communication diff --git a/get-started/feature-matrix.md b/get-started/feature-matrix.md index 8ac01c90c..d5751c849 100644 --- a/get-started/feature-matrix.md +++ b/get-started/feature-matrix.md @@ -1,5 +1,6 @@ --- -status: released +description: > + An index of CAP features, with their status and availability across Node.js and Java, including what's planned or in development. --- -{{ $frontmatter.synopsis }} +{{ $frontmatter.description }} CAP Java offers a [variety of plugins that integrate with SAP BTP services](../plugins/) and keep your application free of hard-coded service dependencies. In the CAP ecosystem, this approach is called [Calesi (CAP level service integration)](../get-started/concepts#the-calesi-pattern). Most Calesi plugins expose a CAP service that you can inject as a Spring Boot component. As the CAP runtime can run alongside a Spring Boot application without a CDS model, this lets you use proven service integration through CAP plugins with a growing set of SAP BTP services. diff --git a/java/cds-data.md b/java/cds-data.md index 761289f16..f5920fad8 100644 --- a/java/cds-data.md +++ b/java/cds-data.md @@ -1,5 +1,5 @@ --- -synopsis: > +description: > This section describes how CDS data is represented and used in CAP Java. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/9186ed9ab00842e1a31309ff1be38792.html --- @@ -12,7 +12,7 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ } -{{ $frontmatter.synopsis }} +{{ $frontmatter.description }} diff --git a/java/change-tracking.md b/java/change-tracking.md index 6a20ad44d..4aec34bfe 100644 --- a/java/change-tracking.md +++ b/java/change-tracking.md @@ -1,7 +1,6 @@ --- -synopsis: > +description: > Find here information about the change tracking feature in CAP Java. -status: released --- # Change Tracking @@ -165,7 +164,7 @@ For example, for a book you can store an author name if you have an association For compositions, no special annotations are required. The identifiers of the target entity are used instead. -For example, given the following model: +For example, given the following model: ```cds entity Orders : cuid { @@ -194,11 +193,11 @@ annotate OrderItems with @changelog: [ ]; ``` -Changes for `Orders` and `OrderItems` will have their own respective target or root identifiers filled. +Changes for `Orders` and `OrderItems` will have their own respective target or root identifiers filled. ### Human-readable values for associations -For associations, the value of the foreign key is stored in the changelog by default. You can change this and store the values of the associated entity instead. +For associations, the value of the foreign key is stored in the changelog by default. You can change this and store the values of the associated entity instead. This kind of identifier changes the values stored in the changelog, while [entity identifiers](#identifiers-for-entities) annotate changed values. You annotate your entity like this: @@ -218,12 +217,12 @@ such cases in the custom code or use annotations, for example, [`@assert.target` ### Caveats of Identifiers -Consider the following important points that are relevant for all kinds of identifiers and human-readable values: +Consider the following important points that are relevant for all kinds of identifiers and human-readable values: - When you define the identifier for an entity, keep in mind that the projections of the annotated entity inherit the annotation `@changelog`. If you change the structure of the projection, for example, exclude or rename the elements that are used in the identifier, you must annotate the projection again -to provide updated element names in the identifier. This is one additional benefit of annotating the top-most projection for change tracking. +to provide updated element names in the identifier. This is one additional benefit of annotating the top-most projection for change tracking. - The values of the identifier are stored together with the change log as-is. They are not translated and some data types might not be formatted per user locale or some requirements, for example, different units of measurement or currencies. @@ -391,7 +390,7 @@ Changes are correctly referenced to the root if the following conditions are tru Avoid Direct modifications of composition items, they aren't supported by change tracking. ::: -In the following example, the item's updated changelog entry _won't_ be associated with an order: +In the following example, the item's updated changelog entry _won't_ be associated with an order: ```java OrderItems item = OrderItems.create("..."); @@ -440,10 +439,10 @@ You can query the change log entries via CQN statements, as usual. ### Advanced Identifiers for Associated Entities -By default, the identifier is read from the association when the feature captures images of the data. +By default, the identifier is read from the association when the feature captures images of the data. Additional joins might be expensive or impossible under some circumstances. -:::warning Configuration change required! +:::warning Configuration change required! Enable [optimization for path expressions](/releases/2025/aug25#optimized-path-expressions). ::: @@ -463,7 +462,7 @@ entity Entity { Let's assume that `User` is impossible to join with the standard identifier or requires an identifier depending on the context of the user who reads the change log. -You model the association like this: +You model the association like this: ```cds entity Entity { @@ -474,9 +473,9 @@ entity Entity { The change log will contain one entry for the field `user` just like the other associations with [human-readable values](#human-readable-values-for-associations), but the identifier will be its primary key. -You need a custom handler to fetch your own custom identifier. +You need a custom handler to fetch your own custom identifier. -Here's the sketch for the handler to adapt the change log after read: +Here's the sketch for the handler to adapt the change log after read: ```java @Component diff --git a/java/cqn-services/application-services.md b/java/cqn-services/application-services.md index 73c675349..f5292de3b 100644 --- a/java/cqn-services/application-services.md +++ b/java/cqn-services/application-services.md @@ -1,6 +1,6 @@ --- -synopsis: > - Application Services define the APIs that a CAP application exposes to its clients, for example through OData. This section describes how to add business logic to these services, by extending CRUD events and implementing actions and functions. +description: > + How to add business logic to Application Services — the APIs a CAP application exposes to its clients, for example through OData — by extending CRUD events and implementing actions and functions. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/9186ed9ab00842e1a31309ff1be38792.html --- @@ -11,7 +11,7 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ } -{{ $frontmatter.synopsis }} +{{ $frontmatter.description }} ## Handling CRUD Events { #crudevents} diff --git a/java/cqn-services/index.md b/java/cqn-services/index.md index 8be621f3e..2a4bf24ff 100644 --- a/java/cqn-services/index.md +++ b/java/cqn-services/index.md @@ -1,5 +1,6 @@ --- -synopsis: CQN Services are the core services of CAP that deal with CDS data. One of the key APIs provided by these services is the uniform query API based on CQN statements. +description: > + Introduces CQN Services, the core services of CAP that deal with CDS data, providing a uniform query API based on CQN statements. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/9186ed9ab00842e1a31309ff1be38792.html --- diff --git a/java/cqn-services/persistence-services.md b/java/cqn-services/persistence-services.md index f08744565..675635548 100644 --- a/java/cqn-services/persistence-services.md +++ b/java/cqn-services/persistence-services.md @@ -1,6 +1,6 @@ --- -synopsis: > - Persistence Services are CQN-based database clients. This section describes which database types are supported, how datasources to these databases are created and how they are turned into Persistence Services. +description: > + How CQN-based Persistence Services are created from datasources to supported database types and used as database clients. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/9186ed9ab00842e1a31309ff1be38792.html --- @@ -11,7 +11,7 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ } -{{ $frontmatter.synopsis }} +{{ $frontmatter.description }} ## Database Support { #database-support} @@ -570,7 +570,7 @@ See [Class JdbcTemplate](https://docs.spring.io/spring-framework/docs/current/ja The static model and accessor interfaces can be generated using the [CDS Maven Plugin](../developing-applications/building#cds-maven-plugin). -::: warning +::: warning Currently, the generator doesn't support using reserved [Java keywords](https://docs.oracle.com/javase/specs/jls/se13/html/jls-3.html#jls-3.9) as identifiers in the CDS model. Conflicting element names can be renamed in Java using the [@cds.java.name](../cds-data#renaming-elements-in-java) annotation. For entities it is recommended to use [@cds.java.this.name](../cds-data#renaming-types-in-java). ::: diff --git a/java/cqn-services/remote-services.md b/java/cqn-services/remote-services.md index 7c408e4eb..1388ed423 100644 --- a/java/cqn-services/remote-services.md +++ b/java/cqn-services/remote-services.md @@ -1,5 +1,5 @@ --- -synopsis: > +description: > Remote Services are CQN-based clients to remote APIs that a CAP application consumes. This section describes how to configure and use these services. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/9186ed9ab00842e1a31309ff1be38792.html --- @@ -11,7 +11,7 @@ uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/ } -{{ $frontmatter.synopsis }} +{{ $frontmatter.description }} The CAP Java SDK supports _Remote Services_ for OData V2 and V4 APIs out of the box. The CQN query APIs enable [late-cut microservices](../../get-started/features#late-cut-microservices) with simplified mocking capabilities. Regarding multitenant applications, these APIs keep you extensible, even towards remote APIs. In addition, they free developers from having to map CQN to OData themselves. diff --git a/java/developing-applications/building.md b/java/developing-applications/building.md index a6f1e8c5b..94d553d9f 100644 --- a/java/developing-applications/building.md +++ b/java/developing-applications/building.md @@ -1,7 +1,6 @@ --- -synopsis: > - This section describes various options to create a CAP Java project from scratch, to build your application with Maven, and to modify an existing project with the CDS Maven plugin. - +description: > + How to create a CAP Java project from scratch, build it with Maven, and modify an existing project using the CDS Maven plugin. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/9186ed9ab00842e1a31309ff1be38792.html --- diff --git a/java/developing-applications/configuring.md b/java/developing-applications/configuring.md index f7e74a700..057f82e18 100644 --- a/java/developing-applications/configuring.md +++ b/java/developing-applications/configuring.md @@ -1,5 +1,5 @@ --- -synopsis: > +description: > This section describes how to configure CAP Java applications. uacp: Used as link target from Help Portal at https://help.sap.com/products/BTP/65de2977205c403bbc107264b8eccf4b/9186ed9ab00842e1a31309ff1be38792.html @@ -42,7 +42,7 @@ Property defaults adjusted with the production profile are the following: Note, that explicit configuration in the application takes precedence over property defaults from the production profile. -::: warning +::: warning **Do not manually enable features for production that are disabled by the production profile**, as this could introduce serious security vulnerabilities. ::: diff --git a/java/developing-applications/index.md b/java/developing-applications/index.md index 2eacbb228..b9f2b6c1e 100644 --- a/java/developing-applications/index.md +++ b/java/developing-applications/index.md @@ -1,13 +1,12 @@ --- -synopsis: > +description: > Learn here about developing a CAP Java application. -status: released --- # Developing CAP Java Applications -{{ $frontmatter.synopsis }} +{{ $frontmatter.description }} \ No newline at end of file From 5c0ec66f6e226695a88ccecd87806bf1dea2cb95 Mon Sep 17 00:00:00 2001 From: Christian Georgi
- {{ p.title }}
- +Date: Fri, 31 Jul 2026 15:04:08 +0200 Subject: [PATCH 41/49] Fix Badge text not to appear in outline (#2793) Got broken by #2792. --- .vitepress/theme/components/StatusBadge.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vitepress/theme/components/StatusBadge.vue b/.vitepress/theme/components/StatusBadge.vue index 8bdce2c3d..e596d5332 100644 --- a/.vitepress/theme/components/StatusBadge.vue +++ b/.vitepress/theme/components/StatusBadge.vue @@ -1,5 +1,6 @@ - + + From 77f55f88393990634d96990681a3c9c7509e470d Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Mon, 3 Aug 2026 12:13:55 +0200 Subject: [PATCH 42/49] Restored namespace for FlightsService --- guides/integration/calesi.md | 58 ++++++++++++------------ guides/integration/data-federation.md | 2 +- guides/integration/inner-loops.md | 12 ++--- guides/integration/service-bindings.md | 4 +- guides/security/remote-authentication.md | 6 +-- tools/cds-cli.md | 1 + 6 files changed, 43 insertions(+), 40 deletions(-) diff --git a/guides/integration/calesi.md b/guides/integration/calesi.md index 6b9223ab0..ef4053380 100644 --- a/guides/integration/calesi.md +++ b/guides/integration/calesi.md @@ -127,6 +127,8 @@ Open the _cap/samples/xflights_ folder in Visual Studio Code, and have a look at ::: code-group ```cds :line-numbers [cap/samples/xflights/srv/data-service.cds] using sap.capire.flights as x from '../db/schema'; +namespace sap.capire.flights; + @odata @hcql service FlightsService { @readonly entity Flights as projection on x.Flights {flights.*,*}; @readonly entity Airlines as projection on x.Airlines; @@ -142,7 +144,7 @@ This declares a CAP service named `FlightsService`, served over _OData_ and _HCQ 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] +```cds :line-numbers=5 [cap/samples/xflights/srv/data-service.cds] @readonly entity Flights as projection on x.Flights {flights.*,*}; // [!code --] @readonly entity Flights as projection on x.Flights { *, // all fields from Flights @@ -193,12 +195,12 @@ cds export srv/data-service.cds --dry ```zsh Kept: 6 - • FlightsService - • FlightsService.Flights - • FlightsService.Airlines - • FlightsService.Airports - • FlightsService.Supplements - • FlightsService.SupplementTypes + • sap.capire.flights.FlightsService + • sap.capire.flights.FlightsService.Flights + • sap.capire.flights.FlightsService.Airlines + • sap.capire.flights.FlightsService.Airports + • sap.capire.flights.FlightsService.Supplements + • sap.capire.flights.FlightsService.SupplementTypes Skipped: 31 @@ -231,8 +233,8 @@ cds export srv/data-service.cds --dry - sap.common.Countries.texts - sap.common.Currencies.texts - sap.common.Timezones.texts - - FlightsService.Supplements.texts - - FlightsService.SupplementTypes.texts + - sap.capire.flights.FlightsService.Supplements.texts + - sap.capire.flights.FlightsService.SupplementTypes.texts Total: 37 ``` @@ -251,12 +253,12 @@ This opens a diff view in VSCode, which would display these differences: Kept: 26 # [!code --] Kept: 6 # [!code ++] - • FlightsService - • FlightsService.Flights - •• FlightsService.Airlines - •• FlightsService.Airports - • FlightsService.Supplements - •• FlightsService.SupplementTypes + • sap.capire.flights.FlightsService + • sap.capire.flights.FlightsService.Flights + •• sap.capire.flights.FlightsService.Airlines + •• sap.capire.flights.FlightsService.Airports + • sap.capire.flights.FlightsService.Supplements + •• sap.capire.flights.FlightsService.SupplementTypes •• sap.capire.flights.Flights # [!code --] ••• sap.capire.flights.FlightConnections # [!code --] •••• sap.capire.flights.Airlines # [!code --] @@ -275,8 +277,8 @@ Kept: 6 # [!code ++] ••• sap.capire.flights.SupplementTypes # [!code --] •••• sap.capire.flights.SupplementTypes.texts # [!code --] ••• sap.capire.flights.Supplements.texts # [!code --] - ••• FlightsService.SupplementTypes.texts # [!code --] - •• FlightsService.Supplements.texts # [!code --] + ••• sap.capire.flights.FlightsService.SupplementTypes.texts # [!code --] + •• sap.capire.flights.FlightsService.Supplements.texts # [!code --] Skipped: 11 # [!code --] Skipped: 31 # [!code ++] @@ -336,10 +338,10 @@ cds export srv/data-service.cds --data ``` ```log - > apis/data-service/data/FlightsService.Flights.csv - > apis/data-service/data/FlightsService.Airlines.csv - > apis/data-service/data/FlightsService.Airports.csv - > apis/data-service/data/FlightsService.Supplements.csv + > apis/data-service/data/sap.capire.flights.FlightsService.Flights.csv + > apis/data-service/data/sap.capire.flights.FlightsService.Airlines.csv + > apis/data-service/data/sap.capire.flights.FlightsService.Airports.csv + > apis/data-service/data/sap.capire.flights.FlightsService.Supplements.csv ``` 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. @@ -368,7 +370,7 @@ This would add this to the generated output: "version": "0.1.13", "cds": { // [!code focus] "requires": { // [!code focus] - "FlightsService": true // [!code focus] + "sap.capire.flights.FlightsService": true // [!code focus] } // [!code focus] } // [!code focus] } @@ -603,7 +605,7 @@ Create two new files `apis/capire/xflights.cds` and `apis/capire/s4.cds`: ::: code-group ```cds :line-numbers [apis/capire/xflights.cds] -using { FlightsService as x } from '@capire/xflights-data'; +using { sap.capire.flights.FlightsService as x } from '@capire/xflights-data'; namespace sap.capire.xflights; @federated entity Flights as projection on x.Flights { @@ -786,7 +788,7 @@ With mashed up models in place, we can run applications in _'airplane mode'_ wit } ``` ```zsh - [cds] - mocking FlightsService { + [cds] - mocking sap.capire.flights.FlightsService { at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], decl: 'xflights/apis/data-service/services.csn:3' } @@ -829,7 +831,7 @@ While everything just works nicely when mocked in-process and with a shared in-m } ``` ```zsh - [cds] - connect to FlightsService > hcql { + [cds] - connect to sap.capire.flights.FlightsService > hcql { url: 'http://localhost:54475/hcql/data' } ``` @@ -857,7 +859,7 @@ It all starts with connecting to remote services, which we do like that in the x ```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 ('FlightsService') +const xflights = await cds.connect.to ('sap.capire.flights.FlightsService') ``` ::: @@ -930,7 +932,7 @@ Within the REPL, connect to local and remote services: ```js const TravelService = await cds.connect.to ('TravelService') -const xflights = await cds.connect.to ('FlightsService') +const xflights = await cds.connect.to ('sap.capire.flights.FlightsService') const s4 = await cds.connect.to ('sap.capire.s4.business-partner') ``` @@ -1114,7 +1116,7 @@ annotate x.Flights with @cds.persistence.table; 2. Implement logic to replicate updated data, for example like that: ```js [srv/data-replication.js] -const xflight = await cds.connect.to ('FlightsService') +const xflight = await cds.connect.to ('sap.capire.flights.FlightsService') 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}` diff --git a/guides/integration/data-federation.md b/guides/integration/data-federation.md index 7119c65c0..6e3b3376b 100644 --- a/guides/integration/data-federation.md +++ b/guides/integration/data-federation.md @@ -235,7 +235,7 @@ While the xflights service in terminal 2 shows its incoming HCQL requests like t ```zsh [hcql] - GET /hcql/data/ { SELECT: { - from: { ref: [ 'FlightsService.Flights' ] }, + from: { ref: [ 'sap.capire.flights.FlightsService.Flights' ] }, columns: [ { ref: [ 'ID' ], as: 'ID' }, { ref: [ 'date' ], as: 'date' }, diff --git a/guides/integration/inner-loops.md b/guides/integration/inner-loops.md index ee907c8ab..e9e79d5fc 100644 --- a/guides/integration/inner-loops.md +++ b/guides/integration/inner-loops.md @@ -101,7 +101,7 @@ With mashed up models in place, we can run applications in _'airplane mode'_ wit ``` ```zsh - [cds] - mocking FlightsService { + [cds] - mocking sap.capire.flights.FlightsService { at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], decl: 'xflights/apis/data-service/services.csn:3' } @@ -137,7 +137,7 @@ We can also use `cds mock` to mock remote services in separate processes, which } ``` ```zsh - [cds] - connect to FlightsService > hcql { + [cds] - connect to sap.capire.flights.FlightsService > hcql { url: 'http://localhost:54475/hcql/data' } ``` @@ -204,7 +204,7 @@ In the log output of the xtravels server we should see that it _connects_ to the } ``` ```zsh -[cds] - connect to FlightsService > hcql { +[cds] - connect to sap.capire.flights.FlightsService > hcql { url: 'http://localhost:54475/hcql/data' } ``` @@ -235,7 +235,7 @@ Within the REPL, connect to local and remote services: ```js const TravelService = await cds.connect.to ('TravelService') -const xflights = await cds.connect.to ('FlightsService') +const xflights = await cds.connect.to ('sap.capire.flights.FlightsService') const s4 = await cds.connect.to ('sap.capire.s4.business-partner') ``` @@ -397,7 +397,7 @@ cds watch xtravels ``` ```zsh -[cds] - mocking FlightsService { +[cds] - mocking sap.capire.flights.FlightsService { at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], decl: 'xflights/apis/data-service/services.csn:3', } @@ -503,7 +503,7 @@ cds watch xtravels ``` ```zsh -[cds] - serving FlightsService { +[cds] - serving sap.capire.flights.FlightsService { at: [ '/odata/v4/data', '/rest/data', '/hcql/data' ], decl: 'xflights/apis/data-service/services.csn:3', } diff --git a/guides/integration/service-bindings.md b/guides/integration/service-bindings.md index 285edc57e..5a5c1863b 100644 --- a/guides/integration/service-bindings.md +++ b/guides/integration/service-bindings.md @@ -60,7 +60,7 @@ You can inspect the effective configurations of declared required services using cds env requires ``` ```zsh -'FlightsService': { +'sap.capire.flights.FlightsService': { kind: '*' }, ``` @@ -84,7 +84,7 @@ cds mock apis/capire/s4.cds cds env requires -b ``` ```zsh -'FlightsService': { +'sap.capire.flights.FlightsService': { kind: 'hcql', impl: '@sap/cds/srv/remote-service.js', credentials: { url: 'http://localhost:51441/hcql/data' } diff --git a/guides/security/remote-authentication.md b/guides/security/remote-authentication.md index 73a237247..0ad83b6bd 100644 --- a/guides/security/remote-authentication.md +++ b/guides/security/remote-authentication.md @@ -173,7 +173,7 @@ This can be done by adding pseudo-role [`internal-user`](./cap-users#pseudo-role ::: code-group ```cds [xflights/srv/authorization.cds] -using { FlightsService as data } from './data-service'; +using { sap.capire.flights.FlightsService as data } from './data-service'; annotate data with @(requires: 'internal-user'); ``` @@ -330,7 +330,7 @@ Therefore, you can protect the corresponding CDS service by CAP role `data-consu ::: code-group ```cds [/srv/authorization.cds] -using { FlightsService as data } from './data-service'; +using { sap.capire.flights.FlightsService as data } from './data-service'; annotate data with @(requires: 'data-consumer'); ``` @@ -415,7 +415,7 @@ cds: "kind": "ias" } }, - "FlightsService": { + "sap.capire.flights.FlightsService": { "kind": "hcql", "[production]": { "credentials": { diff --git a/tools/cds-cli.md b/tools/cds-cli.md index 66ee063a0..8c15e1bc6 100644 --- a/tools/cds-cli.md +++ b/tools/cds-cli.md @@ -481,6 +481,7 @@ could look like this: ```cds [srv/data-service.cds] using { sap.capire.flights as my } from '../db/schema'; +namespace sap.capire.flights; @hcql @rest @odata service FlightsService { From 42c2e505c4d7b0931c19c49351016d3ab1adcf16 Mon Sep 17 00:00:00 2001 From: Steffen Waldmann Date: Tue, 4 Aug 2026 10:42:51 +0200 Subject: [PATCH 43/49] remove `--ws-pack` from microservices guide (#2796) Will not be required with cds-dk 10.1 any more. --- guides/deploy/microservices.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/guides/deploy/microservices.md b/guides/deploy/microservices.md index 301a1a0ec..0428a7a61 100644 --- a/guides/deploy/microservices.md +++ b/guides/deploy/microservices.md @@ -356,16 +356,12 @@ build-parameters: commands: - npm ci - npx cds build ./shared-db --for hana --production - - npx cds build ./orders --for nodejs --production --ws-pack # [!code ++] + - npx cds build ./orders --for nodejs --production # [!code ++] - npx cds build ./reviews --for nodejs --production # [!code ++] - - npx cds build ./bookstore --for nodejs --production --ws-pack # [!code ++] + - npx cds build ./bookstore --for nodejs --production # [!code ++] ``` ::: -::: info --ws-pack -Note that we use the *--ws-pack* option for some modules. It's important for node modules referencing other repository-local node modules. -::: - ### Authentication From 73188f59fd23bd4b6b08f8606a70faf9404b302e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 14:45:51 +0200 Subject: [PATCH 44/49] Update dependency @mdit/plugin-dl to v1.0.3 (#2794) 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/plugin-dl)) | [`1.0.1` → `1.0.3`](https://renovatebot.com/diffs/npm/@mdit%2fplugin-dl/1.0.1/1.0.3) |  |  | --- ### Release Notes --- ### Configuration 📅 **Schedule**: (UTC) - 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 cb1570825..f176ee24a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -469,9 +469,9 @@ "license": "MIT" }, "node_modules/@mdit/plugin-dl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@mdit/plugin-dl/-/plugin-dl-1.0.1.tgz", - "integrity": "sha512-8AvK7loqJTB7a2mVBNUXJUKqlzMvFNp0GOEFHWoiAlalGD3vwYd1mnrJAWNnjcTfnZO0XHEK/wxSrL3HZFouRQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@mdit/plugin-dl/-/plugin-dl-1.0.3.tgz", + "integrity": "sha512-Vsjq81Zj6hGo+Ui1lXZc7cYANGBKZV54JK7Afi1tsB1k0VTJQrri9Y3Cpp6bInf0WUFLUH8W9J8z974p/Qj/qg==", "dev": true, "license": "MIT", "dependencies": { From f2eeca3f60c1cc39742059e3159b7aad6260b2f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 12:50:59 +0000 Subject: [PATCH 45/49] Update dependency com.sap.cds:cds4j-api to v5.0.2 (#2798) 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/)) | `5.0.1` → `5.0.2` |  |  | --- ### Configuration 📅 **Schedule**: (UTC) - 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 00aa5d5a9..5fbc8defd 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -135,7 +135,7 @@ if (!siteURL.pathname.endsWith('/')) siteURL.pathname += '/' config.themeConfig.capire = { versions: { java_services: '5.0.1', - java_cds4j: '5.0.1', + java_cds4j: '5.0.2', cloud_sec_ams: '3.8.1' }, gotoLinks: [], From bd608603ea2422217e96cda40a13a5e1e2e54bb9 Mon Sep 17 00:00:00 2001 From: Daniel Hutzelmdit-plugins/mdit-plugins (@mdit/plugin-dl)
### [`v1.0.3`](https://redirect.github.com/mdit-plugins/mdit-plugins/blob/HEAD/packages/plugin-dl/CHANGELOG.md#103-2026-07-29) [Compare Source](https://redirect.github.com/mdit-plugins/mdit-plugins/compare/@mdit/plugin-dl@1.0.2...@mdit/plugin-dl@1.0.3) ##### 🐛 Bug Fixes - **plugin-dl:** support empty definitions and next-line content ([#604](https://redirect.github.com/mdit-plugins/mdit-plugins/issues/604)) ([c0b55e3](https://redirect.github.com/mdit-plugins/mdit-plugins/commit/c0b55e34c893effcb0f0302f9a6f00acd1b6f7ea)) ##### Documentation - fix copy-paste errors and add missing docs links in package READMEs ([#613](https://redirect.github.com/mdit-plugins/mdit-plugins/issues/613)) ([1de5e6a](https://redirect.github.com/mdit-plugins/mdit-plugins/commit/1de5e6a6aaf4df57d433cb8418f81a878cc905c1)) ### [`v1.0.2`](https://redirect.github.com/mdit-plugins/mdit-plugins/blob/HEAD/packages/plugin-dl/CHANGELOG.md#102-2026-07-29) [Compare Source](https://redirect.github.com/mdit-plugins/mdit-plugins/compare/@mdit/plugin-dl@1.0.1...@mdit/plugin-dl@1.0.2) ##### 🐛 Bug Fixes - **plugin-dl:** apply compactness per definition term ([#606](https://redirect.github.com/mdit-plugins/mdit-plugins/issues/606)) ([1bf87cc](https://redirect.github.com/mdit-plugins/mdit-plugins/commit/1bf87ccd8acd1a0e0c022c998832dab2228e58be)) - **plugin-dl:** reject definition markers indented 4+ spaces ([#600](https://redirect.github.com/mdit-plugins/mdit-plugins/issues/600)) ([144a82e](https://redirect.github.com/mdit-plugins/mdit-plugins/commit/144a82e0ebd7ed19bc236ec4243d71c5236d77a6)) ##### Code Refactoring - rename package directories to use plugin- prefix ([#571](https://redirect.github.com/mdit-plugins/mdit-plugins/issues/571)) ([3526d96](https://redirect.github.com/mdit-plugins/mdit-plugins/commit/3526d9664a827cf7f61d1f578348cd81eed9a2f7))Date: Tue, 4 Aug 2026 17:08:23 +0200 Subject: [PATCH 46/49] Updated API Policy-related disclaimers --- guides/protocols/mcp.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/guides/protocols/mcp.md b/guides/protocols/mcp.md index 25beb02e5..aff557b15 100644 --- a/guides/protocols/mcp.md +++ b/guides/protocols/mcp.md @@ -9,10 +9,10 @@ The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open- > [!caution] SAP API Policy Applies! -> When exposing CAP services through MCP, ensure your use cases comply with the [SAP API Policy](https://help.sap.com/doc/sap-api-policy) and any applicable licensing terms. -> In particular, the CAP MCP adapter, as documented herein, is designed exclusively to expose _custom_ CAP application services via MCP. -> It is not an endorsed pathway for exposing or proxying _SAP Application APIs_ directly via MCP. -> For endorsed architectures covering agentic access to SAP APIs, please refer to the reference architectures published on the +> The CAP MCP adapter, as documented herein, is designed exclusively to expose _custom_ CAP application services via MCP. +> It is **not an SAP-endorsed architecture**, data service, or service-specific pathway for purposes of section 2.2.2 of the [_SAP API Policy_](https://help.sap.com/doc/sap-api-policy), and should not be relied upon as a basis for compliance with any exception described in that section. +> In particular, it is not an endorsed pathway for exposing, proxying, or providing agentic access to _SAP Application APIs_ via MCP. +> For SAP-endorsed architectures covering agentic access to SAP APIs, refer to the reference architectures published on the > **[SAP Architecture Center](https://architecture.learning.sap.com/docs/ref-arch/98efa0)**. @@ -509,4 +509,5 @@ Future versions of the adapter may add support for data changes using CREATE, UP > The adapter itself does not provide any built-in governance features: there is no automatic rate limiting, no specific audit logging of agent actions, no approval workflows for sensitive operations, and no policy enforcement layer. Before using MCP in a productive environment, put appropriate controls for example by using MCP Gateway of SAP Integration Suite or integrate with SAP Agent Gateway (not GA yet). > [!caution] -> The CAP MCP adapter must not be used as a gateway or proxy for SAP Application APIs, as doing so bypasses the governance, authentication, and compliance controls those APIs require. Any use of SAP Application APIs must be in accordance with the [SAP API Policy](https://help.sap.com/docs/business-accelerator-hub/sap-business-accelerator-hub/sap-api-policy). For endorsed patterns on agentic access to SAP Application APIs, consult the [SAP Architecture Center](https://architecture.learning.sap.com/docs/ref-arch/98efa0) reference architectures. +> The CAP MCP adapter must not be used as a gateway or proxy for SAP Application APIs. The adapter is not an SAP-endorsed architecture, data service, or service-specific pathway under section 2.2.2 of the [_SAP API Policy_](https://help.sap.com/docs/business-accelerator-hub/sap-business-accelerator-hub/sap-api-policy) and is not an endorsed mechanism for exposing, proxying, or providing agentic access to SAP Application APIs. +> Any use of SAP Application APIs must be in accordance with the [_SAP API Policy_](https://help.sap.com/docs/business-accelerator-hub/sap-business-accelerator-hub/sap-api-policy). For SAP-endorsed patterns on agentic access to SAP Application APIs, consult the [_SAP Architecture Center_](https://architecture.learning.sap.com/docs/ref-arch/98efa0) reference architectures. From 33a96d21987b5d44ebb301d9aa09bab7d2135f73 Mon Sep 17 00:00:00 2001 From: Mahati Shankar <93712176+smahati@users.noreply.github.com> Date: Wed, 5 Aug 2026 04:04:49 +0200 Subject: [PATCH 47/49] update version in package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c932d6bf..a1ee227ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@capire/docs", - "version": "2026.5.6", + "version": "2026.5.7", "description": "Capire on VitePress", "type": "module", "scripts": { From 6ce132142232b1519302f8432a40e6a25e23e404 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 09:13:38 +0200 Subject: [PATCH 48/49] Update dependency com.sap.cds:cds-services-api to v5.0.2 (#2800) 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) | `5.0.1` → `5.0.2` |  |  | --- ### Configuration 📅 **Schedule**: (UTC) - 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 5fbc8defd..d8e16645a 100644 --- a/.vitepress/config.js +++ b/.vitepress/config.js @@ -134,7 +134,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: '5.0.1', + java_services: '5.0.2', java_cds4j: '5.0.2', cloud_sec_ams: '3.8.1' }, From e1deac3d449e09670436223b970955e74860c5c0 Mon Sep 17 00:00:00 2001 From: Christian Georgi Date: Wed, 5 Aug 2026 13:49:55 +0200 Subject: [PATCH 49/49] MCP: still mark as beta. Note on Java not released yet. (#2803) --- guides/protocols/mcp.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/guides/protocols/mcp.md b/guides/protocols/mcp.md index aff557b15..47ec059c9 100644 --- a/guides/protocols/mcp.md +++ b/guides/protocols/mcp.md @@ -3,7 +3,7 @@ description: > Expose CAP services via the Model Context Protocol for seamless AI agent integration. --- -# Model Context Protocol Adapter +# Model Context Protocol Adapter The [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is an open-source standard that enables direct integration between large language model (LLM) applications and external data sources. Any CAP service can be turned into an MCP server, allowing AI agents and LLM-powered tools to interact with the service without additional implementation work. All that is required is annotating it with [ `@mcp`](#serving-mcp). From CAP perspective MCP is just another protocol which we serve similar to _OData_, _GraphQL_, _REST_, or _HCQL_. @@ -67,9 +67,10 @@ npm add @cap-js/mcp ``` ### In CAP Java Projects -Add this to the *srv/pom.xml*: +Add this to the *srv/pom.xml* file: -```xml [Java] +::: code-group +```xml [srv/pom.xml] ``` +::: - -Make sure internal artifactory is configured for Maven build as described in [*Java > Getting Started > Setting Up Local Development*](../../java/getting-started.md#local). +> [!note] Not yet public +> The feature is not yet released publicly. Stay tuned. +> +> com.sap.cds @@ -78,9 +79,12 @@ Add this to the *srv/pom.xml*:Make sure internal artifactory is configured for Maven build as described in [*Java > Getting Started > Setting Up Local Development*](../../java/getting-started.md#local). ## Serving MCP