From c10ca175466b6cc9ec541903053c66c2822de059 Mon Sep 17 00:00:00 2001 From: Daniel Hutzel Date: Thu, 17 Jul 2025 13:54:32 +0200 Subject: [PATCH] chore: Merged fiori into bookstore and tests into subprojects --- .vscode/launch.json | 27 +- {test => bookshop}/cds.ql.test.js | 0 .../test}/consuming-actions.test.js | 0 .../test}/consuming-services.test.js | 0 .../test}/custom-handlers.test.js | 2 +- .../hierarchical-data.test.js | 2 +- .../requests.http} | 0 .../services.cds} | 2 +- .../test}/localized-data/package.json | 0 .../test}/localized-data/services.cds | 0 .../test}/localized-data/services.test.js | 0 {test => bookshop/test}/messaging.test.js | 0 {test => bookshop/test}/odata.test.js | 0 .../bookshop.http} | 0 bookshop/test/protocols/hcql-adapter.test.js | 126 ++ bookshop/test/protocols/hcql.http | 225 ++ bookshop/test/protocols/odata.http | 26 + bookshop/test/protocols/rest.http | 9 + bookshop/test/protocols/services.cds | 4 + .../app/_i18n/i18n_de.properties | 0 .../app/_i18n/i18n_en.properties | 0 .../app/admin-authors/fiori-service.cds | 0 .../app/admin-authors/webapp/Component.js | 0 .../admin-authors/webapp/i18n/i18n.properties | 0 .../app/admin-authors/webapp/manifest.json | 0 .../app/admin-books/fiori-service.cds | 0 .../app/admin-books/webapp/Component.js | 0 .../admin-books/webapp/i18n/i18n.properties | 0 .../app/admin-books/webapp/manifest.json | 0 .../app/appconfig/fioriSandboxConfig.json | 0 .../app/browse/fiori-service.cds | 0 .../app/browse/webapp/Component.js | 0 .../app/browse/webapp/i18n/i18n.properties | 0 .../app/browse/webapp/manifest.json | 0 {fiori => bookstore}/app/common.cds | 0 {fiori => bookstore}/app/fiori-apps.html | 0 .../app/genres/fiori-service.cds | 0 {fiori => bookstore}/app/genres/tree-view.cds | 0 .../app/genres/value-help.cds | 0 .../app/genres/webapp/Component.js | 0 .../app/genres/webapp/i18n/i18n.properties | 0 .../app/genres/webapp/i18n/i18n_de.properties | 0 .../app/genres/webapp/manifest.json | 0 {fiori => bookstore}/app/services.cds | 0 bookstore/cds-plugin.js | 1 - {fiori => bookstore}/db/hana/index.cds | 0 {fiori => bookstore}/db/sqlite/index.cds | 0 bookstore/package.json | 29 +- bookstore/server.js | 2 + bookstore/srv/{server.js => mashup.js} | 0 fiori/server.js => bookstore/srv/trees.js | 0 etc/dark.drawio.svg | 195 -- etc/samples.drawio.svg | 212 -- fiori/.env | 1 - fiori/index.cds | 1 - fiori/package.json | 43 - incidents | 1 + .../app/viewer/app.js | 0 .../app/viewer/index.html | 0 {etc/data-viewer => inspector}/cds-plugin.js | 0 {etc/data-viewer => inspector}/index.cds | 0 {etc/data-viewer => inspector}/package.json | 0 .../srv/data-service.cds | 0 .../srv/data-service.js | 0 {etc/loggers => loggers}/app/loggers.html | 0 {etc/loggers => loggers}/package.json | 0 {etc/loggers => loggers}/readme.md | 0 {etc/loggers => loggers}/srv/dummy.cds | 0 {etc/loggers => loggers}/srv/loggers.cds | 0 {etc/loggers => loggers}/srv/loggers.js | 0 {etc/loggers => loggers}/test/requests.http | 0 package-lock.json | 1939 ++++++++++++++++- package.json | 11 +- readme.md | 13 +- {etc => readme}/bookshop.drawio.svg | 0 readme/dark.drawio.svg | 215 ++ {etc => readme}/incidents.drawio.svg | 0 {etc => readme}/index-html.png | Bin readme/samples.drawio.svg | 228 ++ samples.md => readme/samples.md | 38 +- sflight | 1 + sflight-md | 1 + sflight-travels | 1 + 83 files changed, 2817 insertions(+), 538 deletions(-) rename {test => bookshop}/cds.ql.test.js (100%) rename {test => bookshop/test}/consuming-actions.test.js (100%) rename {test => bookshop/test}/consuming-services.test.js (100%) rename {test => bookshop/test}/custom-handlers.test.js (90%) rename {test => bookshop/test/hierarchical-data}/hierarchical-data.test.js (98%) rename bookshop/test/{genres.http => hierarchical-data/requests.http} (100%) rename bookshop/test/{genres.cds => hierarchical-data/services.cds} (53%) rename {test => bookshop/test}/localized-data/package.json (100%) rename {test => bookshop/test}/localized-data/services.cds (100%) rename {test => bookshop/test}/localized-data/services.test.js (100%) rename {test => bookshop/test}/messaging.test.js (100%) rename {test => bookshop/test}/odata.test.js (100%) rename bookshop/test/{requests.http => protocols/bookshop.http} (100%) create mode 100644 bookshop/test/protocols/hcql-adapter.test.js create mode 100644 bookshop/test/protocols/hcql.http create mode 100644 bookshop/test/protocols/odata.http create mode 100644 bookshop/test/protocols/rest.http create mode 100644 bookshop/test/protocols/services.cds rename {fiori => bookstore}/app/_i18n/i18n_de.properties (100%) rename {fiori => bookstore}/app/_i18n/i18n_en.properties (100%) rename {fiori => bookstore}/app/admin-authors/fiori-service.cds (100%) rename {fiori => bookstore}/app/admin-authors/webapp/Component.js (100%) rename {fiori => bookstore}/app/admin-authors/webapp/i18n/i18n.properties (100%) rename {fiori => bookstore}/app/admin-authors/webapp/manifest.json (100%) rename {fiori => bookstore}/app/admin-books/fiori-service.cds (100%) rename {fiori => bookstore}/app/admin-books/webapp/Component.js (100%) rename {fiori => bookstore}/app/admin-books/webapp/i18n/i18n.properties (100%) rename {fiori => bookstore}/app/admin-books/webapp/manifest.json (100%) rename {fiori => bookstore}/app/appconfig/fioriSandboxConfig.json (100%) rename {fiori => bookstore}/app/browse/fiori-service.cds (100%) rename {fiori => bookstore}/app/browse/webapp/Component.js (100%) rename {fiori => bookstore}/app/browse/webapp/i18n/i18n.properties (100%) rename {fiori => bookstore}/app/browse/webapp/manifest.json (100%) rename {fiori => bookstore}/app/common.cds (100%) rename {fiori => bookstore}/app/fiori-apps.html (100%) rename {fiori => bookstore}/app/genres/fiori-service.cds (100%) rename {fiori => bookstore}/app/genres/tree-view.cds (100%) rename {fiori => bookstore}/app/genres/value-help.cds (100%) rename {fiori => bookstore}/app/genres/webapp/Component.js (100%) rename {fiori => bookstore}/app/genres/webapp/i18n/i18n.properties (100%) rename {fiori => bookstore}/app/genres/webapp/i18n/i18n_de.properties (100%) rename {fiori => bookstore}/app/genres/webapp/manifest.json (100%) rename {fiori => bookstore}/app/services.cds (100%) delete mode 100644 bookstore/cds-plugin.js rename {fiori => bookstore}/db/hana/index.cds (100%) rename {fiori => bookstore}/db/sqlite/index.cds (100%) create mode 100644 bookstore/server.js rename bookstore/srv/{server.js => mashup.js} (100%) rename fiori/server.js => bookstore/srv/trees.js (100%) delete mode 100644 etc/dark.drawio.svg delete mode 100644 etc/samples.drawio.svg delete mode 100644 fiori/.env delete mode 100644 fiori/index.cds delete mode 100644 fiori/package.json create mode 160000 incidents rename {etc/data-viewer => inspector}/app/viewer/app.js (100%) rename {etc/data-viewer => inspector}/app/viewer/index.html (100%) rename {etc/data-viewer => inspector}/cds-plugin.js (100%) rename {etc/data-viewer => inspector}/index.cds (100%) rename {etc/data-viewer => inspector}/package.json (100%) rename {etc/data-viewer => inspector}/srv/data-service.cds (100%) rename {etc/data-viewer => inspector}/srv/data-service.js (100%) rename {etc/loggers => loggers}/app/loggers.html (100%) rename {etc/loggers => loggers}/package.json (100%) rename {etc/loggers => loggers}/readme.md (100%) rename {etc/loggers => loggers}/srv/dummy.cds (100%) rename {etc/loggers => loggers}/srv/loggers.cds (100%) rename {etc/loggers => loggers}/srv/loggers.js (100%) rename {etc/loggers => loggers}/test/requests.http (100%) rename {etc => readme}/bookshop.drawio.svg (100%) create mode 100644 readme/dark.drawio.svg rename {etc => readme}/incidents.drawio.svg (100%) rename {etc => readme}/index-html.png (100%) create mode 100644 readme/samples.drawio.svg rename samples.md => readme/samples.md (72%) create mode 160000 sflight create mode 160000 sflight-md create mode 160000 sflight-travels diff --git a/.vscode/launch.json b/.vscode/launch.json index 40d3ef3c..68e95f40 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -18,8 +18,8 @@ ] }, { - "name": "Fiori App", - "command": "npx cds watch fiori", + "name": "bookstore", + "command": "npx cds watch bookstore", "type": "node-terminal", "request": "launch", "skipFiles": [ @@ -29,29 +29,6 @@ "**/cds/lib/req/cds-context.js", "**/odata-v4/okra/**" ] - }, - { - "name": "Debug Mocha Tests", - "type": "node", - "request": "attach", - "port": 9229, - "continueOnAttach": true, - "skipFiles": [ - "/**", - "**/node_modules/**", - "**/cds/lib/lazy.js", - "**/cds/lib/req/cds-context.js", - "**/odata-v4/okra/**", - ] - }, - ], - "inputs": [ - { - "type": "pickString", - "id": "sample", - "description": "Which sample do you want to start?", - "options": [ "bookshop", "fiori", "reviews", "reviews" ], - "default": "bookshop" } ] } diff --git a/test/cds.ql.test.js b/bookshop/cds.ql.test.js similarity index 100% rename from test/cds.ql.test.js rename to bookshop/cds.ql.test.js diff --git a/test/consuming-actions.test.js b/bookshop/test/consuming-actions.test.js similarity index 100% rename from test/consuming-actions.test.js rename to bookshop/test/consuming-actions.test.js diff --git a/test/consuming-services.test.js b/bookshop/test/consuming-services.test.js similarity index 100% rename from test/consuming-services.test.js rename to bookshop/test/consuming-services.test.js diff --git a/test/custom-handlers.test.js b/bookshop/test/custom-handlers.test.js similarity index 90% rename from test/custom-handlers.test.js rename to bookshop/test/custom-handlers.test.js index 88f097a9..66a5b6e7 100644 --- a/test/custom-handlers.test.js +++ b/bookshop/test/custom-handlers.test.js @@ -1,5 +1,5 @@ const cds = require('@sap/cds') -const { GET, POST, expect } = cds.test(__dirname+'/../bookshop') +const { GET, POST, expect } = cds.test(__dirname+'/..') cds.User.default = cds.User.Privileged // hard core monkey patch describe('cap/samples - Custom Handlers', () => { diff --git a/test/hierarchical-data.test.js b/bookshop/test/hierarchical-data/hierarchical-data.test.js similarity index 98% rename from test/hierarchical-data.test.js rename to bookshop/test/hierarchical-data/hierarchical-data.test.js index 1510c702..3a388514 100644 --- a/test/hierarchical-data.test.js +++ b/bookshop/test/hierarchical-data/hierarchical-data.test.js @@ -1,5 +1,5 @@ const cds = require('@sap/cds') -const { expect } = cds.test.in(__dirname,'..') +const { expect } = cds.test.in(__dirname,'..','..') describe('cap/samples - Hierarchical Data', ()=>{ diff --git a/bookshop/test/genres.http b/bookshop/test/hierarchical-data/requests.http similarity index 100% rename from bookshop/test/genres.http rename to bookshop/test/hierarchical-data/requests.http diff --git a/bookshop/test/genres.cds b/bookshop/test/hierarchical-data/services.cds similarity index 53% rename from bookshop/test/genres.cds rename to bookshop/test/hierarchical-data/services.cds index a9347153..7d6f7b24 100644 --- a/bookshop/test/genres.cds +++ b/bookshop/test/hierarchical-data/services.cds @@ -1,4 +1,4 @@ -using { sap.capire.bookshop as my } from '../db/schema'; +using { sap.capire.bookshop as my } from '../../db/schema'; service TestService { entity Genres as projection on my.Genres; } diff --git a/test/localized-data/package.json b/bookshop/test/localized-data/package.json similarity index 100% rename from test/localized-data/package.json rename to bookshop/test/localized-data/package.json diff --git a/test/localized-data/services.cds b/bookshop/test/localized-data/services.cds similarity index 100% rename from test/localized-data/services.cds rename to bookshop/test/localized-data/services.cds diff --git a/test/localized-data/services.test.js b/bookshop/test/localized-data/services.test.js similarity index 100% rename from test/localized-data/services.test.js rename to bookshop/test/localized-data/services.test.js diff --git a/test/messaging.test.js b/bookshop/test/messaging.test.js similarity index 100% rename from test/messaging.test.js rename to bookshop/test/messaging.test.js diff --git a/test/odata.test.js b/bookshop/test/odata.test.js similarity index 100% rename from test/odata.test.js rename to bookshop/test/odata.test.js diff --git a/bookshop/test/requests.http b/bookshop/test/protocols/bookshop.http similarity index 100% rename from bookshop/test/requests.http rename to bookshop/test/protocols/bookshop.http diff --git a/bookshop/test/protocols/hcql-adapter.test.js b/bookshop/test/protocols/hcql-adapter.test.js new file mode 100644 index 00000000..823b9b28 --- /dev/null +++ b/bookshop/test/protocols/hcql-adapter.test.js @@ -0,0 +1,126 @@ +const cds = require('@sap/cds/lib') +const { GET, expect, axios } = cds.test(__dirname) + +// Fetch API disallows GET|HEAD requests with body +if (axios.constructor.name === 'Naxios') it = it.skip + +describe ('GET w/ query in body', () => { + + it ('serves CQN query objects in body', async () => { + const {data:books} = await GET ('/hcql/admin', { + headers: { 'Content-Type': 'application/json' }, + data: cds.ql `SELECT from Books` + }) + expect(books).to.be.an('array').of.length(5) + }) + + it ('serves plain CQL strings in body', async () => { + const {data:books} = await GET ('/hcql/admin', { + headers: { 'Content-Type': 'text/plain' }, + data: `SELECT from Books` + }) + expect(books).to.be.an('array').of.length(5) + }) + + it ('serves complex and deep queries', async () => { + const {data:books} = await GET ('/hcql/admin', { + headers: { 'Content-Type': 'text/plain' }, + data: `SELECT from Authors { + name, + books [order by title] { + title, + genre.name as genre + } + }` + }) + expect(books).to.deep.equal([ + { + name: "Emily Brontë", + books: [ + { title: "Wuthering Heights", genre: 'Drama' } + ] + }, + { + name: "Charlotte Brontë", + books: [ + { title: "Jane Eyre", genre: 'Drama' } + ] + }, + { + name: "Edgar Allen Poe", + books: [ + { title: "Eleonora", genre: 'Romance' }, + { title: "The Raven", genre: 'Mystery' }, + ] + }, + { + name: "Richard Carpenter", + books: [ + { title: "Catweazle", genre: 'Fantasy' } + ] + } + ]) + }) + +}) + + +describe ('Sluggified variants', () => { + + test ('GET /Books', async () => { + const {data:books} = await GET ('/hcql/admin/Books') + expect(books).to.be.an('array').of.length(5) + expect(books.length).to.eql(5) //.of.length(5) + }) + + + test ('GET /Books/201', async () => { + const {data:book} = await GET ('/hcql/admin/Books/201') + expect(book).to.be.an('object') + expect(book).to.have.property ('title', "Wuthering Heights") + }) + + test ('GET /Books { title, author.name as author }' , async () => { + const {data:books} = await GET ('/hcql/admin/Books { title, author.name as author } order by ID') + expect(books).to.deep.equal ([ + { title: "Wuthering Heights", author: "Emily Brontë" }, + { title: "Jane Eyre", author: "Charlotte Brontë" }, + { title: "The Raven", author: "Edgar Allen Poe" }, + { title: "Eleonora", author: "Edgar Allen Poe" }, + { title: "Catweazle", author: "Richard Carpenter" } + ]) + }) + + test ('GET /Books/201 w/ CQL tail in URL' , async () => { + const {data:book} = await GET ('/hcql/admin/Books/201 { title, author.name as author } order by ID') + expect(book).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" }) + }) + + it ('GET /Books/201 w/ CQL fragment in body' , async () => { + const {data:book} = await GET ('/hcql/admin/Books/201', { + headers: { 'Content-Type': 'text/plain' }, + data: `{ title, author.name as author }` + }) + expect(book).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" }) + }) + + it ('GET /Books/201 w/ CQN fragment in body' , async () => { + const {data:book} = await GET ('/hcql/admin/Books/201', { + data: cds.ql `SELECT title, author.name as author` .SELECT + }) + expect(book).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" }) + }) + + it ('GET /Books/201 w/ tail in URL plus CQL/CQN fragments in body' , async () => { + const {data:[b1]} = await GET ('/hcql/admin/Books where ID=201', { + data: cds.ql `SELECT title, author.name as author` .SELECT + }) + expect(b1).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" }) + const {data:[b2]} = await GET ('/hcql/admin/Books where ID=201', { + headers: { 'Content-Type': 'text/plain' }, + data: `{ title, author.name as author }` + }) + expect(b2).to.deep.equal ({ title: "Wuthering Heights", author: "Emily Brontë" }) + }) + +}) \ No newline at end of file diff --git a/bookshop/test/protocols/hcql.http b/bookshop/test/protocols/hcql.http new file mode 100644 index 00000000..40af1782 --- /dev/null +++ b/bookshop/test/protocols/hcql.http @@ -0,0 +1,225 @@ +@server = http://localhost:4004 + +GET {{server}}/odata/v4/admin/Authors? +&$select=ID,name +&$expand=books($select=ID,title) +&$count=true +### + +# +# The basic variant expects a CQN object passed as an application/json body +# to a POST request. This is also the fastest one, as it doesn't need CQL parsing. +# Note: $count is returned in X-Total-Count response header +# +GET {{server}}/hcql/admin +Content-Type: application/json +# Accept-Language: de + +{ "SELECT": { + "from": { "ref": [ "Authors" ] }, + "columns": [ + { "ref": [ "name" ] }, + { "ref": [ "books" ], "expand": [ + { "ref": [ "ID" ] }, + { "ref": [ "title" ] } + ]} + ], + "count": true +}} +### + +POST {{server}}/hcql/browse/submitOrder?book=201&quantity=2 +Authorization: Basic alice: +### + +POST {{server}}/hcql/browse/submitOrder +Authorization: Basic alice: +Content-Type: application/json + +{ + "book": 201, + "quantity": 2 +} +### + +GET {{server}}/hcql/browse/submitOrder?book=201&quantity=2 +Authorization: Basic alice: +### + +# +# Alternatively you can pass a CQL string as plain/text body +# +GET {{server}}/hcql/admin +Content-Type: text/plain +# X-Total-Count: true + +SELECT from Authors { name, books { title }} +# SELECT from Books { title, currency } +### + +# +# In addition we offer convenience slug routes... +# .e.g. /srv/entity routes +# + + +GET {{server}}/hcql/admin/Books +### + +GET {{server}}/hcql/admin/Books/201 +### + +GET {{server}}/hcql/admin/Books { ID, title, author.name as author } +### + +GET {{server}}/hcql/admin/Books order by stock desc +Content-Type: text/plain + +{ title, stock } +### + +GET {{server}}/hcql/admin/Books/201 { ID, title, author.name } +### + +GET {{server}}/hcql/admin/Books/201 { ID, title, author{name} } +### + + +POST {{server}}/hcql/admin/Books?title=The Black Cat&author_ID=101 +### + + +POST {{server}}/hcql/admin/Books?title=The Black Cat +Content-Type: application/json + +{ + "author_ID": 101 +} +### + +POST {{server}}/hcql/admin/Books +Content-Type: application/json + +{ + "title": "The Black Cat", + "author": { "ID": 101 } +} +### + +PUT {{server}}/hcql/admin/Books/275?title=Catastrophe +### + +PATCH {{server}}/hcql/admin/Books/275 +Content-Type: application/json + +{ + "title": "Catastrophe" +} +### + +GET {{server}}/hcql/admin/Authors { name, books { ID, title }} +### + +GET {{server}}/hcql/admin/Books { ID, title, author.name as author } order by ID desc +### + + + +// ------------------------------------ + +POST {{server}}/hcql/admin +Content-Type: application/json + +{"SELECT": { "from": { "ref": ["Books"] }}} +### + +POST {{server}}/hcql/admin +Content-Type: text/plain + +SELECT from Authors { + name as author, + books { + title, + stock, + price, + currency { * } + } +} +where name like '%Bro%' +order by name asc +### + + +# +# Simple REST-style URLs as supported as well +# + +GET {{server}}/hcql/admin/Books +### + +GET {{server}}/hcql/admin/Books/201 +### + + +# +# REST-style URLs can be combined with trailing CQL in the path, in plain +# text body, or with projections sent as application/json array +# + +GET {{server}}/hcql/admin/Books order by stock desc +### + +GET {{server}}/hcql/admin/Books { title as book, stock } order by stock desc +### + +GET {{server}}/hcql/admin/Authors +Content-Type: text/plain +Accept-Language: fr + +{ + ID, name as author, + books { + title, + stock, + currency { * } + } +} +where name like '%Bro%' +order by name asc +### + + +GET {{server}}/hcql/admin/Books/201 { title, stock } +### + +GET {{server}}/hcql/admin/Books order by stock desc +Content-Type: text/plain + +{ title, stock } +### + + +# +# CQL adaptor also provides access to the underlying CSN schema +# + +GET {{server}}/hcql/admin/$csn +### + + + +# +# CQL adaptor also supports INSERTs, UPDATEs, DELETEs ... +# + +POST {{server}}/hcql/admin +Content-Type: application/jsonin wonderland + +{ "INSERT": { + "into": "Books", + "entries": [{ + "title": "The Black Cat", + "author": { "ID": 150 } + }] +}} +### diff --git a/bookshop/test/protocols/odata.http b/bookshop/test/protocols/odata.http new file mode 100644 index 00000000..5793a11b --- /dev/null +++ b/bookshop/test/protocols/odata.http @@ -0,0 +1,26 @@ +@server = http://localhost:4004 + +GET {{server}}/odata/v2/admin/Authors +Authorization: Basic alice: +### + +GET {{server}}/odata/v2/admin/Authors?$select=ID,name&$expand=books($select=ID,title) +Authorization: Basic alice: +### + +GET {{server}}/odata/v4/admin/Authors +Authorization: Basic alice: +### + +GET {{server}}/odata/v4/admin/Authors?$select=ID,name&$expand=books($select=ID,title) +Authorization: Basic alice: +### + + +GET {{server}}/rest/admin/Authors +Authorization: Basic alice: +### + +GET {{server}}/rest/admin/Authors?$select=ID,name&$expand=books($select=ID,title) +Authorization: Basic alice: +### diff --git a/bookshop/test/protocols/rest.http b/bookshop/test/protocols/rest.http new file mode 100644 index 00000000..61706cac --- /dev/null +++ b/bookshop/test/protocols/rest.http @@ -0,0 +1,9 @@ +@server = http://localhost:4004 + +GET {{server}}/rest/admin/Authors +Authorization: Basic alice: +### + +GET {{server}}/rest/admin/Authors?$select=ID,name&$expand=books($select=ID,title) +Authorization: Basic alice: +### diff --git a/bookshop/test/protocols/services.cds b/bookshop/test/protocols/services.cds new file mode 100644 index 00000000..204a1be0 --- /dev/null +++ b/bookshop/test/protocols/services.cds @@ -0,0 +1,4 @@ + +using { CatalogService, AdminService } from '@capire/bookstore'; +annotate CatalogService with @hcql @odata @path:'browse' @requires:[]; +annotate AdminService with @hcql @odata @path:'admin'; \ No newline at end of file diff --git a/fiori/app/_i18n/i18n_de.properties b/bookstore/app/_i18n/i18n_de.properties similarity index 100% rename from fiori/app/_i18n/i18n_de.properties rename to bookstore/app/_i18n/i18n_de.properties diff --git a/fiori/app/_i18n/i18n_en.properties b/bookstore/app/_i18n/i18n_en.properties similarity index 100% rename from fiori/app/_i18n/i18n_en.properties rename to bookstore/app/_i18n/i18n_en.properties diff --git a/fiori/app/admin-authors/fiori-service.cds b/bookstore/app/admin-authors/fiori-service.cds similarity index 100% rename from fiori/app/admin-authors/fiori-service.cds rename to bookstore/app/admin-authors/fiori-service.cds diff --git a/fiori/app/admin-authors/webapp/Component.js b/bookstore/app/admin-authors/webapp/Component.js similarity index 100% rename from fiori/app/admin-authors/webapp/Component.js rename to bookstore/app/admin-authors/webapp/Component.js diff --git a/fiori/app/admin-authors/webapp/i18n/i18n.properties b/bookstore/app/admin-authors/webapp/i18n/i18n.properties similarity index 100% rename from fiori/app/admin-authors/webapp/i18n/i18n.properties rename to bookstore/app/admin-authors/webapp/i18n/i18n.properties diff --git a/fiori/app/admin-authors/webapp/manifest.json b/bookstore/app/admin-authors/webapp/manifest.json similarity index 100% rename from fiori/app/admin-authors/webapp/manifest.json rename to bookstore/app/admin-authors/webapp/manifest.json diff --git a/fiori/app/admin-books/fiori-service.cds b/bookstore/app/admin-books/fiori-service.cds similarity index 100% rename from fiori/app/admin-books/fiori-service.cds rename to bookstore/app/admin-books/fiori-service.cds diff --git a/fiori/app/admin-books/webapp/Component.js b/bookstore/app/admin-books/webapp/Component.js similarity index 100% rename from fiori/app/admin-books/webapp/Component.js rename to bookstore/app/admin-books/webapp/Component.js diff --git a/fiori/app/admin-books/webapp/i18n/i18n.properties b/bookstore/app/admin-books/webapp/i18n/i18n.properties similarity index 100% rename from fiori/app/admin-books/webapp/i18n/i18n.properties rename to bookstore/app/admin-books/webapp/i18n/i18n.properties diff --git a/fiori/app/admin-books/webapp/manifest.json b/bookstore/app/admin-books/webapp/manifest.json similarity index 100% rename from fiori/app/admin-books/webapp/manifest.json rename to bookstore/app/admin-books/webapp/manifest.json diff --git a/fiori/app/appconfig/fioriSandboxConfig.json b/bookstore/app/appconfig/fioriSandboxConfig.json similarity index 100% rename from fiori/app/appconfig/fioriSandboxConfig.json rename to bookstore/app/appconfig/fioriSandboxConfig.json diff --git a/fiori/app/browse/fiori-service.cds b/bookstore/app/browse/fiori-service.cds similarity index 100% rename from fiori/app/browse/fiori-service.cds rename to bookstore/app/browse/fiori-service.cds diff --git a/fiori/app/browse/webapp/Component.js b/bookstore/app/browse/webapp/Component.js similarity index 100% rename from fiori/app/browse/webapp/Component.js rename to bookstore/app/browse/webapp/Component.js diff --git a/fiori/app/browse/webapp/i18n/i18n.properties b/bookstore/app/browse/webapp/i18n/i18n.properties similarity index 100% rename from fiori/app/browse/webapp/i18n/i18n.properties rename to bookstore/app/browse/webapp/i18n/i18n.properties diff --git a/fiori/app/browse/webapp/manifest.json b/bookstore/app/browse/webapp/manifest.json similarity index 100% rename from fiori/app/browse/webapp/manifest.json rename to bookstore/app/browse/webapp/manifest.json diff --git a/fiori/app/common.cds b/bookstore/app/common.cds similarity index 100% rename from fiori/app/common.cds rename to bookstore/app/common.cds diff --git a/fiori/app/fiori-apps.html b/bookstore/app/fiori-apps.html similarity index 100% rename from fiori/app/fiori-apps.html rename to bookstore/app/fiori-apps.html diff --git a/fiori/app/genres/fiori-service.cds b/bookstore/app/genres/fiori-service.cds similarity index 100% rename from fiori/app/genres/fiori-service.cds rename to bookstore/app/genres/fiori-service.cds diff --git a/fiori/app/genres/tree-view.cds b/bookstore/app/genres/tree-view.cds similarity index 100% rename from fiori/app/genres/tree-view.cds rename to bookstore/app/genres/tree-view.cds diff --git a/fiori/app/genres/value-help.cds b/bookstore/app/genres/value-help.cds similarity index 100% rename from fiori/app/genres/value-help.cds rename to bookstore/app/genres/value-help.cds diff --git a/fiori/app/genres/webapp/Component.js b/bookstore/app/genres/webapp/Component.js similarity index 100% rename from fiori/app/genres/webapp/Component.js rename to bookstore/app/genres/webapp/Component.js diff --git a/fiori/app/genres/webapp/i18n/i18n.properties b/bookstore/app/genres/webapp/i18n/i18n.properties similarity index 100% rename from fiori/app/genres/webapp/i18n/i18n.properties rename to bookstore/app/genres/webapp/i18n/i18n.properties diff --git a/fiori/app/genres/webapp/i18n/i18n_de.properties b/bookstore/app/genres/webapp/i18n/i18n_de.properties similarity index 100% rename from fiori/app/genres/webapp/i18n/i18n_de.properties rename to bookstore/app/genres/webapp/i18n/i18n_de.properties diff --git a/fiori/app/genres/webapp/manifest.json b/bookstore/app/genres/webapp/manifest.json similarity index 100% rename from fiori/app/genres/webapp/manifest.json rename to bookstore/app/genres/webapp/manifest.json diff --git a/fiori/app/services.cds b/bookstore/app/services.cds similarity index 100% rename from fiori/app/services.cds rename to bookstore/app/services.cds diff --git a/bookstore/cds-plugin.js b/bookstore/cds-plugin.js deleted file mode 100644 index a2472a69..00000000 --- a/bookstore/cds-plugin.js +++ /dev/null @@ -1 +0,0 @@ -require('./srv/server') \ No newline at end of file diff --git a/fiori/db/hana/index.cds b/bookstore/db/hana/index.cds similarity index 100% rename from fiori/db/hana/index.cds rename to bookstore/db/hana/index.cds diff --git a/fiori/db/sqlite/index.cds b/bookstore/db/sqlite/index.cds similarity index 100% rename from fiori/db/sqlite/index.cds rename to bookstore/db/sqlite/index.cds diff --git a/bookstore/package.json b/bookstore/package.json index 458669cd..2b263efa 100644 --- a/bookstore/package.json +++ b/bookstore/package.json @@ -7,11 +7,18 @@ "@capire/orders": "*", "@capire/common": "*", "@capire/data-viewer": "*", + "@cap-js/hana": ">=1", "@sap-cloud-sdk/http-client": "^4", "@sap-cloud-sdk/resilience": "^4", "@sap/cds": ">=5", - "express": "^4.17.1", - "@cap-js/hana": ">=1" + "express": "^4.17.1" + }, + "devDependencies": { + "@cap-js/sqlite": ">=1" + }, + "scripts": { + "start": "cds-serve", + "watch": "cds watch" }, "cds": { "requires": { @@ -24,11 +31,21 @@ "model": "@capire/orders" }, "messaging": true, - "db": true + "db": true, + "db-ext": { + "[development]": { + "model": "db/sqlite" + }, + "[production]": { + "model": "db/hana" + } + } }, "log": { "service": true } }, - "scripts": { - "start": "cds-serve" - } + "sapux": [ + "app/admin-authors", + "app/admin-books", + "app/browse" + ] } diff --git a/bookstore/server.js b/bookstore/server.js new file mode 100644 index 00000000..b46cee3f --- /dev/null +++ b/bookstore/server.js @@ -0,0 +1,2 @@ +require('./srv/mashup') +require('./srv/trees') diff --git a/bookstore/srv/server.js b/bookstore/srv/mashup.js similarity index 100% rename from bookstore/srv/server.js rename to bookstore/srv/mashup.js diff --git a/fiori/server.js b/bookstore/srv/trees.js similarity index 100% rename from fiori/server.js rename to bookstore/srv/trees.js diff --git a/etc/dark.drawio.svg b/etc/dark.drawio.svg deleted file mode 100644 index 6a04d573..00000000 --- a/etc/dark.drawio.svg +++ /dev/null @@ -1,195 +0,0 @@ - - - - - - - -
-
-
- @capire/ -
- - bookshop - -
-
-
-
- - @capire/... - -
-
- - - - -
-
-
- @capire/ -
- - bookstore - -
-
-
-
- - @capire/... - -
-
- - - - -
-
-
- @capire/ -
- - reviews - -
-
-
-
- - @capire/... - -
-
- - - - -
-
-
- @capire/ -
- - common - -
-
-
-
- - @capire/... - -
-
- - - - -
-
-
- @capire/ -
- - orders - -
-
-
-
- - @capire/... - -
-
- - - - - - - - - - - - -
-
-
- @capire/ -
- - suppliers - -
-
-
-
- - @capire/... - -
-
- - - - -
-
-
- - S/4 - -
-
-
-
- - S/4 - -
-
- - - - - - - - - - -
-
-
- @capire/ -
- - fiori - -
-
-
-
- - @capire/... - -
-
- - -
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file diff --git a/etc/samples.drawio.svg b/etc/samples.drawio.svg deleted file mode 100644 index 43febc30..00000000 --- a/etc/samples.drawio.svg +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - - -
-
-
- - Bookshop - -
- App -
-
-
-
- - Bookshop... - -
-
- - - - -
-
-
- - - - Bookstore -
-
-
- App -
-
-
-
-
-
- - Bookstore... - -
-
- - - - -
-
-
- - - Reviews - -
- Service -
-
-
-
-
-
- - Reviews... - -
-
- - - - -
-
-
- - Common - -
- Data -
-
-
-
- - Common... - -
-
- - - - -
-
-
- - - Orders - -
- Service -
-
-
-
-
-
- - Orders... - -
-
- - - - - - - - - - - - -
-
-
- - - Suppliers - -
- Service -
-
-
-
-
-
- - Suppliers... - -
-
- - - - -
-
-
- - S/4 - -
-
-
-
- - S/4 - -
-
- - - - - - - - - - -
-
-
- - - Fiori - -
- App -
-
-
-
-
-
- - Fiori... - -
-
- - -
- - - - - Text is not SVG - cannot display - - - -
\ No newline at end of file diff --git a/fiori/.env b/fiori/.env deleted file mode 100644 index 378269b7..00000000 --- a/fiori/.env +++ /dev/null @@ -1 +0,0 @@ -cds.requires.[hybrid].messaging.kind=file-based-messaging \ No newline at end of file diff --git a/fiori/index.cds b/fiori/index.cds deleted file mode 100644 index 1ea0235e..00000000 --- a/fiori/index.cds +++ /dev/null @@ -1 +0,0 @@ -using from './db/common'; diff --git a/fiori/package.json b/fiori/package.json deleted file mode 100644 index 2fa68e52..00000000 --- a/fiori/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "@capire/fiori", - "version": "1.0.0", - "dependencies": { - "@capire/bookstore": "*", - "@sap/cds": ">=5", - "express": "^4.17.1" - }, - "devDependencies": { - "@cap-js/sqlite": ">=1" - }, - "scripts": { - "start": "cds-serve", - "watch": "cds watch" - }, - "cds": { - "requires": { - "ReviewsService": { - "kind": "odata", - "model": "@capire/reviews" - }, - "OrdersService": { - "kind": "odata", - "model": "@capire/orders" - }, - "messaging": true, - "db": true, - "db-ext": { - "[development]": { - "model": "db/sqlite" - }, - "[production]": { - "model": "db/hana" - } - } - } - }, - "sapux": [ - "app/admin-authors", - "app/admin-books", - "app/browse" - ] -} diff --git a/incidents b/incidents new file mode 160000 index 00000000..9e19765b --- /dev/null +++ b/incidents @@ -0,0 +1 @@ +Subproject commit 9e19765b3229b329cbe27c31cb20ce30d627d898 diff --git a/etc/data-viewer/app/viewer/app.js b/inspector/app/viewer/app.js similarity index 100% rename from etc/data-viewer/app/viewer/app.js rename to inspector/app/viewer/app.js diff --git a/etc/data-viewer/app/viewer/index.html b/inspector/app/viewer/index.html similarity index 100% rename from etc/data-viewer/app/viewer/index.html rename to inspector/app/viewer/index.html diff --git a/etc/data-viewer/cds-plugin.js b/inspector/cds-plugin.js similarity index 100% rename from etc/data-viewer/cds-plugin.js rename to inspector/cds-plugin.js diff --git a/etc/data-viewer/index.cds b/inspector/index.cds similarity index 100% rename from etc/data-viewer/index.cds rename to inspector/index.cds diff --git a/etc/data-viewer/package.json b/inspector/package.json similarity index 100% rename from etc/data-viewer/package.json rename to inspector/package.json diff --git a/etc/data-viewer/srv/data-service.cds b/inspector/srv/data-service.cds similarity index 100% rename from etc/data-viewer/srv/data-service.cds rename to inspector/srv/data-service.cds diff --git a/etc/data-viewer/srv/data-service.js b/inspector/srv/data-service.js similarity index 100% rename from etc/data-viewer/srv/data-service.js rename to inspector/srv/data-service.js diff --git a/etc/loggers/app/loggers.html b/loggers/app/loggers.html similarity index 100% rename from etc/loggers/app/loggers.html rename to loggers/app/loggers.html diff --git a/etc/loggers/package.json b/loggers/package.json similarity index 100% rename from etc/loggers/package.json rename to loggers/package.json diff --git a/etc/loggers/readme.md b/loggers/readme.md similarity index 100% rename from etc/loggers/readme.md rename to loggers/readme.md diff --git a/etc/loggers/srv/dummy.cds b/loggers/srv/dummy.cds similarity index 100% rename from etc/loggers/srv/dummy.cds rename to loggers/srv/dummy.cds diff --git a/etc/loggers/srv/loggers.cds b/loggers/srv/loggers.cds similarity index 100% rename from etc/loggers/srv/loggers.cds rename to loggers/srv/loggers.cds diff --git a/etc/loggers/srv/loggers.js b/loggers/srv/loggers.js similarity index 100% rename from etc/loggers/srv/loggers.js rename to loggers/srv/loggers.js diff --git a/etc/loggers/test/requests.http b/loggers/test/requests.http similarity index 100% rename from etc/loggers/test/requests.http rename to loggers/test/requests.http diff --git a/package-lock.json b/package-lock.json index 16893668..4a8225c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,15 +9,7 @@ "version": "3.0.0", "license": "SEE LICENSE IN LICENSE", "workspaces": [ - "bookshop", - "bookstore", - "common", - "fiori", - "orders", - "reviews", - "shared-db", - "etc/data-viewer", - "etc/loggers" + "*" ], "devDependencies": { "@cap-js/cds-test": "^0" @@ -48,6 +40,9 @@ "@sap-cloud-sdk/resilience": "^4", "@sap/cds": ">=5", "express": "^4.17.1" + }, + "devDependencies": { + "@cap-js/sqlite": ">=1" } }, "common": { @@ -60,6 +55,7 @@ "etc/data-viewer": { "name": "@capire/data-viewer", "version": "0.1.0", + "extraneous": true, "dependencies": { "@sap/cds": ">=5.0.4" } @@ -67,6 +63,7 @@ "etc/loggers": { "name": "@capire/loggers", "version": "1.0.0", + "extraneous": true, "dependencies": { "@sap/cds": ">=5.9", "express": "^4.17.1" @@ -75,6 +72,7 @@ "fiori": { "name": "@capire/fiori", "version": "1.0.0", + "extraneous": true, "dependencies": { "@capire/bookstore": "*", "@sap/cds": ">=5", @@ -84,6 +82,1002 @@ "@cap-js/sqlite": ">=1" } }, + "incidents": { + "name": "@capire/incidents", + "version": "1.0.0", + "dependencies": { + "@sap/cds": ">=8", + "express": "^4" + }, + "devDependencies": { + "@cap-js/attachments": "^2", + "@cap-js/audit-logging": ">=0.8.3", + "@cap-js/cds-test": "*", + "@cap-js/change-tracking": "^1.0.6", + "@cap-js/sqlite": ">=1" + } + }, + "inspector": { + "name": "@capire/data-viewer", + "version": "0.1.0", + "dependencies": { + "@sap/cds": ">=5.0.4" + } + }, + "loggers": { + "name": "@capire/loggers", + "version": "1.0.0", + "dependencies": { + "@sap/cds": ">=5.9", + "express": "^4.17.1" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.846.0.tgz", + "integrity": "sha512-+C9qRJ7SFN+Bi2DJqfJ73Aj4ORpic9Jk5boosiOZj+TZi6qYHW6TCUqxheiC6JT/0xtE5C7VFIhW/UP/CAh0Tw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/credential-provider-node": "3.846.0", + "@aws-sdk/middleware-bucket-endpoint": "3.840.0", + "@aws-sdk/middleware-expect-continue": "3.840.0", + "@aws-sdk/middleware-flexible-checksums": "3.846.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-location-constraint": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-sdk-s3": "3.846.0", + "@aws-sdk/middleware-ssec": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.846.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/signature-v4-multi-region": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.845.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.846.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.7.0", + "@smithy/eventstream-serde-browser": "^4.0.4", + "@smithy/eventstream-serde-config-resolver": "^4.1.2", + "@smithy/eventstream-serde-node": "^4.0.4", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/hash-blob-browser": "^4.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/hash-stream-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/md5-js": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-retry": "^4.1.16", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.23", + "@smithy/util-defaults-mode-node": "^4.0.23", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-stream": "^4.2.3", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.6", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.846.0.tgz", + "integrity": "sha512-7MgMl3nlwf2ixad5Xe8pFHtcwFchkx37MEvGuB00tn5jyBp3AQQ4dK3iHtj2HjhXcXD0G67zVPvH4/QNOL7/gw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.846.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.845.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.846.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.7.0", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-retry": "^4.1.16", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.23", + "@smithy/util-defaults-mode-node": "^4.0.23", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.846.0.tgz", + "integrity": "sha512-7CX0pM906r4WSS68fCTNMTtBCSkTtf3Wggssmx13gD40gcWEZXsU00KzPp1bYheNRyPlAq3rE22xt4wLPXbuxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.7.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.846.0.tgz", + "integrity": "sha512-QuCQZET9enja7AWVISY+mpFrEIeHzvkx/JEEbHYzHhUkxcnC2Kq2c0bB7hDihGD0AZd3Xsm653hk1O97qu69zg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.846.0.tgz", + "integrity": "sha512-Jh1iKUuepdmtreMYozV2ePsPcOF5W9p3U4tWhi3v6nDvz0GsBjzjAROW+BW8XMz9vAD3I9R+8VC3/aq63p5nlw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.846.0.tgz", + "integrity": "sha512-GUxaBBKsYx1kOlRbcs77l6BVyG9K70zekJX+5hdwTEgJq7AoHl/XYoWiDxPf6zQ7J4euixPJoyRhpNbJjAXdFw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.846.0", + "@aws-sdk/credential-provider-env": "3.846.0", + "@aws-sdk/credential-provider-http": "3.846.0", + "@aws-sdk/credential-provider-process": "3.846.0", + "@aws-sdk/credential-provider-sso": "3.846.0", + "@aws-sdk/credential-provider-web-identity": "3.846.0", + "@aws-sdk/nested-clients": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.846.0.tgz", + "integrity": "sha512-du2DsXYRfQ8VIt/gXGThhT8KdUEt2j9W91W87Bl9IA5DINt4nSZv+gzh8LqHBYsTSqoUpKb+qIfP1RjZM/8r0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.846.0", + "@aws-sdk/credential-provider-http": "3.846.0", + "@aws-sdk/credential-provider-ini": "3.846.0", + "@aws-sdk/credential-provider-process": "3.846.0", + "@aws-sdk/credential-provider-sso": "3.846.0", + "@aws-sdk/credential-provider-web-identity": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.846.0.tgz", + "integrity": "sha512-mEpwDYarJSH+CIXnnHN0QOe0MXI+HuPStD6gsv3z/7Q6ESl8KRWon3weFZCDnqpiJMUVavlDR0PPlAFg2MQoPg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.846.0.tgz", + "integrity": "sha512-Dxz9dpdjfxUsSfW92SAldu9wy8wgEbskn4BNWBFHslQHTmqurmR0ci4P1SMxJJKd498AUEoIAzZOtjGOC38irQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.846.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/token-providers": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.846.0.tgz", + "integrity": "sha512-j6zOd+kynPQJzmVwSKSUTpsLXAf7vKkr7hCPbQyqC8ZqkIuExsRqu2vRQjX2iH/MKhwZ+qEWMxPMhfDoyv7Gag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.846.0", + "@aws-sdk/nested-clients": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/lib-storage": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.846.0.tgz", + "integrity": "sha512-Vd1BdkRDoDAAKgUcBAko1OezMHD90PjoP43iGi2HyMJaqak/rhoOXpPlejH4B1uGkrDEUVYbJz8UtKl8UdQp4g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/smithy-client": "^4.4.7", + "buffer": "5.6.0", + "events": "3.3.0", + "stream-browserify": "3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-s3": "^3.846.0" + } + }, + "node_modules/@aws-sdk/lib-storage/node_modules/buffer": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.840.0.tgz", + "integrity": "sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.840.0.tgz", + "integrity": "sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.846.0.tgz", + "integrity": "sha512-CdkeVfkwt3+bDLhmOwBxvkUf6oY9iUhvosaUnqkoPsOqIiUEN54yTGOnO8A0wLz6mMsZ6aBlfFrQhFnxt3c+yw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.3", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz", + "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.840.0.tgz", + "integrity": "sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz", + "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz", + "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.846.0.tgz", + "integrity": "sha512-jP9x+2Q87J5l8FOP+jlAd7vGLn0cC6G9QGmf386e5OslBPqxXKcl3RjqGLIOKKos2mVItY3ApP5xdXQx7jGTVA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/core": "^3.7.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.3", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.840.0.tgz", + "integrity": "sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.846.0.tgz", + "integrity": "sha512-85/oUc2jMXqQWo+HHH7WwrdqqArzhMmTmBCpXZwklBHG+ZMzTS5Wug2B0HhGDVWo9aYRMeikSq4lsrpHFVd2MQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.845.0", + "@smithy/core": "^3.7.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.846.0.tgz", + "integrity": "sha512-LCXPVtNQnkTuE8inPCtpfWN2raE/ndFBKf5OIbuHnC/0XYGOUl5q7VsJz471zJuN9FX3WMfopaFwmNc7cQNMpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.846.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.846.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.845.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.846.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.7.0", + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-retry": "^4.1.16", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.23", + "@smithy/util-defaults-mode-node": "^4.0.23", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz", + "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.846.0.tgz", + "integrity": "sha512-ZMfIMxUljqZzPJGOcraC6erwq/z1puNMU35cO1a/WdhB+LdYknMn1lr7SJuH754QwNzzIlZbEgg4hoHw50+DpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.846.0.tgz", + "integrity": "sha512-sGNk3xclK7xx+rIJZDJC4FNFqaSSqN0nSr+AdVdQ+/iKQKaUA6hixRbXaQ7I7M5mhqS6fMW1AsqVRywQq2BSMw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.846.0", + "@aws-sdk/nested-clients": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", + "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz", + "integrity": "sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.845.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.845.0.tgz", + "integrity": "sha512-MBmOf0Pb4q6xs9V7jXT1+qciW2965yvaoZUlUUnxUEoX6zxWROeIu/gttASc4vSjOHr/+64hmFkxjeBUF37FJA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-endpoints": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz", + "integrity": "sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz", + "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.846.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.846.0.tgz", + "integrity": "sha512-MXYXCplw76xe8A9ejVaIru6Carum/2LQbVtNHsIa4h0TlafLdfulywsoMWL1F53Y9XxQSeOKyyqDKLNOgRVimw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.846.0", + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", + "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@cap-js/attachments": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@cap-js/attachments/-/attachments-2.1.2.tgz", + "integrity": "sha512-rRJ1iVgkSF2kGuplqErHhSyl5krayn8prCRPyNa0USBhTItvsegYtnFvbsddS2scATE2w6pCHcdFgIRfm2O5/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-s3": "^3.400.0", + "@aws-sdk/lib-storage": "^3.515.0", + "axios": "^1.4.0" + }, + "engines": { + "node": ">=17.0.0" + }, + "peerDependencies": { + "@sap/cds": ">=8" + } + }, + "node_modules/@cap-js/audit-logging": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@cap-js/audit-logging/-/audit-logging-1.0.0.tgz", + "integrity": "sha512-cfyzXMjFym6YCwonwvbXNojVt+7sucZfQcjBWwqLl47M/HnGOiwWwMjED2I3MtOiEMIjW9kIxq0m2MOWEmB6iQ==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "@sap/cds": ">=8" + } + }, "node_modules/@cap-js/cds-test": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/@cap-js/cds-test/-/cds-test-0.4.0.tgz", @@ -106,6 +1100,16 @@ "@sap/cds": ">=8.8" } }, + "node_modules/@cap-js/change-tracking": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@cap-js/change-tracking/-/change-tracking-1.0.8.tgz", + "integrity": "sha512-r5ze+EZxaxHjZp8w12SJxROVyGu/8uwIKGUecjsw/iZGi5NdUOzdmHOmYdKg/uiZSqHc4/Ckf2Jah8cDA2jkWQ==", + "dev": true, + "license": "SEE LICENSE IN LICENSE", + "peerDependencies": { + "@sap/cds": ">=8" + } + }, "node_modules/@cap-js/db-service": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@cap-js/db-service/-/db-service-2.2.0.tgz", @@ -161,15 +1165,15 @@ "link": true }, "node_modules/@capire/data-viewer": { - "resolved": "etc/data-viewer", + "resolved": "inspector", "link": true }, - "node_modules/@capire/fiori": { - "resolved": "fiori", + "node_modules/@capire/incidents": { + "resolved": "incidents", "link": true }, "node_modules/@capire/loggers": { - "resolved": "etc/loggers", + "resolved": "loggers", "link": true }, "node_modules/@capire/orders": { @@ -180,10 +1184,22 @@ "resolved": "reviews", "link": true }, + "node_modules/@capire/sflight": { + "resolved": "sflight", + "link": true + }, + "node_modules/@capire/sflights": { + "resolved": "sflight-md", + "link": true + }, "node_modules/@capire/shared-db": { "resolved": "shared-db", "link": true }, + "node_modules/@capire/travels": { + "resolved": "sflight-travels", + "link": true + }, "node_modules/@colors/colors": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", @@ -391,12 +1407,788 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/@smithy/abort-controller": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz", + "integrity": "sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz", + "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz", + "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz", + "integrity": "sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.7.0.tgz", + "integrity": "sha512-7ov8hu/4j0uPZv8b27oeOFtIBtlFmM3ibrPv/Omx1uUdoXvcpJ00U+H/OWWC/keAguLlcqwtyL2/jTlSnApgNQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.0.8", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.3", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz", + "integrity": "sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.4.tgz", + "integrity": "sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.4.tgz", + "integrity": "sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.2.tgz", + "integrity": "sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.4.tgz", + "integrity": "sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.4.tgz", + "integrity": "sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.0.tgz", + "integrity": "sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz", + "integrity": "sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^5.0.0", + "@smithy/chunked-blob-reader-native": "^4.0.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz", + "integrity": "sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz", + "integrity": "sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz", + "integrity": "sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz", + "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.4.tgz", + "integrity": "sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz", + "integrity": "sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.15.tgz", + "integrity": "sha512-L2M0oz+r6Wv0KZ90MgClXmWkV7G72519Hd5/+K5i3gQMu4WNQykh7ERr58WT3q60dd9NqHSMc3/bAK0FsFg3Fw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.7.0", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.16.tgz", + "integrity": "sha512-PpPhMpC6U1fLW0evKnC8gJtmobBYn0oi4RrIKGhN1a86t6XgVEK+Vb9C8dh5PPXb3YDr8lE6aYKh1hd3OikmWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/service-error-classification": "^4.0.6", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz", + "integrity": "sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz", + "integrity": "sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz", + "integrity": "sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.0.tgz", + "integrity": "sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz", + "integrity": "sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz", + "integrity": "sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz", + "integrity": "sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "@smithy/util-uri-escape": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz", + "integrity": "sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.6.tgz", + "integrity": "sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz", + "integrity": "sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz", + "integrity": "sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-uri-escape": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.7.tgz", + "integrity": "sha512-x+MxBNOcG7rY9i5QsbdgvvRJngKKvUJrbU5R5bT66PTH3e6htSupJ4Q+kJ3E7t6q854jyl57acjpPi6qG1OY5g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.7.0", + "@smithy/middleware-endpoint": "^4.1.15", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz", + "integrity": "sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz", + "integrity": "sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz", + "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz", + "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz", + "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz", + "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz", + "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.23.tgz", + "integrity": "sha512-NqRi6VvEIwpJ+KSdqI85+HH46H7uVoNqVTs2QO7p1YKnS7k8VZnunJj8R5KdmmVnTojkaL1OMPyZC8uR5F7fSg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.23.tgz", + "integrity": "sha512-NE9NtEVigFa+HHJ5bBeQT7KF3KiltW880CLN9TnWWL55akeou3ziRAHO22QSUPgPZ/nqMfPXi/LGMQ6xQvXPNQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.1.4", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/smithy-client": "^4.4.7", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz", + "integrity": "sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz", + "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz", + "integrity": "sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.6.tgz", + "integrity": "sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.0.6", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.3.tgz", + "integrity": "sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.1.0", + "@smithy/node-http-handler": "^4.1.0", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-hex-encoding": "^4.0.0", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz", + "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz", + "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.6.tgz", + "integrity": "sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", "license": "MIT" }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true, + "license": "MIT" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -565,6 +2357,13 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "dev": true, + "license": "MIT" + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -1032,6 +2831,16 @@ "node": ">= 0.6" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -1096,6 +2905,25 @@ ], "license": "MIT" }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -2171,6 +3999,17 @@ "node": ">= 0.8" } }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -2189,6 +4028,19 @@ "node": ">=0.10.0" } }, + "node_modules/strnum": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2253,6 +4105,13 @@ "node": ">= 14.0.0" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -2312,6 +4171,20 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -2403,6 +4276,46 @@ "express": "^4.17.1" } }, + "sflight": { + "name": "@capire/sflight", + "version": "1.0.0", + "license": "SAP SAMPLE CODE LICENSE", + "dependencies": { + "@sap/cds": ">=9", + "express": "^4" + }, + "devDependencies": { + "@cap-js/cds-test": "*", + "@cap-js/sqlite": ">=2" + } + }, + "sflight-md": { + "name": "@capire/sflights", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "@sap/cds": ">=9", + "express": "^4" + }, + "devDependencies": { + "@cap-js/cds-test": "*", + "@cap-js/sqlite": ">=2" + } + }, + "sflight-travels": { + "name": "@capire/travels", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "@capire/sflights": "*", + "@sap/cds": ">=9", + "express": "^4" + }, + "devDependencies": { + "@cap-js/cds-test": "*", + "@cap-js/sqlite": ">=2" + } + }, "shared-db": { "name": "@capire/shared-db", "version": "3.0.0", diff --git a/package.json b/package.json index f886ccf2..62da1bbb 100644 --- a/package.json +++ b/package.json @@ -5,15 +5,7 @@ "repository": "https://github.com/sap-samples/cloud-cap-samples.git", "author": "daniel.hutzel@sap.com", "workspaces": [ - "bookshop", - "bookstore", - "common", - "fiori", - "orders", - "reviews", - "shared-db", - "etc/data-viewer", - "etc/loggers" + "*" ], "devDependencies": { "@cap-js/cds-test": "^0" @@ -22,7 +14,6 @@ "start": "cds watch bookshop --open http://localhost:4004", "bookstore": "cds watch bookstore", "bookshop": "cds watch bookshop", - "fiori": "cds watch fiori", "orders": "cds watch orders", "reviews": "cds watch reviews", "lint": "npx eslint", diff --git a/readme.md b/readme.md index 2fcf9c83..85634fa7 100644 --- a/readme.md +++ b/readme.md @@ -2,14 +2,14 @@ # Welcome to cap/samples -Find here a collection of samples for the [SAP Cloud Application Programming Model](https://cap.cloud.sap) organized in a simplistic [monorepo setup](samples.md#all-in-one-monorepo). +Find here a collection of samples for the [SAP Cloud Application Programming Model](https://cap.cloud.sap) organized in a simplistic [monorepo setup](readme/samples.md#all-in-one-monorepo). ![](https://github.com/SAP-samples/cloud-cap-samples/workflows/CI/badge.svg) ## Get Started Assumed you did your [initial setup of CAP Node.js](https://cap.cloud.sap/docs/get-started/#setup), simply copy & paste these lines to a terminal for a jumpstart: - + ```sh git clone -q https://github.com/sap-samples/cloud-cap-samples cap/samples cd cap/samples @@ -21,7 +21,7 @@ npm start After download and setup this starts the bookshop server and opens a browser window on _http://localhost:4004_ looking like that:

- bookshop showing up in browser + bookshop showing up in browser

Click on the *[/vue](http:/localhost:4004/vue)* link at the top to display the bookshop app (when asked to log in, type `alice` as user and leave the password field blank). @@ -35,14 +35,13 @@ After the jumpstart, have a look into the enclosed sub folders/projects, which a - [orders](orders) - a generic reuse service - [common](common) - a reuse content package - [bookstore](bookstore) - a composite app of the above -- [fiori](fiori) - Fiori elements UIs for the bookstore -- [etc/*](etc) - Plugins adding cross-cutting concerns +- [etc/*](readme) - Plugins adding cross-cutting concerns - [test](test) - Tests for all the above -> _see also [samples.md](samples.md)_ +> _see also [samples.md](readme/samples.md)_

- +

## Get Help diff --git a/etc/bookshop.drawio.svg b/readme/bookshop.drawio.svg similarity index 100% rename from etc/bookshop.drawio.svg rename to readme/bookshop.drawio.svg diff --git a/readme/dark.drawio.svg b/readme/dark.drawio.svg new file mode 100644 index 00000000..75106466 --- /dev/null +++ b/readme/dark.drawio.svg @@ -0,0 +1,215 @@ + + + + + + + + + + + +
+
+
+ @capire/ +
+ + bookshop + +
+
+
+
+ + @capire/... + +
+
+
+ + + + + + + +
+
+
+ @capire/ +
+ + bookstore + +
+
+
+
+ + @capire/... + +
+
+
+ + + + + + + +
+
+
+ @capire/ +
+ + reviews + +
+
+
+
+ + @capire/... + +
+
+
+ + + + + + + +
+
+
+ @capire/ +
+ + common + +
+
+
+
+ + @capire/... + +
+
+
+ + + + + + + +
+
+
+ @capire/ +
+ + orders + +
+
+
+
+ + @capire/... + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ @capire/ +
+ + suppliers + +
+
+
+
+ + @capire/... + +
+
+
+ + + + + + + +
+
+
+ + S/4 + +
+
+
+
+ + S/4 + +
+
+
+ + + + + + + + + + + + +
+ + + + + Text is not SVG - cannot display + + + +
\ No newline at end of file diff --git a/etc/incidents.drawio.svg b/readme/incidents.drawio.svg similarity index 100% rename from etc/incidents.drawio.svg rename to readme/incidents.drawio.svg diff --git a/etc/index-html.png b/readme/index-html.png similarity index 100% rename from etc/index-html.png rename to readme/index-html.png diff --git a/readme/samples.drawio.svg b/readme/samples.drawio.svg new file mode 100644 index 00000000..1e347288 --- /dev/null +++ b/readme/samples.drawio.svg @@ -0,0 +1,228 @@ + + + + + + + + + + +
+
+
+ + Bookshop + +
+ App +
+
+
+
+ + Bookshop... + +
+
+
+ + + + + + + +
+
+
+ + + + Bookstore +
+
+
+ App +
+
+
+
+
+
+ + Bookstore... + +
+
+
+ + + + + + + +
+
+
+ + + Reviews + +
+ Service +
+
+
+
+
+
+ + Reviews... + +
+
+
+ + + + + + + +
+
+
+ + Common + +
+ Data +
+
+
+
+ + Common... + +
+
+
+ + + + + + + +
+
+
+ + + Orders + +
+ Service +
+
+
+
+
+
+ + Orders... + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + Suppliers + +
+ Service +
+
+
+
+
+
+ + Suppliers... + +
+
+
+ + + + + + + +
+
+
+ + S/4 + +
+
+
+
+ + S/4 + +
+
+
+ + + + + + + + + + + + +
+ + + + + Text is not SVG - cannot display + + + +
\ No newline at end of file diff --git a/samples.md b/readme/samples.md similarity index 72% rename from samples.md rename to readme/samples.md index 307061a0..d12a904b 100644 --- a/samples.md +++ b/readme/samples.md @@ -3,10 +3,10 @@ The following list gives an overview of the samples provided in subdirectories. Each sub directory essentially is an individual npm package arranged in an [all-in-one monorepo](#all-in-one-monorepo) umbrella setup. -![](etc/samples.drawio.svg) +![](samples.drawio.svg) -## [@capire/bookshop](bookshop) +## [@capire/bookshop](../bookshop) - [Getting Started](https://cap.cloud.sap/docs/get-started/in-a-nutshell) with CAP, briefly introducing: - [Project Setup](https://cap.cloud.sap/docs/get-started/) and [Layouts](https://cap.cloud.sap/docs/get-started/projects) @@ -17,24 +17,24 @@ Each sub directory essentially is an individual npm package arranged in an [all- - [Using Databases](https://cap.cloud.sap/docs/guides/databases) -## [@capire/common](common) +## [@capire/common](../common) - Showcases how to extend [@sap/cds/common](https://cap.cloud.sap/docs/cds/common) thereby covering: - Building [extension packages](https://cap.cloud.sap/docs/guides/domain-models#aspects-extensibility) - Providing [reuse packages](https://cap.cloud.sap/docs/get-started/projects#sharing-and-reusing-content) - [Verticalization](https://cap.cloud.sap/docs/cds/common#adapting-to-your-needs) - Using [Aspects](https://cap.cloud.sap/docs/cds/cdl#aspects) -- Used in the [fiori app sample](#fiori) +- Used in the [bookstore sample](#capire-bookstore) -## [@capire/orders](orders) +## [@capire/orders](../orders) - A standalone orders management service, demonstrating: - Using [Compositions](https://cap.cloud.sap/docs/cds/cdl#compositions) in [Domain Models](https://cap.cloud.sap/docs/guides/domain-models), along with - [Serving deeply nested documents](https://cap.cloud.sap/docs/guides/generic-providers#serving-structured-data) -## [@capire/reviews](reviews) +## [@capire/reviews](../reviews) - Shows how to implement a modular service to manage product reviews, including: - Consuming other services synchronously and asynchronously @@ -47,22 +47,18 @@ Each sub directory essentially is an individual npm package arranged in an [all- - As well as managed data, input validations, and authorization -## [@capire/bookstore](bookstore) +## [@capire/bookstore](../bookstore) - A [composite app, reusing and combining](https://cap.cloud.sap/docs/guides/extensibility/composition) these packages: - - [@capire/bookshop](bookshop) - - [@capire/reviews](reviews) - - [@capire/orders](orders) - - [@capire/common](common) - - [@capire/data-viewer](etc/data-viewer) -- [The Vue.js app](bookshop/app/vue) imported from `bookshop` is served as well -- [The Vue.js app](reviews/app/vue) imported from `reviews` is served as well -- [The Vue.js app](etc/data-viewer/app/data) imported from `data-viewer` is served as well -- [The Fiori app](orders/app) imported from `orders` is served as well - - -## [@capire/fiori](fiori) - + - [@capire/bookshop](../bookshop) + - [@capire/reviews](../reviews) + - [@capire/orders](../orders) + - [@capire/common](../common) + - [@capire/data-viewer](data-viewer) +- [The Vue.js app](../bookshop/app/vue) imported from `bookshop` is served as well +- [The Vue.js app](../reviews/app/vue) imported from `reviews` is served as well +- [The Vue.js app](data-viewer/app/data) imported from `data-viewer` is served as well +- [The Fiori app](../orders/app) imported from `orders` is served as well - Adds an SAP Fiori elements application to bookstore, thereby introducing: - OData Annotations in `.cds` files - Support for Fiori Draft @@ -75,4 +71,4 @@ See the [Serving Fiori UIs](https://cap.cloud.sap/docs/advanced/fiori) documenta # All-in-one Monorepo -Each sample sub directory essentially is a standard npm package, some with standard npm dependencies to other samples. The root folder's [package.json](package.json) has local links to the sub folders, such that an `npm install` populates a local `node_modules` folder and acts like a local npm registry to the individual sample packages. +Each sample sub directory essentially is a standard npm package, some with standard npm dependencies to other samples. The root folder's [package.json](../package.json) has local links to the sub folders, such that an `npm install` populates a local `node_modules` folder and acts like a local npm registry to the individual sample packages. diff --git a/sflight b/sflight new file mode 160000 index 00000000..0d2b78ac --- /dev/null +++ b/sflight @@ -0,0 +1 @@ +Subproject commit 0d2b78ac618ef9bd4138edaeb8503e0e4fa8f29b diff --git a/sflight-md b/sflight-md new file mode 160000 index 00000000..b2d5625a --- /dev/null +++ b/sflight-md @@ -0,0 +1 @@ +Subproject commit b2d5625a66ac1a503fd31e9c5f70bfc116c14e9c diff --git a/sflight-travels b/sflight-travels new file mode 160000 index 00000000..7cfbde51 --- /dev/null +++ b/sflight-travels @@ -0,0 +1 @@ +Subproject commit 7cfbde51b0abca0d74dfe8eb14b000cbb4a86590