diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 15d4639ba03e72528b90e979bce42d5eab127ae2..f340faa4dd6012b599b0aebd2cbbc3f55c11532e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/node:18 +image: ${CI_DEPENDENCY_PROXY_DIRECT_GROUP_IMAGE_PREFIX}/node:20 cache: paths: - node_modules @@ -34,16 +34,23 @@ build: paths: - dist -publish-main-docker-container-job: +.build-container-job: stage: deploy image: - name: gcr.io/kaniko-project/executor:v1.21.0-debug - entrypoint: [""] + name: gcr.io/kaniko-project/executor:v1.21.1-debug + entrypoint: [ "" ] + dependencies: [ ] + cache: [ ] + before_script: + - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"},\"$(echo -n $CI_DEPENDENCY_PROXY_SERVER | awk -F[:] '{print $1}')\":{\"auth\":\"$(printf "%s:%s" ${CI_DEPENDENCY_PROXY_USER} "${CI_DEPENDENCY_PROXY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json + + + +publish-main-docker-container-job: + extends: .build-container-job only: refs: - main - before_script: - - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"},\"$(echo -n $CI_DEPENDENCY_PROXY_SERVER | awk -F[:] '{print $1}')\":{\"auth\":\"$(printf "%s:%s" ${CI_DEPENDENCY_PROXY_USER} "${CI_DEPENDENCY_PROXY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json script: - /kaniko/executor --context "${CI_PROJECT_DIR}" @@ -52,14 +59,9 @@ publish-main-docker-container-job: --destination "${CI_REGISTRY_IMAGE}:main-latest" publish-docker-container-job: - stage: deploy - image: - name: gcr.io/kaniko-project/executor:v1.21.0-debug - entrypoint: [""] + extends: .build-container-job only: - tags - before_script: - - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"},\"$(echo -n $CI_DEPENDENCY_PROXY_SERVER | awk -F[:] '{print $1}')\":{\"auth\":\"$(printf "%s:%s" ${CI_DEPENDENCY_PROXY_USER} "${CI_DEPENDENCY_PROXY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json script: - /kaniko/executor --context "${CI_PROJECT_DIR}" diff --git a/Dockerfile b/Dockerfile index dda87caaa5cc450b2fbb2bd8d0a3fc1bb37838a2..3293d59d4f883e4b6fd059eba5e27759020c7a9a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # build stage -FROM node:18 as build-stage +FROM node:20 as build-stage WORKDIR /app COPY package.json ./ COPY package-lock.json ./ @@ -10,7 +10,7 @@ RUN npm run build-only # production stage FROM nginx:stable-alpine as production-stage EXPOSE 80 -HEALTHCHECK --interval=30s --timeout=2s CMD curl --head -f http://localhost || exit 1 +HEALTHCHECK --interval=10s --timeout=2s CMD curl --head -f http://localhost || exit 1 COPY nginx.conf /etc/nginx/conf.d/default.conf COPY --from=build-stage /app/dist /usr/share/nginx/html COPY --from=build-stage /app/src/assets/env.template.js /tmp diff --git a/package-lock.json b/package-lock.json index 87d4ff0688099395e11f5523d084e53c1955ddfd..cdd2858fa2ac1e5203d121f657da0bb2b7d452cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,9 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-s3": "^3.440.0", - "@aws-sdk/lib-storage": "^3.440.0", - "@aws-sdk/s3-request-presigner": "^3.440.0", + "@aws-sdk/client-s3": "<3.530.0", + "@aws-sdk/lib-storage": "<3.530.0", + "@aws-sdk/s3-request-presigner": "<3.530.0", "@fortawesome/fontawesome-free": "~6.5.0", "@popperjs/core": "~2.11.8", "ajv": "~8.12.0", @@ -34,11 +34,11 @@ "devDependencies": { "@esbuild-plugins/node-globals-polyfill": "~0.2.3", "@esbuild-plugins/node-modules-polyfill": "~0.2.2", - "@rushstack/eslint-patch": "~1.7.0", - "@tsconfig/node18": "^18.2.1", + "@rushstack/eslint-patch": "~1.9.0", + "@tsconfig/node20": "^20.1.2", "@types/bootstrap": "~5.2.0", "@types/dompurify": "~3.0.0", - "@types/node": "^18.19.5", + "@types/node": "^20.11.0", "@types/semver": "~7.5.1", "@types/showdown": "~2.0.1", "@types/sortablejs": "^1.15.7", @@ -48,15 +48,15 @@ "@vue/tsconfig": "~0.5.0", "axios": "~1.6.0", "eslint": "~8.57.0", - "eslint-plugin-vue": "~9.22.0", + "eslint-plugin-vue": "~9.24.0", "highlight.js": "^11.9.0", "npm-run-all": "~4.1.5", - "openapi-typescript-codegen": "^0.27.0", + "openapi-typescript-codegen": "^0.28.0", "prettier": "~3.2.0", "rollup-plugin-node-polyfills": "~0.2.1", "sass": "^1.66.0", "typescript": "~5.3.0", - "vite": "~5.1.0", + "vite": "~5.2.0", "vue-tsc": "~2.0.0" } }, @@ -70,16 +70,14 @@ } }, "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-10.1.0.tgz", - "integrity": "sha512-3e+viyMuXdrcK8v5pvP+SDoAQ77FH6OyRmuK48SZKmdHJRFm87RsSs8qm6kP39a/pOPURByJw+OXzQIqcfmKtA==", + "version": "11.5.4", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.5.4.tgz", + "integrity": "sha512-o2fsypTGU0WxRxbax8zQoHiIB4dyrkwYfcm8TxZ+bx9pCzcWZbQtiMqpgBvWA/nJ2TrGjK5adCLfTH8wUeU/Wg==", "dev": true, "dependencies": { "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.11", - "@types/lodash.clonedeep": "^4.5.7", - "js-yaml": "^4.1.0", - "lodash.clonedeep": "^4.5.0" + "@types/json-schema": "^7.0.15", + "js-yaml": "^4.1.0" }, "engines": { "node": ">= 16" @@ -876,11 +874,11 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.495.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.495.0.tgz", - "integrity": "sha512-MfaPXT0kLX2tQaR90saBT9fWQq2DHqSSJRzW+MZWsmF+y5LGCOhO22ac/2o6TKSQm7h0HRc2GaADqYYYor62yg==", + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz", + "integrity": "sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" @@ -940,9 +938,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", - "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -973,9 +971,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.1.tgz", - "integrity": "sha512-m55cpeupQ2DbuRGQMMZDzbv9J9PgVelPjlcmM5kxHnrBdBx6REaEd7LamYV7Dm8N7rCyR/XwU6rVP8ploKtIkA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", "cpu": [ "ppc64" ], @@ -984,15 +982,14 @@ "os": [ "aix" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.1.tgz", - "integrity": "sha512-4j0+G27/2ZXGWR5okcJi7pQYhmkVgb4D7UKwxcqrjhvp5TKWx3cUjgB1CGj1mfdmJBQ9VnUGgUhign+FPF2Zgw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", "cpu": [ "arm" ], @@ -1001,15 +998,14 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.1.tgz", - "integrity": "sha512-hCnXNF0HM6AjowP+Zou0ZJMWWa1VkD77BXe959zERgGJBBxB+sV+J9f/rcjeg2c5bsukD/n17RKWXGFCO5dD5A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", "cpu": [ "arm64" ], @@ -1018,15 +1014,14 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.1.tgz", - "integrity": "sha512-MSfZMBoAsnhpS+2yMFYIQUPs8Z19ajwfuaSZx+tSl09xrHZCjbeXXMsUF/0oq7ojxYEpsSo4c0SfjxOYXRbpaA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", "cpu": [ "x64" ], @@ -1035,15 +1030,14 @@ "os": [ "android" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.1.tgz", - "integrity": "sha512-Ylk6rzgMD8klUklGPzS414UQLa5NPXZD5tf8JmQU8GQrj6BrFA/Ic9tb2zRe1kOZyCbGl+e8VMbDRazCEBqPvA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", "cpu": [ "arm64" ], @@ -1052,15 +1046,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.1.tgz", - "integrity": "sha512-pFIfj7U2w5sMp52wTY1XVOdoxw+GDwy9FsK3OFz4BpMAjvZVs0dT1VXs8aQm22nhwoIWUmIRaE+4xow8xfIDZA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", "cpu": [ "x64" ], @@ -1069,15 +1062,14 @@ "os": [ "darwin" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.1.tgz", - "integrity": "sha512-UyW1WZvHDuM4xDz0jWun4qtQFauNdXjXOtIy7SYdf7pbxSWWVlqhnR/T2TpX6LX5NI62spt0a3ldIIEkPM6RHw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", "cpu": [ "arm64" ], @@ -1086,15 +1078,14 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.1.tgz", - "integrity": "sha512-itPwCw5C+Jh/c624vcDd9kRCCZVpzpQn8dtwoYIt2TJF3S9xJLiRohnnNrKwREvcZYx0n8sCSbvGH349XkcQeg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", "cpu": [ "x64" ], @@ -1103,15 +1094,14 @@ "os": [ "freebsd" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.1.tgz", - "integrity": "sha512-LojC28v3+IhIbfQ+Vu4Ut5n3wKcgTu6POKIHN9Wpt0HnfgUGlBuyDDQR4jWZUZFyYLiz4RBBBmfU6sNfn6RhLw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", "cpu": [ "arm" ], @@ -1120,15 +1110,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.1.tgz", - "integrity": "sha512-cX8WdlF6Cnvw/DO9/X7XLH2J6CkBnz7Twjpk56cshk9sjYVcuh4sXQBy5bmTwzBjNVZze2yaV1vtcJS04LbN8w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", "cpu": [ "arm64" ], @@ -1137,15 +1126,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.1.tgz", - "integrity": "sha512-4H/sQCy1mnnGkUt/xszaLlYJVTz3W9ep52xEefGtd6yXDQbz/5fZE5dFLUgsPdbUOQANcVUa5iO6g3nyy5BJiw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", "cpu": [ "ia32" ], @@ -1154,15 +1142,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.1.tgz", - "integrity": "sha512-c0jgtB+sRHCciVXlyjDcWb2FUuzlGVRwGXgI+3WqKOIuoo8AmZAddzeOHeYLtD+dmtHw3B4Xo9wAUdjlfW5yYA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", "cpu": [ "loong64" ], @@ -1171,15 +1158,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.1.tgz", - "integrity": "sha512-TgFyCfIxSujyuqdZKDZ3yTwWiGv+KnlOeXXitCQ+trDODJ+ZtGOzLkSWngynP0HZnTsDyBbPy7GWVXWaEl6lhA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", "cpu": [ "mips64el" ], @@ -1188,15 +1174,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.1.tgz", - "integrity": "sha512-b+yuD1IUeL+Y93PmFZDZFIElwbmFfIKLKlYI8M6tRyzE6u7oEP7onGk0vZRh8wfVGC2dZoy0EqX1V8qok4qHaw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", "cpu": [ "ppc64" ], @@ -1205,15 +1190,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.1.tgz", - "integrity": "sha512-wpDlpE0oRKZwX+GfomcALcouqjjV8MIX8DyTrxfyCfXxoKQSDm45CZr9fanJ4F6ckD4yDEPT98SrjvLwIqUCgg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", "cpu": [ "riscv64" ], @@ -1222,15 +1206,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.1.tgz", - "integrity": "sha512-5BepC2Au80EohQ2dBpyTquqGCES7++p7G+7lXe1bAIvMdXm4YYcEfZtQrP4gaoZ96Wv1Ute61CEHFU7h4FMueQ==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", "cpu": [ "s390x" ], @@ -1239,15 +1222,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.1.tgz", - "integrity": "sha512-5gRPk7pKuaIB+tmH+yKd2aQTRpqlf1E4f/mC+tawIm/CGJemZcHZpp2ic8oD83nKgUPMEd0fNanrnFljiruuyA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", "cpu": [ "x64" ], @@ -1256,15 +1238,14 @@ "os": [ "linux" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.1.tgz", - "integrity": "sha512-4fL68JdrLV2nVW2AaWZBv3XEm3Ae3NZn/7qy2KGAt3dexAgSVT+Hc97JKSZnqezgMlv9x6KV0ZkZY7UO5cNLCg==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", "cpu": [ "x64" ], @@ -1273,15 +1254,14 @@ "os": [ "netbsd" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.1.tgz", - "integrity": "sha512-GhRuXlvRE+twf2ES+8REbeCb/zeikNqwD3+6S5y5/x+DYbAQUNl0HNBs4RQJqrechS4v4MruEr8ZtAin/hK5iw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", "cpu": [ "x64" ], @@ -1290,15 +1270,14 @@ "os": [ "openbsd" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.1.tgz", - "integrity": "sha512-ZnWEyCM0G1Ex6JtsygvC3KUUrlDXqOihw8RicRuQAzw+c4f1D66YlPNNV3rkjVW90zXVsHwZYWbJh3v+oQFM9Q==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", "cpu": [ "x64" ], @@ -1307,15 +1286,14 @@ "os": [ "sunos" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.1.tgz", - "integrity": "sha512-QZ6gXue0vVQY2Oon9WyLFCdSuYbXSoxaZrPuJ4c20j6ICedfsDilNPYfHLlMH7vGfU5DQR0czHLmJvH4Nzis/A==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", "cpu": [ "arm64" ], @@ -1324,15 +1302,14 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.1.tgz", - "integrity": "sha512-HzcJa1NcSWTAU0MJIxOho8JftNp9YALui3o+Ny7hCh0v5f90nprly1U3Sj1Ldj/CvKKdvvFsCRvDkpsEMp4DNw==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", "cpu": [ "ia32" ], @@ -1341,15 +1318,14 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.1.tgz", - "integrity": "sha512-0MBh53o6XtI6ctDnRMeQ+xoCN8kD2qI1rY1KgF/xdWQwoFeKou7puvDfV8/Wv4Ctx2rRpET/gGdz3YlNtNACSA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", "cpu": [ "x64" ], @@ -1358,7 +1334,6 @@ "os": [ "win32" ], - "peer": true, "engines": { "node": ">=12" } @@ -1600,9 +1575,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.1.tgz", - "integrity": "sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.1.tgz", + "integrity": "sha512-4C4UERETjXpC4WpBXDbkgNVgHyWfG3B/NKY46e7w5H134UDOFqUJKpsLm0UYmuupW+aJmRgeScrDNfvZ5WV80A==", "cpu": [ "arm" ], @@ -1613,9 +1588,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.1.tgz", - "integrity": "sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.1.tgz", + "integrity": "sha512-TrTaFJ9pXgfXEiJKQ3yQRelpQFqgRzVR9it8DbeRzG0RX7mKUy0bqhCFsgevwXLJepQKTnLl95TnPGf9T9AMOA==", "cpu": [ "arm64" ], @@ -1626,9 +1601,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.1.tgz", - "integrity": "sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.1.tgz", + "integrity": "sha512-fz7jN6ahTI3cKzDO2otQuybts5cyu0feymg0bjvYCBrZQ8tSgE8pc0sSNEuGvifrQJWiwx9F05BowihmLxeQKw==", "cpu": [ "arm64" ], @@ -1639,9 +1614,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.1.tgz", - "integrity": "sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.1.tgz", + "integrity": "sha512-WTvdz7SLMlJpektdrnWRUN9C0N2qNHwNbWpNo0a3Tod3gb9leX+yrYdCeB7VV36OtoyiPAivl7/xZ3G1z5h20g==", "cpu": [ "x64" ], @@ -1652,9 +1627,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.1.tgz", - "integrity": "sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.1.tgz", + "integrity": "sha512-dBHQl+7wZzBYcIF6o4k2XkAfwP2ks1mYW2q/Gzv9n39uDcDiAGDqEyml08OdY0BIct0yLSPkDTqn4i6czpBLLw==", "cpu": [ "arm" ], @@ -1665,9 +1640,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.1.tgz", - "integrity": "sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.1.tgz", + "integrity": "sha512-bur4JOxvYxfrAmocRJIW0SADs3QdEYK6TQ7dTNz6Z4/lySeu3Z1H/+tl0a4qDYv0bCdBpUYM0sYa/X+9ZqgfSQ==", "cpu": [ "arm64" ], @@ -1678,9 +1653,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.1.tgz", - "integrity": "sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.1.tgz", + "integrity": "sha512-ssp77SjcDIUSoUyj7DU7/5iwM4ZEluY+N8umtCT9nBRs3u045t0KkW02LTyHouHDomnMXaXSZcCSr2bdMK63kA==", "cpu": [ "arm64" ], @@ -1691,9 +1666,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.1.tgz", - "integrity": "sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.1.tgz", + "integrity": "sha512-Jv1DkIvwEPAb+v25/Unrnnq9BO3F5cbFPT821n3S5litkz+O5NuXuNhqtPx5KtcwOTtaqkTsO+IVzJOsxd11aQ==", "cpu": [ "riscv64" ], @@ -1703,10 +1678,23 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.1.tgz", + "integrity": "sha512-U564BrhEfaNChdATQaEODtquCC7Ez+8Hxz1h5MAdMYj0AqD0GA9rHCpElajb/sQcaFL6NXmHc5O+7FXpWMa73Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.1.tgz", - "integrity": "sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.1.tgz", + "integrity": "sha512-zGRDulLTeDemR8DFYyFIQ8kMP02xpUsX4IBikc7lwL9PrwR3gWmX2NopqiGlI2ZVWMl15qZeUjumTwpv18N7sQ==", "cpu": [ "x64" ], @@ -1717,9 +1705,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.1.tgz", - "integrity": "sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.1.tgz", + "integrity": "sha512-VTk/MveyPdMFkYJJPCkYBw07KcTkGU2hLEyqYMsU4NjiOfzoaDTW9PWGRsNwiOA3qI0k/JQPjkl/4FCK1smskQ==", "cpu": [ "x64" ], @@ -1730,9 +1718,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.1.tgz", - "integrity": "sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.1.tgz", + "integrity": "sha512-L+hX8Dtibb02r/OYCsp4sQQIi3ldZkFI0EUkMTDwRfFykXBPptoz/tuuGqEd3bThBSLRWPR6wsixDSgOx/U3Zw==", "cpu": [ "arm64" ], @@ -1743,9 +1731,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.1.tgz", - "integrity": "sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.1.tgz", + "integrity": "sha512-+dI2jVPfM5A8zme8riEoNC7UKk0Lzc7jCj/U89cQIrOjrZTCWZl/+IXUeRT2rEZ5j25lnSA9G9H1Ob9azaF/KQ==", "cpu": [ "ia32" ], @@ -1756,9 +1744,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.1.tgz", - "integrity": "sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.1.tgz", + "integrity": "sha512-YY1Exxo2viZ/O2dMHuwQvimJ0SqvL+OAWQLLY6rvXavgQKjhQUzn7nc1Dd29gjB5Fqi00nrBWctJBOyfVMIVxw==", "cpu": [ "x64" ], @@ -1769,273 +1757,273 @@ ] }, "node_modules/@rushstack/eslint-patch": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.7.2.tgz", - "integrity": "sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.9.0.tgz", + "integrity": "sha512-AAWymnpvHbGty1BmgbdfbqQDboXs6xN6h2yAacO4yKVyyUUBnpYkp+P9jjPrV9zrAGw7JVVriRtGOHPInnfjZQ==", "dev": true }, "node_modules/@smithy/abort-controller": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.1.4.tgz", - "integrity": "sha512-66HO817oIZ2otLIqy06R5muapqZjkgF1jfU0wyNko8cuqZNu8nbS9ljlhcRYw/M/uWRJzB9ih81DLSHhYbBLlQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/chunked-blob-reader": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.1.1.tgz", - "integrity": "sha512-NjNFCKxC4jVvn+lUr3Yo4/PmUJj3tbyqH6GNHueyTGS5Q27vlEJ1MkNhUDV8QGxJI7Bodnc2pD18lU2zRfhHlQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.2.0.tgz", + "integrity": "sha512-3GJNvRwXBGdkDZZOGiziVYzDpn4j6zfyULHMDKAGIUo72yHALpE9CbhfQp/XcLNVoc1byfMpn6uW5H2BqPjgaQ==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/chunked-blob-reader-native": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.1.2.tgz", - "integrity": "sha512-KwR9fFc/t5jH9RQFbrA9DHSmI+URTmB4v+i7H08UNET9AcN6GGBTBMiDKpA56Crw6CN7cSaSDXaRS/AsfOuupQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.2.0.tgz", + "integrity": "sha512-VNB5+1oCgX3Fzs072yuRsUoC2N4Zg/LJ11DTxX3+Qu+Paa6AmbIF0E9sc2wthz9Psrk/zcOlTCyuposlIhPjZQ==", "dependencies": { - "@smithy/util-base64": "^2.2.0", - "tslib": "^2.5.0" + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/config-resolver": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.1.5.tgz", - "integrity": "sha512-LcBB5JQC3Tx2ZExIJzfvWaajhFIwHrUNQeqxhred2r5nnqrdly9uoCrvM1sxOOdghYuWWm2Kr8tBCDOmxsgeTA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", + "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "@smithy/util-config-provider": "^2.2.1", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/core": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.3.7.tgz", - "integrity": "sha512-zHrrstOO78g+/rOJoHi4j3mGUBtsljRhcKNzloWPv1XIwgcFUi+F1YFKr2qPQ3z7Ls5dNc4L2SPrVarNFIQqog==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-retry": "^2.1.6", - "@smithy/middleware-serde": "^2.2.1", - "@smithy/protocol-http": "^3.2.2", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.0.tgz", + "integrity": "sha512-uu9ZDI95Uij4qk+L6kyFjdk11zqBkcJ3Lv0sc6jZrqHvLyr0+oeekD3CnqMafBn/5PRI6uv6ulW3kNLRBUHeVw==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.0", + "@smithy/middleware-retry": "^2.2.0", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.2.6.tgz", - "integrity": "sha512-+xQe4Pite0kdk9qn0Vyw5BRVh0iSlj+T4TEKRXr4E1wZKtVgIzGlkCrfICSjiPVFkPxk4jMpVboMYdEiiA88/w==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "tslib": "^2.5.0" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.1.4.tgz", - "integrity": "sha512-UkiieTztP7adg8EuqZvB0Y4LewdleZCJU7Kgt9RDutMsRYqO32fMpWeQHeTHaIMosmzcRZUykMRrhwGJe9mP3A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.2.0.tgz", + "integrity": "sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==", "dependencies": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.1.4.tgz", - "integrity": "sha512-K0SyvrUu/vARKzNW+Wp9HImiC/cJ6K88/n7FTH1slY+MErdKoiSbRLaXbJ9qD6x1Hu28cplHMlhADwZelUx/Ww==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.2.0.tgz", + "integrity": "sha512-UaPf8jKbcP71BGiO0CdeLmlg+RhWnlN8ipsMSdwvqBFigl5nil3rHOI/5GE3tfiuX8LvY5Z9N0meuU7Rab7jWw==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/eventstream-serde-universal": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.1.4.tgz", - "integrity": "sha512-FH+2AwOwZ0kHPB9sciWJtUqx81V4vizfT3P6T9eslmIC2hi8ch/KFvQlF7jDmwR1aLlPlq6qqLKLqzK/71Ki4A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.2.0.tgz", + "integrity": "sha512-RHhbTw/JW3+r8QQH7PrganjNCiuiEZmpi6fYUAetFfPLfZ6EkiA08uN3EFfcyKubXQxOwTeJRZSQmDDCdUshaA==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.1.4.tgz", - "integrity": "sha512-gsc5ZTvVcB9sleLQzsK/rOhgn52+AAsmhEr41WDwAcctccBjh429+b8gT9t+SU8QyajypfsLOZfJQu0+zE515Q==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.2.0.tgz", + "integrity": "sha512-zpQMtJVqCUMn+pCSFcl9K/RPNtQE0NuMh8sKpCdEHafhwRsjP50Oq/4kMmvxSRy6d8Jslqd8BLvDngrUtmN9iA==", "dependencies": { - "@smithy/eventstream-serde-universal": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/eventstream-serde-universal": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.1.4.tgz", - "integrity": "sha512-NKLAsYnZA5s+ntipJRKo1RrRbhYHrsEnmiUoz0EhVYrAih+UELY9sKR+A1ujGaFm3nKDs5fPfiozC2wpXq2zUA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.2.0.tgz", + "integrity": "sha512-pvoe/vvJY0mOpuF84BEtyZoYfbehiFj8KKWk1ds2AT0mTLYFVs+7sBJZmioOFdBXKd48lfrx1vumdPdmGlCLxA==", "dependencies": { - "@smithy/eventstream-codec": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/eventstream-codec": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.4.4.tgz", - "integrity": "sha512-DSUtmsnIx26tPuyyrK49dk2DAhPgEw6xRW7V62nMHIB5dk3NqhGnwcKO2fMdt/l3NUVgia34ZsSJA8bD+3nh7g==", - "dependencies": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.0", - "tslib": "^2.5.0" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-blob-browser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.1.4.tgz", - "integrity": "sha512-bDugS1DortnriGDdp0sqdq7dLI5if8CEOF9rKtpJa1ZYMq6fxOtTId//dlilS5QgUtUs6GHN5aMQVxEjhBzzQA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.2.0.tgz", + "integrity": "sha512-SGPoVH8mdXBqrkVCJ1Hd1X7vh1zDXojNN1yZyZTZsCno99hVue9+IYzWDjq/EQDDXxmITB0gBmuyPh8oAZSTcg==", "dependencies": { - "@smithy/chunked-blob-reader": "^2.1.1", - "@smithy/chunked-blob-reader-native": "^2.1.2", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/chunked-blob-reader": "^2.2.0", + "@smithy/chunked-blob-reader-native": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/hash-node": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.1.4.tgz", - "integrity": "sha512-uvCcpDLXaTTL0X/9ezF8T8sS77UglTfZVQaUOBiCvR0QydeSyio3t0Hj3QooVdyFsKTubR8gCk/ubLk3vAyDng==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", + "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", "dependencies": { - "@smithy/types": "^2.11.0", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/hash-stream-node": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.1.4.tgz", - "integrity": "sha512-HcDQRs/Fcx7lwAd+/vSW/e7ltdh148D2Pq7XI61CEWcOoQdQ0W8aYBHDRC4zjtXv6hySdmWE+vo3dvdTt7aj8A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.2.0.tgz", + "integrity": "sha512-aT+HCATOSRMGpPI7bi7NSsTNVZE/La9IaxLXWoVAYMxHT5hGO3ZOGEMZQg8A6nNL+pdFGtZQtND1eoY084HgHQ==", "dependencies": { - "@smithy/types": "^2.11.0", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.1.4.tgz", - "integrity": "sha512-QzlNBl6jt3nb9jNnE51wTegReVvUdozyMMrFEyb/rc6AzPID1O+qMJYjAAoNw098y0CZVfCpEnoK2+mfBOd8XA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", + "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/is-array-buffer": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.1.1.tgz", - "integrity": "sha512-xozSQrcUinPpNPNPds4S7z/FakDTh1MZWtRP/2vQtYB/u3HYrX2UXuZs+VhaKBd6Vc7g2XPr2ZtwGBNDN6fNKQ==", + "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==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/md5-js": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.1.4.tgz", - "integrity": "sha512-WHTnnYJPKE7Sy49DogLuox42TnlwD3cQ6TObPD6WFWjKocWIdpEpIvdJHwWUfSFf0JIi8ON8z6ZEhsnyKVCcLQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.2.0.tgz", + "integrity": "sha512-M26XTtt9IIusVMOWEAhIvFIr9jYj4ISPPGJROqw6vXngO3IYJCnVVSMFn4Tx1rUTG5BiKJNg9u2nxmBiZC5IlQ==", "dependencies": { - "@smithy/types": "^2.11.0", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.1.4.tgz", - "integrity": "sha512-C6VRwfcr0w9qRFhDGCpWMVhlEIBFlmlPRP1aX9Cv9xDj9SUwlDrNvoV1oP1vjRYuLxCDgovBBynCwwcluS2wLw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", + "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", "dependencies": { - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.4.6.tgz", - "integrity": "sha512-AsXtUXHPOAS0EGZUSFOsVJvc7p0KL29PGkLxLfycPOcFVLru/oinYB6yvyL73ZZPX2OB8sMYUMrj7eH2kI7V/w==", - "dependencies": { - "@smithy/middleware-serde": "^2.2.1", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "@smithy/url-parser": "^2.1.4", - "@smithy/util-middleware": "^2.1.4", - "tslib": "^2.5.0" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.0.tgz", + "integrity": "sha512-OBhI9ZEAG8Xen0xsFJwwNOt44WE2CWkfYIxTognC8x42Lfsdf0VN/wCMqpdkySMDio/vts10BiovAxQp0T0faA==", + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/middleware-retry": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.1.6.tgz", - "integrity": "sha512-khpSV0NxqMHfa06kfG4WYv+978sVvfTFmn0hIFKKwOXtIxyYtPKiQWFT4nnwZD07fGdYGbtCBu3YALc8SsA5mA==", - "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/protocol-http": "^3.2.2", - "@smithy/service-error-classification": "^2.1.4", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-retry": "^2.1.4", - "tslib": "^2.5.0", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.2.0.tgz", + "integrity": "sha512-PsjDOLpbevgn37yJbawmfVoanru40qVA8UEf2+YA1lvOefmhuhL6ZbKtGsLAWDRnE1OlAmedsbA/htH6iSZjNA==", + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", "uuid": "^8.3.2" }, "engines": { @@ -2043,379 +2031,379 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.2.1.tgz", - "integrity": "sha512-VAWRWqnNjgccebndpyK94om4ZTYzXLQxUmNCXYzM/3O9MTfQjTNBgtFtQwyIIez6z7LWcCsXmnKVIOE9mLqAHQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/middleware-stack": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.1.4.tgz", - "integrity": "sha512-Qqs2ba8Ax1rGKOSGJS2JN23fhhox2WMdRuzx0NYHtXzhxbJOIMmz9uQY6Hf4PY8FPteBPp1+h0j5Fmr+oW12sg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/node-config-provider": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.2.5.tgz", - "integrity": "sha512-CxPf2CXhjO79IypHJLBATB66Dw6suvr1Yc2ccY39hpR6wdse3pZ3E8RF83SODiNH0Wjmkd0ze4OF8exugEixgA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", "dependencies": { - "@smithy/property-provider": "^2.1.4", - "@smithy/shared-ini-file-loader": "^2.3.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/node-http-handler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.4.2.tgz", - "integrity": "sha512-yrj3c1g145uiK5io+1UPbJAHo8BSGORkBzrmzvAsOmBKb+1p3jmM8ZwNLDH/HTTxVLm9iM5rMszx+iAh1HUC4Q==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", "dependencies": { - "@smithy/abort-controller": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/querystring-builder": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/property-provider": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.1.4.tgz", - "integrity": "sha512-nWaY/MImj1BiXZ9WY65h45dcxOx8pl06KYoHxwojDxDL+Q9yLU1YnZpgv8zsHhEftlj9KhePENjQTlNowWVyug==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/protocol-http": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.2.2.tgz", - "integrity": "sha512-xYBlllOQcOuLoxzhF2u8kRHhIFGQpDeTQj/dBSnw4kfI29WMKL5RnW1m9YjnJAJ49miuIvrkJR+gW5bCQ+Mchw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/querystring-builder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.1.4.tgz", - "integrity": "sha512-LXSL0J/nRWvGT+jIj+Fip3j0J1ZmHkUyBFRzg/4SmPNCLeDrtVu7ptKOnTboPsFZu5BxmpYok3kJuQzzRdrhbw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", "dependencies": { - "@smithy/types": "^2.11.0", - "@smithy/util-uri-escape": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/querystring-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.1.4.tgz", - "integrity": "sha512-U2b8olKXgZAs0eRo7Op11jTNmmcC/sqYmsA7vN6A+jkGnDvJlEl7AetUegbBzU8q3D6WzC5rhR/joIy8tXPzIg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/service-error-classification": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.4.tgz", - "integrity": "sha512-JW2Hthy21evnvDmYYk1kItOmbp3X5XI5iqorXgFEunb6hQfSDZ7O1g0Clyxg7k/Pcr9pfLk5xDIR2To/IohlsQ==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", "dependencies": { - "@smithy/types": "^2.11.0" + "@smithy/types": "^2.12.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.3.5.tgz", - "integrity": "sha512-oI99+hOvsM8oAJtxAGmoL/YCcGXtbP0fjPseYGaNmJ4X5xOFTer0KPk7AIH3AL6c5AlYErivEi1X/X78HgTVIw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/signature-v4": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.1.4.tgz", - "integrity": "sha512-gnu9gCn0qQ8IdhNjs6o3QVCXzUs33znSDYwVMWo3nX4dM6j7z9u6FC302ShYyVWfO4MkVMuGCCJ6nl3PcH7V1Q==", - "dependencies": { - "@smithy/eventstream-codec": "^2.1.4", - "@smithy/is-array-buffer": "^2.1.1", - "@smithy/types": "^2.11.0", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-middleware": "^2.1.4", - "@smithy/util-uri-escape": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.2.0.tgz", + "integrity": "sha512-+B5TNzj/fRZzVW3z8UUJOkNx15+4E0CLuvJmJUA1JUIZFp3rdJ/M2H5r2SqltaVPXL0oIxv/6YK92T9TsFGbFg==", + "dependencies": { + "@smithy/eventstream-codec": "^2.2.0", + "@smithy/is-array-buffer": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-uri-escape": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/smithy-client": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.4.4.tgz", - "integrity": "sha512-SNE17wjycPZIJ2P5sv6wMTteV/vQVPdaqQkoK1KeGoWHXx79t3iLhQXj1uqRdlkMUS9pXJrLOAS+VvUSOYwQKw==", - "dependencies": { - "@smithy/middleware-endpoint": "^2.4.6", - "@smithy/middleware-stack": "^2.1.4", - "@smithy/protocol-http": "^3.2.2", - "@smithy/types": "^2.11.0", - "@smithy/util-stream": "^2.1.4", - "tslib": "^2.5.0" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.0.tgz", + "integrity": "sha512-DDXWHWdimtS3y/Kw1Jo46KQ0ZYsDKcldFynQERUGBPDpkW1lXOTHy491ALHjwfiBQvzsVKVxl5+ocXNIgJuX4g==", + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/types": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.11.0.tgz", - "integrity": "sha512-AR0SXO7FuAskfNhyGfSTThpLRntDI5bOrU0xrpVYU0rZyjl3LBXInZFMTP/NNSd7IS6Ksdtar0QvnrPRIhVrLQ==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/url-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.1.4.tgz", - "integrity": "sha512-1hTy6UYRYqOZlHKH2/2NzdNQ4NNmW2Lp0sYYvztKy+dEQuLvZL9w88zCzFQqqFer3DMcscYOshImxkJTGdV+rg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", "dependencies": { - "@smithy/querystring-parser": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-base64": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.2.0.tgz", - "integrity": "sha512-RiQI/Txu0SxCR38Ky5BMEVaFfkNTBjpbxlr2UhhxggSmnsHDQPZJWMtPoXs7TWZaseslIlAWMiHmqRT3AV/P2w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-body-length-browser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.1.1.tgz", - "integrity": "sha512-ekOGBLvs1VS2d1zM2ER4JEeBWAvIOUKeaFch29UjjJsxmZ/f0L3K3x0dEETgh3Q9bkZNHgT+rkdl/J/VUqSRag==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", + "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" } }, "node_modules/@smithy/util-body-length-node": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.2.1.tgz", - "integrity": "sha512-/ggJG+ta3IDtpNVq4ktmEUtOkH1LW64RHB5B0hcr5ZaWBmo96UX2cIOVbjCqqDickTXqBWZ4ZO0APuaPrD7Abg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", + "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-buffer-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.1.1.tgz", - "integrity": "sha512-clhNjbyfqIv9Md2Mg6FffGVrJxw7bgK7s3Iax36xnfVj6cg0fUG7I4RH0XgXJF8bxi+saY5HR21g2UPKSxVCXg==", + "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==", "dependencies": { - "@smithy/is-array-buffer": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-config-provider": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.2.1.tgz", - "integrity": "sha512-50VL/tx9oYYcjJn/qKqNy7sCtpD0+s8XEBamIFo4mFFTclKMNp+rsnymD796uybjiIquB7VCB/DeafduL0y2kw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.1.6.tgz", - "integrity": "sha512-lM2JMYCilrejfGf8WWnVfrKly3vf+mc5x9TrTpT++qIKP452uWfLqlaUxbz1TkSfhqm8RjrlY22589B9aI8A9w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.0.tgz", + "integrity": "sha512-2okTdZaCBvOJszAPU/KSvlimMe35zLOKbQpHhamFJmR7t95HSe0K3C92jQPjKY3PmDBD+7iMkOnuW05F5OlF4g==", "dependencies": { - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.0", + "@smithy/types": "^2.12.0", "bowser": "^2.11.0", - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.2.6.tgz", - "integrity": "sha512-UmUbPHbkBJCXRFbq+FPLpVwiFPHj1oPWXJS2f2sy23PtXM94c9X5EceI6JKuKdBty+tzhrAs5JbmPM/HvmDB8Q==", - "dependencies": { - "@smithy/config-resolver": "^2.1.5", - "@smithy/credential-provider-imds": "^2.2.6", - "@smithy/node-config-provider": "^2.2.5", - "@smithy/property-provider": "^2.1.4", - "@smithy/smithy-client": "^2.4.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.0.tgz", + "integrity": "sha512-hfKXnNLmsW9cmLb/JXKIvtuO6Cf4SuqN5PN1C2Ru/TBIws+m1wSgb+A53vo0r66xzB6E82inKG2J7qtwdi+Kkw==", + "dependencies": { + "@smithy/config-resolver": "^2.2.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 10.0.0" } }, "node_modules/@smithy/util-endpoints": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.1.5.tgz", - "integrity": "sha512-tgDpaUNsUtRvNiBulKU1VnpoXU1GINMfZZXunRhUXOTBEAufG1Wp79uDXLau2gg1RZ4dpAR6lXCkrmddihCGUg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", "dependencies": { - "@smithy/node-config-provider": "^2.2.5", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@smithy/util-hex-encoding": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.1.1.tgz", - "integrity": "sha512-3UNdP2pkYUUBGEXzQI9ODTDK+Tcu1BlCyDBaRHwyxhA+8xLP8agEKQq4MGmpjqb4VQAjq9TwlCQX0kP6XDKYLg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-middleware": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.1.4.tgz", - "integrity": "sha512-5yYNOgCN0DL0OplME0pthoUR/sCfipnROkbTO7m872o0GHCVNJj5xOFJ143rvHNA54+pIPMLum4z2DhPC2pVGA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", "dependencies": { - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-retry": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.1.4.tgz", - "integrity": "sha512-JRZwhA3fhkdenSEYIWatC8oLwt4Bdf2LhHbNQApqb7yFoIGMl4twcYI3BcJZ7YIBZrACA9jGveW6tuCd836XzQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", "dependencies": { - "@smithy/service-error-classification": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@smithy/util-stream": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.1.4.tgz", - "integrity": "sha512-CiWaFPXstoR7v/PGHddFckovkhJb28wgQR7LwIt6RsQCJeRIHvUTVWhXw/Pco6Jm6nz/vfzN9FFdj/JN7RTkxQ==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.4.4", - "@smithy/node-http-handler": "^2.4.2", - "@smithy/types": "^2.11.0", - "@smithy/util-base64": "^2.2.0", - "@smithy/util-buffer-from": "^2.1.1", - "@smithy/util-hex-encoding": "^2.1.1", - "@smithy/util-utf8": "^2.2.0", - "tslib": "^2.5.0" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-uri-escape": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.1.1.tgz", - "integrity": "sha512-saVzI1h6iRBUVSqtnlOnc9ssU09ypo7n+shdQ8hBTZno/9rZ3AuRYvoHInV57VF7Qn7B+pFJG7qTzFiHxWlWBw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", "dependencies": { - "tslib": "^2.5.0" + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-utf8": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.2.0.tgz", - "integrity": "sha512-hBsKr5BqrDrKS8qy+YcV7/htmMGxriA1PREOf/8AGBhHIZnfilVv1Waf1OyKhSbFW15U/8+gcMUQ9/Kk5qwpHQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", "dependencies": { - "@smithy/util-buffer-from": "^2.1.1", - "tslib": "^2.5.0" + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/util-waiter": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.1.4.tgz", - "integrity": "sha512-AK17WaC0hx1wR9juAOsQkJ6DjDxBGEf5TrKhpXtNFEn+cVto9Li3MVsdpAO97AF7bhFXSyC8tJA3F4ThhqwCdg==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.2.0.tgz", + "integrity": "sha512-IHk53BVw6MPMi2Gsn+hCng8rFA3ZmR3Rk7GllxDUW9qFJl/hiSvskn7XldkECapQVkIg/1dHpMAxI9xSTaLLSA==", "dependencies": { - "@smithy/abort-controller": "^2.1.4", - "@smithy/types": "^2.11.0", - "tslib": "^2.5.0" + "@smithy/abort-controller": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@tsconfig/node18": { - "version": "18.2.2", - "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-18.2.2.tgz", - "integrity": "sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==", + "node_modules/@tsconfig/node20": { + "version": "20.1.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.4.tgz", + "integrity": "sha512-sqgsT69YFeLWf5NtJ4Xq/xAF8p4ZQHlmGW74Nu2tD4+g5fAsposc4ZfaaPixVu4y01BEiDCWLRDCvDM5JOsRxg==", "dev": true }, "node_modules/@types/bootstrap": { @@ -2448,25 +2436,10 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, - "node_modules/@types/lodash": { - "version": "4.14.202", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz", - "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==", - "dev": true - }, - "node_modules/@types/lodash.clonedeep": { - "version": "4.5.9", - "resolved": "https://registry.npmjs.org/@types/lodash.clonedeep/-/lodash.clonedeep-4.5.9.tgz", - "integrity": "sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==", - "dev": true, - "dependencies": { - "@types/lodash": "*" - } - }, "node_modules/@types/node": { - "version": "18.19.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.22.tgz", - "integrity": "sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ==", + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -2497,16 +2470,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.1.1.tgz", - "integrity": "sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.4.0.tgz", + "integrity": "sha512-yHMQ/oFaM7HZdVrVm/M2WHaNPgyuJH4WelkSVEWSSsir34kxW2kDJCxlXRhhGWEsMN0WAW/vLpKfKVcm8k+MPw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/type-utils": "7.1.1", - "@typescript-eslint/utils": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/type-utils": "7.4.0", + "@typescript-eslint/utils": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -2515,7 +2488,7 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2532,19 +2505,19 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.1.1.tgz", - "integrity": "sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.4.0.tgz", + "integrity": "sha512-ZvKHxHLusweEUVwrGRXXUVzFgnWhigo4JurEj0dGF1tbcGh6buL+ejDdjxOQxv6ytcY1uhun1p2sm8iWStlgLQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2560,16 +2533,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.1.1.tgz", - "integrity": "sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.4.0.tgz", + "integrity": "sha512-68VqENG5HK27ypafqLVs8qO+RkNc7TezCduYrx8YJpXq2QGZ30vmNZGJJJC48+MVn4G2dCV8m5ZTVnzRexTVtw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1" + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2577,18 +2550,18 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.1.1.tgz", - "integrity": "sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.4.0.tgz", + "integrity": "sha512-247ETeHgr9WTRMqHbbQdzwzhuyaJ8dPTuyuUEMANqzMRB1rj/9qFIuIXK7l0FX9i9FXbHeBQl/4uz6mYuCE7Aw==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "7.1.1", - "@typescript-eslint/utils": "7.1.1", + "@typescript-eslint/typescript-estree": "7.4.0", + "@typescript-eslint/utils": "7.4.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2604,12 +2577,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.1.1.tgz", - "integrity": "sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.4.0.tgz", + "integrity": "sha512-mjQopsbffzJskos5B4HmbsadSJQWaRK0UxqQ7GuNA9Ga4bEKeiO6b2DnB6cM6bpc8lemaPseh0H9B/wyg+J7rw==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2617,13 +2590,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.1.1.tgz", - "integrity": "sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.4.0.tgz", + "integrity": "sha512-A99j5AYoME/UBQ1ucEbbMEmGkN7SE0BvZFreSnTd1luq7yulcHdyGamZKizU7canpGDWGJ+Q6ZA9SyQobipePg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/visitor-keys": "7.1.1", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/visitor-keys": "7.4.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2632,7 +2605,7 @@ "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2645,21 +2618,21 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.1.1.tgz", - "integrity": "sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.4.0.tgz", + "integrity": "sha512-NQt9QLM4Tt8qrlBVY9lkMYzfYtNz8/6qwZg8pI3cMGlPnj6mOpRxxAm7BMJN9K0AiY+1BwJ5lVC650YJqYOuNg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.1.1", - "@typescript-eslint/types": "7.1.1", - "@typescript-eslint/typescript-estree": "7.1.1", + "@typescript-eslint/scope-manager": "7.4.0", + "@typescript-eslint/types": "7.4.0", + "@typescript-eslint/typescript-estree": "7.4.0", "semver": "^7.5.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2670,16 +2643,16 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.1.1.tgz", - "integrity": "sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.4.0.tgz", + "integrity": "sha512-0zkC7YM0iX5Y41homUUeW1CHtZR01K3ybjM1l6QczoMuay0XKtrb93kv95AxUGwdjGr64nNqnOCwmEl616N8CA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.1.1", + "@typescript-eslint/types": "7.4.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -2706,30 +2679,30 @@ } }, "node_modules/@volar/language-core": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.1.2.tgz", - "integrity": "sha512-5qsDp0Gf6fE09UWCeK7bkVn6NxMwC9OqFWQkMMkeej8h8XjyABPdRygC2RCrqDrfVdGijqlMQeXs6yRS+vfZYA==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.1.6.tgz", + "integrity": "sha512-pAlMCGX/HatBSiDFMdMyqUshkbwWbLxpN/RL7HCQDOo2gYBE+uS+nanosLc1qR6pTQ/U8q00xt8bdrrAFPSC0A==", "dev": true, "dependencies": { - "@volar/source-map": "2.1.2" + "@volar/source-map": "2.1.6" } }, "node_modules/@volar/source-map": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.1.2.tgz", - "integrity": "sha512-yFJqsuLm1OaWrsz9E3yd3bJcYIlHqdZ8MbmIoZLrAzMYQDcoF26/INIhgziEXSdyHc8xd7rd/tJdSnUyh0gH4Q==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.1.6.tgz", + "integrity": "sha512-TeyH8pHHonRCHYI91J7fWUoxi0zWV8whZTVRlsWHSYfjm58Blalkf9LrZ+pj6OiverPTmrHRkBsG17ScQyWECw==", "dev": true, "dependencies": { "muggle-string": "^0.4.0" } }, "node_modules/@volar/typescript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.1.2.tgz", - "integrity": "sha512-lhTancZqamvaLvoz0u/uth8dpudENNt2LFZOWCw9JZiX14xRFhdhfzmphiCRb7am9E6qAJSbdS/gMt1utXAoHQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.1.6.tgz", + "integrity": "sha512-JgPGhORHqXuyC3r6skPmPHIZj4LoMmGlYErFTuPNBq9Nhc9VTv7ctHY7A3jMN3ngKEfRrfnUcwXHztvdSQqNfw==", "dev": true, "dependencies": { - "@volar/language-core": "2.1.2", + "@volar/language-core": "2.1.6", "path-browserify": "^1.0.1" } }, @@ -2844,12 +2817,12 @@ } }, "node_modules/@vue/language-core": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.6.tgz", - "integrity": "sha512-UzqU12tzf9XLqRO3TiWPwRNpP4fyUzE6MAfOQWQNZ4jy6a30ARRUpmODDKq6O8C4goMc2AlPqTmjOHPjHkilSg==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.0.7.tgz", + "integrity": "sha512-Vh1yZX3XmYjn9yYLkjU8DN6L0ceBtEcapqiyclHne8guG84IaTzqtvizZB1Yfxm3h6m7EIvjerLO5fvOZO6IIQ==", "dev": true, "dependencies": { - "@volar/language-core": "~2.1.2", + "@volar/language-core": "~2.1.3", "@vue/compiler-dom": "^3.4.0", "@vue/shared": "^3.4.0", "computeds": "^0.0.1", @@ -3064,12 +3037,12 @@ } }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dev": true, "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -3100,12 +3073,15 @@ ] }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/boolbase": { @@ -3312,12 +3288,12 @@ } }, "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", + "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", "dev": true, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/computeds": { @@ -3363,20 +3339,71 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, - "node_modules/dayjs": { - "version": "1.11.10", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", - "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { @@ -3465,9 +3492,9 @@ } }, "node_modules/dompurify": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.9.tgz", - "integrity": "sha512-uyb4NDIvQ3hRn6NiC+SIFaP4mJ/MdXlvtunaqK9Bn6dD3RuB/1S/gasEjDHD8eiaqdSael2vBv+hOs7Y+jhYOQ==" + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.11.tgz", + "integrity": "sha512-Fan4uMuyB26gFV3ovPoEoQbxRRPfTu3CvImyZnhGq5fsIEO+gEFLp45ISFt+kQBWsK5ulDdT0oV28jS1UrwQLg==" }, "node_modules/entities": { "version": "4.5.0", @@ -3490,17 +3517,21 @@ } }, "node_modules/es-abstract": { - "version": "1.22.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", - "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "version": "1.23.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.2.tgz", + "integrity": "sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", "es-define-property": "^1.0.0", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", @@ -3511,10 +3542,11 @@ "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.1", + "hasown": "^2.0.2", "internal-slot": "^1.0.7", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.3", @@ -3525,17 +3557,17 @@ "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.0", + "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", "string.prototype.trimstart": "^1.0.7", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", "typed-array-byte-offset": "^1.0.2", "typed-array-length": "^1.0.5", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -3565,6 +3597,18 @@ "node": ">= 0.4" } }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", @@ -3597,12 +3641,11 @@ } }, "node_modules/esbuild": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.1.tgz", - "integrity": "sha512-OJwEgrpWm/PCMsLVWXKqvcjme3bHNpOgN7Tb6cQnR5n0TPbQx1/Xrn7rqM+wn17bYeT6MGB5sn1Bh5YiGi70nA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, - "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -3610,29 +3653,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.1", - "@esbuild/android-arm": "0.20.1", - "@esbuild/android-arm64": "0.20.1", - "@esbuild/android-x64": "0.20.1", - "@esbuild/darwin-arm64": "0.20.1", - "@esbuild/darwin-x64": "0.20.1", - "@esbuild/freebsd-arm64": "0.20.1", - "@esbuild/freebsd-x64": "0.20.1", - "@esbuild/linux-arm": "0.20.1", - "@esbuild/linux-arm64": "0.20.1", - "@esbuild/linux-ia32": "0.20.1", - "@esbuild/linux-loong64": "0.20.1", - "@esbuild/linux-mips64el": "0.20.1", - "@esbuild/linux-ppc64": "0.20.1", - "@esbuild/linux-riscv64": "0.20.1", - "@esbuild/linux-s390x": "0.20.1", - "@esbuild/linux-x64": "0.20.1", - "@esbuild/netbsd-x64": "0.20.1", - "@esbuild/openbsd-x64": "0.20.1", - "@esbuild/sunos-x64": "0.20.1", - "@esbuild/win32-arm64": "0.20.1", - "@esbuild/win32-ia32": "0.20.1", - "@esbuild/win32-x64": "0.20.1" + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, "node_modules/escape-string-regexp": { @@ -3745,12 +3788,13 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "9.22.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.22.0.tgz", - "integrity": "sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==", + "version": "9.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.24.0.tgz", + "integrity": "sha512-9SkJMvF8NGMT9aQCwFc5rj8Wo1XWSMSHk36i7ZwdI614BU7sIOR28ZjuFPKp8YGymZN12BSEbiSwa7qikp+PBw==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", "postcss-selector-parser": "^6.0.15", @@ -4004,9 +4048,9 @@ } }, "node_modules/filesize": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.0.tgz", - "integrity": "sha512-GTLKYyBSDz3nPhlLVPjPWZCnhkd9TrrRArNcy8Z+J2cqScB7h2McAzR6NBX6nYOoWafql0roY8hrocxnZBv9CQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.1.tgz", + "integrity": "sha512-L0cdwZrKlwZQkMSFnCflJ6J2Y+5egO/p3vgRSDQGxQt++QbUZe5gMbRO6kg6gzwQDPvq2Fk9AmoxUNfZ5gdqaQ==", "engines": { "node": ">= 10.4.0" } @@ -4060,9 +4104,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "dev": true, "funding": [ { @@ -4649,6 +4693,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -4935,12 +4994,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -5363,14 +5416,14 @@ } }, "node_modules/openapi-typescript-codegen": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.27.0.tgz", - "integrity": "sha512-QyQEod/vuel3zfnTRC3GgmYsqLPSBzB2OL4ojMYjO9hJmfYW02T+7tbQWEnuqWdhh2KSOBf3L8h59vLStr6vwA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.28.0.tgz", + "integrity": "sha512-BZTsMUwhA/h2zCzisjagLUPQNHE64N1EN074yGB+WqA0LFlJwy8sKQYrXH5G4phbjj9KSPx7xuWKO4hkPIOARw==", "dev": true, "dependencies": { - "@apidevtools/json-schema-ref-parser": "^10.1.0", + "@apidevtools/json-schema-ref-parser": "^11.5.4", "camelcase": "^6.3.0", - "commander": "^11.1.0", + "commander": "^12.0.0", "fs-extra": "^11.2.0", "handlebars": "^4.7.8" }, @@ -5596,9 +5649,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -5616,16 +5669,16 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -5834,9 +5887,9 @@ } }, "node_modules/rollup": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.1.tgz", - "integrity": "sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==", + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.1.tgz", + "integrity": "sha512-hFi+fU132IvJ2ZuihN56dwgpltpmLZHZWsx27rMCTZ2sYwrqlgL5sECGy1eeV2lAihD8EzChBVVhsXci0wD4Tg==", "dev": true, "dependencies": { "@types/estree": "1.0.5" @@ -5849,19 +5902,20 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.12.1", - "@rollup/rollup-android-arm64": "4.12.1", - "@rollup/rollup-darwin-arm64": "4.12.1", - "@rollup/rollup-darwin-x64": "4.12.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.12.1", - "@rollup/rollup-linux-arm64-gnu": "4.12.1", - "@rollup/rollup-linux-arm64-musl": "4.12.1", - "@rollup/rollup-linux-riscv64-gnu": "4.12.1", - "@rollup/rollup-linux-x64-gnu": "4.12.1", - "@rollup/rollup-linux-x64-musl": "4.12.1", - "@rollup/rollup-win32-arm64-msvc": "4.12.1", - "@rollup/rollup-win32-ia32-msvc": "4.12.1", - "@rollup/rollup-win32-x64-msvc": "4.12.1", + "@rollup/rollup-android-arm-eabi": "4.13.1", + "@rollup/rollup-android-arm64": "4.13.1", + "@rollup/rollup-darwin-arm64": "4.13.1", + "@rollup/rollup-darwin-x64": "4.13.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.1", + "@rollup/rollup-linux-arm64-gnu": "4.13.1", + "@rollup/rollup-linux-arm64-musl": "4.13.1", + "@rollup/rollup-linux-riscv64-gnu": "4.13.1", + "@rollup/rollup-linux-s390x-gnu": "4.13.1", + "@rollup/rollup-linux-x64-gnu": "4.13.1", + "@rollup/rollup-linux-x64-musl": "4.13.1", + "@rollup/rollup-win32-arm64-msvc": "4.13.1", + "@rollup/rollup-win32-ia32-msvc": "4.13.1", + "@rollup/rollup-win32-x64-msvc": "4.13.1", "fsevents": "~2.3.2" } }, @@ -5973,9 +6027,9 @@ } }, "node_modules/sass": { - "version": "1.71.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", - "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "version": "1.72.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.72.0.tgz", + "integrity": "sha512-Gpczt3WA56Ly0Mn8Sl21Vj94s1axi9hDIzDFn9Ph9x3C3p4nNyvsqJoQyVXKou6cBlfFWEgRW4rT8Tb4i3XnVA==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -6130,9 +6184,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -6194,14 +6248,15 @@ } }, "node_modules/string.prototype.padend": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", - "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", + "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6211,14 +6266,15 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6228,28 +6284,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6446,9 +6505,9 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", - "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { "call-bind": "^1.0.7", @@ -6553,14 +6612,14 @@ } }, "node_modules/vite": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.5.tgz", - "integrity": "sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.6.tgz", + "integrity": "sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==", "dev": true, "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.35", - "rollup": "^4.2.0" + "esbuild": "^0.20.1", + "postcss": "^8.4.36", + "rollup": "^4.13.0" }, "bin": { "vite": "bin/vite.js" @@ -6607,412 +6666,6 @@ } } }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - }, "node_modules/vue": { "version": "3.4.21", "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.21.tgz", @@ -7091,13 +6744,13 @@ } }, "node_modules/vue-tsc": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.6.tgz", - "integrity": "sha512-kK50W4XqQL34vHRkxlRWLicrT6+F9xfgCgJ4KSmCHcytKzc1u3c94XXgI+CjmhOSxyw0krpExF7Obo7y4+0dVQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.0.7.tgz", + "integrity": "sha512-LYa0nInkfcDBB7y8jQ9FQ4riJTRNTdh98zK/hzt4gEpBZQmf30dPhP+odzCa+cedGz6B/guvJEd0BavZaRptjg==", "dev": true, "dependencies": { - "@volar/typescript": "~2.1.2", - "@vue/language-core": "2.0.6", + "@volar/typescript": "~2.1.3", + "@vue/language-core": "2.0.7", "semver": "^7.5.4" }, "bin": { diff --git a/package.json b/package.json index 038e834abb5a8c38da4d2bfdd305d756ec597e67..f4c3555c373b9f772c878de1624d34651ae5cd93 100644 --- a/package.json +++ b/package.json @@ -16,9 +16,9 @@ "generate-resource-client": "openapi --input http://localhost:9999/api/resource-service/openapi.json --output src/client/resource --client axios" }, "dependencies": { - "@aws-sdk/client-s3": "^3.440.0", - "@aws-sdk/lib-storage": "^3.440.0", - "@aws-sdk/s3-request-presigner": "^3.440.0", + "@aws-sdk/client-s3": "<3.530.0", + "@aws-sdk/lib-storage": "<3.530.0", + "@aws-sdk/s3-request-presigner": "<3.530.0", "@fortawesome/fontawesome-free": "~6.5.0", "@popperjs/core": "~2.11.8", "ajv": "~8.12.0", @@ -41,11 +41,11 @@ "devDependencies": { "@esbuild-plugins/node-globals-polyfill": "~0.2.3", "@esbuild-plugins/node-modules-polyfill": "~0.2.2", - "@rushstack/eslint-patch": "~1.7.0", - "@tsconfig/node18": "^18.2.1", + "@rushstack/eslint-patch": "~1.9.0", + "@tsconfig/node20": "^20.1.2", "@types/bootstrap": "~5.2.0", "@types/dompurify": "~3.0.0", - "@types/node": "^18.19.5", + "@types/node": "^20.11.0", "@types/semver": "~7.5.1", "@types/showdown": "~2.0.1", "@types/sortablejs": "^1.15.7", @@ -55,15 +55,15 @@ "@vue/tsconfig": "~0.5.0", "axios": "~1.6.0", "eslint": "~8.57.0", - "eslint-plugin-vue": "~9.22.0", + "eslint-plugin-vue": "~9.24.0", "highlight.js": "^11.9.0", "npm-run-all": "~4.1.5", - "openapi-typescript-codegen": "^0.27.0", + "openapi-typescript-codegen": "^0.28.0", "prettier": "~3.2.0", "rollup-plugin-node-polyfills": "~0.2.1", "sass": "^1.66.0", "typescript": "~5.3.0", - "vite": "~5.1.0", + "vite": "~5.2.0", "vue-tsc": "~2.0.0" } } diff --git a/src/App.vue b/src/App.vue index 0ba8e443fd1a7bb3568e18080273aaa75d8f8441..88d98f85e2cafe4eba35222987a776f66fbc6d40 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,5 +1,5 @@ <script setup lang="ts"> -import { onBeforeMount } from "vue"; +import { onBeforeMount, onMounted } from "vue"; import { useCookies } from "vue3-cookies"; import { useAuthStore } from "@/stores/users"; import { useRoute, useRouter } from "vue-router"; @@ -12,12 +12,20 @@ import axios from "axios"; import { useNameStore } from "@/stores/names"; import AppHeader from "@/components/AppHeader.vue"; import AppFooter from "@/components/AppFooter.vue"; +import { useResourceStore } from "@/stores/resources"; +import { useWorkflowStore } from "@/stores/workflows"; +import { useBucketStore } from "@/stores/buckets"; +import { useS3KeyStore } from "@/stores/s3keys"; const { cookies } = useCookies(); -const store = useAuthStore(); const router = useRouter(); const route = useRoute(); +const userRepository = useAuthStore(); const nameRepository = useNameStore(); +const resourceRepository = useResourceStore(); +const workflowRepository = useWorkflowStore(); +const bucketRepository = useBucketStore(); +const s3KeyRepository = useS3KeyStore(); onBeforeMount(() => { S3ProxyOpenAPI.BASE = environment.S3PROXY_API_BASE_URL; @@ -31,7 +39,7 @@ onBeforeMount(() => { (err.response.status === 400 || err.response.status === 403) && err.response.data.detail?.includes("JWT") ) { - store.logout(); + userRepository.logout(); cookies.remove("bearer"); router.push({ name: "login", @@ -46,15 +54,15 @@ onBeforeMount(() => { return Promise.reject(err); }, ); - store.setToken(cookies.get("bearer")); + userRepository.setToken(cookies.get("bearer")); router.afterEach((to, from) => { window._paq.push(["setReferrerUrl", from.path]); window._paq.push(["deleteCustomVariables", "page"]); window._paq.push(["deleteCustomDimension", 1]); window._paq.push(["setCustomUrl", to.path]); window._paq.push(["setDocumentTitle", to.name]); - if (store.currentUID.length > 0) { - window._paq.push(["setUserId", store.currentUID]); + if (userRepository.currentUID.length > 0) { + window._paq.push(["setUserId", userRepository.currentUID]); } window._paq.push(["trackPageView"]); window._paq.push(["enableLinkTracking"]); @@ -62,7 +70,7 @@ onBeforeMount(() => { router.beforeEach(async (to) => { // make sure the user is authenticated if ( - !store.authenticated && + !userRepository.authenticated && // â—ï¸ Avoid an infinite redirect to.name !== "login" ) { @@ -73,20 +81,20 @@ onBeforeMount(() => { }; } else if ( to.meta.requiresDeveloperRole && - !(store.workflowDev || store.admin) + !(userRepository.workflowDev || userRepository.admin) ) { return { name: "dashboard" }; } else if ( to.meta.requiresReviewerRole && - !(store.rewiewer || store.admin) + !(userRepository.rewiewer || userRepository.admin) ) { return { name: "dashboard" }; } else if ( to.meta.requiresMaintainerRole && - !(store.resourceMaintainer || store.admin) + !(userRepository.resourceMaintainer || userRepository.admin) ) { return { name: "dashboard" }; - } else if (to.meta.adminRole && !store.admin) { + } else if (to.meta.adminRole && !userRepository.admin) { return { name: "dashboard" }; } else if (to.name !== "login" && to.query.return_path) { // return to original path after login @@ -95,6 +103,24 @@ onBeforeMount(() => { }); nameRepository.loadNameMapping(); }); + +onMounted(() => { + if (userRepository.authenticated) { + resourceRepository.fetchPublicResources(); + workflowRepository.fetchWorkflows(); + bucketRepository.fetchBuckets(); + s3KeyRepository.fetchS3Keys(); + if (!userRepository.foreignUser) { + bucketRepository.fetchOwnPermissions(); + } + if (userRepository.workflowDev || userRepository.admin) { + workflowRepository.fetchOwnWorkflows(); + } + if (userRepository.resourceMaintainer || userRepository.admin) { + resourceRepository.fetchOwnResources(); + } + } +}); </script> <template> diff --git a/src/client/auth/core/ApiError.ts b/src/client/auth/core/ApiError.ts index d6b8fcc3ad0b6b2bdf1aa4df97ec598e64995648..ec7b16af6f41b1323a8e3aa3d529bf2324959e66 100644 --- a/src/client/auth/core/ApiError.ts +++ b/src/client/auth/core/ApiError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/core/ApiRequestOptions.ts b/src/client/auth/core/ApiRequestOptions.ts index c19adcc94dc5f015865368d6d64751de5c243aa3..93143c3ce1ba5323894d4ac10299f62493f030f6 100644 --- a/src/client/auth/core/ApiRequestOptions.ts +++ b/src/client/auth/core/ApiRequestOptions.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/core/ApiResult.ts b/src/client/auth/core/ApiResult.ts index ad8fef2bc334c2aedf5c043896fd394229453ff0..ee1126e2ccd1e37dba97511c38c56a282ceac4dc 100644 --- a/src/client/auth/core/ApiResult.ts +++ b/src/client/auth/core/ApiResult.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/core/CancelablePromise.ts b/src/client/auth/core/CancelablePromise.ts index eb02246c31f61b897667a6433d55b8b413bafbc1..d70de92946d977e9da7970871375117a8b04770a 100644 --- a/src/client/auth/core/CancelablePromise.ts +++ b/src/client/auth/core/CancelablePromise.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -85,9 +85,9 @@ export class CancelablePromise<T> implements Promise<T> { }); } - get [Symbol.toStringTag]() { - return "Cancellable Promise"; - } + get [Symbol.toStringTag]() { + return "Cancellable Promise"; + } public then<TResult1 = T, TResult2 = never>( onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, diff --git a/src/client/auth/core/OpenAPI.ts b/src/client/auth/core/OpenAPI.ts index 9484fb91af3169d50a2a4fee46d01bed59b08907..0f6eb187b0cec075a8d22e60fc2bb652cb7d3ee7 100644 --- a/src/client/auth/core/OpenAPI.ts +++ b/src/client/auth/core/OpenAPI.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/core/request.ts b/src/client/auth/core/request.ts index c6a0602a006d2d1855c2ab50d2d7f43c2eb1bab4..1dc6fef4aab4086ff57b48d26b20ec26bb8fa472 100644 --- a/src/client/auth/core/request.ts +++ b/src/client/auth/core/request.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -175,7 +175,7 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio headers['Authorization'] = `Basic ${credentials}`; } - if (options.body) { + if (options.body !== undefined) { if (options.mediaType) { headers['Content-Type'] = options.mediaType; } else if (isBlob(options.body)) { @@ -215,6 +215,7 @@ export const sendRequest = async <T>( data: body ?? formData, method: options.method, withCredentials: config.WITH_CREDENTIALS, + withXSRFToken: config.CREDENTIALS === 'include' ? config.WITH_CREDENTIALS : false, cancelToken: source.token, }; diff --git a/src/client/auth/index.ts b/src/client/auth/index.ts index e7078bd1a954b8bcc121ab77b85298540c58efa8..016081e45f1b86aa33a4ac54f09bfecbeb88a5f8 100644 --- a/src/client/auth/index.ts +++ b/src/client/auth/index.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/models/ErrorDetail.ts b/src/client/auth/models/ErrorDetail.ts index 69dd37eb86bc15e2ab2037f3f82516493801e74d..3b8a588e591ca42adc538757044eee2cf6b5881a 100644 --- a/src/client/auth/models/ErrorDetail.ts +++ b/src/client/auth/models/ErrorDetail.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/models/HTTPValidationError.ts b/src/client/auth/models/HTTPValidationError.ts index 892e4257ccbb49769737cb2e78e0aad49d81a3b1..f9b1a79e2c6debaa712bb1660d4353552f6fbfad 100644 --- a/src/client/auth/models/HTTPValidationError.ts +++ b/src/client/auth/models/HTTPValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/models/OIDCProvider.ts b/src/client/auth/models/OIDCProvider.ts index 6bcf072eac6eea7b89228c999bf7e1954b8933ab..55d0ffe88b5308c7482c32344c7397a340b2770b 100644 --- a/src/client/auth/models/OIDCProvider.ts +++ b/src/client/auth/models/OIDCProvider.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/models/RoleEnum.ts b/src/client/auth/models/RoleEnum.ts index d1a23ae7bd28accb81fa3d196c78cafd7aebe846..66c17a59edee7c6ac452ac757275260821cdd48f 100644 --- a/src/client/auth/models/RoleEnum.ts +++ b/src/client/auth/models/RoleEnum.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/models/User.ts b/src/client/auth/models/User.ts index 5a1a2a0818d6fde1ed83cf5085a558edd232589b..537adb1841d16979e6ee0939fa21a4f96a232c00 100644 --- a/src/client/auth/models/User.ts +++ b/src/client/auth/models/User.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/models/ValidationError.ts b/src/client/auth/models/ValidationError.ts index f2ff49a2b9ad95d18a90c95dc2a7c0b60b7e85e7..aaf1c921e8b674c3da9543cc2cb597e8e90d6d8f 100644 --- a/src/client/auth/models/ValidationError.ts +++ b/src/client/auth/models/ValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/services/AuthService.ts b/src/client/auth/services/AuthService.ts index d1874e142839f9cd4b1fab476bce3665e7aed035..5cddd82bd5288be20e5ea44be156dbff0bab998d 100644 --- a/src/client/auth/services/AuthService.ts +++ b/src/client/auth/services/AuthService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/auth/services/UserService.ts b/src/client/auth/services/UserService.ts index 99bdb40e5345009387559aa2731b4cad02909f96..37b02f80d6aeaf418bab6a02d9ffa4e1b01fbacf 100644 --- a/src/client/auth/services/UserService.ts +++ b/src/client/auth/services/UserService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/core/ApiError.ts b/src/client/resource/core/ApiError.ts index d6b8fcc3ad0b6b2bdf1aa4df97ec598e64995648..ec7b16af6f41b1323a8e3aa3d529bf2324959e66 100644 --- a/src/client/resource/core/ApiError.ts +++ b/src/client/resource/core/ApiError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/core/ApiRequestOptions.ts b/src/client/resource/core/ApiRequestOptions.ts index c19adcc94dc5f015865368d6d64751de5c243aa3..93143c3ce1ba5323894d4ac10299f62493f030f6 100644 --- a/src/client/resource/core/ApiRequestOptions.ts +++ b/src/client/resource/core/ApiRequestOptions.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/core/ApiResult.ts b/src/client/resource/core/ApiResult.ts index ad8fef2bc334c2aedf5c043896fd394229453ff0..ee1126e2ccd1e37dba97511c38c56a282ceac4dc 100644 --- a/src/client/resource/core/ApiResult.ts +++ b/src/client/resource/core/ApiResult.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/core/CancelablePromise.ts b/src/client/resource/core/CancelablePromise.ts index eb02246c31f61b897667a6433d55b8b413bafbc1..d70de92946d977e9da7970871375117a8b04770a 100644 --- a/src/client/resource/core/CancelablePromise.ts +++ b/src/client/resource/core/CancelablePromise.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -85,9 +85,9 @@ export class CancelablePromise<T> implements Promise<T> { }); } - get [Symbol.toStringTag]() { - return "Cancellable Promise"; - } + get [Symbol.toStringTag]() { + return "Cancellable Promise"; + } public then<TResult1 = T, TResult2 = never>( onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, diff --git a/src/client/resource/core/OpenAPI.ts b/src/client/resource/core/OpenAPI.ts index 6b53d3b96ba6dd7e71fd2068a1a9e3a0a139eab6..0ead9e182ad0cce6f9abc4021dec0367eb60cb63 100644 --- a/src/client/resource/core/OpenAPI.ts +++ b/src/client/resource/core/OpenAPI.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/core/request.ts b/src/client/resource/core/request.ts index c6a0602a006d2d1855c2ab50d2d7f43c2eb1bab4..1dc6fef4aab4086ff57b48d26b20ec26bb8fa472 100644 --- a/src/client/resource/core/request.ts +++ b/src/client/resource/core/request.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -175,7 +175,7 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio headers['Authorization'] = `Basic ${credentials}`; } - if (options.body) { + if (options.body !== undefined) { if (options.mediaType) { headers['Content-Type'] = options.mediaType; } else if (isBlob(options.body)) { @@ -215,6 +215,7 @@ export const sendRequest = async <T>( data: body ?? formData, method: options.method, withCredentials: config.WITH_CREDENTIALS, + withXSRFToken: config.CREDENTIALS === 'include' ? config.WITH_CREDENTIALS : false, cancelToken: source.token, }; diff --git a/src/client/resource/index.ts b/src/client/resource/index.ts index 52dfc0e292618fbe4fa8d1d04d0659bc2f16857c..8a53b0b2f563ff6d17c66114d31cfa106d74c038 100644 --- a/src/client/resource/index.ts +++ b/src/client/resource/index.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/ErrorDetail.ts b/src/client/resource/models/ErrorDetail.ts index 69dd37eb86bc15e2ab2037f3f82516493801e74d..3b8a588e591ca42adc538757044eee2cf6b5881a 100644 --- a/src/client/resource/models/ErrorDetail.ts +++ b/src/client/resource/models/ErrorDetail.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/FileTree.ts b/src/client/resource/models/FileTree.ts index 351cd8136de51e66926f5e7302cc5eb919913681..1771d7910d84faca0d50045561a8b879a2980d84 100644 --- a/src/client/resource/models/FileTree.ts +++ b/src/client/resource/models/FileTree.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/HTTPValidationError.ts b/src/client/resource/models/HTTPValidationError.ts index 892e4257ccbb49769737cb2e78e0aad49d81a3b1..f9b1a79e2c6debaa712bb1660d4353552f6fbfad 100644 --- a/src/client/resource/models/HTTPValidationError.ts +++ b/src/client/resource/models/HTTPValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/ResourceIn.ts b/src/client/resource/models/ResourceIn.ts index 661058019f2de83f2b1f3df27aeea194827daae7..2f6c25344f26b22af9af2f6e1299a61686178613 100644 --- a/src/client/resource/models/ResourceIn.ts +++ b/src/client/resource/models/ResourceIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/ResourceOut.ts b/src/client/resource/models/ResourceOut.ts index f708c6ba3ae5d4dcc1e3ddd2c50326cfa2a34c71..60b1290a47dc8151de42df19e72fcaf143092f6f 100644 --- a/src/client/resource/models/ResourceOut.ts +++ b/src/client/resource/models/ResourceOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/ResourceVersionIn.ts b/src/client/resource/models/ResourceVersionIn.ts index 68eb986b9852ca442172b4d9ac7ba2b1e33d8d00..c4421228c96da6c8a0530d37ed86fdecdbb99628 100644 --- a/src/client/resource/models/ResourceVersionIn.ts +++ b/src/client/resource/models/ResourceVersionIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/ResourceVersionOut.ts b/src/client/resource/models/ResourceVersionOut.ts index 7ab1dda6759829a8e9a4e3c4b0b9cf3658c8cb56..321971c86c97589a8f29f8bd73c99ae854ef04bb 100644 --- a/src/client/resource/models/ResourceVersionOut.ts +++ b/src/client/resource/models/ResourceVersionOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/Status.ts b/src/client/resource/models/Status.ts index e6f95179ce78544b3dba364c2fcfe0062ccfc08e..71fd950a1903618a6dacb1e94e7a2cbf7489db34 100644 --- a/src/client/resource/models/Status.ts +++ b/src/client/resource/models/Status.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/UserRequestAnswer.ts b/src/client/resource/models/UserRequestAnswer.ts index daf61d2400223daea12e2569b997bde58a9b405e..371bc72fdc40b0acccdcbf3c43ad5444c1721454 100644 --- a/src/client/resource/models/UserRequestAnswer.ts +++ b/src/client/resource/models/UserRequestAnswer.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/UserSynchronizationRequestIn.ts b/src/client/resource/models/UserSynchronizationRequestIn.ts index 702eed71b5a59f39bcd82546da602af51b9c13f7..14f1c691227c3a3dd0e9e3cab7010991e03a52b9 100644 --- a/src/client/resource/models/UserSynchronizationRequestIn.ts +++ b/src/client/resource/models/UserSynchronizationRequestIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/UserSynchronizationRequestOut.ts b/src/client/resource/models/UserSynchronizationRequestOut.ts index 7ad5039705f3f52edb26bb1a1ebc8a0bcd037faf..9f0bd3d6e70bcb52675bfe961a0b60fc6c591903 100644 --- a/src/client/resource/models/UserSynchronizationRequestOut.ts +++ b/src/client/resource/models/UserSynchronizationRequestOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/models/ValidationError.ts b/src/client/resource/models/ValidationError.ts index f2ff49a2b9ad95d18a90c95dc2a7c0b60b7e85e7..aaf1c921e8b674c3da9543cc2cb597e8e90d6d8f 100644 --- a/src/client/resource/models/ValidationError.ts +++ b/src/client/resource/models/ValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/services/ResourceService.ts b/src/client/resource/services/ResourceService.ts index 7edb06371331d7e1c3589d1074cdfc781c11a41a..cc6bbea61cf3f6367fbb3e19be00dee1488ab14e 100644 --- a/src/client/resource/services/ResourceService.ts +++ b/src/client/resource/services/ResourceService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/resource/services/ResourceVersionService.ts b/src/client/resource/services/ResourceVersionService.ts index 50430260e825429f87986449a2fc29d96a2d5768..07c338369313a43ac36d1940cef78ea88acb77df 100644 --- a/src/client/resource/services/ResourceVersionService.ts +++ b/src/client/resource/services/ResourceVersionService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/core/ApiError.ts b/src/client/s3proxy/core/ApiError.ts index d6b8fcc3ad0b6b2bdf1aa4df97ec598e64995648..ec7b16af6f41b1323a8e3aa3d529bf2324959e66 100644 --- a/src/client/s3proxy/core/ApiError.ts +++ b/src/client/s3proxy/core/ApiError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/core/ApiRequestOptions.ts b/src/client/s3proxy/core/ApiRequestOptions.ts index c19adcc94dc5f015865368d6d64751de5c243aa3..93143c3ce1ba5323894d4ac10299f62493f030f6 100644 --- a/src/client/s3proxy/core/ApiRequestOptions.ts +++ b/src/client/s3proxy/core/ApiRequestOptions.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/core/ApiResult.ts b/src/client/s3proxy/core/ApiResult.ts index ad8fef2bc334c2aedf5c043896fd394229453ff0..ee1126e2ccd1e37dba97511c38c56a282ceac4dc 100644 --- a/src/client/s3proxy/core/ApiResult.ts +++ b/src/client/s3proxy/core/ApiResult.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/core/CancelablePromise.ts b/src/client/s3proxy/core/CancelablePromise.ts index eb02246c31f61b897667a6433d55b8b413bafbc1..d70de92946d977e9da7970871375117a8b04770a 100644 --- a/src/client/s3proxy/core/CancelablePromise.ts +++ b/src/client/s3proxy/core/CancelablePromise.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -85,9 +85,9 @@ export class CancelablePromise<T> implements Promise<T> { }); } - get [Symbol.toStringTag]() { - return "Cancellable Promise"; - } + get [Symbol.toStringTag]() { + return "Cancellable Promise"; + } public then<TResult1 = T, TResult2 = never>( onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, diff --git a/src/client/s3proxy/core/OpenAPI.ts b/src/client/s3proxy/core/OpenAPI.ts index f18fb9aeed82d0fd92b854566f9b61b5d519e1ca..35524ea4ce5a4157bdab674f394ae304ee6f0a35 100644 --- a/src/client/s3proxy/core/OpenAPI.ts +++ b/src/client/s3proxy/core/OpenAPI.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/core/request.ts b/src/client/s3proxy/core/request.ts index c6a0602a006d2d1855c2ab50d2d7f43c2eb1bab4..1dc6fef4aab4086ff57b48d26b20ec26bb8fa472 100644 --- a/src/client/s3proxy/core/request.ts +++ b/src/client/s3proxy/core/request.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -175,7 +175,7 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio headers['Authorization'] = `Basic ${credentials}`; } - if (options.body) { + if (options.body !== undefined) { if (options.mediaType) { headers['Content-Type'] = options.mediaType; } else if (isBlob(options.body)) { @@ -215,6 +215,7 @@ export const sendRequest = async <T>( data: body ?? formData, method: options.method, withCredentials: config.WITH_CREDENTIALS, + withXSRFToken: config.CREDENTIALS === 'include' ? config.WITH_CREDENTIALS : false, cancelToken: source.token, }; diff --git a/src/client/s3proxy/index.ts b/src/client/s3proxy/index.ts index fed4296d819361403d19656310823c02f50ab841..ae0ab189c9503085dd7cdbaa77e2bc5bcd08f160 100644 --- a/src/client/s3proxy/index.ts +++ b/src/client/s3proxy/index.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/BucketIn.ts b/src/client/s3proxy/models/BucketIn.ts index 9505a6420088ebf53b6601e1700d92a865272eb0..86846020f5817830fa44ea53712a389b1301c862 100644 --- a/src/client/s3proxy/models/BucketIn.ts +++ b/src/client/s3proxy/models/BucketIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/BucketOut.ts b/src/client/s3proxy/models/BucketOut.ts index bdd7171b00d8e1f08c4634273459e6b04aa9538e..f2fd7dd0b46dcad36bc88533172a2e05be934612 100644 --- a/src/client/s3proxy/models/BucketOut.ts +++ b/src/client/s3proxy/models/BucketOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/BucketPermissionIn.ts b/src/client/s3proxy/models/BucketPermissionIn.ts index e0e38255d47fedaf9bf6abda58b1e8e5e5537ef5..91014d0f8c2964cc56032732738118cd83a6fc9e 100644 --- a/src/client/s3proxy/models/BucketPermissionIn.ts +++ b/src/client/s3proxy/models/BucketPermissionIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/BucketPermissionOut.ts b/src/client/s3proxy/models/BucketPermissionOut.ts index e6fc7a7db9b7b2daed4f4cd520ffdf36ecdabc5d..fe4e066ab2928ee5882828b3ef42b530b4ebd86f 100644 --- a/src/client/s3proxy/models/BucketPermissionOut.ts +++ b/src/client/s3proxy/models/BucketPermissionOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/BucketPermissionParameters.ts b/src/client/s3proxy/models/BucketPermissionParameters.ts index 47c7576e18ad4ec0e6ff29040c723153eeee612b..6bc643a6bb5b6dd6abd7f544a76d64bb38ce4b8b 100644 --- a/src/client/s3proxy/models/BucketPermissionParameters.ts +++ b/src/client/s3proxy/models/BucketPermissionParameters.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/BucketType.ts b/src/client/s3proxy/models/BucketType.ts index 8001a27664273bd2a5ad360f6f10444be2e7046d..a974bb8026a85c4a3f683118ddd719e7e8c37bef 100644 --- a/src/client/s3proxy/models/BucketType.ts +++ b/src/client/s3proxy/models/BucketType.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/Constraint.ts b/src/client/s3proxy/models/Constraint.ts index 99043221bd2e12d3e2a112ae9308437d99e7df40..f33ad3b6dd99f415ef7c58226d0f026946cad402 100644 --- a/src/client/s3proxy/models/Constraint.ts +++ b/src/client/s3proxy/models/Constraint.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/ErrorDetail.ts b/src/client/s3proxy/models/ErrorDetail.ts index 69dd37eb86bc15e2ab2037f3f82516493801e74d..3b8a588e591ca42adc538757044eee2cf6b5881a 100644 --- a/src/client/s3proxy/models/ErrorDetail.ts +++ b/src/client/s3proxy/models/ErrorDetail.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/HTTPValidationError.ts b/src/client/s3proxy/models/HTTPValidationError.ts index 892e4257ccbb49769737cb2e78e0aad49d81a3b1..f9b1a79e2c6debaa712bb1660d4353552f6fbfad 100644 --- a/src/client/s3proxy/models/HTTPValidationError.ts +++ b/src/client/s3proxy/models/HTTPValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/Permission.ts b/src/client/s3proxy/models/Permission.ts index 33aebf753f36ab7b85a50e0de9d47501f3ff8709..e8896fc75f77bfe5636267d2c12e557cfb0ec402 100644 --- a/src/client/s3proxy/models/Permission.ts +++ b/src/client/s3proxy/models/Permission.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/PermissionStatus.ts b/src/client/s3proxy/models/PermissionStatus.ts index 0d858f08edd1fdb664ee83cc5805423dc3dd93f5..4d3c03cdbfba2ec55e1526f355f944f348c61dbc 100644 --- a/src/client/s3proxy/models/PermissionStatus.ts +++ b/src/client/s3proxy/models/PermissionStatus.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/S3Key.ts b/src/client/s3proxy/models/S3Key.ts index ebd17dbbf449b8507cad4fdf08082643238cd387..84bdd82f8c45c04d10fe0919505c4d2428329d46 100644 --- a/src/client/s3proxy/models/S3Key.ts +++ b/src/client/s3proxy/models/S3Key.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/models/ValidationError.ts b/src/client/s3proxy/models/ValidationError.ts index f2ff49a2b9ad95d18a90c95dc2a7c0b60b7e85e7..aaf1c921e8b674c3da9543cc2cb597e8e90d6d8f 100644 --- a/src/client/s3proxy/models/ValidationError.ts +++ b/src/client/s3proxy/models/ValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/services/BucketPermissionService.ts b/src/client/s3proxy/services/BucketPermissionService.ts index cc7df4bde5a8bba26e6f82c7f84bf5674032ab3f..c8b5b77acb0ec882a00eebacfde15a361e3493a0 100644 --- a/src/client/s3proxy/services/BucketPermissionService.ts +++ b/src/client/s3proxy/services/BucketPermissionService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/services/BucketService.ts b/src/client/s3proxy/services/BucketService.ts index 5f73fa5031498e7bbfce37fad8f21872ffd68549..75d01ee454cb0e952b4fdd9b0c4b1b3ca1e00558 100644 --- a/src/client/s3proxy/services/BucketService.ts +++ b/src/client/s3proxy/services/BucketService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/s3proxy/services/S3KeyService.ts b/src/client/s3proxy/services/S3KeyService.ts index 1d08223c7679f17b8200457fc327fb3954333fa1..58f2f589547a448652785a8765be5067d5fa3d48 100644 --- a/src/client/s3proxy/services/S3KeyService.ts +++ b/src/client/s3proxy/services/S3KeyService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/core/ApiError.ts b/src/client/workflow/core/ApiError.ts index d6b8fcc3ad0b6b2bdf1aa4df97ec598e64995648..ec7b16af6f41b1323a8e3aa3d529bf2324959e66 100644 --- a/src/client/workflow/core/ApiError.ts +++ b/src/client/workflow/core/ApiError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/core/ApiRequestOptions.ts b/src/client/workflow/core/ApiRequestOptions.ts index c19adcc94dc5f015865368d6d64751de5c243aa3..93143c3ce1ba5323894d4ac10299f62493f030f6 100644 --- a/src/client/workflow/core/ApiRequestOptions.ts +++ b/src/client/workflow/core/ApiRequestOptions.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/core/ApiResult.ts b/src/client/workflow/core/ApiResult.ts index ad8fef2bc334c2aedf5c043896fd394229453ff0..ee1126e2ccd1e37dba97511c38c56a282ceac4dc 100644 --- a/src/client/workflow/core/ApiResult.ts +++ b/src/client/workflow/core/ApiResult.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/core/CancelablePromise.ts b/src/client/workflow/core/CancelablePromise.ts index eb02246c31f61b897667a6433d55b8b413bafbc1..d70de92946d977e9da7970871375117a8b04770a 100644 --- a/src/client/workflow/core/CancelablePromise.ts +++ b/src/client/workflow/core/CancelablePromise.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -85,9 +85,9 @@ export class CancelablePromise<T> implements Promise<T> { }); } - get [Symbol.toStringTag]() { - return "Cancellable Promise"; - } + get [Symbol.toStringTag]() { + return "Cancellable Promise"; + } public then<TResult1 = T, TResult2 = never>( onFulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null, diff --git a/src/client/workflow/core/OpenAPI.ts b/src/client/workflow/core/OpenAPI.ts index af264be25a464af3a2b3dcc57232c87766ac0180..c81a8eb67c222d70f094b26ab861ecd3265a081f 100644 --- a/src/client/workflow/core/OpenAPI.ts +++ b/src/client/workflow/core/OpenAPI.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/core/request.ts b/src/client/workflow/core/request.ts index c6a0602a006d2d1855c2ab50d2d7f43c2eb1bab4..1dc6fef4aab4086ff57b48d26b20ec26bb8fa472 100644 --- a/src/client/workflow/core/request.ts +++ b/src/client/workflow/core/request.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -175,7 +175,7 @@ export const getHeaders = async (config: OpenAPIConfig, options: ApiRequestOptio headers['Authorization'] = `Basic ${credentials}`; } - if (options.body) { + if (options.body !== undefined) { if (options.mediaType) { headers['Content-Type'] = options.mediaType; } else if (isBlob(options.body)) { @@ -215,6 +215,7 @@ export const sendRequest = async <T>( data: body ?? formData, method: options.method, withCredentials: config.WITH_CREDENTIALS, + withXSRFToken: config.CREDENTIALS === 'include' ? config.WITH_CREDENTIALS : false, cancelToken: source.token, }; diff --git a/src/client/workflow/index.ts b/src/client/workflow/index.ts index b7f66603ac980c9106fcf2fecc1ae97ee5ba91d2..dbfd76902980623fcd2985e539d58771cd365855 100644 --- a/src/client/workflow/index.ts +++ b/src/client/workflow/index.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ @@ -14,10 +14,7 @@ export { DocumentationEnum } from './models/DocumentationEnum'; export type { ErrorDetail } from './models/ErrorDetail'; export type { HTTPValidationError } from './models/HTTPValidationError'; export type { IconUpdateOut } from './models/IconUpdateOut'; -export type { ParameterExtension_Input } from './models/ParameterExtension_Input'; -export type { ParameterExtension_Output } from './models/ParameterExtension_Output'; -export type { ResourcePath_Input } from './models/ResourcePath_Input'; -export type { ResourcePath_Output } from './models/ResourcePath_Output'; +export type { ParameterExtension } from './models/ParameterExtension'; export { Status } from './models/Status'; export type { ValidationError } from './models/ValidationError'; export type { WorkflowCredentialsIn } from './models/WorkflowCredentialsIn'; diff --git a/src/client/workflow/models/AnonymizedWorkflowExecution.ts b/src/client/workflow/models/AnonymizedWorkflowExecution.ts index cc68ea3be9a98c612dae5a8a1fdc646e26b039ac..271df1bd1de51d908c544286bce2d0f6fe489899 100644 --- a/src/client/workflow/models/AnonymizedWorkflowExecution.ts +++ b/src/client/workflow/models/AnonymizedWorkflowExecution.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/Body_Workflow_Version_upload_workflow_version_icon.ts b/src/client/workflow/models/Body_Workflow_Version_upload_workflow_version_icon.ts index 01160c3790e18bb436fec90de50bf8c267454f18..b9b4fb0e29341a1d6fd9df456f6ceb9734049f5b 100644 --- a/src/client/workflow/models/Body_Workflow_Version_upload_workflow_version_icon.ts +++ b/src/client/workflow/models/Body_Workflow_Version_upload_workflow_version_icon.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/DevWorkflowExecutionIn.ts b/src/client/workflow/models/DevWorkflowExecutionIn.ts index ad6cbd949c0011a656dfd2ef699cfe7e90c180ac..f65f6ebdab303ad85e1ba0ba7705702b59bc0877 100644 --- a/src/client/workflow/models/DevWorkflowExecutionIn.ts +++ b/src/client/workflow/models/DevWorkflowExecutionIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/DocumentationEnum.ts b/src/client/workflow/models/DocumentationEnum.ts index 5540c023bc93402dd8d236a41632abe9dbbfe904..9bcb475dbc709abaf07a5faa8067932a1bdafd12 100644 --- a/src/client/workflow/models/DocumentationEnum.ts +++ b/src/client/workflow/models/DocumentationEnum.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/ErrorDetail.ts b/src/client/workflow/models/ErrorDetail.ts index 69dd37eb86bc15e2ab2037f3f82516493801e74d..3b8a588e591ca42adc538757044eee2cf6b5881a 100644 --- a/src/client/workflow/models/ErrorDetail.ts +++ b/src/client/workflow/models/ErrorDetail.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/HTTPValidationError.ts b/src/client/workflow/models/HTTPValidationError.ts index 892e4257ccbb49769737cb2e78e0aad49d81a3b1..f9b1a79e2c6debaa712bb1660d4353552f6fbfad 100644 --- a/src/client/workflow/models/HTTPValidationError.ts +++ b/src/client/workflow/models/HTTPValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/IconUpdateOut.ts b/src/client/workflow/models/IconUpdateOut.ts index 1210a9304608adaafc41a6be01dbbb145f8d9964..c53f21ab315ad28a74e27d42e4561c18e9c04d7d 100644 --- a/src/client/workflow/models/IconUpdateOut.ts +++ b/src/client/workflow/models/IconUpdateOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/ParameterExtension.ts b/src/client/workflow/models/ParameterExtension.ts new file mode 100644 index 0000000000000000000000000000000000000000..6c96a7e822ca5b9f15635b64a1f870b2d81e5dba --- /dev/null +++ b/src/client/workflow/models/ParameterExtension.ts @@ -0,0 +1,15 @@ +/* generated using openapi-typescript-codegen -- do not edit */ +/* istanbul ignore file */ +/* tslint:disable */ +/* eslint-disable */ +export type ParameterExtension = { + /** + * The inner dictionary contains the display name as key and the parameter value as value. The outer dictionary has the parameter name as key. + */ + mapping?: Record<string, Record<string, (string | number)>>; + /** + * Dictionary with parameter name as key and default value as value + */ + defaults?: Record<string, (string | number | boolean)>; +}; + diff --git a/src/client/workflow/models/ParameterExtension_Input.ts b/src/client/workflow/models/ParameterExtension_Input.ts deleted file mode 100644 index a9b61aee03b5eaef407fd5c210579f5df9902e21..0000000000000000000000000000000000000000 --- a/src/client/workflow/models/ParameterExtension_Input.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -import type { ResourcePath_Input } from './ResourcePath_Input'; -export type ParameterExtension_Input = { - /** - * The inner dictionary contains the display name as key and the parameter value as value. The outer dictionary has the parameter name as key. - */ - mapping?: Record<string, Record<string, (ResourcePath_Input | string | number)>>; - /** - * Dictionary with parameter name as key and default value as value - */ - defaults?: Record<string, (ResourcePath_Input | string | number | boolean)>; -}; - diff --git a/src/client/workflow/models/ParameterExtension_Output.ts b/src/client/workflow/models/ParameterExtension_Output.ts deleted file mode 100644 index da3a66e25f49587bb235d638383621848c184d2c..0000000000000000000000000000000000000000 --- a/src/client/workflow/models/ParameterExtension_Output.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -import type { ResourcePath_Output } from './ResourcePath_Output'; -export type ParameterExtension_Output = { - /** - * The inner dictionary contains the display name as key and the parameter value as value. The outer dictionary has the parameter name as key. - */ - mapping?: Record<string, Record<string, (ResourcePath_Output | string | number)>>; - /** - * Dictionary with parameter name as key and default value as value - */ - defaults?: Record<string, (ResourcePath_Output | string | number | boolean)>; -}; - diff --git a/src/client/workflow/models/ResourcePath_Input.ts b/src/client/workflow/models/ResourcePath_Input.ts deleted file mode 100644 index c42ec4ee1ccc7a964ce4b68a2e0e176779f6f300..0000000000000000000000000000000000000000 --- a/src/client/workflow/models/ResourcePath_Input.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export type ResourcePath_Input = { - /** - * ID of the resource version - */ - resource_version_id: string; - /** - * ID of the resource - */ - resource_id: string; - suffix?: (string | null); -}; - diff --git a/src/client/workflow/models/ResourcePath_Output.ts b/src/client/workflow/models/ResourcePath_Output.ts deleted file mode 100644 index e985b797e4c0afd69c7059f5db4841efaef727a0..0000000000000000000000000000000000000000 --- a/src/client/workflow/models/ResourcePath_Output.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* generated using openapi-typescript-codegen -- do no edit */ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ -export type ResourcePath_Output = { - /** - * ID of the resource version - */ - resource_version_id: string; - /** - * ID of the resource - */ - resource_id: string; - suffix?: (string | null); -}; - diff --git a/src/client/workflow/models/Status.ts b/src/client/workflow/models/Status.ts index fd918bd83e94662808073249cf91cc0d8b721fac..db27a378d22e80e9ca6f7a66c7ed6ac9acc591f7 100644 --- a/src/client/workflow/models/Status.ts +++ b/src/client/workflow/models/Status.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/ValidationError.ts b/src/client/workflow/models/ValidationError.ts index f2ff49a2b9ad95d18a90c95dc2a7c0b60b7e85e7..aaf1c921e8b674c3da9543cc2cb597e8e90d6d8f 100644 --- a/src/client/workflow/models/ValidationError.ts +++ b/src/client/workflow/models/ValidationError.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowCredentialsIn.ts b/src/client/workflow/models/WorkflowCredentialsIn.ts index a3b3c105701dfc4949bd81bb26409275e60a7b64..7887b8f262b348915cd85cd44c90362d4732bd9f 100644 --- a/src/client/workflow/models/WorkflowCredentialsIn.ts +++ b/src/client/workflow/models/WorkflowCredentialsIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowCredentialsOut.ts b/src/client/workflow/models/WorkflowCredentialsOut.ts index 371252ccef56cbab9fae83919271e08aa6ae198d..3500a19860539a5481a39b56f833b7c6ddaa6b56 100644 --- a/src/client/workflow/models/WorkflowCredentialsOut.ts +++ b/src/client/workflow/models/WorkflowCredentialsOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowExecutionIn.ts b/src/client/workflow/models/WorkflowExecutionIn.ts index 35c5f06034231f12ae852e8d83da244e62f3463a..6b39b2f28323e5169cc2cb8e3d93238126249cf2 100644 --- a/src/client/workflow/models/WorkflowExecutionIn.ts +++ b/src/client/workflow/models/WorkflowExecutionIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowExecutionOut.ts b/src/client/workflow/models/WorkflowExecutionOut.ts index 29bf964a4428e93d6330b90678de154661c47766..514ea962aa479014f046a4c05032e37e3a865c45 100644 --- a/src/client/workflow/models/WorkflowExecutionOut.ts +++ b/src/client/workflow/models/WorkflowExecutionOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowExecutionStatus.ts b/src/client/workflow/models/WorkflowExecutionStatus.ts index 6b92108d72486d7dbf7cd63606e0e5210d479c02..e0bc72f4011a92b6eb1478f7cbc71e409e5a2629 100644 --- a/src/client/workflow/models/WorkflowExecutionStatus.ts +++ b/src/client/workflow/models/WorkflowExecutionStatus.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowIn.ts b/src/client/workflow/models/WorkflowIn.ts index c5322ce22a5df57eade165e222023333d7d79dd1..acc74b596d2bde22f15f43cf5cdd563644e24935 100644 --- a/src/client/workflow/models/WorkflowIn.ts +++ b/src/client/workflow/models/WorkflowIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowModeIn.ts b/src/client/workflow/models/WorkflowModeIn.ts index 7d8d2d439cc4fa451a071aa2edbf5457c2c84c06..c09b4349d3129125b8e3989d1d7ab097c100a915 100644 --- a/src/client/workflow/models/WorkflowModeIn.ts +++ b/src/client/workflow/models/WorkflowModeIn.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowModeOut.ts b/src/client/workflow/models/WorkflowModeOut.ts index d3b61d56fadb4e1e93d4ba47a6fb65e2118b6906..3adeebeca35255fd467c705685bd4098366a4d61 100644 --- a/src/client/workflow/models/WorkflowModeOut.ts +++ b/src/client/workflow/models/WorkflowModeOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowOut.ts b/src/client/workflow/models/WorkflowOut.ts index 90fbae386c4790be3b6063d3cff5db722dcd9d4d..d4968c2c9c30003675c80ffc24fe181e1d4f303b 100644 --- a/src/client/workflow/models/WorkflowOut.ts +++ b/src/client/workflow/models/WorkflowOut.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowStatistic.ts b/src/client/workflow/models/WorkflowStatistic.ts index d84e2dc9ce8a30ce6d93a355774e56957fb117e3..ba9815f493841b6192cc61a7ae1eda1fc2afcfff 100644 --- a/src/client/workflow/models/WorkflowStatistic.ts +++ b/src/client/workflow/models/WorkflowStatistic.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowUpdate.ts b/src/client/workflow/models/WorkflowUpdate.ts index 879f4bc2d303f3e3bd247b63b3996a14b9fa1b41..9b3dac395a7cc364ad439019492ac29fd4291582 100644 --- a/src/client/workflow/models/WorkflowUpdate.ts +++ b/src/client/workflow/models/WorkflowUpdate.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/models/WorkflowVersion.ts b/src/client/workflow/models/WorkflowVersion.ts index 5f2f0d1e21d2afb22510dec18a6285e7740b3e52..da35ffd2a70d3d61a1adc69fd1a1672e78448492 100644 --- a/src/client/workflow/models/WorkflowVersion.ts +++ b/src/client/workflow/models/WorkflowVersion.ts @@ -1,8 +1,8 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ -import type { ParameterExtension_Output } from './ParameterExtension_Output'; +import type { ParameterExtension } from './ParameterExtension'; import type { Status } from './Status'; export type WorkflowVersion = { /** @@ -36,6 +36,6 @@ export type WorkflowVersion = { /** * Parameter extension specific for this CloWM instance */ - parameter_extension?: (ParameterExtension_Output | null); + parameter_extension?: (ParameterExtension | null); }; diff --git a/src/client/workflow/models/WorkflowVersionStatus.ts b/src/client/workflow/models/WorkflowVersionStatus.ts index 765e6881cbcd8211096130a094584eb7f04ffa1d..9477c1f502dd983e11adf94656318f547606a044 100644 --- a/src/client/workflow/models/WorkflowVersionStatus.ts +++ b/src/client/workflow/models/WorkflowVersionStatus.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/services/WorkflowCredentialsService.ts b/src/client/workflow/services/WorkflowCredentialsService.ts index 6e664ec25e60ec6e16c31db2c6f3785981bdeb56..f7e79f5df8c1edee6f0a55ed2332e7e7c0a6fa83 100644 --- a/src/client/workflow/services/WorkflowCredentialsService.ts +++ b/src/client/workflow/services/WorkflowCredentialsService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/services/WorkflowExecutionService.ts b/src/client/workflow/services/WorkflowExecutionService.ts index 1b785be2feb1b17bc505033c90275b32c9bf9842..c6d08278a58be2ae34d58a737900a4b98b0c9852 100644 --- a/src/client/workflow/services/WorkflowExecutionService.ts +++ b/src/client/workflow/services/WorkflowExecutionService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/services/WorkflowModeService.ts b/src/client/workflow/services/WorkflowModeService.ts index c6f11743367cf3ea1ecc0dcbd08d1b92c509d63a..3d68f8bc35c2ff99a123cfd1af32bf89d3d0a030 100644 --- a/src/client/workflow/services/WorkflowModeService.ts +++ b/src/client/workflow/services/WorkflowModeService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/services/WorkflowService.ts b/src/client/workflow/services/WorkflowService.ts index dbed2cf8d9a66b63886050375683ee0438b39af0..06a8be33ed8bcaa20777eff36f63a3cb1b6c3482 100644 --- a/src/client/workflow/services/WorkflowService.ts +++ b/src/client/workflow/services/WorkflowService.ts @@ -1,4 +1,4 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ diff --git a/src/client/workflow/services/WorkflowVersionService.ts b/src/client/workflow/services/WorkflowVersionService.ts index ca8d35742d5f792862495273e42a202787679e8c..814605ed4b6c4f722a80bb8a484e2cd7862ceadb 100644 --- a/src/client/workflow/services/WorkflowVersionService.ts +++ b/src/client/workflow/services/WorkflowVersionService.ts @@ -1,11 +1,11 @@ -/* generated using openapi-typescript-codegen -- do no edit */ +/* generated using openapi-typescript-codegen -- do not edit */ /* istanbul ignore file */ /* tslint:disable */ /* eslint-disable */ import type { Body_Workflow_Version_upload_workflow_version_icon } from '../models/Body_Workflow_Version_upload_workflow_version_icon'; import type { DocumentationEnum } from '../models/DocumentationEnum'; import type { IconUpdateOut } from '../models/IconUpdateOut'; -import type { ParameterExtension_Input } from '../models/ParameterExtension_Input'; +import type { ParameterExtension } from '../models/ParameterExtension'; import type { Status } from '../models/Status'; import type { WorkflowVersion } from '../models/WorkflowVersion'; import type { WorkflowVersionStatus } from '../models/WorkflowVersionStatus'; @@ -142,7 +142,7 @@ export class WorkflowVersionService { }); } /** - * Deprecate a workflow version + * Update parameter extension of workflow version * Update the parameter extension of a workflow version. * * @@ -156,7 +156,7 @@ export class WorkflowVersionService { public static workflowVersionUpdateWorkflowVersionParameterExtension( wid: string, gitCommitHash: string, - requestBody: ParameterExtension_Input, + requestBody: ParameterExtension, ): CancelablePromise<WorkflowVersion> { return __request(OpenAPI, { method: 'PATCH', @@ -176,6 +176,37 @@ export class WorkflowVersionService { }, }); } + /** + * Delete parameter extension of workflow version + * Delete the parameter extension of a workflow version. + * + * + * Permission `workflow:update` required. + * @param wid ID of a workflow + * @param gitCommitHash Git commit git_commit_hash of specific version. + * @returns void + * @throws ApiError + */ + public static workflowVersionDeleteWorkflowVersionParameterExtension( + wid: string, + gitCommitHash: string, + ): CancelablePromise<void> { + return __request(OpenAPI, { + method: 'DELETE', + url: '/workflows/{wid}/versions/{git_commit_hash}/parameter-extension', + path: { + 'wid': wid, + 'git_commit_hash': gitCommitHash, + }, + errors: { + 400: `Error decoding JWT Token`, + 401: `Not authenticated`, + 403: `Not authorized`, + 404: `Entity not Found`, + 422: `Validation Error`, + }, + }); + } /** * Fetch documentation for a workflow version * Get the documentation for a specific workflow version. diff --git a/src/components/BootstrapToast.vue b/src/components/BootstrapToast.vue index 000cdda2566dc3c96deff69fd34597ea945aca0e..0b9d98c282c65979fb0c566fe6bc51eaf52fefc2 100644 --- a/src/components/BootstrapToast.vue +++ b/src/components/BootstrapToast.vue @@ -1,18 +1,11 @@ <script setup lang="ts"> import { useSlots, computed, type PropType } from "vue"; - -type colors = - | "primary" - | "secondary" - | "success" - | "warning" - | "danger" - | "info"; +import type { Colors } from "@/types/PropTypes"; const slots = useSlots(); const props = defineProps({ colorClass: { - type: String as PropType<colors>, + type: String as PropType<Colors>, required: false, default: "success", }, diff --git a/src/components/modals/BootstrapModal.vue b/src/components/modals/BootstrapModal.vue index 63806ef19d8f804f709b31185083703de16dcb67..7d6cc6cd2efbf855c48defec2e51adda0b16cbce 100644 --- a/src/components/modals/BootstrapModal.vue +++ b/src/components/modals/BootstrapModal.vue @@ -1,21 +1,22 @@ <script setup lang="ts"> import { computed } from "vue"; +import type { SizeModifierType } from "@/types/PropTypes"; const props = defineProps<{ modalId: string; modalLabel: string; staticBackdrop?: boolean; - sizeModifier?: sizeModifierType; // https://getbootstrap.com/docs/5.3/components/modal/#optional-sizes, e.g. sm, lg and xl + sizeModifierModal?: sizeModifierModalType; // https://getbootstrap.com/docs/5.3/components/modal/#optional-sizes, e.g. sm, lg and xl trackModalValue?: string; }>(); -type sizeModifierType = "sm" | "lg" | "xl"; +type sizeModifierModalType = SizeModifierType | "xl"; const modalSizeClass = computed<string>(() => { - if (props.sizeModifier == undefined) { + if (props.sizeModifierModal == undefined) { return ""; } - return "modal-" + props.sizeModifier; + return "modal-" + props.sizeModifierModal; }); function trackModalShow() { diff --git a/src/components/parameter-schema/ParameterSchemaFormComponent.vue b/src/components/parameter-schema/ParameterSchemaFormComponent.vue index cc847a63f202ecab031ad5809adcda9f56530240..eb230b0057ca5a7b8ca5fa3d8034eafbb08fac9d 100644 --- a/src/components/parameter-schema/ParameterSchemaFormComponent.vue +++ b/src/components/parameter-schema/ParameterSchemaFormComponent.vue @@ -4,7 +4,7 @@ import ParameterGroupForm from "@/components/parameter-schema/form-mode/Paramete import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue"; import Ajv from "ajv"; import type { ValidateFunction } from "ajv"; -import ParameterStringInput from "@/components/parameter-schema/form-mode/ParameterStringInput.vue"; +import ParameterInput from "@/components/parameter-schema/form-mode/ParameterInput.vue"; import { Toast, Tooltip } from "bootstrap"; import { useBucketStore } from "@/stores/buckets"; import { useS3KeyStore } from "@/stores/s3keys"; @@ -19,6 +19,7 @@ import type { WorkflowParameters, } from "@/types/WorkflowParameters"; import { useWorkflowExecutionStore } from "@/stores/workflowExecutions"; +import type { ParameterExtension } from "@/client/workflow"; const bucketRepository = useBucketStore(); const resourceRepository = useResourceStore(); @@ -37,6 +38,10 @@ const props = defineProps({ type: Object as PropType<ClowmInfo>, required: false, }, + parameterExtension: { + type: Object as PropType<ParameterExtension>, + required: false, + }, loading: { type: Boolean, }, @@ -184,6 +189,7 @@ function updateSchema(schema: Record<string, any>) { formState.formInput = groupedParameters.reduce((acc, val) => { return { ...acc, ...val }; }); + loadParameters({ params: props.parameterExtension?.defaults }, false); loadParameters(executionRepository.popTemporaryParameters()); } @@ -213,17 +219,26 @@ function startWorkflow() { } } -function loadParameters(tempParams?: TemporaryParams) { - if (tempParams) { +function loadParameters( + tempParams?: TemporaryParams, + showSuccessToast: boolean = true, +) { + if (tempParams?.params) { for (const param in tempParams.params) { if (param in formState.formInput) { formState.formInput[param] = tempParams.params[param]; } } + } + if (tempParams?.metaParams) { formState.metaParameters = tempParams.metaParams; - if (Object.keys(tempParams?.params ?? {}).length > 0) { - parameterLoadToast?.show(); - } + } + if ( + showSuccessToast && + (Object.keys(tempParams?.params ?? {}).length > 0 || + Object.keys(tempParams?.metaParams ?? {}).length > 0) + ) { + parameterLoadToast?.show(); } } @@ -296,6 +311,7 @@ onMounted(() => { :showHidden="showHidden" :show-optional="showOptional" :resource-parameters="props.clowmInfo?.resourceParameters" + :mapping="parameterExtension?.mapping" /> </template> <div class="card mb-3"> @@ -338,14 +354,13 @@ onMounted(() => { <span class="input-group-text border border-secondary"> <font-awesome-icon icon="fa-solid fa-folder" /> </span> - <parameter-string-input - parameter-name="logs_s3_path" + <parameter-input v-model="formState.metaParameters.logs_s3_path" :parameter="{ format: 'directory-path', type: 'string', }" - remove-advanced + border="secondary" /> </div> <label class="mb-3" for="logsS3Path"> @@ -361,14 +376,13 @@ onMounted(() => { <span class="input-group-text border border-secondary"> <font-awesome-icon icon="fa-solid fa-folder" /> </span> - <parameter-string-input - parameter-name="provenance_s3_path" + <parameter-input v-model="formState.metaParameters.provenance_s3_path" :parameter="{ format: 'directory-path', type: 'string', }" - remove-advanced + border="secondary" /> </div> <label class="mb-3" for="provenanceS3Path"> @@ -385,14 +399,13 @@ onMounted(() => { <span class="input-group-text border border-secondary"> <font-awesome-icon icon="fa-solid fa-folder" /> </span> - <parameter-string-input - parameter-name="debug_s3_path" + <parameter-input v-model="formState.metaParameters.debug_s3_path" :parameter="{ format: 'directory-path', type: 'string', }" - remove-advanced + border="secondary" /> </div> <label class="mb-3" for="debugS3Path"> diff --git a/src/components/parameter-schema/form-mode/ParameterBooleanInput.vue b/src/components/parameter-schema/form-mode/ParameterBooleanInput.vue index 54e519ccd40a64f2ab9801973389ae525ea3d97f..30010c4a0bc3fc94365de059d97d4d3cc13d236b 100644 --- a/src/components/parameter-schema/form-mode/ParameterBooleanInput.vue +++ b/src/components/parameter-schema/form-mode/ParameterBooleanInput.vue @@ -1,5 +1,6 @@ <script setup lang="ts"> -import { computed } from "vue"; +import { computed, onMounted, type PropType, watch } from "vue"; +import type { ExtendedColors } from "@/types/PropTypes"; const model = defineModel<boolean | undefined>({ required: true }); @@ -8,31 +9,52 @@ const props = defineProps({ type: Object, required: true, validator(value: Record<string, never>) { - return "number" === value["type"]; + return "boolean" === value["type"]; }, }, - required: Boolean, - parameterName: { - type: String, - required: true, - }, - helpId: { - type: String, - }, + border: String as PropType<ExtendedColors>, }); const randomIDSuffix = Math.random().toString(16).substring(2, 8); const helpTextPresent = computed<boolean>(() => props.parameter["help_text"]); const iconPresent = computed<boolean>(() => props.parameter["fa_icon"]); + +const dynamicCssClasses = computed<string[]>(() => { + const cssClasses = []; + if (props.border) { + cssClasses.push("border", `border-${props.border}`, "text-bg-light"); + } + if (!helpTextPresent.value) { + cssClasses.push("rounded-end"); + } + if (!iconPresent.value) { + cssClasses.push("rounded-start"); + } + return cssClasses; +}); + +watch(model, (newVal) => { + if (typeof newVal === "number") { + // type conversion if true/false is represented by 0/1 + model.value = !!newVal; + } +}); + +onMounted(() => { + if (model.value != undefined) { + // type conversion if true/false is represented by 0/1 + model.value = model.value ? true : false; + } +}); </script> <template> <div - class="flex-fill mb-0 text-bg-light fs-6 ps-4 d-flex align-items-center justify-content-start py-1 border border-secondary" - :class="{ 'rounded-end': !helpTextPresent, 'rounded-start': !iconPresent }" + class="flex-fill mb-0 fs-6 d-flex align-items-center justify-content-start py-1 ps-4" + :class="dynamicCssClasses" > - <div class="form-check form-check-inline"> + <div class="form-check form-check-inline mb-0"> <label class="form-check-label" :for="'trueOption' + randomIDSuffix" >True</label > @@ -45,7 +67,7 @@ const iconPresent = computed<boolean>(() => props.parameter["fa_icon"]); v-model="model" /> </div> - <div class="form-check form-check-inline"> + <div class="form-check form-check-inline mb-0"> <input class="form-check-input" type="radio" diff --git a/src/components/parameter-schema/form-mode/ParameterEnumInput.vue b/src/components/parameter-schema/form-mode/ParameterEnumInput.vue index a92092cc77d4a17a2665bbbb46a979ba2ef18f29..182a3773ad3ef9507a168a27933e9553eac1eef7 100644 --- a/src/components/parameter-schema/form-mode/ParameterEnumInput.vue +++ b/src/components/parameter-schema/form-mode/ParameterEnumInput.vue @@ -1,5 +1,6 @@ <script setup lang="ts"> -import { computed } from "vue"; +import { computed, type PropType } from "vue"; +import type { ExtendedColors, SizeModifierType } from "@/types/PropTypes"; const model = defineModel<string | undefined>({ required: true }); @@ -12,25 +13,32 @@ const props = defineProps({ }, }, required: Boolean, - parameterName: { - type: String, - required: true, - }, - helpId: { - type: String, + sizeModifier: { + type: String as PropType<SizeModifierType>, }, + border: String as PropType<ExtendedColors>, }); const possibleValues = computed<string[]>(() => props.parameter["enum"]); + +const dynamicCssClasses = computed<string[]>(() => { + const cssClasses = []; + if (props.sizeModifier) { + cssClasses.push(`form-select-${props.sizeModifier}`); + } + if (props.border) { + cssClasses.push("border", `border-${props.border}`); + } + return cssClasses; +}); </script> <template> <select - ref="enumSelection" v-model="model" - class="form-select border border-secondary" + class="form-select" + :class="dynamicCssClasses" :required="required" - :aria-describedby="props.helpId" > <option v-for="val in possibleValues" :key="val"> {{ val }} diff --git a/src/components/parameter-schema/form-mode/ParameterFileInput.vue b/src/components/parameter-schema/form-mode/ParameterFileInput.vue new file mode 100644 index 0000000000000000000000000000000000000000..80ab07e0103ca9643a1ce11d07c4ad70791c6662 --- /dev/null +++ b/src/components/parameter-schema/form-mode/ParameterFileInput.vue @@ -0,0 +1,206 @@ +<script setup lang="ts"> +import { computed, onMounted, type PropType, reactive, watch } from "vue"; +import { useS3ObjectStore } from "@/stores/s3objects"; +import { useBucketStore } from "@/stores/buckets"; +import type { ExtendedColors, SizeModifierType } from "@/types/PropTypes"; + +const model = defineModel<string | undefined>({ required: true }); +const s3Regex = /s3:\/\/([^\s/]*)(\/\S*)?/g; + +const props = defineProps({ + parameter: { + type: Object, + required: true, + validator(value: Record<string, never>) { + return value["format"] != undefined; + }, + }, + required: Boolean, + helpId: { + type: String, + }, + sizeModifier: { + type: String as PropType<SizeModifierType>, + }, + border: String as PropType<ExtendedColors>, + allowRaw: Boolean, +}); + +const emit = defineEmits<{ + (e: "switch-to-raw"): void; +}>(); + +const s3ObjectRepository = useS3ObjectStore(); +const bucketRepository = useBucketStore(); +const randomIDSuffix = Math.random().toString(16).substring(2, 8); + +const baseDynamicClass = computed<string[]>(() => + props.border ? ["border", `border-${props.border}`] : [], +); + +const selectDynamicClass = computed<string[]>(() => { + const cssClasses = [...baseDynamicClass.value]; + if (props.sizeModifier) { + cssClasses.push(`form-select-${props.sizeModifier}`); + } + return cssClasses; +}); +const inputDynamicClass = computed<string[]>(() => { + const cssClasses = [...baseDynamicClass.value]; + if (props.sizeModifier) { + cssClasses.push(`form-control-${props.sizeModifier}`); + } + if (!helpTextPresent.value && !props.allowRaw) { + cssClasses.push("rounded-end"); + } + return cssClasses; +}); + +watch(model, (newVal, oldVal) => { + if ( + newVal != oldVal && + newVal !== translateToModel(s3Path.bucket, s3Path.key) + ) { + parseModel(newVal); + } +}); + +function parseModel(val?: string) { + if (val == undefined || val.length === 0) { + s3Path.bucket = ""; + s3Path.key = undefined; + return; + } + const match = s3Regex.exec(val ?? ""); + if (match) { + s3Path.bucket = match[1]; + s3Path.key = match[2]?.slice(1); + if (bucketRepository.bucketMapping[s3Path.bucket] == undefined) { + // Missing bucket + emit("switch-to-raw"); + } + } else { + // Not S3 Path + emit("switch-to-raw"); + } +} + +const s3Path = reactive<{ + bucket: string; + key?: string; +}>({ + bucket: "", + key: undefined, +}); + +const helpTextPresent = computed<boolean>(() => props.parameter["help_text"]); + +const foldersInBucket = computed<string[]>(() => + (s3ObjectRepository.objectMapping[s3Path.bucket ?? ""] ?? []) + .filter((obj) => obj.Key != undefined) + .map((obj) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const parts = obj.Key!.split("/"); + return parts + .slice(0, parts.length - 1) + .map((part, index) => + parts.slice(0, index + 1).reduce((acc, val) => `${acc}/${val}`), + ); + }) + .flat() + .filter((val, index, array) => array.indexOf(val) === index), +); + +const filesInBucket = computed<string[]>(() => + (s3ObjectRepository.objectMapping[s3Path.bucket ?? ""] ?? []) + .filter((obj) => !obj.Key?.endsWith("/")) + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + .map((obj) => obj.Key!), +); + +const filesAndFoldersInBucket = computed<string[]>(() => + filesInBucket.value.concat(foldersInBucket.value), +); + +const keyDataList = computed<string[]>(() => { + switch (props.parameter["format"]) { + case "file-path": + return filesInBucket.value; + case "directory-path": + return foldersInBucket.value; + case "path": + return filesAndFoldersInBucket.value; + default: + return []; + } +}); + +watch( + () => s3Path.key, + (newVal, oldVal) => { + if (newVal !== oldVal) { + model.value = translateToModel(s3Path.bucket, newVal); + } + }, +); + +function updateBucket(bucket: string) { + s3Path.bucket = bucket; + model.value = translateToModel(bucket, s3Path.key); + s3ObjectRepository.fetchS3Objects( + bucket, + bucketRepository.ownPermissions[bucket]?.file_prefix ?? undefined, + ); +} + +function translateToModel(bucket: string, key?: string): string | undefined { + return !bucket ? undefined : `s3://${bucket}${key ? "/" + key : ""}`; +} + +onMounted(() => { + parseModel(model.value); +}); +</script> + +<template> + <select + class="form-select" + :class="selectDynamicClass" + :required="props.required" + :value="s3Path.bucket" + @change=" + (event) => updateBucket((event.target as HTMLSelectElement)?.value) + " + > + <option selected disabled value="">Please select a bucket</option> + <option + v-for="bucket in bucketRepository.ownBucketsAndFullPermissions" + :key="bucket" + :value="bucket" + > + {{ bucket }} + </option> + </select> + <input + class="form-control" + :list="'keys-options-' + randomIDSuffix" + :class="inputDynamicClass" + placeholder="Type to search in bucket..." + :required="props.required && props.parameter['format'] === 'file-path'" + v-model="s3Path.key" + :pattern="props.parameter['pattern']" + /> + <datalist :id="'keys-options-' + randomIDSuffix"> + <option v-for="obj in keyDataList" :value="obj" :key="obj" /> + </datalist> + <button + v-if="allowRaw" + type="button" + class="btn btn-outline-secondary" + @click="emit('switch-to-raw')" + > + Raw + </button> +</template> + +<style scoped></style> diff --git a/src/components/parameter-schema/form-mode/ParameterGroupForm.vue b/src/components/parameter-schema/form-mode/ParameterGroupForm.vue index 9d4b0f398b7cf79348714c6bcabdf6f013d0d74f..c36f61227585a05f4ad28b48e5b1c60de7b655b4 100644 --- a/src/components/parameter-schema/form-mode/ParameterGroupForm.vue +++ b/src/components/parameter-schema/form-mode/ParameterGroupForm.vue @@ -1,12 +1,9 @@ <script setup lang="ts"> import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue"; import { computed, type PropType } from "vue"; -import ParameterNumberInput from "@/components/parameter-schema/form-mode/ParameterNumberInput.vue"; import MarkdownRenderer from "@/components/MarkdownRenderer.vue"; -import ParameterBooleanInput from "@/components/parameter-schema/form-mode/ParameterBooleanInput.vue"; -import ParameterEnumInput from "@/components/parameter-schema/form-mode/ParameterEnumInput.vue"; -import ParameterStringInput from "@/components/parameter-schema/form-mode/ParameterStringInput.vue"; import type { WorkflowParameters } from "@/types/WorkflowParameters"; +import ParameterInput from "@/components/parameter-schema/form-mode/ParameterInput.vue"; const model = defineModel<WorkflowParameters>({ required: true }); @@ -34,6 +31,7 @@ const props = defineProps({ type: Array as PropType<string[]>, required: false, }, + mapping: Object as PropType<Record<string, Record<string, string | number>>>, }); const title = computed<string>(() => props.parameterGroup["title"]); const icon = computed<string>(() => props.parameterGroup["fa_icon"]); @@ -63,6 +61,10 @@ function parameterRequired( ?.reduce((acc: boolean, val: string) => acc || val, false) ); } + +function parameterId(parameterName: string): string { + return parameterName.replace(/\./g, ""); +} </script> <template> @@ -101,61 +103,22 @@ function parameterRequired( > <font-awesome-icon :icon="parameter['fa_icon']" /> </span> - <template - v-if=" - parameter['type'] === 'number' || - parameter['type'] === 'integer' - " - > - <!-- @vue-ignore --> - <parameter-number-input - :parameter-name="parameterName" - :parameter="parameter" - :help-id="parameterName + '-help'" - :required="parameterRequired(parameterGroup, parameterName)" - v-model="model[parameterName]" - /> - </template> - <template v-else-if="parameter['type'] === 'boolean'"> - <!-- @vue-ignore --> - <parameter-boolean-input - :parameter-name="parameterName" - :parameter="parameter" - :help-id="parameterName + '-help'" - v-model="model[parameterName]" - /> - </template> - <template v-else-if="parameter['type'] === 'string'"> - <!-- @vue-ignore --> - <template v-if="parameter['enum']"> - <!-- @vue-ignore --> - <parameter-enum-input - :parameter-name="parameterName" - :parameter="parameter" - :required="parameterRequired(parameterGroup, parameterName)" - v-model="model[parameterName]" - /> - </template> - <!-- @vue-ignore --> - <parameter-string-input - v-else - :parameter-name="parameterName" - :parameter="parameter" - :required="parameterRequired(parameterGroup, parameterName)" - v-model="model[parameterName]" - :remove-advanced="!showOptional" - :clowm-resource="resourceParameters?.includes(parameterName)" - /> - </template> + <parameter-input + :parameter="parameter" + v-model="model[parameterName]" + :required="parameterRequired(parameterGroup, parameterName)" + border="secondary" + :resource-parameter="resourceParameters?.includes(parameterName)" + :allow-raw="showOptional" + :mapping="mapping?.[parameterName]" + /> <span class="input-group-text cursor-pointer px-2 border border-secondary" v-if="parameter['help_text']" data-bs-toggle="collapse" - :data-bs-target=" - '#helpCollapse' + parameterName.replace(/\./g, '') - " + :data-bs-target="'#help-collapse-' + parameterId(parameterName)" aria-expanded="false" - :aria-controls="'helpCollapse' + parameterName.replace(/\./g, '')" + :aria-controls="'help-collapse-' + parameterId(parameterName)" > <font-awesome-icon class="cursor-pointer" @@ -168,7 +131,7 @@ function parameterRequired( </label> <div class="collapse" - :id="'helpCollapse' + parameterName.replace(/\./g, '')" + :id="'help-collapse-' + parameterId(parameterName)" v-if="parameter['help_text']" > <div class="p-2 pb-0 mx-2 mb-3 flex-shrink-1 border rounded"> diff --git a/src/components/parameter-schema/form-mode/ParameterInput.vue b/src/components/parameter-schema/form-mode/ParameterInput.vue new file mode 100644 index 0000000000000000000000000000000000000000..97c6b776925c8589774ea605fd5d91200ddcbfff --- /dev/null +++ b/src/components/parameter-schema/form-mode/ParameterInput.vue @@ -0,0 +1,103 @@ +<script setup lang="ts"> +import { computed, ref } from "vue"; +import ParameterResourceInput from "@/components/parameter-schema/form-mode/ParameterResourceInput.vue"; +import ParameterNumberInput from "@/components/parameter-schema/form-mode/ParameterNumberInput.vue"; +import ParameterBooleanInput from "@/components/parameter-schema/form-mode/ParameterBooleanInput.vue"; +import ParameterEnumInput from "@/components/parameter-schema/form-mode/ParameterEnumInput.vue"; +import ParameterFileInput from "@/components/parameter-schema/form-mode/ParameterFileInput.vue"; +import ParameterStringInput from "@/components/parameter-schema/form-mode/ParameterStringInput.vue"; +import type { SizeModifierType, ExtendedColors } from "@/types/PropTypes"; +import ParameterMappingInput from "@/components/parameter-schema/form-mode/ParameterMappingInput.vue"; + +const model = defineModel<number | string | boolean | undefined>({ + required: true, +}); + +const rawInput = ref<boolean>(false); + +const props = defineProps<{ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + parameter: Record<string, any>; + required?: boolean; + resourceParameter?: boolean; + sizeModifier?: SizeModifierType; + border?: ExtendedColors; + allowRaw?: boolean; + forceRawFile?: boolean; + mapping?: Record<string, string | number>; +}>(); + +const parameterType = computed<string>( + () => props.parameter["type"] ?? "string", +); +</script> + +<template> + <parameter-mapping-input + v-if="mapping && Object.keys(mapping ?? {}).length > 0 && !rawInput" + v-model="model as string | number | undefined" + :required="required" + :size-modifier="sizeModifier" + :border="border" + :mapping="mapping" + :allow-raw="allowRaw" + @switch-to-raw="rawInput = true" + /> + <parameter-number-input + v-else-if="parameterType === 'number' || parameterType === 'integer'" + :parameter="parameter" + v-model="model as number" + :required="required" + :size-modifier="sizeModifier" + :border="border" + /> + <parameter-boolean-input + v-else-if="parameterType === 'boolean'" + :parameter="parameter" + v-model="model as boolean" + :border="border" + /> + <parameter-enum-input + v-else-if="parameter['enum']" + :required="required" + :parameter="parameter" + v-model="model as string" + :size-modifier="sizeModifier" + :border="border" + /> + <template v-else> + <parameter-resource-input + v-if="resourceParameter && !rawInput" + :parameter="parameter" + :required="required" + v-model="model as string" + :size-modifier="sizeModifier" + :border="border" + @switch-to-raw="rawInput = true" + :allow-raw="allowRaw" + /> + <parameter-file-input + v-else-if="parameter['format'] && !rawInput && !forceRawFile" + :required="required" + :parameter="parameter" + v-model="model as string" + :size-modifier="sizeModifier" + :border="border" + @switch-to-raw="rawInput = true" + :allow-raw="allowRaw" + /> + <parameter-string-input + v-else + :parameter="parameter" + :required="required" + v-model="model as string" + :size-modifier="sizeModifier" + :border="border" + :resource-parameter="resourceParameter" + :allow-switch="allowRaw" + @disable-raw="rawInput = false" + /> + </template> +</template> + +<style scoped></style> diff --git a/src/components/parameter-schema/form-mode/ParameterMappingInput.vue b/src/components/parameter-schema/form-mode/ParameterMappingInput.vue new file mode 100644 index 0000000000000000000000000000000000000000..f8d8543b8d8c74b601c92e60ff84ecc4db904bbf --- /dev/null +++ b/src/components/parameter-schema/form-mode/ParameterMappingInput.vue @@ -0,0 +1,56 @@ +<script setup lang="ts"> +import { computed } from "vue"; +import type { ExtendedColors, SizeModifierType } from "@/types/PropTypes"; + +const model = defineModel<string | number | undefined>({ required: true }); + +const props = defineProps<{ + required?: boolean; + sizeModifier?: SizeModifierType; + border?: ExtendedColors; + mapping: Record<string, string | number>; + allowRaw?: boolean; +}>(); + +const emit = defineEmits<{ + (e: "switch-to-raw"): void; +}>(); + +const dynamicCssClasses = computed<string[]>(() => { + const cssClasses = []; + if (props.sizeModifier) { + cssClasses.push(`form-select-${props.sizeModifier}`); + } + if (props.border) { + cssClasses.push("border", `border-${props.border}`); + } + return cssClasses; +}); +</script> + +<template> + <select + v-model="model" + class="form-select" + :class="dynamicCssClasses" + :required="required" + > + <option + v-for="(val, paramOption) in mapping" + :key="paramOption" + :value="val" + > + {{ paramOption }} + </option> + </select> + <button + v-if="allowRaw" + type="button" + class="btn btn-outline-secondary" + @click="emit('switch-to-raw')" + > + Raw + </button> +</template> + +<style scoped></style> diff --git a/src/components/parameter-schema/form-mode/ParameterNumberInput.vue b/src/components/parameter-schema/form-mode/ParameterNumberInput.vue index 0cc7ca60dd195a5c999b6570d88af7e85bb3b117..b8a429863492238b0d66e7996ca136f747deb8f1 100644 --- a/src/components/parameter-schema/form-mode/ParameterNumberInput.vue +++ b/src/components/parameter-schema/form-mode/ParameterNumberInput.vue @@ -1,4 +1,7 @@ <script setup lang="ts"> +import { computed, type PropType } from "vue"; +import type { ExtendedColors, SizeModifierType } from "@/types/PropTypes"; + const model = defineModel<number | undefined>({ required: true }); const props = defineProps({ @@ -10,19 +13,31 @@ const props = defineProps({ }, }, required: Boolean, - parameterName: { - type: String, - required: true, - }, helpId: { type: String, }, + sizeModifier: { + type: String as PropType<SizeModifierType>, + }, + border: String as PropType<ExtendedColors>, +}); + +const dynamicCssClasses = computed<string[]>(() => { + const cssClasses = []; + if (props.sizeModifier) { + cssClasses.push(`form-control-${props.sizeModifier}`); + } + if (props.border) { + cssClasses.push("border", `border-${props.border}`); + } + return cssClasses; }); </script> <template> <input - class="form-control border border-secondary" + class="form-control flex-fill" + :class="dynamicCssClasses" type="number" :max="props.parameter['maximum']" :min="props.parameter['minimum']" diff --git a/src/components/parameter-schema/form-mode/ParameterResourceInput.vue b/src/components/parameter-schema/form-mode/ParameterResourceInput.vue new file mode 100644 index 0000000000000000000000000000000000000000..77a887ec3d48a53cfa2cc8d99e11d7043bdcd859 --- /dev/null +++ b/src/components/parameter-schema/form-mode/ParameterResourceInput.vue @@ -0,0 +1,227 @@ +<script setup lang="ts"> +import { Status } from "@/client/resource"; +import { computed, onMounted, reactive, watch } from "vue"; +import { useResourceStore } from "@/stores/resources"; +import type { ExtendedColors, SizeModifierType } from "@/types/PropTypes"; + +const model = defineModel<string | undefined>({ + required: true, +}); + +const resourceRegex = /CLDB-([\da-f]{32})\/(latest|[\da-f]{32})([/\S]*)/g; + +const props = defineProps<{ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + parameter: Record<string, any>; + required?: boolean; + sizeModifier?: SizeModifierType; + border?: ExtendedColors; + allowRaw?: boolean; +}>(); + +const emit = defineEmits<{ + (e: "switch-to-raw"): void; +}>(); + +const resourceRepository = useResourceStore(); +const randomIDSuffix = Math.random().toString(16).substring(2, 8); + +type ResourcePath = { + resource_id: string; + resource_version_id: string; + suffix?: string; +}; + +const resource = reactive<ResourcePath>({ + resource_id: "", + resource_version_id: "", + suffix: undefined, +}); + +const helpTextPresent = computed<boolean>(() => props.parameter["help_text"]); + +const baseDynamicClass = computed<string[]>(() => + props.border ? ["border", `border-${props.border}`] : [], +); + +const selectDynamicClass = computed<string[]>(() => { + const cssClasses = [...baseDynamicClass.value]; + if (props.sizeModifier) { + cssClasses.push(`form-select-${props.sizeModifier}`); + } + return cssClasses; +}); +const inputDynamicClass = computed<string[]>(() => { + const cssClasses = [...baseDynamicClass.value]; + if (props.sizeModifier) { + cssClasses.push(`form-control-${props.sizeModifier}`); + } + if (!helpTextPresent.value && !props.allowRaw) { + cssClasses.push("rounded-end"); + } + return cssClasses; +}); + +function updateResourceId(rid: string) { + resource.resource_id = rid; + resource.resource_version_id = ""; + model.value = translateToModel(); +} + +function updateResourceVersionId(rvid: string) { + resource.resource_version_id = rvid; + model.value = translateToModel(); + resourceRepository.fetchResourceTree(resource.resource_id, rvid); +} + +watch(model, (newVal, oldVal) => { + if (newVal != oldVal && newVal !== translateToModel()) { + parseModel(newVal); + } +}); + +function parseModel(val?: string) { + if (val == undefined || val.length === 0) { + Object.assign(resource, { + resource_id: "", + resource_version_id: "", + suffix: undefined, + }); + } else { + const match = resourceRegex.exec(val); + if (match) { + const tempResource: ResourcePath = { + resource_id: "", + resource_version_id: "", + }; + tempResource.resource_id = hexToUUID(match[1]); + tempResource.suffix = match[3]; + tempResource.resource_version_id = + match[2].length === 32 + ? hexToUUID(match[2]) + : resourceRepository.getLatestVersion(resource.resource_id); + if ( + resourceRepository.resourceMapping[tempResource.resource_id] == + undefined || + resourceRepository.versionMapping[tempResource.resource_version_id] == + undefined + ) { + // Missing resource + emit("switch-to-raw"); + return; + } + Object.assign(resource, tempResource); + } else { + // Not resource path + emit("switch-to-raw"); + } + } +} + +function hexToUUID(hex?: string): string { + if (hex) { + return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20, 32)}`; + } + return ""; +} + +watch( + () => resource.suffix, + (newVal, oldVal) => { + if (newVal !== oldVal) { + model.value = translateToModel(); + } + }, +); + +function translateToModel(): string { + if (resource.resource_version_id.length === 0) { + return ""; + } + let val = + resourceRepository.versionMapping[resource.resource_version_id] + ?.cluster_path ?? ""; + if (resource.suffix != undefined && val.length > 0) { + val = val + resource.suffix; + } + return val; +} + +onMounted(() => { + parseModel(model.value); +}); +</script> + +<template> + <select + class="form-select" + :class="selectDynamicClass" + :required="props.required" + :value="resource.resource_id" + @change=" + (event) => updateResourceId((event.target as HTMLSelectElement)?.value) + " + > + > + <option selected disabled value="">Please select a resource</option> + <option + v-for="resource in resourceRepository.resources" + :key="resource.resource_id" + :value="resource.resource_id" + > + {{ resource.name }} + </option> + </select> + <select + class="form-select" + :class="selectDynamicClass" + :required="resource.resource_id.length > 0" + :value="resource.resource_version_id" + @change=" + (event) => + updateResourceVersionId((event.target as HTMLSelectElement)?.value) + " + :disabled="resource.resource_id.length === 0" + > + <option disabled selected value="">Please select a version</option> + <option + v-for="version in resourceRepository.resourceMapping[resource.resource_id] + ?.versions ?? []" + :key="version.resource_version_id" + :value="version.resource_version_id" + > + {{ version.release }} + {{ version.status === Status.LATEST ? "- Latest" : "" }} + </option> + </select> + <input + type="text" + class="form-control" + :class="inputDynamicClass" + placeholder="/optional/path/in/resource/..." + minlength="2" + maxlength="256" + pattern="\/\S*" + v-model="resource.suffix" + :list="'resource-tree-options-' + randomIDSuffix" + /> + <datalist :id="'resource-tree-options-' + randomIDSuffix"> + <option + v-for="file in resourceRepository.resourceTreeList[ + resource.resource_version_id + ] ?? []" + :value="file" + :key="file" + /> + </datalist> + <button + v-if="allowRaw" + type="button" + class="btn btn-outline-secondary" + @click="emit('switch-to-raw')" + > + Raw + </button> +</template> + +<style scoped></style> diff --git a/src/components/parameter-schema/form-mode/ParameterStringInput.vue b/src/components/parameter-schema/form-mode/ParameterStringInput.vue index a41cc04f692ad9733e06bba04c1fa0ae2697c061..e1b8dae2b429132520ac7e6c8bedd4b8bdf6e391 100644 --- a/src/components/parameter-schema/form-mode/ParameterStringInput.vue +++ b/src/components/parameter-schema/form-mode/ParameterStringInput.vue @@ -1,291 +1,76 @@ <script setup lang="ts"> -import { computed, watch, onMounted, reactive, ref } from "vue"; -import { useBucketStore } from "@/stores/buckets"; -import { useS3ObjectStore } from "@/stores/s3objects"; -import { useResourceStore } from "@/stores/resources"; -import { Status } from "@/client/resource"; - -const bucketRepository = useBucketStore(); -const s3objectRepository = useS3ObjectStore(); -const resourceRepository = useResourceStore(); -const randomIDSuffix = Math.random().toString(16).substring(2, 8); +import { computed, type PropType, ref } from "vue"; +import type { ExtendedColors, SizeModifierType } from "@/types/PropTypes"; +const model = defineModel<string | undefined>({ required: true }); const props = defineProps({ parameter: { type: Object, required: true, validator(value: Record<string, never>) { - return "string" === value["type"] && value["enum"]; + return "string" === value["type"]; }, }, required: Boolean, - parameterName: { - type: String, - required: true, - }, - modelValue: { - type: String, - }, helpId: { type: String, }, - removeAdvanced: { - type: Boolean, - default: false, - }, - clowmResource: { - type: Boolean, - default: false, + sizeModifier: { + type: String as PropType<SizeModifierType>, }, + border: String as PropType<ExtendedColors>, + resourceParameter: Boolean, + allowSwitch: Boolean, }); const emit = defineEmits<{ - (e: "update:modelValue", value?: string): void; + (e: "disable-raw"): void; }>(); -const s3Path = reactive<{ - bucket: string; - key?: string; -}>({ - bucket: "", - key: undefined, +const fileOrResource = computed<boolean>(() => { + return ( + (props.resourceParameter || props.parameter["format"]) && props.allowSwitch + ); }); -const selectedResource = reactive<{ - resourceId: string; - resourceVersionIndex: number; -}>({ - resourceId: "", - resourceVersionIndex: 0, -}); - -const formState = reactive<{ - advancedInput: boolean; - stringVal?: string; -}>({ - advancedInput: false, - stringVal: undefined, -}); - -const stringInput = ref<HTMLInputElement | undefined>(undefined); -const pattern = computed<string>(() => props.parameter["pattern"]); -const dataFormat = computed<string | undefined>( - () => props.parameter["format"], -); -const dataPath = computed<boolean>(() => dataFormat.value != undefined); -const clowmResource = computed<boolean>(() => props.clowmResource ?? false); -const helpTextPresent = computed<boolean>(() => props.parameter["help_text"]); - -const filesInBucket = computed<string[]>(() => - (s3objectRepository.objectMapping[s3Path.bucket ?? ""] ?? []) - .filter((obj) => !obj.Key?.endsWith("/")) - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - .map((obj) => obj.Key!), -); - -const foldersInBucket = computed<string[]>(() => - (s3objectRepository.objectMapping[s3Path.bucket ?? ""] ?? []) - .filter((obj) => obj.Key != undefined) - .map((obj) => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - const parts = obj.Key!.split("/"); - return parts - .slice(0, parts.length - 1) - .map((part, index) => - parts.slice(0, index + 1).reduce((acc, val) => `${acc}/${val}`), - ); - }) - .flat() - .filter((val, index, array) => array.indexOf(val) === index), -); - -const filesAndFoldersInBucket = computed<string[]>(() => - filesInBucket.value.concat(foldersInBucket.value), -); - -const keyDataList = computed<string[]>(() => { - switch (dataFormat.value) { - case "file-path": - return filesInBucket.value; - case "directory-path": - return foldersInBucket.value; - case "path": - return filesAndFoldersInBucket.value; - default: - return []; +const dynamicCssClass = computed<string[]>(() => { + const cssClasses = []; + if (props.sizeModifier) { + cssClasses.push(`form-control-${props.sizeModifier}`); } -}); - -watch(s3Path, () => { - if (dataPath.value && !formState.advancedInput) { - updateStringFromS3(); + if (!helpTextPresent.value && !fileOrResource.value) { + cssClasses.push("rounded-end"); } -}); - -watch( - () => s3Path.bucket, - (newVal, oldVal) => { - if (newVal !== oldVal) { - updateKeysInBucket(newVal); - } - }, -); - -watch(() => formState.stringVal, updateValue); -watch(selectedResource, () => { - if (clowmResource.value && !formState.advancedInput) { - updateStringFromResource(); + if (props.border) { + cssClasses.push("border", `border-${props.border}`); } + return cssClasses; }); -watch( - () => props.modelValue, - (newVal) => { - if (formState.stringVal != newVal) { - formState.stringVal = newVal; - formState.advancedInput = true; - } - }, -); - -watch( - () => formState.advancedInput, - (newVal, oldValue) => { - if (newVal != oldValue && !newVal) { - if (clowmResource.value) { - updateStringFromResource(); - } else if (dataPath.value) { - updateStringFromS3(); - } - } - }, -); - -function updateValue() { - emit("update:modelValue", formState.stringVal); -} - -function updateStringFromS3() { - formState.stringVal = !s3Path.bucket - ? undefined - : `s3://${s3Path.bucket}${s3Path.key ? "/" + s3Path.key : ""}`; -} - -function updateStringFromResource() { - formState.stringVal = - resourceRepository.resourceMapping[selectedResource.resourceId]?.versions[ - selectedResource.resourceVersionIndex - ]?.cluster_path ?? undefined; -} - -function updateKeysInBucket(bucketName?: string) { - if (bucketName != null) { - s3objectRepository.fetchS3Objects( - bucketName, - bucketRepository.ownPermissions[bucketName]?.file_prefix ?? undefined, - ); - } -} - -onMounted(() => { - formState.stringVal = props.modelValue; - if (formState.stringVal) { - formState.advancedInput = true; - } -}); +const stringInput = ref<HTMLInputElement | undefined>(undefined); +const pattern = computed<string>(() => props.parameter["pattern"]); +const helpTextPresent = computed<boolean>(() => props.parameter["help_text"]); </script> <template> - <template v-if="clowmResource && !formState.advancedInput"> - <select - class="form-select border border-secondary" - :required="props.required" - v-model="selectedResource.resourceId" - > - <option selected disabled value="">Please select a resource</option> - <option - v-for="resource in resourceRepository.resources" - :key="resource.resource_id" - :value="resource.resource_id" - > - {{ resource.name }} - </option> - </select> - <select - class="form-select border border-secondary" - :class="{ 'rounded-end': props.removeAdvanced && !helpTextPresent }" - :required="props.required || selectedResource.resourceId != undefined" - v-model="selectedResource.resourceVersionIndex" - :disabled="selectedResource.resourceId.length === 0" - > - <option disabled>Please select a version</option> - <option - v-for="(version, index) in resourceRepository.resourceMapping[ - selectedResource.resourceId - ]?.versions ?? []" - :key="version.resource_version_id" - :value="index" - > - {{ version.release }} - {{ version.status === Status.LATEST ? "- Latest" : "" }} - </option> - </select> - </template> - <template v-else-if="dataPath && !formState.advancedInput"> - <select - class="form-select border border-secondary" - :required="props.required" - v-model="s3Path.bucket" - > - <option selected disabled value="">Please select a bucket</option> - <option - v-for="bucket in bucketRepository.ownBucketsAndFullPermissions" - :key="bucket" - :value="bucket" - > - {{ bucket }} - </option> - </select> - <input - class="form-control border-top border-secondary" - :list="'datalistOptions2' + randomIDSuffix" - :class="{ 'rounded-end': props.removeAdvanced && !helpTextPresent }" - placeholder="Type to search in bucket..." - :required="props.required && dataFormat === 'file-path'" - v-model="s3Path.key" - :pattern="pattern" - /> - <datalist :id="'datalistOptions2' + randomIDSuffix"> - <option v-for="obj in keyDataList" :value="obj" :key="obj" /> - </datalist> - </template> - <template v-else> - <input - ref="stringInput" - class="form-control border border-secondary" - :class="{ 'rounded-end': props.removeAdvanced && !helpTextPresent }" - type="text" - v-model="formState.stringVal" - :required="props.required" - :aria-describedby="props.helpId" - :pattern="pattern" - /> - </template> - <div v-if="(clowmResource || dataPath) && !props.removeAdvanced"> - <input - type="checkbox" - class="btn-check" - :id="'flexCheckDefault' + randomIDSuffix" - autocomplete="off" - v-model="formState.advancedInput" - /> - <label - class="btn btn-outline-secondary rounded-0" - :class="{ 'rounded-end': !helpTextPresent }" - :for="'flexCheckDefault' + randomIDSuffix" - >Advanced</label - > - </div> + <input + ref="stringInput" + class="form-control" + :class="dynamicCssClass" + type="text" + v-model="model" + :required="props.required" + :aria-describedby="props.helpId" + :pattern="pattern" + /> + <button + v-if="fileOrResource" + type="button" + class="btn btn-secondary" + @click="emit('disable-raw')" + > + Raw + </button> </template> <style scoped></style> diff --git a/src/components/resources/modals/UploadResourceInfoModal.vue b/src/components/resources/modals/UploadResourceInfoModal.vue index 4ea9f5d9c1fed60beef7a773859a84811aa0b337..6e2cefdf4276442a614cff647cea39639b1905cc 100644 --- a/src/components/resources/modals/UploadResourceInfoModal.vue +++ b/src/components/resources/modals/UploadResourceInfoModal.vue @@ -137,7 +137,7 @@ onMounted(() => { <bootstrap-modal :modalId="props.modalId" modal-label="Upload Resource Info Modal" - sizeModifier="lg" + sizeModifierModal="lg" :track-modal-value="resourceVersion?.resource_version_id" > <template #header>How to upload a resource to the cluster</template> diff --git a/src/components/workflows/WorkflowWithVersionsCard.vue b/src/components/workflows/WorkflowWithVersionsCard.vue index 1afe153268f3556139471f3abe4cf5d277dcd90a..d69290f4af2202deca6798ce34d38e7ccf2932c6 100644 --- a/src/components/workflows/WorkflowWithVersionsCard.vue +++ b/src/components/workflows/WorkflowWithVersionsCard.vue @@ -128,7 +128,7 @@ onMounted(() => { <div class="btn-group"> <button type="button" - class="btn btn-success" + class="btn btn-outline-success" :class="{ disabled: props.loading }" @click="emit('workflow-update-click', props.workflow)" data-bs-toggle="modal" @@ -138,8 +138,7 @@ onMounted(() => { </button> <button type="button" - class="btn btn-success dropdown-toggle dropdown-toggle-split" - style="filter: brightness(85%)" + class="btn btn-outline-success dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false" > @@ -325,6 +324,24 @@ onMounted(() => { >Update icon</a > </li> + <li> + <router-link + class="dropdown-item" + :to="{ + name: 'workflow-parameter-translation', + params: { + workflowId: props.workflow.workflow_id, + versionId: version.workflow_version_id, + }, + }" + > + <template v-if="version.parameter_extension" + >Update</template + > + <template v-else>Add</template> + Parameter Translation + </router-link> + </li> </ul> </td> </tr> diff --git a/src/router/workflowRoutes.ts b/src/router/workflowRoutes.ts index 5eb83dbb0a380052ba031e92b649b32165b5f32a..a0e896ace2c23cd89da536367b10d41500e8536c 100644 --- a/src/router/workflowRoutes.ts +++ b/src/router/workflowRoutes.ts @@ -80,7 +80,6 @@ export const workflowRoutes: RouteRecordRaw[] = [ props: (route) => ({ versionId: route.params.versionId, workflowId: route.params.workflowId, - activeTab: route.query.tab ?? "description", workflowModeId: route.query.workflowModeId ?? undefined, }), }, @@ -97,4 +96,14 @@ export const workflowRoutes: RouteRecordRaw[] = [ }, ], }, + { + path: "workflows/:workflowId/version/:versionId/parameters", + name: "workflow-parameter-translation", + component: () => + import("../views/workflows/CreateParameterTranslationView.vue"), + props: (route) => ({ + versionId: route.params.versionId, + workflowId: route.params.workflowId, + }), + }, ]; diff --git a/src/stores/resources.ts b/src/stores/resources.ts index 9cf76887aa3cb7021eef57a1bf56cbf0787a0c2c..61fb1e9f27fb68fc05f87587b2736712fe3a58cc 100644 --- a/src/stores/resources.ts +++ b/src/stores/resources.ts @@ -1,5 +1,6 @@ import { defineStore } from "pinia"; import type { + FileTree, ResourceIn, ResourceOut, ResourceVersionIn, @@ -16,6 +17,21 @@ import { import { useAuthStore } from "@/stores/users"; import { useNameStore } from "@/stores/names"; +function parseFileTree(parent: string, tree?: FileTree | null): string[] { + if (tree == undefined || tree.contents == undefined) { + return []; + } + let files: string[] = []; + const currentName = parent.length > 0 ? parent + tree.name + "/" : "/"; + for (const dir of tree.contents) { + files.push(currentName + dir.name); + if (dir.type === "directory") { + files = files.concat(parseFileTree(currentName, dir)); + } + } + return files; +} + export const useResourceStore = defineStore({ id: "resources", state: () => @@ -24,18 +40,42 @@ export const useResourceStore = defineStore({ ownResourceMapping: {}, reviewableResourceMapping: {}, syncRequestMapping: {}, + resourceTree: {}, + resourceTreeList: {}, __syncRequestsFetched: false, }) as { resourceMapping: Record<string, ResourceOut>; ownResourceMapping: Record<string, ResourceOut>; reviewableResourceMapping: Record<string, ResourceOut>; syncRequestMapping: Record<string, UserSynchronizationRequestOut>; + resourceTree: Record<string, FileTree | null>; + resourceTreeList: Record<string, string[]>; __syncRequestsFetched: boolean; }, getters: { resources(): ResourceOut[] { return Object.values(this.resourceMapping); }, + versionMapping(): Record<string, ResourceVersionOut> { + const mapping: Record<string, ResourceVersionOut> = {}; + for (const resource of this.resources) { + for (const version of resource.versions) { + mapping[version.resource_version_id] = version; + } + } + return mapping; + }, + getLatestVersion(): (resource_id: string) => string { + return (resource_id) => { + for (const version of this.resourceMapping[resource_id]?.versions ?? + []) { + if (version.status === Status.LATEST) { + return version.resource_version_id; + } + } + return ""; + }; + }, ownResources(): ResourceOut[] { return Object.values(this.ownResourceMapping); }, @@ -109,6 +149,32 @@ export const useResourceStore = defineStore({ return resources; }); }, + fetchResourceTree( + resource_id: string, + resource_version_id: string, + onFinally?: () => void, + ): Promise<FileTree> { + if (this.resourceTree[resource_version_id] === null) { + onFinally?.(); + } + return ResourceVersionService.resourceVersionResourceFileTree( + resource_version_id, + resource_id, + ) + .then((tree) => { + this.resourceTree[resource_version_id] = tree[0]; + this.resourceTreeList[resource_version_id] = parseFileTree( + "", + tree[0], + ); + return tree; + }) + .catch((err) => { + this.resourceTree[resource_version_id] = null; + return err; + }) + .finally(onFinally); + }, fetchReviewableResources(onFinally?: () => void): Promise<ResourceOut[]> { if (Object.keys(this.reviewableResourceMapping).length > 0) { onFinally?.(); diff --git a/src/stores/workflows.ts b/src/stores/workflows.ts index b094280840e4f9f43ae78d36e712c47d2e4b8e6e..d200f3ebe23b5a29c179ebce31d5e958c9ea92e1 100644 --- a/src/stores/workflows.ts +++ b/src/stores/workflows.ts @@ -2,6 +2,7 @@ import { defineStore } from "pinia"; import type { Body_Workflow_Version_upload_workflow_version_icon, IconUpdateOut, + ParameterExtension, WorkflowCredentialsIn, WorkflowIn, WorkflowModeOut, @@ -63,6 +64,15 @@ export const useWorkflowStore = defineStore({ } return mapping; }, + ownVersionMapping(): Record<string, WorkflowVersion> { + const mapping: Record<string, WorkflowVersion> = {}; + for (const workflow of this.ownWorkflows) { + for (const version of workflow.versions) { + mapping[version.workflow_version_id] = version; + } + } + return mapping; + }, getArbitraryWorkflow(): (wid: string) => Promise<WorkflowIn | undefined> { return (wid: string) => get(wid); }, @@ -71,6 +81,15 @@ export const useWorkflowStore = defineStore({ __addNameToMapping(key: string, value: string) { useNameStore().addNameToMapping(key, value); }, + fetchWorkflowVersion(wid: string, vid: string): Promise<WorkflowVersion> { + return WorkflowVersionService.workflowVersionGetWorkflowVersion( + vid, + wid, + ).then((version) => { + this.__addNameToMapping(version.workflow_version_id, version.version); + return version; + }); + }, fetchWorkflows(onFinally?: () => void): Promise<WorkflowOut[]> { if (Object.keys(this.workflowMapping).length > 0) { onFinally?.(); @@ -516,5 +535,88 @@ export const useWorkflowStore = defineStore({ } }); }, + updateWorkflowExtension( + workflow_id: string, + version_id: string, + extension: ParameterExtension, + ): Promise<WorkflowVersion> { + return WorkflowVersionService.workflowVersionUpdateWorkflowVersionParameterExtension( + workflow_id, + version_id, + extension, + ).then((version) => { + // Update version in workflowMapping + if (this.workflowMapping[workflow_id] == undefined) { + this.fetchWorkflow(workflow_id, false); + } else { + const versionIndex1 = this.workflowMapping[ + workflow_id + ].versions.findIndex( + (version) => version.workflow_version_id == version_id, + ); + if (versionIndex1 > -1) { + this.workflowMapping[workflow_id].versions[versionIndex1] = version; + } + } + + // Update version in comprehensiveWorkflowMapping + if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) { + this.fetchWorkflow(workflow_id, true); + } else { + const versionIndex2 = this.comprehensiveWorkflowMapping[ + workflow_id + ].versions.findIndex( + (version) => version.workflow_version_id == version_id, + ); + if (versionIndex2 > -1) { + this.comprehensiveWorkflowMapping[workflow_id].versions[ + versionIndex2 + ] = version; + } + } + return version; + }); + }, + deleteWorkflowExtension( + workflow_id: string, + version_id: string, + ): Promise<void> { + return WorkflowVersionService.workflowVersionDeleteWorkflowVersionParameterExtension( + workflow_id, + version_id, + ).then(() => { + // Update version in workflowMapping + if (this.workflowMapping[workflow_id] == undefined) { + this.fetchWorkflow(workflow_id, false); + } else { + const versionIndex1 = this.workflowMapping[ + workflow_id + ].versions.findIndex( + (version) => version.workflow_version_id == version_id, + ); + if (versionIndex1 > -1) { + this.workflowMapping[workflow_id].versions[ + versionIndex1 + ].parameter_extension = undefined; + } + } + + // Update version in comprehensiveWorkflowMapping + if (this.comprehensiveWorkflowMapping[workflow_id] == undefined) { + this.fetchWorkflow(workflow_id, true); + } else { + const versionIndex2 = this.comprehensiveWorkflowMapping[ + workflow_id + ].versions.findIndex( + (version) => version.workflow_version_id == version_id, + ); + if (versionIndex2 > -1) { + this.comprehensiveWorkflowMapping[workflow_id].versions[ + versionIndex2 + ].parameter_extension = undefined; + } + } + }); + }, }, }); diff --git a/src/types/PropTypes.ts b/src/types/PropTypes.ts new file mode 100644 index 0000000000000000000000000000000000000000..0873c6240a53ef06c1e73f5a1a35e8cf7d82b673 --- /dev/null +++ b/src/types/PropTypes.ts @@ -0,0 +1,20 @@ +export type SizeModifierType = "sm" | "lg"; + +export type Colors = + | "primary" + | "secondary" + | "success" + | "warning" + | "danger" + | "info" + | "black" + | "white"; + +export type ExtendedColors = + | Colors + | "primary-subtle" + | "secondary-subtle" + | "success-subtle" + | "warning-subtle" + | "danger-subtle" + | "info-subtle"; diff --git a/src/types/WorkflowParameters.ts b/src/types/WorkflowParameters.ts index 0fd1398d7ac811443f2966fdf3bc3f24098b492f..7201b000114dd8d46c704e8cf68a8526d61d3b0e 100644 --- a/src/types/WorkflowParameters.ts +++ b/src/types/WorkflowParameters.ts @@ -11,6 +11,6 @@ export type WorkflowMetaParameters = { }; export type TemporaryParams = { - params: WorkflowParameters; - metaParams: WorkflowMetaParameters; + params?: WorkflowParameters; + metaParams?: WorkflowMetaParameters; }; diff --git a/src/views/workflows/CreateClowmInfoView.vue b/src/views/workflows/CreateClowmInfoView.vue index 4c4261f4edd08479d4407c5c4ca52c3035185e38..a709e7d571208aa30a0fdf4a905f4eb4bec9dff2 100644 --- a/src/views/workflows/CreateClowmInfoView.vue +++ b/src/views/workflows/CreateClowmInfoView.vue @@ -7,6 +7,7 @@ import FontAwesomeIcon from "@/components/FontAwesomeIcon.vue"; import { useWorkflowStore } from "@/stores/workflows"; import { DocumentationEnum } from "@/client/workflow"; import DraggableLists from "@/components/DraggableLists.vue"; +import ParameterInput from "@/components/parameter-schema/form-mode/ParameterInput.vue"; const props = defineProps<{ workflow_id?: string; @@ -362,21 +363,25 @@ onMounted(() => { on the user or execution environment. </p> <div - class="d-flex flex-wrap overflow-y-auto p-1 border rounded border-dashed mb-2" + class="d-flex flex-wrap overflow-y-auto p-1 border border-bottom-0 rounded-top border-dashed" style="max-height: 30vh" - v-if="parameterPools.examples.length > 0" > <b class="ms-1 w-100">Workflow parameters:</b> - <div - class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container" - v-for="(param, index) in parameterPools.examples" - :key="param" - @click="addExampleParameter(param, index)" - > - {{ param }} + <template v-if="parameterPools.examples.length > 0"> + <div + class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container" + v-for="(param, index) in parameterPools.examples" + :key="param" + @click="addExampleParameter(param, index)" + > + {{ param }} + </div> + </template> + <div v-else class="px-2 text-secondary m-1"> + <i>Empty</i> </div> </div> - <table class="table table-bordered"> + <table class="table table-bordered align-middle"> <thead> <tr> <th scope="col"><b>Parameter</b></th> @@ -390,73 +395,14 @@ onMounted(() => { > <td style="width: 10%">{{ param }}</td> <td class="d-flex justify-content-between align-items-center"> - <input - v-if=" - getParameterType(param) === 'number' || - getParameterType(param) === 'integer' - " - type="number" - class="form-control form-control-sm flex-grow" - v-model="infoState.exampleParameters[param]" - :step="getParameterType(param) === 'integer' ? 1 : 0.0001" - :min="parameterSchema[param]['minimum']" - :max="parameterSchema[param]['maximum']" - /> - <div - v-else-if="getParameterType(param) === 'boolean'" - class="flex-grow" - > - <div class="form-check form-check-inline"> - <label - class="form-check-label" - :for="'trueOption' + param.replace(/\./g, '')" - >True</label - > - <input - class="form-check-input" - type="radio" - :name="'inlineRadioOptions' + param.replace(/\./g, '')" - :id="'trueOption' + param.replace(/\./g, '')" - :value="true" - v-model="infoState.exampleParameters[param]" - /> - </div> - <div class="form-check form-check-inline"> - <input - class="form-check-input" - type="radio" - :name="'inlineRadioOptions' + param.replace(/\./g, '')" - :id="'falseOption' + param.replace(/\./g, '')" - :value="false" - v-model="infoState.exampleParameters[param]" - /> - <label - class="form-check-label" - :for="'falseOption' + param.replace(/\./g, '')" - >False</label - > - </div> + <div class="flex-fill input-group"> + <parameter-input + :parameter="parameterSchema[param]" + v-model="infoState.exampleParameters[param]" + size-modifier="sm" + force-raw-file + /> </div> - <select - v-else-if="parameterSchema[param]?.['enum']" - class="form-select form-select-sm flex-grow" - v-model="infoState.exampleParameters[param]" - > - <option - v-for="option in parameterSchema[param]?.['enum']" - :key="option" - :value="option" - > - {{ option }} - </option> - </select> - <input - v-else - type="text" - class="form-control form-control-sm flex-grow" - v-model="infoState.exampleParameters[param]" - :pattern="parameterSchema[param]?.['pattern']" - /> <button type="button" class="btn btn-outline-danger btn-sm ms-2" diff --git a/src/views/workflows/CreateParameterTranslationView.vue b/src/views/workflows/CreateParameterTranslationView.vue new file mode 100644 index 0000000000000000000000000000000000000000..fcc3083fe52935160a8539af1764baad5c96544b --- /dev/null +++ b/src/views/workflows/CreateParameterTranslationView.vue @@ -0,0 +1,660 @@ +<script setup lang="ts"> +import { useNameStore } from "@/stores/names"; +import { useWorkflowStore } from "@/stores/workflows"; +import { computed, onMounted, reactive, ref, watch } from "vue"; +import { DocumentationEnum, type ParameterExtension } from "@/client/workflow"; +import type { ClowmInfo } from "@/types/ClowmInfo"; +import ParameterInput from "@/components/parameter-schema/form-mode/ParameterInput.vue"; +import BootstrapToast from "@/components/BootstrapToast.vue"; +import { Toast } from "bootstrap"; +import DeleteModal from "@/components/modals/DeleteModal.vue"; + +// Props +// ============================================================================= +const props = defineProps<{ + versionId: string; + workflowId: string; +}>(); + +// HTML refs +// ============================================================================= +const parameterExtensionForm = ref<HTMLFormElement | null>(null); +let successToast: Toast | null = null; +let deleteToast: Toast | null = null; + +// Repositories +// ============================================================================= +const nameRepository = useNameStore(); +const workflowRepository = useWorkflowStore(); + +// Reactive State +// ============================================================================= +const parameterState = reactive<{ + loading: boolean; + makingRequest: boolean; + extension: ParameterExtension; + resourceParametersDefault: Set<string>; + resourceParametersMapping: Set<string>; + mappingParameterValues: Record<string, string>; + formValidated: boolean; +}>({ + loading: true, + makingRequest: false, + extension: {}, + resourceParametersDefault: new Set(), + resourceParametersMapping: new Set(), + mappingParameterValues: {}, + formValidated: false, +}); + +const parameterPools = reactive<{ + defaults: string[]; + mapping: string[]; +}>({ + defaults: [], + mapping: [], +}); + +// Watchers +// ============================================================================= +watch( + () => + workflowRepository.documentationFiles[props.versionId]?.parameter_schema, + (newVal, old) => { + if (newVal != old && newVal) { + updateParameterPools(newVal); + } + }, +); + +watch( + () => workflowRepository.documentationFiles[props.versionId]?.clowm_info, + (newVal, old) => { + if (newVal != old && newVal) { + updateResourceParameters(newVal); + } + }, +); + +// Computed States +// ============================================================================= +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const parameterSchema = computed<Record<string, Record<string, any>>>(() => { + const schema = + workflowRepository.documentationFiles[props.versionId ?? ""] + ?.parameter_schema; + const a = schema?.["properties"] ?? {}; + for (const group in schema?.["definitions"] ?? {}) { + for (const param in schema?.["definitions"]?.[group]?.["properties"] ?? + {}) { + a[param] = schema["definitions"][group]["properties"][param]; + } + } + return a; +}); + +// Functions +// ============================================================================= +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function updateParameterPools(newVal?: object) { + if (newVal) { + const parameters = extractParameterList(newVal); + parameterPools.defaults = parameters.slice(); + parameterPools.mapping = parameters.filter( + (param) => + parameterSchema.value?.[param]?.["type"] !== "boolean" && + !parameterSchema.value?.[param]?.["enum"], + ); + } + if ( + workflowRepository.ownVersionMapping[props.versionId]?.parameter_extension + ) { + parameterPools.defaults = parameterPools.defaults.filter( + (param) => + workflowRepository.ownVersionMapping[props.versionId] + ?.parameter_extension?.defaults?.[param] == undefined, + ); + parameterPools.mapping = parameterPools.mapping.filter( + (param) => + workflowRepository.ownVersionMapping[props.versionId] + ?.parameter_extension?.defaults?.[param] == undefined, + ); + } +} + +function updateResourceParameters(newVal?: ClowmInfo) { + newVal?.resourceParameters?.forEach((param) => { + parameterState.resourceParametersDefault.add(param); + parameterState.resourceParametersMapping.add(param); + }); +} + +function submitForm() { + if (parameterState.extension?.mapping) { + for (const key of Object.keys(parameterState.extension.mapping)) { + if (Object.keys(parameterState.extension?.mapping[key]).length === 0) { + delete parameterState.extension?.mapping[key]; + parameterPools.mapping.push(key); + } + } + } + parameterState.formValidated = true; + if (parameterExtensionForm.value?.checkValidity()) { + parameterState.makingRequest = true; + workflowRepository + .updateWorkflowExtension( + props.workflowId, + props.versionId, + parameterState.extension, + ) + .then(() => { + successToast?.show(); + }) + .finally(() => { + parameterState.makingRequest = false; + }); + } +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function extractParameterList(schema: Record<string, any>): string[] { + const groupedParameters = Object.keys(schema["definitions"] ?? {}).reduce( + (acc: string[], val) => [ + ...acc, + ...Object.keys(schema["definitions"][val]["properties"]), + ], + [], + ); + const singleParameters = Object.keys(schema["properties"] ?? {}); + return [...groupedParameters, ...singleParameters]; +} + +function getParameterType(param: string): string | undefined { + return parameterSchema.value[param]?.["type"]; +} + +function getParameterSchemaDefault( + param: string, +): string | boolean | number | undefined { + return parameterSchema.value[param]?.["default"]; +} + +function getParamDefault(param: string): string | boolean | number { + switch (getParameterType(param)) { + case "integer": { + return getParameterSchemaDefault(param) ?? 0; + } + case "number": { + return getParameterSchemaDefault(param) ?? 0; + } + case "boolean": { + return getParameterSchemaDefault(param) ?? true; + } + case "string": { + if (parameterState.resourceParametersDefault.has(param)) { + return ""; + } + return ( + getParameterSchemaDefault(param) ?? + parameterSchema.value[param]?.["enum"]?.[0] ?? + "" + ); + } + default: { + return ""; + } + } +} + +function addDefaultParameter(param: string, index: number) { + parameterState.formValidated = false; + if (parameterState.extension.defaults == undefined) { + parameterState.extension.defaults = {}; + } + parameterPools.defaults.splice(index, 1); + parameterState.extension.defaults[param] = getParamDefault(param); +} + +function makeResourceParameterDefault(param: string) { + parameterState.formValidated = false; + parameterState.resourceParametersDefault.add(param); + parameterState.extension.defaults![param] = ""; +} + +function makeResourceParameterMapping(param: string, val: string) { + if (parameterState.extension.mapping?.[param]?.[val]) { + parameterState.formValidated = false; + parameterState.resourceParametersMapping.add(param); + parameterState.extension.mapping[param][val] = ""; + } +} + +function deleteDefaultParameter(param: string) { + if ( + !workflowRepository.documentationFiles[ + props.versionId + ]?.clowm_info?.resourceParameters?.includes(param) + ) { + parameterState.resourceParametersDefault.delete(param); + } + delete parameterState.extension.defaults?.[param]; + parameterPools.defaults.push(param); + if (Object.keys(parameterState.extension.defaults ?? {}).length === 0) { + parameterState.extension.defaults = undefined; + } +} + +function addMappingParameter(param: string, index: number) { + parameterState.formValidated = false; + if (parameterState.extension.mapping == undefined) { + parameterState.extension.mapping = {}; + } + if (parameterState.extension.mapping[param] == undefined) { + parameterState.extension.mapping[param] = {}; + } + parameterState.mappingParameterValues[param] = ""; + if (index > -1) { + parameterPools.mapping.splice(index, 1); + } +} + +function addMappingParameterValue(param: string, val: string) { + parameterState.formValidated = false; + if (parameterState.extension.mapping?.[param] != undefined) { + parameterState.extension.mapping[param][val] = getParamDefault(param) as + | string + | number; + parameterState.mappingParameterValues[param] = ""; + } +} + +function deleteMappingParameterValue(param: string, val: string) { + if (parameterState.extension.mapping?.[param]?.[val] != undefined) { + delete parameterState.extension.mapping[param][val]; + } +} + +function deleteMappingParameter(param: string) { + if ( + !workflowRepository.documentationFiles[ + props.versionId + ]?.clowm_info?.resourceParameters?.includes(param) + ) { + parameterState.resourceParametersMapping.delete(param); + } + delete parameterState.extension.mapping?.[param]; + delete parameterState.mappingParameterValues[param]; + parameterPools.mapping.push(param); + if (Object.keys(parameterState.extension.mapping ?? {}).length === 0) { + parameterState.extension.mapping = undefined; + } +} + +function deleteParameterExtension() { + parameterState.makingRequest = true; + workflowRepository + .deleteWorkflowExtension(props.workflowId, props.versionId) + .then(() => { + parameterState.extension = {}; + updateParameterPools( + workflowRepository.documentationFiles[props.versionId] + ?.parameter_schema, + ); + updateResourceParameters( + workflowRepository.documentationFiles[props.versionId]?.clowm_info, + ); + deleteToast?.show(); + }) + .finally(() => { + parameterState.makingRequest = false; + }); +} + +// Lifecycle Events +// ============================================================================= +onMounted(() => { + successToast = new Toast("#save-parameter-extension-success-toast"); + deleteToast = new Toast("#delete-parameter-extension-success-toast"); + workflowRepository.fetchWorkflow(props.workflowId, true, () => { + parameterState.extension = + workflowRepository.ownVersionMapping[props.versionId] + ?.parameter_extension ?? {}; + for (const param of Object.keys(parameterState.extension?.mapping ?? {})) { + for (const paramOption of Object.keys( + parameterState.extension?.mapping?.[param] ?? {}, + )) { + if ( + typeof parameterState.extension?.mapping?.[param]?.[paramOption] === + "object" + ) { + parameterState.resourceParametersMapping.add(param); + } + } + } + workflowRepository + .fetchWorkflowDocumentation( + props.workflowId, + props.versionId, + DocumentationEnum.PARAMETER_SCHEMA, + workflowRepository.ownVersionMapping[props.versionId]?.modes?.[0], + ) + .then(() => + workflowRepository.fetchWorkflowDocumentation( + props.workflowId, + props.versionId, + DocumentationEnum.CLOWM_INFO, + workflowRepository.ownVersionMapping[props.versionId]?.modes?.[0], + ), + ) + .finally(() => { + parameterState.loading = false; + updateParameterPools( + workflowRepository.documentationFiles[props.versionId] + ?.parameter_schema, + ); + updateResourceParameters( + workflowRepository.documentationFiles[props.versionId]?.clowm_info, + ); + }); + }); +}); +</script> + +<template> + <bootstrap-toast + toast-id="save-parameter-extension-success-toast" + color-class="success" + > + <template #default>Successfully saved Parameter Extension</template> + <template #body> + <div class="d-grid gap-2"> + <router-link + class="btn btn-info btn-sm" + role="button" + :to="{ + name: 'workflow-start', + params: { + versionId: props.versionId, + workflowId: props.workflowId, + }, + query: { + workflowModeId: + workflowRepository.ownVersionMapping[props.versionId] + ?.modes?.[0], + viewMode: 'expert', + }, + }" + >View + </router-link> + </div> + </template> + </bootstrap-toast> + <bootstrap-toast + toast-id="delete-parameter-extension-success-toast" + color-class="success" + > + Successfully deleted Parameter Extension + </bootstrap-toast> + <delete-modal + v-if=" + workflowRepository.ownVersionMapping[props.versionId]?.parameter_extension + " + modal-id="delete-parameter-extension-modal" + :object-name-delete="`parameter extension of ${nameRepository.getName(props.workflowId)}@${nameRepository.getName(props.versionId)}`" + @confirm-delete="deleteParameterExtension" + /> + <div class="d-flex justify-content-between border-bottom mb-4 pb-2"> + <h2 class="w-fit"> + Add parameter metadata to + {{ nameRepository.getName(props.workflowId) }}@{{ + nameRepository.getName(props.versionId) + }} + </h2> + <div + v-if=" + workflowRepository.ownVersionMapping[props.versionId] + ?.parameter_extension + " + > + <button + type="button" + class="btn btn-danger" + data-bs-toggle="modal" + data-bs-target="#delete-parameter-extension-modal" + :disabled="parameterState.loading || parameterState.makingRequest" + > + Delete + </button> + </div> + </div> + <div v-if="parameterState.loading" class="d-flex justify-content-center"> + <div class="spinner-border" role="status"> + <span class="visually-hidden">Loading...</span> + </div> + </div> + <form + v-else + ref="parameterExtensionForm" + id="parameter-extension-form" + class="mb-2" + :class="{ 'was-validated': parameterState.formValidated }" + novalidate + @submit.prevent="submitForm()" + > + <h3>CloWM instance specific default parameters</h3> + <div + class="d-flex flex-wrap overflow-y-auto p-1 border border-bottom-0 rounded-top border-dashed" + style="max-height: 30vh" + > + <b class="ms-1 w-100">Workflow parameters:</b> + <template v-if="parameterPools.defaults.length > 0"> + <div + class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container" + v-for="(param, index) in parameterPools.defaults" + :key="param" + @click="addDefaultParameter(param, index)" + > + {{ param }} + </div> + </template> + <div v-else class="px-2 text-secondary m-1"> + <i>Empty</i> + </div> + </div> + <table class="table table-bordered align-middle"> + <thead> + <tr> + <th scope="col"><b>Parameter</b></th> + <th scope="col"><b>Value</b></th> + </tr> + </thead> + <tbody v-if="parameterState.extension.defaults" id="defaultParamsTable"> + <tr + v-for="param in Object.keys(parameterState.extension.defaults)" + :key="param" + > + <td style="width: 10%">{{ param }}</td> + <td class="d-flex justify-content-between align-items-center"> + <div class="flex-fill input-group"> + <parameter-input + :parameter="parameterSchema[param]" + v-model="parameterState.extension.defaults[param]" + size-modifier="sm" + :resource-parameter=" + parameterState.resourceParametersDefault.has(param) + " + force-raw-file + /> + </div> + <button + v-if=" + !parameterState.resourceParametersDefault.has(param) && + getParameterType(param) === 'string' + " + class="btn btn-primary btn-sm ms-2" + type="button" + @click="makeResourceParameterDefault(param)" + > + Resource + </button> + <button + type="button" + class="btn btn-outline-danger btn-sm ms-2" + @click="deleteDefaultParameter(param)" + > + Remove + </button> + </td> + </tr> + </tbody> + </table> + <h3>Parameter Translation</h3> + <div + class="d-flex flex-wrap overflow-y-auto p-1 border rounded-top border-dashed" + style="max-height: 30vh" + > + <b class="ms-1 w-100">Eligible workflow parameters:</b> + <template v-if="parameterPools.mapping.length > 0"> + <div + class="w-fit border px-2 rounded cursor-pointer m-1 parameter-container" + v-for="(param, index) in parameterPools.mapping" + :key="param" + @click="addMappingParameter(param, index)" + > + {{ param }} + </div> + </template> + <div v-else class="px-2 text-secondary m-1"> + <i>Empty</i> + </div> + </div> + <div v-if="parameterState.extension.mapping" class="p-0"> + <div + v-for="param in Object.keys(parameterState.extension.mapping)" + :key="param" + class="p-2 border border-top-0" + > + <div class="d-flex justify-content-between mb-2"> + <code class="fs-6 fw-bold bg-secondary-subtle rounded p-1" + >--{{ param }}</code + > + <button + type="button" + class="btn btn-outline-danger btn-sm" + @click="deleteMappingParameter(param)" + > + Remove + </button> + </div> + <div class="d-flex mb-5"> + <div class="me-2"> + <button + type="button" + class="btn btn-primary" + :disabled=" + parameterState.mappingParameterValues[param]?.length === 0 + " + @click=" + addMappingParameterValue( + param, + parameterState.mappingParameterValues[param], + ) + " + > + Add Option + </button> + </div> + <input + type="text" + class="form-control flex-fill w-fit" + v-model="parameterState.mappingParameterValues[param]" + /> + </div> + <template v-if="parameterState.extension.mapping[param]"> + <div + v-for="key in Object.keys(parameterState.extension.mapping[param])" + :key="key" + class="mb-5 position-relative" + > + <code + class="p-1 position-absolute top-0 start-0 pt-0 rounded-top border-bottom-0 border border-secondary-subtle bla" + >{{ key }}</code + > + <div class="position-absolute top-0 end-0 bla"> + <span + v-if="!parameterState.resourceParametersMapping.has(param)" + class="p-1 me-2 rounded-top border-bottom-0 border pseudo-primary-btn border-primary-subtle cursor-pointer" + @click="makeResourceParameterMapping(param, key)" + >Resource</span + > + <span + class="p-1 rounded-top border-bottom-0 border pseudo-danger-btn border-danger-subtle cursor-pointer" + @click="deleteMappingParameterValue(param, key)" + >Remove</span + > + </div> + <div class="input-group"> + <parameter-input + :parameter="parameterSchema[param]" + force-raw-file + required + size-modifier="sm" + border="secondary-subtle" + v-model="parameterState.extension.mapping[param][key]" + :resource-parameter=" + parameterState.resourceParametersMapping.has(param) + " + /> + </div> + </div> + </template> + </div> + </div> + </form> + <div class="d-grid gap-2"> + <button + type="submit" + class="btn btn-success btn-lh mt-3" + form="parameter-extension-form" + :disabled=" + parameterState.loading || + parameterState.makingRequest || + Object.keys(parameterState.extension).length === 0 + " + > + Save + </button> + </div> +</template> + +<style scoped> +.parameter-container:hover { + background: var(--bs-secondary-bg-subtle); +} + +.pseudo-danger-btn { + color: var(--bs-danger); + background-color: var(--bs-white); +} + +.pseudo-danger-btn:hover { + color: var(--bs-white); + background-color: var(--bs-danger); + border-color: var(--bs-danger); +} + +.pseudo-primary-btn { + color: var(--bs-primary); + background-color: var(--bs-white); +} + +.pseudo-primary-btn:hover { + color: var(--bs-white); + background-color: var(--bs-primary); + border-color: var(--bs-primary); +} + +.bla { + transform: translateY(-90%) !important; +} +</style> diff --git a/src/views/workflows/MyWorkflowsView.vue b/src/views/workflows/MyWorkflowsView.vue index 34fb0c0f219fcbc87098098d20cfe6bc410e3764..513a18d61612882987b6f3cdf133fe6522bd26be 100644 --- a/src/views/workflows/MyWorkflowsView.vue +++ b/src/views/workflows/MyWorkflowsView.vue @@ -1,5 +1,5 @@ <script setup lang="ts"> -import { onMounted, reactive } from "vue"; +import { computed, onMounted, reactive } from "vue"; import type { WorkflowOut, WorkflowVersion } from "@/client/workflow"; import { Status } from "@/client/workflow"; import WorkflowWithVersionsCard from "@/components/workflows/WorkflowWithVersionsCard.vue"; @@ -53,6 +53,12 @@ const workflowsState = reactive<{ }, }); +const sortedWorkflows = computed<WorkflowOut[]>(() => { + const temp = [...workflowRepository.ownWorkflows]; + temp.sort((a, b) => (a.name.toLowerCase() > b.name.toLowerCase() ? 1 : -1)); + return temp; +}); + function workflowUpdateClicked(workflow: WorkflowOut) { workflowsState.updateWorkflow = workflow; } @@ -127,11 +133,11 @@ onMounted(() => { </div> <div v-if="!workflowsState.loading"> <card-transition-group - v-if="workflowRepository.ownWorkflows.length > 0" + v-if="sortedWorkflows.length > 0" class="d-flex flex-wrap align-items-center justify-content-between mt-5" > <workflow-with-versions-card - v-for="workflow in workflowRepository.ownWorkflows" + v-for="workflow in sortedWorkflows" :key="workflow.workflow_id" :workflow="workflow" :loading="false" diff --git a/src/views/workflows/StartWorkflowView.vue b/src/views/workflows/StartWorkflowView.vue index 006784fdd60ff0dbfcae46b38de745fa242201f7..ee6c3cf5081199f6d24c019038c9f365e755bdd3 100644 --- a/src/views/workflows/StartWorkflowView.vue +++ b/src/views/workflows/StartWorkflowView.vue @@ -123,7 +123,6 @@ onMounted(() => { </template> </bootstrap-toast> <parameter-schema-form-component - :workflow-version-id="versionId" :schema="versionState.parameterSchema" :loading="versionState.loading" allow-notes @@ -134,6 +133,10 @@ onMounted(() => { DocumentationEnum.CLOWM_INFO ] " + :parameter-extension=" + workflowRepository.versionMapping[versionId]?.parameter_extension ?? + undefined + " /> </template> diff --git a/tsconfig.json b/tsconfig.json index 3714ea8b5910a518a1b1eb1ef16061ac986a45d4..508ccb807ef68c2ebafee5bfc71d6ab098825b00 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,6 @@ { "extends": [ - "@tsconfig/node18/tsconfig.json", + "@tsconfig/node20/tsconfig.json", "@vue/tsconfig/tsconfig.json" ], "include": [