From 608e16090c2475e9cc2935a4ba0aa425c0e47a9d Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Tue, 4 Oct 2022 12:05:57 +0200 Subject: [PATCH] Extensibility Walkthrough in capire (#405) * Extension project template * SalesRegion -> x_SalesRegion * enhanced order repo * updated package-lock.json --- orders-ext/.cdsrc.json | 1 + orders-ext/.gitignore | 31 + orders-ext/.vscode/extensions.json | 20 + orders-ext/.vscode/launch.json | 15 + orders-ext/.vscode/tasks.json | 25 + orders-ext/README.md | 26 + orders-ext/app/extensions.cds | 25 + orders-ext/package.json | 47 ++ .../test/data/sap.capire.orders-Orders.csv | 3 + .../test/data/x_orders.ext-x_SalesRegion.csv | 4 + orders/.env | 2 - orders/package.json | 35 +- package-lock.json | 755 +++++++++++++++++- 13 files changed, 959 insertions(+), 30 deletions(-) create mode 100644 orders-ext/.cdsrc.json create mode 100644 orders-ext/.gitignore create mode 100644 orders-ext/.vscode/extensions.json create mode 100644 orders-ext/.vscode/launch.json create mode 100644 orders-ext/.vscode/tasks.json create mode 100644 orders-ext/README.md create mode 100644 orders-ext/app/extensions.cds create mode 100644 orders-ext/package.json create mode 100644 orders-ext/test/data/sap.capire.orders-Orders.csv create mode 100644 orders-ext/test/data/x_orders.ext-x_SalesRegion.csv delete mode 100644 orders/.env diff --git a/orders-ext/.cdsrc.json b/orders-ext/.cdsrc.json new file mode 100644 index 00000000..0967ef42 --- /dev/null +++ b/orders-ext/.cdsrc.json @@ -0,0 +1 @@ +{} diff --git a/orders-ext/.gitignore b/orders-ext/.gitignore new file mode 100644 index 00000000..e9f1c2f3 --- /dev/null +++ b/orders-ext/.gitignore @@ -0,0 +1,31 @@ +# CAP ext +_out +*.db +*.sqlite +connection.properties +default-*.json +.cdsrc-private.json +gen/ +node_modules/ +target/ + +# Web IDE, App Studio +.che/ +.gen/ + +# MTA +*_mta_build_tmp +*.mtar +mta_archives/ + +# Other +.DS_Store +*.orig +*.log + +*.iml +*.flattened-pom.xml + +# IDEs +# .vscode +# .idea diff --git a/orders-ext/.vscode/extensions.json b/orders-ext/.vscode/extensions.json new file mode 100644 index 00000000..5d7fe9ee --- /dev/null +++ b/orders-ext/.vscode/extensions.json @@ -0,0 +1,20 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations. + // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp + + // List of extensions which should be recommended for users of this workspace. + "recommendations": [ + "SAPSE.vscode-cds", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "mechatroner.rainbow-csv", + "humao.rest-client", + "alexcvzz.vscode-sqlite", + "hbenl.vscode-mocha-test-adapter", + "sdras.night-owl" + ], + // List of extensions recommended by VS Code that should not be recommended for users of this workspace. + "unwantedRecommendations": [ + + ] +} diff --git a/orders-ext/.vscode/launch.json b/orders-ext/.vscode/launch.json new file mode 100644 index 00000000..3f308a6c --- /dev/null +++ b/orders-ext/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "command": "cds run --with-mocks --in-memory?", + "name": "cds run", + "request": "launch", + "type": "node-terminal", + "skipFiles": [ "/**" ] + } + ] +} diff --git a/orders-ext/.vscode/tasks.json b/orders-ext/.vscode/tasks.json new file mode 100644 index 00000000..622da99a --- /dev/null +++ b/orders-ext/.vscode/tasks.json @@ -0,0 +1,25 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "type": "shell", + "label": "cds watch", + "command": "cds", + "args": ["watch"], + "group": { + "kind": "build", + "isDefault": true + }, + "problemMatcher": [] + }, + { + "type": "shell", + "label": "cds run", + "command": "cds", + "args": ["run", "--with-mocks", "--in-memory?"], + "problemMatcher": [] + } + ] +} diff --git a/orders-ext/README.md b/orders-ext/README.md new file mode 100644 index 00000000..41defcb6 --- /dev/null +++ b/orders-ext/README.md @@ -0,0 +1,26 @@ +# Getting Started + +Welcome to your extension project to `@capire/orders`. + +It contains these folders and files, following our recommended project layout: + +File or Folder | Purpose +---------|---------- +`app/` | all extensions content is here +`test/` | all test content is here +`package.json` | project configuration +`readme.md` | this getting started guide + + +## Next Steps + +- `cds pull` latest models from your base application +- edit [`./app/extensions.cds`](./app/extensions.cds) to add your extensions +- `cds watch` your extension in local test-drives +- `cds push` your extension to **test** tenant +- `cds push` your extension to **prod** tenant + + +## Learn More + +Learn more at https://cap.cloud.sap/docs/guides/extensibility/customization. diff --git a/orders-ext/app/extensions.cds b/orders-ext/app/extensions.cds new file mode 100644 index 00000000..86bde092 --- /dev/null +++ b/orders-ext/app/extensions.cds @@ -0,0 +1,25 @@ +namespace x_orders.ext; // for new entities like SalesRegion below +using { OrdersService, sap, sap.capire.orders.Orders } from '@capire/orders'; + +extend Orders with { // 2 new fields.... + x_priority : String enum {high; medium; low} default 'medium'; + x_salesRegion : Association to x_SalesRegion; +} + +entity x_SalesRegion : sap.common.CodeList { // Value Help + key code : String(11); +} + + +// ------------------------------------------- +// Fiori Annotations + +annotate Orders:x_priority with @title: 'Priority'; +annotate SalesRegion:name with @title: 'Sales Region'; + +annotate OrdersService.Orders with @UI.LineItem: [ + ... up to { Value: OrderNo }, + { Value: x_priority }, + { Value: x_salesRegion.name }, + ... +]; diff --git a/orders-ext/package.json b/orders-ext/package.json new file mode 100644 index 00000000..2c43854e --- /dev/null +++ b/orders-ext/package.json @@ -0,0 +1,47 @@ +{ + "name": "@capire/orders-ext", + "extends": "@capire/orders", + "version": "1.0.0", + "description": "A simple CAP project.", + "repository": "", + "license": "UNLICENSED", + "private": true, + "dependencies": { + "@sap/cds": "^6", + "express": "^4" + }, + "devDependencies": { + "sqlite3": "^5.0.4" + }, + "scripts": { + "start": "cds run" + }, + "engines": { + "node": "^16.15" + }, + "eslintConfig": { + "extends": "eslint:recommended", + "env": { + "es2020": true, + "node": true, + "jest": true, + "mocha": true + }, + "globals": { + "SELECT": true, + "INSERT": true, + "UPDATE": true, + "DELETE": true, + "CREATE": true, + "DROP": true, + "CDL": true, + "CQL": true, + "CXL": true, + "cds": true + }, + "rules": { + "no-console": "off", + "require-atomic-updates": "off" + } + } +} diff --git a/orders-ext/test/data/sap.capire.orders-Orders.csv b/orders-ext/test/data/sap.capire.orders-Orders.csv new file mode 100644 index 00000000..17e9baba --- /dev/null +++ b/orders-ext/test/data/sap.capire.orders-Orders.csv @@ -0,0 +1,3 @@ +ID;createdAt;buyer;OrderNo;currency_code;x_priority;x_salesRegion_code +7e2f2640-6866-4dcf-8f4d-3027aa831cad;2019-01-31;john.doe@test.com;1;EUR;high;EMEA +64e718c9-ff99-47f1-8ca3-950c850777d4;2019-01-30;jane.doe@test.com;2;EUR;low;APJ \ No newline at end of file diff --git a/orders-ext/test/data/x_orders.ext-x_SalesRegion.csv b/orders-ext/test/data/x_orders.ext-x_SalesRegion.csv new file mode 100644 index 00000000..eb940aa9 --- /dev/null +++ b/orders-ext/test/data/x_orders.ext-x_SalesRegion.csv @@ -0,0 +1,4 @@ +code;name;descr +AMER;Americas;North, Central and South America +EMEA;Europe, the Middle East and Africa;Europe, the Middle East and Africa +APJ;Asia Pacific and Japan;Asia Pacific and Japan diff --git a/orders/.env b/orders/.env deleted file mode 100644 index 616dd8d0..00000000 --- a/orders/.env +++ /dev/null @@ -1,2 +0,0 @@ -cds.requires.messaging.kind = file-based-messaging -PORT = 4006 \ No newline at end of file diff --git a/orders/package.json b/orders/package.json index 2685aa44..391483cc 100644 --- a/orders/package.json +++ b/orders/package.json @@ -3,6 +3,39 @@ "version": "1.0.0", "dependencies": { "@capire/common": "*", - "@sap/cds": ">=5" + "@sap/cds": ">=5", + "@sap/cds-mtxs": "^1" + }, + "cds": { + "requires": { + "db": "sql-mt", + "multitenancy": true, + "toggles": true, + "extensibility": true, + "cds.xt.ExtensibilityService": { + "element-prefix": ["x_"], + "extension-allowlist": [ + { + "for": ["sap.capire.orders"], + "kind": "entity", + "new-fields": 2 + }, + { + "for": ["OrdersService"], + "new-entities": 2 + } + ] + }, + "auth": { + "users": { + "bob": { + "tenant": "t1-ext", + "roles": [ + "cds.ExtensionDeveloper" + ] + } + } + } + } } } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9432d94c..b434d357 100644 --- a/package-lock.json +++ b/package-lock.json @@ -378,6 +378,19 @@ "node": ">=14" } }, + "node_modules/@sap/cds-mtxs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@sap/cds-mtxs/-/cds-mtxs-1.1.2.tgz", + "integrity": "sha512-O/MpYI+O6dgRy5lL8X8RxwWKTRIBTb2UsMQeuv+V0MJRScg5OpkP8SQd/fGqWBQZbP+x07Da3xTVFqWxzFMYnw==", + "dependencies": { + "@sap/hdi-deploy": "^4", + "@sap/instance-manager": "^3", + "axios": "^0.27.2" + }, + "peerDependencies": { + "@sap/cds": ">=6" + } + }, "node_modules/@sap/cds-odata-v2-adapter-proxy": { "version": "1.9.9", "resolved": "https://registry.npmjs.org/@sap/cds-odata-v2-adapter-proxy/-/cds-odata-v2-adapter-proxy-1.9.9.tgz", @@ -395,6 +408,352 @@ "node": ">=8" } }, + "node_modules/@sap/hdi-deploy": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@sap/hdi-deploy/-/hdi-deploy-4.4.1.tgz", + "integrity": "sha512-ShTEqS1Eeomlls5/XAEM3AQjtu3q5j4XtvkyKIwMNPgvrZIWYzehCI1Uvo5gpxxfcj4GcjrOXoUsRLPNzbP/1w==", + "hasShrinkwrap": true, + "dependencies": { + "@sap/hana-client": "2.13.13", + "@sap/hdi": "4.3.1", + "@sap/xsenv": "3.3.2", + "async": "3.2.3", + "dotenv": "10.0.0", + "handlebars": "4.7.7", + "hdb": "0.19.3", + "micromatch": "4.0.4" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || ^16.0.0" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/hana-client": { + "version": "2.13.13", + "dependencies": { + "debug": "3.1.0" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/hana-client/node_modules/debug": { + "version": "3.1.0", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/hana-client/node_modules/ms": { + "version": "2.0.0" + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/hdi": { + "version": "4.3.1", + "dependencies": { + "async": "3.2.3" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv": { + "version": "3.3.2", + "dependencies": { + "debug": "4.3.3", + "node-cache": "^5.1.0", + "verror": "1.10.0" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/assert-plus": { + "version": "1.0.0" + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/clone": { + "version": "2.1.2" + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/core-util-is": { + "version": "1.0.2" + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/debug": { + "version": "4.3.3", + "dependencies": { + "ms": "2.1.2" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/extsprintf": { + "version": "1.4.1" + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/ms": { + "version": "2.1.2" + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/node-cache": { + "version": "5.1.2", + "dependencies": { + "clone": "2.x" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/verror": { + "version": "1.10.0", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/async": { + "version": "3.2.3" + }, + "node_modules/@sap/hdi-deploy/node_modules/braces": { + "version": "3.0.2", + "dependencies": { + "fill-range": "^7.0.1" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/dotenv": { + "version": "10.0.0" + }, + "node_modules/@sap/hdi-deploy/node_modules/fill-range": { + "version": "7.0.1", + "dependencies": { + "to-regex-range": "^5.0.1" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/handlebars": { + "version": "4.7.7", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/hdb": { + "version": "0.19.3", + "dependencies": { + "iconv-lite": "^0.4.18" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/iconv-lite": { + "version": "0.4.24", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/is-number": { + "version": "7.0.0" + }, + "node_modules/@sap/hdi-deploy/node_modules/micromatch": { + "version": "4.0.4", + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/minimist": { + "version": "1.2.6" + }, + "node_modules/@sap/hdi-deploy/node_modules/neo-async": { + "version": "2.6.2" + }, + "node_modules/@sap/hdi-deploy/node_modules/picomatch": { + "version": "2.3.1" + }, + "node_modules/@sap/hdi-deploy/node_modules/safer-buffer": { + "version": "2.1.2" + }, + "node_modules/@sap/hdi-deploy/node_modules/source-map": { + "version": "0.6.1" + }, + "node_modules/@sap/hdi-deploy/node_modules/to-regex-range": { + "version": "5.0.1", + "dependencies": { + "is-number": "^7.0.0" + } + }, + "node_modules/@sap/hdi-deploy/node_modules/uglify-js": { + "version": "3.16.1", + "optional": true + }, + "node_modules/@sap/hdi-deploy/node_modules/wordwrap": { + "version": "1.0.0" + }, + "node_modules/@sap/instance-manager": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sap/instance-manager/-/instance-manager-3.3.4.tgz", + "integrity": "sha512-UihWrb+MvLF16Zw7AvsqQJ/yGJG/QHSGVKjEaHrEBIyydt59QlK271kJbuToBmMYObVS6sXojuMhd2+mUrraCg==", + "hasShrinkwrap": true, + "dependencies": { + "@sap/xssec": "^3.2.13", + "clone": "2.1.1", + "debug": "4.3.3", + "lru-cache": "4.1.1", + "node-fetch": "2.6.7", + "uuid": "7.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || ^16.0.0" + } + }, + "node_modules/@sap/instance-manager/node_modules/@sap/xssec": { + "version": "3.2.13", + "dependencies": { + "axios": "^0.26.0", + "debug": "4.3.2", + "jsonwebtoken": "^8.5.1", + "lru-cache": "6.0.0", + "node-rsa": "^1.1.1", + "valid-url": "1.0.9" + } + }, + "node_modules/@sap/instance-manager/node_modules/@sap/xssec/node_modules/debug": { + "version": "4.3.2", + "dependencies": { + "ms": "2.1.2" + } + }, + "node_modules/@sap/instance-manager/node_modules/@sap/xssec/node_modules/lru-cache": { + "version": "6.0.0", + "dependencies": { + "yallist": "^4.0.0" + } + }, + "node_modules/@sap/instance-manager/node_modules/asn1": { + "version": "0.2.6", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/@sap/instance-manager/node_modules/axios": { + "version": "0.26.1", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "node_modules/@sap/instance-manager/node_modules/buffer-equal-constant-time": { + "version": "1.0.1" + }, + "node_modules/@sap/instance-manager/node_modules/clone": { + "version": "2.1.1" + }, + "node_modules/@sap/instance-manager/node_modules/debug": { + "version": "4.3.3", + "dependencies": { + "ms": "2.1.2" + } + }, + "node_modules/@sap/instance-manager/node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@sap/instance-manager/node_modules/follow-redirects": { + "version": "1.15.1" + }, + "node_modules/@sap/instance-manager/node_modules/jsonwebtoken": { + "version": "8.5.1", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "node_modules/@sap/instance-manager/node_modules/jwa": { + "version": "1.4.1", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@sap/instance-manager/node_modules/jws": { + "version": "3.2.2", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/@sap/instance-manager/node_modules/lodash.includes": { + "version": "4.3.0" + }, + "node_modules/@sap/instance-manager/node_modules/lodash.isboolean": { + "version": "3.0.3" + }, + "node_modules/@sap/instance-manager/node_modules/lodash.isinteger": { + "version": "4.0.4" + }, + "node_modules/@sap/instance-manager/node_modules/lodash.isnumber": { + "version": "3.0.3" + }, + "node_modules/@sap/instance-manager/node_modules/lodash.isplainobject": { + "version": "4.0.6" + }, + "node_modules/@sap/instance-manager/node_modules/lodash.isstring": { + "version": "4.0.1" + }, + "node_modules/@sap/instance-manager/node_modules/lodash.once": { + "version": "4.1.1" + }, + "node_modules/@sap/instance-manager/node_modules/lru-cache": { + "version": "4.1.1", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@sap/instance-manager/node_modules/lru-cache/node_modules/yallist": { + "version": "2.1.2" + }, + "node_modules/@sap/instance-manager/node_modules/ms": { + "version": "2.1.2" + }, + "node_modules/@sap/instance-manager/node_modules/node-fetch": { + "version": "2.6.7", + "dependencies": { + "whatwg-url": "^5.0.0" + } + }, + "node_modules/@sap/instance-manager/node_modules/node-rsa": { + "version": "1.1.1", + "dependencies": { + "asn1": "^0.2.4" + } + }, + "node_modules/@sap/instance-manager/node_modules/pseudomap": { + "version": "1.0.2" + }, + "node_modules/@sap/instance-manager/node_modules/safe-buffer": { + "version": "5.2.1" + }, + "node_modules/@sap/instance-manager/node_modules/safer-buffer": { + "version": "2.1.2" + }, + "node_modules/@sap/instance-manager/node_modules/semver": { + "version": "5.7.1" + }, + "node_modules/@sap/instance-manager/node_modules/tr46": { + "version": "0.0.3" + }, + "node_modules/@sap/instance-manager/node_modules/uuid": { + "version": "7.0.0" + }, + "node_modules/@sap/instance-manager/node_modules/valid-url": { + "version": "1.0.9" + }, + "node_modules/@sap/instance-manager/node_modules/webidl-conversions": { + "version": "3.0.1" + }, + "node_modules/@sap/instance-manager/node_modules/whatwg-url": { + "version": "5.0.0", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/@sap/instance-manager/node_modules/yallist": { + "version": "4.0.0" + }, "node_modules/@sinclair/typebox": { "version": "0.24.44", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz", @@ -606,14 +965,12 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, "dependencies": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" @@ -905,7 +1262,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -961,7 +1317,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -990,7 +1345,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -1263,7 +1617,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -1759,7 +2112,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -2004,8 +2356,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/negotiator": { "version": "0.6.3", @@ -2930,8 +3281,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "2.1.2", @@ -2946,7 +3296,8 @@ "version": "1.0.0", "dependencies": { "@capire/common": "*", - "@sap/cds": ">=5" + "@sap/cds": ">=5", + "@sap/cds-mtxs": "^1" } }, "reviews": { @@ -3104,7 +3455,8 @@ "version": "file:orders", "requires": { "@capire/common": "*", - "@sap/cds": ">=5" + "@sap/cds": ">=5", + "@sap/cds-mtxs": "^1" } }, "@capire/reviews": { @@ -3221,6 +3573,16 @@ "yaml": "^2.1.1" } }, + "@sap/cds-mtxs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@sap/cds-mtxs/-/cds-mtxs-1.1.2.tgz", + "integrity": "sha512-O/MpYI+O6dgRy5lL8X8RxwWKTRIBTb2UsMQeuv+V0MJRScg5OpkP8SQd/fGqWBQZbP+x07Da3xTVFqWxzFMYnw==", + "requires": { + "@sap/hdi-deploy": "^4", + "@sap/instance-manager": "^3", + "axios": "^0.27.2" + } + }, "@sap/cds-odata-v2-adapter-proxy": { "version": "1.9.9", "resolved": "https://registry.npmjs.org/@sap/cds-odata-v2-adapter-proxy/-/cds-odata-v2-adapter-proxy-1.9.9.tgz", @@ -3235,6 +3597,354 @@ "xml2js": "^0.4.23" } }, + "@sap/hdi-deploy": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@sap/hdi-deploy/-/hdi-deploy-4.4.1.tgz", + "integrity": "sha512-ShTEqS1Eeomlls5/XAEM3AQjtu3q5j4XtvkyKIwMNPgvrZIWYzehCI1Uvo5gpxxfcj4GcjrOXoUsRLPNzbP/1w==", + "requires": { + "@sap/hana-client": "2.13.13", + "@sap/hdi": "4.3.1", + "@sap/xsenv": "3.3.2", + "async": "3.2.3", + "dotenv": "10.0.0", + "handlebars": "4.7.7", + "hdb": "0.19.3", + "micromatch": "4.0.4" + }, + "dependencies": { + "@sap/hana-client": { + "version": "2.13.13", + "requires": { + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0" + } + } + }, + "@sap/hdi": { + "version": "4.3.1", + "requires": { + "async": "3.2.3" + } + }, + "@sap/xsenv": { + "version": "3.3.2", + "requires": { + "debug": "4.3.3", + "node-cache": "^5.1.0", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0" + }, + "clone": { + "version": "2.1.2" + }, + "core-util-is": { + "version": "1.0.2" + }, + "debug": { + "version": "4.3.3", + "requires": { + "ms": "2.1.2" + } + }, + "extsprintf": { + "version": "1.4.1" + }, + "ms": { + "version": "2.1.2" + }, + "node-cache": { + "version": "5.1.2", + "requires": { + "clone": "2.x" + } + }, + "verror": { + "version": "1.10.0", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } + } + }, + "async": { + "version": "3.2.3" + }, + "braces": { + "version": "3.0.2", + "requires": { + "fill-range": "^7.0.1" + } + }, + "dotenv": { + "version": "10.0.0" + }, + "fill-range": { + "version": "7.0.1", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "handlebars": { + "version": "4.7.7", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "hdb": { + "version": "0.19.3", + "requires": { + "iconv-lite": "^0.4.18" + } + }, + "iconv-lite": { + "version": "0.4.24", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "is-number": { + "version": "7.0.0" + }, + "micromatch": { + "version": "4.0.4", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "minimist": { + "version": "1.2.6" + }, + "neo-async": { + "version": "2.6.2" + }, + "picomatch": { + "version": "2.3.1" + }, + "safer-buffer": { + "version": "2.1.2" + }, + "source-map": { + "version": "0.6.1" + }, + "to-regex-range": { + "version": "5.0.1", + "requires": { + "is-number": "^7.0.0" + } + }, + "uglify-js": { + "version": "3.16.1", + "optional": true + }, + "wordwrap": { + "version": "1.0.0" + } + } + }, + "@sap/instance-manager": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@sap/instance-manager/-/instance-manager-3.3.4.tgz", + "integrity": "sha512-UihWrb+MvLF16Zw7AvsqQJ/yGJG/QHSGVKjEaHrEBIyydt59QlK271kJbuToBmMYObVS6sXojuMhd2+mUrraCg==", + "requires": { + "@sap/xssec": "^3.2.13", + "clone": "2.1.1", + "debug": "4.3.3", + "lru-cache": "4.1.1", + "node-fetch": "2.6.7", + "uuid": "7.0.0" + }, + "dependencies": { + "@sap/xssec": { + "version": "3.2.13", + "requires": { + "axios": "^0.26.0", + "debug": "4.3.2", + "jsonwebtoken": "^8.5.1", + "lru-cache": "6.0.0", + "node-rsa": "^1.1.1", + "valid-url": "1.0.9" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "requires": { + "ms": "2.1.2" + } + }, + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "asn1": { + "version": "0.2.6", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "axios": { + "version": "0.26.1", + "requires": { + "follow-redirects": "^1.14.8" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1" + }, + "clone": { + "version": "2.1.1" + }, + "debug": { + "version": "4.3.3", + "requires": { + "ms": "2.1.2" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "follow-redirects": { + "version": "1.15.1" + }, + "jsonwebtoken": { + "version": "8.5.1", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "jwa": { + "version": "1.4.1", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash.includes": { + "version": "4.3.0" + }, + "lodash.isboolean": { + "version": "3.0.3" + }, + "lodash.isinteger": { + "version": "4.0.4" + }, + "lodash.isnumber": { + "version": "3.0.3" + }, + "lodash.isplainobject": { + "version": "4.0.6" + }, + "lodash.isstring": { + "version": "4.0.1" + }, + "lodash.once": { + "version": "4.1.1" + }, + "lru-cache": { + "version": "4.1.1", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + }, + "dependencies": { + "yallist": { + "version": "2.1.2" + } + } + }, + "ms": { + "version": "2.1.2" + }, + "node-fetch": { + "version": "2.6.7", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-rsa": { + "version": "1.1.1", + "requires": { + "asn1": "^0.2.4" + } + }, + "pseudomap": { + "version": "1.0.2" + }, + "safe-buffer": { + "version": "5.2.1" + }, + "safer-buffer": { + "version": "2.1.2" + }, + "semver": { + "version": "5.7.1" + }, + "tr46": { + "version": "0.0.3" + }, + "uuid": { + "version": "7.0.0" + }, + "valid-url": { + "version": "1.0.9" + }, + "webidl-conversions": { + "version": "3.0.1" + }, + "whatwg-url": { + "version": "5.0.0", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "yallist": { + "version": "4.0.0" + } + } + }, "@sinclair/typebox": { "version": "0.24.44", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.44.tgz", @@ -3413,14 +4123,12 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "axios": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", - "dev": true, "requires": { "follow-redirects": "^1.14.9", "form-data": "^4.0.0" @@ -3649,7 +4357,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -3693,7 +4400,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -3710,8 +4416,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "delegates": { "version": "1.0.0", @@ -3928,7 +4633,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -4313,7 +5017,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -4492,8 +5195,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "negotiator": { "version": "0.6.3", @@ -5186,8 +5888,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yaml": { "version": "2.1.2",