From 6008e96c62e6f249e6b360e0597ba4edf49c9eb8 Mon Sep 17 00:00:00 2001 From: Ralf Aron Date: Tue, 16 Jan 2024 13:52:57 +0100 Subject: [PATCH] prettier enabled --- .eslintrc.json | 64 +--- .prettierignore | 9 + .prettierrc.json | 17 + .vscode/settings.json | 5 +- package-lock.json | 354 ++++++++++-------- package.json | 8 +- projects/aas-lib/.eslintrc.json | 88 +++-- projects/aas-lib/src/lib/aas-lib.module.ts | 10 +- .../src/lib/aas-table/aas-table.actions.ts | 30 +- .../src/lib/aas-table/aas-table.component.ts | 46 ++- .../src/lib/aas-table/aas-table.effects.ts | 52 ++- .../src/lib/aas-table/aas-table.reducer.ts | 69 +--- .../src/lib/aas-table/aas-table.selectors.ts | 26 +- .../src/lib/aas-table/aas-table.state.ts | 6 +- .../src/lib/aas-tree/aas-tree-api.service.ts | 36 +- .../src/lib/aas-tree/aas-tree-search.ts | 78 ++-- .../src/lib/aas-tree/aas-tree.actions.ts | 31 +- .../src/lib/aas-tree/aas-tree.component.ts | 172 +++++---- .../src/lib/aas-tree/aas-tree.reducer.ts | 128 +++---- .../src/lib/aas-tree/aas-tree.selectors.ts | 24 +- .../src/lib/aas-tree/aas-tree.state.ts | 12 +- .../operation-call-form.component.html | 2 +- .../operation-call-form.component.ts | 34 +- .../show-image-form.component.html | 2 +- .../show-image-form.component.ts | 10 +- .../show-video-form.component.html | 2 +- .../show-video-form.component.ts | 10 +- .../aas-lib/src/lib/auth/auth-api.service.ts | 10 +- .../aas-lib/src/lib/auth/auth.component.html | 44 +-- .../aas-lib/src/lib/auth/auth.component.ts | 19 +- .../aas-lib/src/lib/auth/auth.interceptor.ts | 4 +- projects/aas-lib/src/lib/auth/auth.service.ts | 66 ++-- .../auth/login-form/login-form.component.ts | 53 +-- .../profile-form/profile-form.component.ts | 20 +- .../register-form/register-form.component.ts | 15 +- projects/aas-lib/src/lib/clipboard.service.ts | 13 +- projects/aas-lib/src/lib/convert.ts | 3 +- .../customer-feedback.actions.ts | 11 +- .../customer-feedback.component.ts | 77 ++-- .../customer-feedback.reducer.ts | 26 +- .../customer-feedback.selectors.ts | 2 +- .../customer-feedback.state.ts | 2 +- .../digital-nameplate.component.ts | 38 +- projects/aas-lib/src/lib/document.service.ts | 6 +- projects/aas-lib/src/lib/download.service.ts | 75 ++-- .../library-table/library-table.component.ts | 11 +- .../aas-lib/src/lib/localize/culture-info.ts | 2 +- .../src/lib/localize/localize.component.html | 21 +- .../src/lib/localize/localize.component.ts | 25 +- projects/aas-lib/src/lib/max-length.pipe.ts | 4 +- .../message-table/massage-table.reducer.ts | 22 +- .../message-table/message-table.actions.ts | 12 +- .../message-table/message-table.component.ts | 64 ++-- .../message-table/message-table.selectors.ts | 2 +- .../lib/message-table/message-table.state.ts | 2 +- .../src/lib/notify/notify.component.ts | 7 +- .../aas-lib/src/lib/notify/notify.service.ts | 38 +- .../aas-lib/src/lib/score/score.component.ts | 6 +- .../secured-image/secured-image.component.ts | 9 +- .../src/lib/sortable-header.directive.ts | 12 +- .../submodel-template/submodel-template.ts | 6 +- .../aas-lib/src/lib/types/aas-query-params.ts | 6 +- projects/aas-lib/src/lib/types/environment.ts | 2 +- projects/aas-lib/src/lib/types/errors.ts | 2 +- projects/aas-lib/src/lib/types/info.ts | 4 +- .../aas-lib/src/lib/types/message-entry.ts | 2 +- .../aas-lib/src/lib/types/online-state.ts | 2 +- projects/aas-lib/src/lib/types/view-mode.ts | 4 +- .../src/lib/types/view-query-params.ts | 6 +- .../src/lib/web-socket-factory.service.ts | 4 +- projects/aas-lib/src/lib/window.service.ts | 12 +- .../assets/test-web-socket-factory.service.ts | 2 +- projects/aas-portal/.eslintrc.json | 88 +++-- projects/aas-portal/package.json | 4 +- .../aas-portal/src/app/aas/aas-api.service.ts | 16 +- .../aas-portal/src/app/aas/aas.actions.ts | 27 +- .../aas-portal/src/app/aas/aas.component.ts | 247 +++++++----- .../aas-portal/src/app/aas/aas.effects.ts | 14 +- .../aas-portal/src/app/aas/aas.reducer.ts | 38 +- .../aas-portal/src/app/aas/aas.selectors.ts | 6 +- projects/aas-portal/src/app/aas/aas.state.ts | 8 +- .../src/app/aas/can-activate-aas.guard.ts | 22 +- .../src/app/aas/command-handler.service.ts | 21 +- .../src/app/aas/commands/delete-command.ts | 36 +- .../app/aas/commands/new-element-command.ts | 28 +- .../aas/commands/update-element-command.ts | 10 +- .../edit-element-form.component.html | 2 +- .../edit-element-form.component.ts | 35 +- .../new-element-form.component.html | 2 +- .../new-element-form.component.ts | 29 +- .../src/app/about/about.component.ts | 14 +- .../src/app/about/server-api.service.ts | 17 +- .../aas-portal/src/app/app-routing.module.ts | 8 +- projects/aas-portal/src/app/app.component.ts | 4 +- projects/aas-portal/src/app/app.module.ts | 29 +- projects/aas-portal/src/app/configuration.ts | 2 +- .../commands/add-new-page-command.ts | 13 +- .../dashboard/commands/dashboard-command.ts | 33 +- .../dashboard/commands/delete-item-command.ts | 17 +- .../dashboard/commands/delete-page-command.ts | 15 +- .../dashboard/commands/move-down-command.ts | 19 +- .../dashboard/commands/move-left-command.ts | 19 +- .../dashboard/commands/move-right-command.ts | 19 +- .../app/dashboard/commands/move-up-command.ts | 20 +- .../dashboard/commands/rename-page-command.ts | 15 +- .../commands/set-chart-type-command.ts | 57 +-- .../dashboard/commands/set-color-command.ts | 17 +- .../dashboard/commands/set-min-max-command.ts | 17 +- .../app/dashboard/dashboard-api.service.ts | 8 +- .../src/app/dashboard/dashboard.actions.ts | 41 +- .../app/dashboard/dashboard.component.html | 2 +- .../src/app/dashboard/dashboard.component.ts | 259 +++++++------ .../src/app/dashboard/dashboard.reducer.ts | 59 +-- .../src/app/dashboard/dashboard.selectors.ts | 21 +- .../src/app/dashboard/dashboard.service.ts | 93 +++-- .../src/app/dashboard/dashboard.state.ts | 8 +- .../aas-portal/src/app/http-loader-factory.ts | 2 +- projects/aas-portal/src/app/index.ts | 4 +- .../src/app/main/main-api.service.ts | 10 +- .../aas-portal/src/app/main/main.component.ts | 55 +-- .../add-endpoint-form.component.html | 2 +- .../add-endpoint-form.component.ts | 16 +- .../favorites-form.component.html | 2 +- .../favorites-form.component.ts | 4 +- .../favorites-form/favorites-form.store.ts | 2 +- .../src/app/start/favorites.service.ts | 7 +- .../remove-endpoint-form.component.html | 2 +- .../remove-endpoint-form.component.ts | 20 +- .../src/app/start/start-api.service.ts | 35 +- .../aas-portal/src/app/start/start.actions.ts | 43 +-- .../src/app/start/start.component.ts | 198 ++++++---- .../aas-portal/src/app/start/start.effects.ts | 232 +++++++----- .../aas-portal/src/app/start/start.reducer.ts | 40 +- .../src/app/start/start.selectors.ts | 12 +- .../aas-portal/src/app/start/start.state.ts | 2 +- .../upload-form/upload-form.component.html | 2 +- .../upload-form/upload-form.component.ts | 50 +-- .../aas-portal/src/app/toolbar.service.ts | 6 +- .../aas-portal/src/app/types/action-base.ts | 21 -- projects/aas-portal/src/app/types/command.ts | 30 +- .../src/app/types/dashboard-query-params.ts | 4 +- projects/aas-portal/src/app/types/doc-ref.ts | 2 +- projects/aas-portal/src/app/types/errors.ts | 2 +- projects/aas-portal/src/app/types/info.ts | 4 +- projects/aas-portal/src/app/types/intl.d.ts | 2 +- .../src/app/types/selection-mode.ts | 4 +- .../src/app/view/view-api.service.ts | 13 +- .../aas-portal/src/app/view/view.actions.ts | 15 +- .../aas-portal/src/app/view/view.component.ts | 60 +-- .../aas-portal/src/app/view/view.effects.ts | 34 +- .../aas-portal/src/app/view/view.reducer.ts | 13 +- .../aas-portal/src/app/view/view.selectors.ts | 2 +- .../test/aas/command-handler.service.spec.ts | 4 +- .../assets/test-web-socket-factory.service.ts | 2 +- projects/aas-server/.eslintrc | 8 +- .../src/app/aas-index/aas-index-factory.ts | 8 +- .../src/app/aas-index/aas-index-query.ts | 7 +- .../aas-server/src/app/aas-index/aas-index.ts | 19 +- .../src/app/aas-index/lowdb/lowdb-index.ts | 63 +++- .../src/app/aas-index/lowdb/lowdb-query.ts | 15 +- .../src/app/aas-index/lowdb/lowdb-types.ts | 2 +- .../src/app/aas-index/mysql/mysql-index.ts | 142 +++---- .../src/app/aas-index/mysql/mysql-query.ts | 33 +- .../src/app/aas-index/mysql/mysql-types.ts | 5 +- .../src/app/aas-provider/aas-provider.ts | 64 ++-- .../aas-provider/aas-resource-scan-factory.ts | 16 +- .../src/app/aas-provider/aas-resource-scan.ts | 3 +- .../src/app/aas-provider/aasx-server-scan.ts | 14 +- .../src/app/aas-provider/directory-scan.ts | 8 +- .../src/app/aas-provider/opcua-server-scan.ts | 20 +- .../src/app/aas-provider/parallel.ts | 19 +- .../src/app/aas-provider/scan-result.ts | 16 +- .../aas-server/src/app/aas-scan-worker.ts | 5 +- projects/aas-server/src/app/aas-server.ts | 10 +- projects/aas-server/src/app/app.ts | 32 +- .../aas-server/src/app/application-info.ts | 8 +- .../aas-server/src/app/auth/auth-service.ts | 29 +- .../src/app/auth/cookie-storage-factory.ts | 5 +- .../aas-server/src/app/auth/cookie-storage.ts | 8 +- .../src/app/auth/locale-cookie-storage.ts | 9 +- .../src/app/auth/locale-user-storage.ts | 10 +- .../src/app/auth/mongo-db-cookie-storage.ts | 12 +- .../src/app/auth/mongo-db-user-storage.ts | 10 +- projects/aas-server/src/app/auth/user-data.ts | 4 +- .../src/app/auth/user-storage-factory.ts | 5 +- .../aas-server/src/app/auth/user-storage.ts | 4 +- projects/aas-server/src/app/configuration.ts | 13 +- .../src/app/controller/aas-controller.ts | 4 +- .../src/app/controller/app-controller.ts | 6 +- .../src/app/controller/auth-controller.ts | 13 +- .../src/app/controller/authentication.ts | 6 +- .../app/controller/containers-controller.ts | 44 ++- .../app/controller/documents-controller.ts | 13 +- .../app/controller/endpoints-controller.ts | 8 +- .../src/app/controller/ioc-container.ts | 2 +- .../app/controller/templates-controller.ts | 6 +- projects/aas-server/src/app/convert.ts | 5 +- projects/aas-server/src/app/errors.ts | 4 +- .../app/file-storage/file-storage-factory.ts | 13 +- .../app/file-storage/local-file-storage.ts | 4 +- .../src/app/file-storage/own-cloud-storage.ts | 37 +- .../aas-server/src/app/image-processing.ts | 9 +- projects/aas-server/src/app/lazy.ts | 8 +- .../src/app/live/empty-subscription.ts | 4 +- .../src/app/live/http/http-socket-item.ts | 10 +- .../src/app/live/http/http-subscription.ts | 34 +- .../src/app/live/opcua/opcua-socket-item.ts | 20 +- .../src/app/live/opcua/opcua-subscription.ts | 33 +- .../aas-server/src/app/live/socket-client.ts | 10 +- .../aas-server/src/app/live/socket-item.ts | 6 +- .../src/app/live/socket-subscription.ts | 2 +- .../aas-server/src/app/logging/file-logger.ts | 14 +- .../src/app/logging/logger-factory.ts | 9 +- projects/aas-server/src/app/logging/logger.ts | 8 +- .../src/app/logging/memory-logger.ts | 21 +- projects/aas-server/src/app/mailer.ts | 22 +- .../src/app/packages/aas-package.ts | 22 +- .../aas-server/src/app/packages/aas-reader.ts | 8 +- .../src/app/packages/aas-resource-factory.ts | 39 +- .../src/app/packages/aas-resource.ts | 22 +- .../aas-server/src/app/packages/aas-writer.ts | 6 +- .../packages/aasx-directory/aasx-directory.ts | 12 +- .../packages/aasx-directory/aasx-package.ts | 17 +- .../aasx-server/aasx-server-package.ts | 4 +- .../packages/aasx-server/aasx-server-v0.ts | 19 +- .../packages/aasx-server/aasx-server-v3.ts | 85 +++-- .../app/packages/aasx-server/aasx-server.ts | 24 +- .../src/app/packages/json-reader-v2.ts | 117 +++--- .../src/app/packages/json-reader.ts | 126 ++++--- .../src/app/packages/json-writer-v2.ts | 119 +++--- .../src/app/packages/json-writer.ts | 92 ++--- .../src/app/packages/opcua/client-file.ts | 35 +- .../opcua/opaque-structure-decoder.ts | 10 +- .../opcua/opcua-data-type-dictionary.ts | 9 +- .../src/app/packages/opcua/opcua-package.ts | 21 +- .../src/app/packages/opcua/opcua-reader.ts | 145 ++++--- .../src/app/packages/opcua/opcua-server.ts | 52 ++- .../src/app/packages/opcua/opcua.ts | 83 ++-- .../src/app/packages/server-message.ts | 145 +++---- .../aas-server/src/app/packages/xml-reader.ts | 80 ++-- projects/aas-server/src/app/scan-container.ts | 30 +- projects/aas-server/src/app/send-error.ts | 28 +- .../app/template/template-storage-factory.ts | 6 +- .../src/app/template/template-storage.ts | 12 +- projects/aas-server/src/app/types/aas-v2.ts | 246 ++++++------ .../src/app/types/container-index.ts | 2 +- .../src/app/types/owncloud-sdk.d.ts | 15 +- projects/aas-server/src/app/types/registry.ts | 4 +- projects/aas-server/src/app/types/uuid.d.ts | 2 +- .../aas-server/src/app/update-statistic.ts | 2 +- projects/aas-server/src/app/variable.ts | 4 +- projects/aas-server/src/app/worker-app.ts | 13 +- projects/aas-server/src/app/ws-server.ts | 20 +- .../test/aas-index/mysql/mysql-index.spec.ts | 2 +- .../test/aas-index/mysql/mysql-query.spec.ts | 4 +- .../test/aas-provider/aas-provider.spec.ts | 2 +- .../src/test/auth/auth-service.spec.ts | 66 ++-- .../test/auth/locale-cookie-storage.spec.ts | 241 +++++++----- .../src/test/auth/locale-user-storage.spec.ts | 44 +-- .../test/auth/mongo-db-cookie-storage.spec.ts | 69 ++-- .../test/auth/mongo-db-user-storage.spec.ts | 22 +- .../aasx-server/aasx-server-v0.spec.ts | 59 +-- .../aasx-server/aasx-server-v3.spec.ts | 119 +++--- .../src/test/packages/json-writer-v2.spec.ts | 18 +- .../src/test/packages/json-writer.spec.ts | 14 +- .../test/packages/opcua/opcua-reader.spec.ts | 8 +- .../test/packages/opcua/opcua-server.spec.ts | 61 +-- .../src/test/packages/server-message.spec.ts | 32 +- projects/common/.eslintrc | 8 +- projects/common/src/lib/aas.ts | 229 ++++++----- projects/common/src/lib/application-error.ts | 10 +- projects/common/src/lib/authentication.ts | 19 +- projects/common/src/lib/convert.ts | 243 ++++++------ projects/common/src/lib/crc32.ts | 16 +- projects/common/src/lib/document.ts | 231 +++++++----- projects/common/src/lib/index.ts | 14 +- projects/common/src/lib/keyed-list.ts | 7 +- projects/common/src/lib/multi-key-map.ts | 2 +- projects/common/src/lib/query-parser.ts | 36 +- projects/common/src/lib/server-message.ts | 22 +- projects/common/src/lib/types.ts | 62 +-- 281 files changed, 4753 insertions(+), 4099 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc.json delete mode 100644 projects/aas-portal/src/app/types/action-base.ts diff --git a/.eslintrc.json b/.eslintrc.json index 65b51509..25e30d4a 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,55 +1,21 @@ { - "root": true, - "ignorePatterns": [ - "projects/**/*" - ], - "overrides": [ - { - "files": [ - "*.ts" - ], - "extends": [ + "root": true, + "parser": "@typescript-eslint/parser", + "extends": [ "eslint:recommended", "plugin:@typescript-eslint/recommended", - "plugin:@angular-eslint/recommended", - "plugin:@angular-eslint/template/process-inline-templates" - ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "lib", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "lib", - "style": "kebab-case" - } - ] - } + "plugin:prettier/recommended" + ], + "parserOptions": { + "ecmaVersion": 2022, + "sourceType": "module" }, - { - "files": [ - "*.html" - ], - "extends": [ - "plugin:@angular-eslint/template/recommended", - "plugin:@angular-eslint/template/accessibility" - ], - "rules": {} - }, - { - "files": [ - "*.ts" - ], - "extends": [ - "plugin:@ngrx/recommended" - ] + "rules": { + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/explicit-member-accessibility": "error", + "prettier/prettier": "error" } - ] } \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..7e53ed2d --- /dev/null +++ b/.prettierignore @@ -0,0 +1,9 @@ +# Ignore everything +**/* + +# But not TS and JS files +!**/*.ts +!**/*.js + +# Check subdirectories too +!*/ diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..3cc0fb26 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,17 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "useTabs": false, + "tabWidth": 4, + "semi": true, + "endOfLine": "auto", + "printWidth": 120, + "quoteProps": "as-needed", + "bracketSpacing": true, + "bracketSameLine": false, + "arrowParens": "avoid", + "proseWrap": "preserve", + "embeddedLanguageFormatting": "auto", + "singleAttributePerLine": false + } + diff --git a/.vscode/settings.json b/.vscode/settings.json index 1c2c5268..cc1b6b3b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { "cSpell.words": [ "aaslist", + "aasv", "aasv3", "angewandten", "autohide", @@ -22,6 +23,7 @@ "nicht", "NMTOKEN", "NMTOKENS", + "opnxml", "owncloud", "preprocessors", "Qualifiable", @@ -34,5 +36,6 @@ "uuid", "xmldoc", "ZVEI" - ] + ], + "files.eol": "\n", } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4137d493..6d36b15f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -58,6 +58,7 @@ "rxjs": "~7.8.1", "swagger-ui-express": "^5.0.0", "tslib": "^2.6.2", + "tsoa": "^6.0.0", "tsyringe": "^4.8.0", "uuid": "^8.3.2", "winston": "^3.11.0", @@ -101,6 +102,8 @@ "babel-plugin-transform-import-meta": "^2.2.1", "esbuild": "^0.19.11", "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", "jasmine-core": "^5.1.1", "jest": "^29.7.0", "karma": "^6.4.2", @@ -110,12 +113,12 @@ "karma-jasmine-html-reporter": "^2.1.0", "karma-junit-reporter": "^2.0.1", "ng-packagr": "^17.0.3", + "prettier": "^3.1.1", "rimraf": "^5.0.5", "semantic-release": "^22.0.12", "supertest": "^6.3.3", "ts-jest": "^29.1.1", "ts-node": "^10.9.2", - "tsoa": "^6.0.0", "typescript": "^5.2.2" } }, @@ -3605,7 +3608,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3622,7 +3624,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -3634,7 +3635,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -3645,14 +3645,12 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -3669,7 +3667,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -3684,7 +3681,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -5779,12 +5775,23 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", + "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -6704,7 +6711,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@tsoa/cli/-/cli-6.0.0.tgz", "integrity": "sha512-Pzzg3sWkcalYEKzzNnvX8iAu7X19FxeN79yBjvCvR8h6Q5qvfO2UqlifSIZdZd6rPOoxaIuYEU8C5sBupI6+sg==", - "dev": true, "dependencies": { "@tsoa/runtime": "^6.0.0", "@types/multer": "^1.4.11", @@ -6731,7 +6737,6 @@ "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6745,7 +6750,6 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -6767,7 +6771,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -6779,7 +6782,6 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6792,7 +6794,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, "engines": { "node": ">= 10.0.0" } @@ -6801,7 +6802,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@tsoa/runtime/-/runtime-6.0.0.tgz", "integrity": "sha512-n0LYcjII313kDn3M4bZdAjU+sX7595sIEA3bw4pvxWRrkandyDdDFNrfQL8nZ3Pw6dkTmK7brZi0YBBDhe0Rzw==", - "dev": true, "dependencies": { "@types/multer": "^1.4.11", "reflect-metadata": "^0.2.1", @@ -6898,7 +6898,6 @@ "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -6926,7 +6925,6 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, "dependencies": { "@types/node": "*" } @@ -7000,7 +6998,6 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -7012,7 +7009,6 @@ "version": "4.17.41", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", - "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -7032,8 +7028,7 @@ "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "node_modules/@types/http-proxy": { "version": "1.17.14", @@ -7126,8 +7121,7 @@ "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "node_modules/@types/mkdirp": { "version": "1.0.2", @@ -7150,7 +7144,6 @@ "version": "1.4.11", "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz", "integrity": "sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==", - "dev": true, "dependencies": { "@types/express": "*" } @@ -7207,14 +7200,12 @@ "node_modules/@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", - "dev": true + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "node_modules/@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/resolve": { "version": "1.20.2", @@ -7236,7 +7227,6 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -7255,7 +7245,6 @@ "version": "1.15.5", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dev": true, "dependencies": { "@types/http-errors": "*", "@types/mime": "*", @@ -8510,7 +8499,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -10683,7 +10671,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -10876,7 +10863,6 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -11232,8 +11218,7 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/easy-extender": { "version": "2.3.4", @@ -11898,6 +11883,18 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-etc": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/eslint-etc/-/eslint-etc-5.2.1.tgz", @@ -11913,6 +11910,36 @@ "typescript": ">=4.0.0" } }, + "node_modules/eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": "*", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, "node_modules/eslint-scope": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.0.tgz", @@ -12527,6 +12554,12 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -12904,7 +12937,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -12920,7 +12952,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "engines": { "node": ">=14" }, @@ -13308,7 +13339,6 @@ "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -13329,7 +13359,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14297,8 +14326,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -14443,7 +14471,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -17710,7 +17737,6 @@ "version": "5.1.7", "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.7.tgz", "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", - "dev": true, "dependencies": { "is-what": "^4.1.8" }, @@ -17725,7 +17751,6 @@ "version": "4.1.16", "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "dev": true, "engines": { "node": ">=12.13" }, @@ -17863,7 +17888,6 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -17886,7 +17910,6 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -18405,8 +18428,7 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "node_modules/nerf-dart": { "version": "1.0.0", @@ -25151,7 +25173,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -25172,7 +25193,6 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -25188,7 +25208,6 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", - "dev": true, "engines": { "node": "14 || >=16.14" } @@ -25726,6 +25745,33 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", + "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -27410,7 +27456,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -27422,7 +27467,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -27840,8 +27884,7 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/sqlstring": { "version": "2.3.3", @@ -28073,7 +28116,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -28099,7 +28141,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -28307,6 +28348,22 @@ "node": ">=0.10" } }, + "node_modules/synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -28978,7 +29035,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/tsoa/-/tsoa-6.0.0.tgz", "integrity": "sha512-D8Kvp3wUhZwpX13hXptqKdk/2VMqg+t8SLeZDiRwv5XiOv39YJbt0F+6DEeyIBW6cC6vBYKD1Cs+cUXoY1VKiQ==", - "dev": true, "dependencies": { "@tsoa/cli": "^6.0.0", "@tsoa/runtime": "^6.0.0" @@ -29168,7 +29224,6 @@ "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -29473,7 +29528,6 @@ "version": "13.11.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", - "dev": true, "engines": { "node": ">= 0.10" } @@ -30417,7 +30471,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -30540,8 +30593,7 @@ "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, "node_modules/wrap-ansi": { "version": "6.2.0", @@ -30562,7 +30614,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -30579,7 +30630,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -30594,7 +30644,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -30605,8 +30654,7 @@ "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", @@ -30795,7 +30843,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "dev": true, "dependencies": { "argparse": "^1.0.7", "glob": "^7.0.5" @@ -30910,6 +30957,7 @@ "@babel/polyfill": "^7.4.4", "@xmldom/xmldom": "^0.8.10", "bcryptjs": "^2.4.3", + "chalk": "^2.4.1", "cors": "^2.8.5", "express": "^4.18.2", "form-data": "^4.0.0", @@ -30929,6 +30977,7 @@ "reflect-metadata": "^0.2.1", "swagger-ui-express": "^5.0.0", "tslib": "^2.6.2", + "tsoa": "^6.0.0", "tsyringe": "^4.8.0", "uuid": "^8.3.2", "winston": "^3.11.0", @@ -33188,7 +33237,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "requires": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -33201,26 +33249,22 @@ "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" }, "ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -33231,7 +33275,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "requires": { "ansi-regex": "^6.0.1" } @@ -33240,7 +33283,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "requires": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -34789,9 +34831,14 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true }, + "@pkgr/core": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", + "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "dev": true + }, "@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", @@ -35395,7 +35442,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@tsoa/cli/-/cli-6.0.0.tgz", "integrity": "sha512-Pzzg3sWkcalYEKzzNnvX8iAu7X19FxeN79yBjvCvR8h6Q5qvfO2UqlifSIZdZd6rPOoxaIuYEU8C5sBupI6+sg==", - "dev": true, "requires": { "@tsoa/runtime": "^6.0.0", "@types/multer": "^1.4.11", @@ -35415,7 +35461,6 @@ "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -35426,7 +35471,6 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, "requires": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -35439,7 +35483,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -35448,14 +35491,12 @@ "typescript": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", - "dev": true + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==" }, "universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" } } }, @@ -35463,7 +35504,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@tsoa/runtime/-/runtime-6.0.0.tgz", "integrity": "sha512-n0LYcjII313kDn3M4bZdAjU+sX7595sIEA3bw4pvxWRrkandyDdDFNrfQL8nZ3Pw6dkTmK7brZi0YBBDhe0Rzw==", - "dev": true, "requires": { "@types/multer": "^1.4.11", "reflect-metadata": "^0.2.1", @@ -35550,7 +35590,6 @@ "version": "1.19.5", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, "requires": { "@types/connect": "*", "@types/node": "*" @@ -35578,7 +35617,6 @@ "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, "requires": { "@types/node": "*" } @@ -35652,7 +35690,6 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", @@ -35664,7 +35701,6 @@ "version": "4.17.41", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", - "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", @@ -35684,8 +35720,7 @@ "@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" }, "@types/http-proxy": { "version": "1.17.14", @@ -35778,8 +35813,7 @@ "@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" }, "@types/mkdirp": { "version": "1.0.2", @@ -35802,7 +35836,6 @@ "version": "1.4.11", "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz", "integrity": "sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w==", - "dev": true, "requires": { "@types/express": "*" } @@ -35859,14 +35892,12 @@ "@types/qs": { "version": "6.9.11", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==", - "dev": true + "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" }, "@types/range-parser": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "@types/resolve": { "version": "1.20.2", @@ -35888,7 +35919,6 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, "requires": { "@types/mime": "^1", "@types/node": "*" @@ -35907,7 +35937,6 @@ "version": "1.15.5", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", - "dev": true, "requires": { "@types/http-errors": "*", "@types/mime": "*", @@ -36647,6 +36676,7 @@ "@babel/polyfill": "^7.4.4", "@xmldom/xmldom": "^0.8.10", "bcryptjs": "^2.4.3", + "chalk": "^2.4.1", "cors": "^2.8.5", "express": "^4.18.2", "form-data": "^4.0.0", @@ -36666,6 +36696,7 @@ "reflect-metadata": "^0.2.1", "swagger-ui-express": "^5.0.0", "tslib": "^2.6.2", + "tsoa": "^6.0.0", "tsyringe": "^4.8.0", "uuid": "^8.3.2", "winston": "^3.11.0", @@ -36874,7 +36905,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -38500,7 +38530,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -38627,8 +38656,7 @@ "deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==" }, "default-gateway": { "version": "6.0.3", @@ -38887,8 +38915,7 @@ "eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "easy-extender": { "version": "2.3.4", @@ -39543,6 +39570,13 @@ } } }, + "eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "requires": {} + }, "eslint-etc": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/eslint-etc/-/eslint-etc-5.2.1.tgz", @@ -39554,6 +39588,16 @@ "tsutils-etc": "^1.4.1" } }, + "eslint-plugin-prettier": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.8.6" + } + }, "eslint-scope": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.0.tgz", @@ -39844,6 +39888,12 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, + "fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, "fast-glob": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", @@ -40133,7 +40183,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, "requires": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -40142,8 +40191,7 @@ "signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" } } }, @@ -40450,7 +40498,6 @@ "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, "requires": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -40462,8 +40509,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -41137,8 +41183,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", @@ -41256,7 +41301,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", "@pkgjs/parseargs": "^0.11.0" @@ -43716,7 +43760,6 @@ "version": "5.1.7", "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-5.1.7.tgz", "integrity": "sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==", - "dev": true, "requires": { "is-what": "^4.1.8" }, @@ -43724,8 +43767,7 @@ "is-what": { "version": "4.1.16", "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "dev": true + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==" } } }, @@ -43818,7 +43860,6 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, "requires": { "brace-expansion": "^2.0.1" } @@ -43831,8 +43872,7 @@ "minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" }, "minipass-collect": { "version": "2.0.1", @@ -44222,8 +44262,7 @@ "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, "nerf-dart": { "version": "1.0.0", @@ -49189,8 +49228,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -49208,7 +49246,6 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, "requires": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -49217,8 +49254,7 @@ "lru-cache": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", - "dev": true + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==" } } }, @@ -49584,6 +49620,21 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, + "prettier": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", + "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, "pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -50816,7 +50867,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -50824,8 +50874,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { "version": "1.8.1", @@ -51163,8 +51212,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "sqlstring": { "version": "2.3.3", @@ -51352,7 +51400,6 @@ "version": "npm:string-width@4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -51371,7 +51418,6 @@ "version": "npm:strip-ansi@6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -51516,6 +51562,16 @@ "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", "dev": true }, + "synckit": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz", + "integrity": "sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==", + "dev": true, + "requires": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + } + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -51987,7 +52043,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/tsoa/-/tsoa-6.0.0.tgz", "integrity": "sha512-D8Kvp3wUhZwpX13hXptqKdk/2VMqg+t8SLeZDiRwv5XiOv39YJbt0F+6DEeyIBW6cC6vBYKD1Cs+cUXoY1VKiQ==", - "dev": true, "requires": { "@tsoa/cli": "^6.0.0", "@tsoa/runtime": "^6.0.0" @@ -52112,7 +52167,6 @@ "version": "3.17.4", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, "optional": true }, "undici": { @@ -52335,8 +52389,7 @@ "validator": { "version": "13.11.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz", - "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==", - "dev": true + "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==" }, "vary": { "version": "1.1.2", @@ -52892,7 +52945,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -52986,8 +53038,7 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, "wrap-ansi": { "version": "6.2.0", @@ -53030,7 +53081,6 @@ "version": "npm:wrap-ansi@7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -53041,7 +53091,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -53050,7 +53099,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -53058,8 +53106,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, @@ -53175,7 +53222,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "dev": true, "requires": { "argparse": "^1.0.7", "glob": "^7.0.5" diff --git a/package.json b/package.json index ac9d0f7f..652fded1 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "header": "node copyright-header.js", "coverage": "node coverage-summary.js", "user-db": "docker run -p 27017:27017 -d --name aasportal-users -e MONGO_INITDB_DATABASE=aasportal-users mongo", - "lint": "ng lint", + "lint": "npm run lint -ws", + "format": "npm run format -ws", "test": "npm run test -ws", "tsc": "npm run tsc -ws", "build": "npm run build -ws", @@ -122,6 +123,8 @@ "babel-plugin-transform-import-meta": "^2.2.1", "esbuild": "^0.19.11", "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.1.3", "jasmine-core": "^5.1.1", "jest": "^29.7.0", "karma": "^6.4.2", @@ -131,6 +134,7 @@ "karma-jasmine-html-reporter": "^2.1.0", "karma-junit-reporter": "^2.0.1", "ng-packagr": "^17.0.3", + "prettier": "^3.1.1", "rimraf": "^5.0.5", "semantic-release": "^22.0.12", "supertest": "^6.3.3", @@ -138,4 +142,4 @@ "ts-node": "^10.9.2", "typescript": "^5.2.2" } -} \ No newline at end of file +} diff --git a/projects/aas-lib/.eslintrc.json b/projects/aas-lib/.eslintrc.json index f9f1c647..f73abb67 100644 --- a/projects/aas-lib/.eslintrc.json +++ b/projects/aas-lib/.eslintrc.json @@ -1,37 +1,53 @@ { - "extends": "../../.eslintrc.json", - "ignorePatterns": [ - "!**/*" - ], - "overrides": [ - { - "files": [ - "*.ts" - ], - "rules": { - "@angular-eslint/directive-selector": [ - "error", - { - "type": "attribute", - "prefix": "fhg", - "style": "camelCase" - } - ], - "@angular-eslint/component-selector": [ - "error", - { - "type": "element", - "prefix": "fhg", - "style": "kebab-case" - } - ] - } - }, - { - "files": [ - "*.html" - ], - "rules": {} - } - ] -} + "extends": "../../.eslintrc.json", + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts" + ], + "extends": [ + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "fhg", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "fhg", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility" + ], + "rules": {} + }, + { + "files": [ + "*.ts" + ], + "extends": [ + "plugin:@ngrx/recommended" + ] + } + ] +} \ No newline at end of file diff --git a/projects/aas-lib/src/lib/aas-lib.module.ts b/projects/aas-lib/src/lib/aas-lib.module.ts index 6edf58bd..b67fc9f7 100644 --- a/projects/aas-lib/src/lib/aas-lib.module.ts +++ b/projects/aas-lib/src/lib/aas-lib.module.ts @@ -60,7 +60,7 @@ import { AASTableEffects } from './aas-table/aas-table.effects'; ScoreComponent, DigitalNameplateComponent, MessageTableComponent, - SecuredImageComponent + SecuredImageComponent, ], imports: [ CommonModule, @@ -72,7 +72,7 @@ import { AASTableEffects } from './aas-table/aas-table.effects'; StoreModule.forFeature('aasTable', aasTableReducer), StoreModule.forFeature('tree', aasTreeReducer), EffectsModule.forFeature(AASTableEffects), - HttpClientModule + HttpClientModule, ], exports: [ NotifyComponent, @@ -90,8 +90,8 @@ import { AASTableEffects } from './aas-table/aas-table.effects'; ScoreComponent, DigitalNameplateComponent, MessageTableComponent, - SecuredImageComponent + SecuredImageComponent, ], - providers: [] + providers: [], }) -export class AASLibModule { } \ No newline at end of file +export class AASLibModule {} diff --git a/projects/aas-lib/src/lib/aas-table/aas-table.actions.ts b/projects/aas-lib/src/lib/aas-table/aas-table.actions.ts index e79de017..18a868f5 100644 --- a/projects/aas-lib/src/lib/aas-table/aas-table.actions.ts +++ b/projects/aas-lib/src/lib/aas-table/aas-table.actions.ts @@ -27,33 +27,21 @@ export interface UpdateViewAction extends TypedAction()); +export const setViewMode = createAction(AASTableActionType.SET_VIEW_MODE, props<{ viewMode: ViewMode }>()); -export const updateView = createAction( - AASTableActionType.UPDATE_VIEW, - props<{ documents: AASDocument[] }>()); +export const updateView = createAction(AASTableActionType.UPDATE_VIEW, props<{ documents: AASDocument[] }>()); -export const setRows = createAction( - AASTableActionType.SET_PAGE, - props<{ rows: AASTableRow[] }>()); +export const setRows = createAction(AASTableActionType.SET_PAGE, props<{ rows: AASTableRow[] }>()); export const toggleSelected = createAction( AASTableActionType.TOGGLE_SELECTED, - props<{ row: AASTableRow, altKey: boolean, shiftKey: boolean }>()); + props<{ row: AASTableRow; altKey: boolean; shiftKey: boolean }>(), +); -export const toggleSelections = createAction( - AASTableActionType.TOGGLE_SELECTIONS); +export const toggleSelections = createAction(AASTableActionType.TOGGLE_SELECTIONS); -export const setSelections = createAction( - AASTableActionType.SET_SELECTIONS, - props<{ documents: AASDocument[] }>()); +export const setSelections = createAction(AASTableActionType.SET_SELECTIONS, props<{ documents: AASDocument[] }>()); -export const expandRow = createAction( - AASTableActionType.EXPAND, - props<{ row: AASTableRow }>()); +export const expandRow = createAction(AASTableActionType.EXPAND, props<{ row: AASTableRow }>()); -export const collapseRow = createAction( - AASTableActionType.COLLAPSE, - props<{ row: AASTableRow }>()); +export const collapseRow = createAction(AASTableActionType.COLLAPSE, props<{ row: AASTableRow }>()); diff --git a/projects/aas-lib/src/lib/aas-table/aas-table.component.ts b/projects/aas-lib/src/lib/aas-table/aas-table.component.ts index ae4033e9..8e5ff38d 100644 --- a/projects/aas-lib/src/lib/aas-table/aas-table.component.ts +++ b/projects/aas-lib/src/lib/aas-table/aas-table.component.ts @@ -23,7 +23,7 @@ import { ViewMode } from '../types/view-mode'; @Component({ selector: 'fhg-aas-table', templateUrl: './aas-table.component.html', - styleUrls: ['./aas-table.component.scss'] + styleUrls: ['./aas-table.component.scss'], }) export class AASTableComponent implements OnInit, OnChanges, OnDestroy { private readonly store: Store; @@ -32,19 +32,23 @@ export class AASTableComponent implements OnInit, OnChanges, OnDestroy { private shiftKey = false; private altKey = false; - constructor( + public constructor( private readonly router: Router, store: Store, private readonly clipboard: ClipboardService, - private readonly window: WindowService + private readonly window: WindowService, ) { this.store = store as Store; this.rows = this.store.select(AASTableSelectors.selectRows); this.everySelected = this.store.select(AASTableSelectors.selectEverySelected); this.someSelected = this.store.select(AASTableSelectors.selectSomeSelected); - this.subscription.add(this.store.select(AASTableSelectors.selectSelectedDocuments).pipe() - .subscribe(values => this._selected = values)); + this.subscription.add( + this.store + .select(AASTableSelectors.selectSelectedDocuments) + .pipe() + .subscribe(values => (this._selected = values)), + ); this.window.addEventListener('keyup', this.keyup); this.window.addEventListener('keydown', this.keydown); @@ -77,24 +81,32 @@ export class AASTableComponent implements OnInit, OnChanges, OnDestroy { public readonly rows: Observable; public ngOnInit(): void { - this.subscription.add(this.store.select(AASTableSelectors.selectSelectedDocuments).pipe() - .subscribe(documents => { - this._selected = documents; - this.selectedChange.emit(documents); - })); + this.subscription.add( + this.store + .select(AASTableSelectors.selectSelectedDocuments) + .pipe() + .subscribe(documents => { + this._selected = documents; + this.selectedChange.emit(documents); + }), + ); } public ngOnChanges(changes: SimpleChanges): void { if (changes['viewMode'] && this.viewMode != null) { - this.subscription.add(this.viewMode.subscribe(value => { - this.store.dispatch(AASTableActions.setViewMode({ viewMode: value })); - })); + this.subscription.add( + this.viewMode.subscribe(value => { + this.store.dispatch(AASTableActions.setViewMode({ viewMode: value })); + }), + ); } if (changes['documents'] && this.documents != null) { - this.subscription.add(this.documents.subscribe(values => { - this.store.dispatch(AASTableActions.updateView({ documents: values })); - })); + this.subscription.add( + this.documents.subscribe(values => { + this.store.dispatch(AASTableActions.updateView({ documents: values })); + }), + ); } } @@ -143,4 +155,4 @@ export class AASTableComponent implements OnInit, OnChanges, OnDestroy { this.shiftKey = event.shiftKey; this.altKey = event.altKey; }; -} \ No newline at end of file +} diff --git a/projects/aas-lib/src/lib/aas-table/aas-table.effects.ts b/projects/aas-lib/src/lib/aas-table/aas-table.effects.ts index 7ae9080f..bc3d7339 100644 --- a/projects/aas-lib/src/lib/aas-table/aas-table.effects.ts +++ b/projects/aas-lib/src/lib/aas-table/aas-table.effects.ts @@ -22,7 +22,7 @@ import { ViewMode } from '../types/view-mode'; export class AASTableEffects { private readonly store: Store; - constructor( + public constructor( private readonly actions: Actions, store: Store, ) { @@ -32,24 +32,28 @@ export class AASTableEffects { public updateView = createEffect(() => { return this.actions.pipe( ofType(AASTableActions.AASTableActionType.UPDATE_VIEW), - exhaustMap(action => this.store.select(AASTableSelectors.selectState).pipe( - first(), - map(state => { - const rows = state.viewMode === ViewMode.List - ? this.createListViewRows(state.rows, action.documents) - : this.createTreeViewRows(state.rows, action.documents); - - return AASTableActions.setRows({ rows }); - }) - ))); + exhaustMap(action => + this.store.select(AASTableSelectors.selectState).pipe( + first(), + map(state => { + const rows = + state.viewMode === ViewMode.List + ? this.createListViewRows(state.rows, action.documents) + : this.createTreeViewRows(state.rows, action.documents); + + return AASTableActions.setRows({ rows }); + }), + ), + ), + ); }); private createListViewRows(state: AASTableRow[], documents: AASDocument[]): AASTableRow[] { const map = new Map(state.map(row => [`${row.endpoint}:${row.id}`, row])); const rows = documents.map(document => { - const row = map.get(`${document.endpoint}:${document.id}`); + const row = map.get(`${document.endpoint}:${document.id}`); if (row) { - return row.document === document ? row : this.cloneD(row, document) + return row.document === document ? row : this.cloneD(row, document); } return new AASTableRow(document, false, false, false, -1, -1, -1); @@ -90,10 +94,10 @@ export class AASTableEffects { children.length === 0, 0, children.length > 0 ? rows.length + 1 : -1, - -1 + -1, ); - rows.push(rootRow) + rows.push(rootRow); if (index >= 0) { const previous = this.clone(rows[index]); @@ -111,15 +115,7 @@ export class AASTableEffects { let previous: AASTableRow | null = null; const children = nodes.filter(node => this.isChild(parent, node)); for (const child of children) { - const row = new AASTableRow( - child, - false, - false, - children.length === 0, - level, - -1, - -1 - ); + const row = new AASTableRow(child, false, false, children.length === 0, level, -1, -1); rows.push(row); if (previous) { @@ -151,10 +147,10 @@ export class AASTableEffects { row.isLeaf, row.level, row.firstChild, - row.nextSibling); + row.nextSibling, + ); } - private cloneD(row: AASTableRow, document: AASDocument): AASTableRow { return new AASTableRow( document, @@ -163,7 +159,7 @@ export class AASTableEffects { row.isLeaf, row.level, row.firstChild, - row.nextSibling); + row.nextSibling, + ); } - } diff --git a/projects/aas-lib/src/lib/aas-table/aas-table.reducer.ts b/projects/aas-lib/src/lib/aas-table/aas-table.reducer.ts index 48b792ba..6badf721 100644 --- a/projects/aas-lib/src/lib/aas-table/aas-table.reducer.ts +++ b/projects/aas-lib/src/lib/aas-table/aas-table.reducer.ts @@ -19,34 +19,15 @@ const initialState: AASTableState = { export const aasTableReducer = createReducer( initialState, - on( - AASTableActions.setViewMode, - (state, { viewMode }) => setViewMode(state, viewMode), - ), - on( - AASTableActions.collapseRow, - (state, { row }) => collapseRow(state, row) - ), - on( - AASTableActions.expandRow, - (state, { row }) => expandRow(state, row) - ), - on( - AASTableActions.setRows, - (state, { rows }) => setRows(state, rows) - ), - on( - AASTableActions.toggleSelected, - (state, { row, altKey, shiftKey }) => toggleSelected(state, row, altKey, shiftKey) - ), - on( - AASTableActions.toggleSelections, - (state) => toggleSelections(state) - ), - on( - AASTableActions.setSelections, - (state, { documents }) => setSelections(state, documents) + on(AASTableActions.setViewMode, (state, { viewMode }) => setViewMode(state, viewMode)), + on(AASTableActions.collapseRow, (state, { row }) => collapseRow(state, row)), + on(AASTableActions.expandRow, (state, { row }) => expandRow(state, row)), + on(AASTableActions.setRows, (state, { rows }) => setRows(state, rows)), + on(AASTableActions.toggleSelected, (state, { row, altKey, shiftKey }) => + toggleSelected(state, row, altKey, shiftKey), ), + on(AASTableActions.toggleSelections, state => toggleSelections(state)), + on(AASTableActions.setSelections, (state, { documents }) => setSelections(state, documents)), ); function setViewMode(state: AASTableState, viewMode: ViewMode): AASTableState { @@ -57,7 +38,7 @@ function setRows(state: AASTableState, rows: AASTableRow[]): AASTableState { } function setSelections(state: AASTableState, documents: AASDocument[]): AASTableState { - const rows = [ ...state.rows ]; + const rows = [...state.rows]; const set = new Set(documents); for (let i = 0, n = rows.length; i < n; i++) { const row = rows[i]; @@ -71,16 +52,11 @@ function setSelections(state: AASTableState, documents: AASDocument[]): AASTable return { ...state, rows }; } -function toggleSelected( - state: AASTableState, - row: AASTableRow, - altKey: boolean, - shiftKey: boolean, -): AASTableState { +function toggleSelected(state: AASTableState, row: AASTableRow, altKey: boolean, shiftKey: boolean): AASTableState { let rows: AASTableRow[]; if (altKey) { rows = state.rows.map(item => - item === row ? clone(row, !row.selected) : (item.selected ? clone(item, false) : item) + item === row ? clone(row, !row.selected) : item.selected ? clone(item, false) : item, ); } else if (shiftKey) { const index = state.rows.indexOf(row); @@ -128,7 +104,7 @@ function toggleSelections(state: AASTableState): AASTableState { } } - return { ...state, rows } + return { ...state, rows }; } function clone(row: AASTableRow, selected?: boolean): AASTableRow { @@ -143,20 +119,14 @@ function clone(row: AASTableRow, selected?: boolean): AASTableRow { row.isLeaf, row.level, row.firstChild, - row.nextSibling) + row.nextSibling, + ); } function expandRow(state: AASTableState, row: AASTableRow): AASTableState { const rows = [...state.rows]; const index = rows.indexOf(row); - rows[index] = new AASTableRow( - row.document, - false, - true, - row.isLeaf, - row.level, - row.firstChild, - row.nextSibling); + rows[index] = new AASTableRow(row.document, false, true, row.isLeaf, row.level, row.firstChild, row.nextSibling); return { ...state, rows }; } @@ -164,14 +134,7 @@ function expandRow(state: AASTableState, row: AASTableRow): AASTableState { function collapseRow(state: AASTableState, row: AASTableRow): AASTableState { const rows = [...state.rows]; const index = rows.indexOf(row); - rows[index] = new AASTableRow( - row.document, - false, - false, - row.isLeaf, - row.level, - row.firstChild, - row.nextSibling); + rows[index] = new AASTableRow(row.document, false, false, row.isLeaf, row.level, row.firstChild, row.nextSibling); return { ...state, rows }; } diff --git a/projects/aas-lib/src/lib/aas-table/aas-table.selectors.ts b/projects/aas-lib/src/lib/aas-table/aas-table.selectors.ts index 518d6996..9ed02e91 100644 --- a/projects/aas-lib/src/lib/aas-table/aas-table.selectors.ts +++ b/projects/aas-lib/src/lib/aas-table/aas-table.selectors.ts @@ -15,26 +15,18 @@ const getState = (state: AASTableFeatureState) => state.aasTable; export const selectState = createSelector(getState, state => state); -export const selectSelectedDocuments = createSelector( - getRows, - (rows: AASTableRow[]): AASDocument[] => { - return rows.filter(row => row.selected).map(row => row.document); - }); - -export const selectSomeSelected = createSelector( - getRows, - (rows: AASTableRow[]): boolean => { - return rows.length > 0 && rows.some(row => row.selected) && !rows.every(row => row.selected); - }); +export const selectSelectedDocuments = createSelector(getRows, (rows: AASTableRow[]): AASDocument[] => { + return rows.filter(row => row.selected).map(row => row.document); +}); +export const selectSomeSelected = createSelector(getRows, (rows: AASTableRow[]): boolean => { + return rows.length > 0 && rows.some(row => row.selected) && !rows.every(row => row.selected); +}); -export const selectEverySelected = createSelector( - getRows, - (rows: AASTableRow[]): boolean => { - return rows.length > 0 && rows.every(row => row.selected); - }); +export const selectEverySelected = createSelector(getRows, (rows: AASTableRow[]): boolean => { + return rows.length > 0 && rows.every(row => row.selected); +}); export const selectRows = createSelector(getState, state => { return state.rows; }); - diff --git a/projects/aas-lib/src/lib/aas-table/aas-table.state.ts b/projects/aas-lib/src/lib/aas-table/aas-table.state.ts index 85b7a2f5..e7569423 100644 --- a/projects/aas-lib/src/lib/aas-table/aas-table.state.ts +++ b/projects/aas-lib/src/lib/aas-table/aas-table.state.ts @@ -10,15 +10,15 @@ import { AASDocument } from 'common'; import { ViewMode } from '../types/view-mode'; export class AASTableRow { - constructor( + public constructor( public readonly document: AASDocument, public readonly selected: boolean, public readonly expanded: boolean, public readonly isLeaf: boolean, public readonly level: number, public firstChild: number, - public nextSibling: number) { - } + public nextSibling: number, + ) {} public get id(): string { return this.document.id; diff --git a/projects/aas-lib/src/lib/aas-tree/aas-tree-api.service.ts b/projects/aas-lib/src/lib/aas-tree/aas-tree-api.service.ts index 8f10ca30..fee7755f 100644 --- a/projects/aas-lib/src/lib/aas-tree/aas-tree-api.service.ts +++ b/projects/aas-lib/src/lib/aas-tree/aas-tree-api.service.ts @@ -13,24 +13,19 @@ import { encodeBase64Url } from '../convert'; /** The client side AAS provider service. */ @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class AASTreeApiService { - constructor( - private readonly http: HttpClient - ) { } + public constructor(private readonly http: HttpClient) {} public getTokenAsync(url: string): Promise { return new Promise((result, reject) => { let data: AuthResult; - this.http.post( - '/api/v1/login', - { id: url }).subscribe( - { - next: value => data = value, - complete: () => result(data.token), - error: (error) => reject(error) - }); + this.http.post('/api/v1/login', { id: url }).subscribe({ + next: value => (data = value), + complete: () => result(data.token), + error: error => reject(error), + }); }); } @@ -43,13 +38,18 @@ export class AASTreeApiService { public invoke(document: AASDocument, operation: aas.Operation): Promise { return new Promise((result, reject) => { let data: aas.Operation; - this.http.post( - `/api/v1/containers/${encodeBase64Url(document.endpoint)}/documents/${encodeBase64Url(document.id)}`, - operation).subscribe({ - next: (value) => data = value, + this.http + .post( + `/api/v1/containers/${encodeBase64Url(document.endpoint)}/documents/${encodeBase64Url( + document.id, + )}`, + operation, + ) + .subscribe({ + next: value => (data = value), complete: () => result(data), - error: (error) => reject(error) + error: error => reject(error), }); }); } -} \ No newline at end of file +} diff --git a/projects/aas-lib/src/lib/aas-tree/aas-tree-search.ts b/projects/aas-lib/src/lib/aas-tree/aas-tree-search.ts index 00c34cf8..58784a4f 100644 --- a/projects/aas-lib/src/lib/aas-tree/aas-tree-search.ts +++ b/projects/aas-lib/src/lib/aas-tree/aas-tree-search.ts @@ -21,35 +21,50 @@ import { convertToString, getModelTypeFromAbbreviation, parseDate, - parseNumber + parseNumber, } from 'common'; import { Injectable } from '@angular/core'; @Injectable() export class AASTreeSearch { - private store: Store + private store: Store; private readonly loop = true; private subscription = new Subscription(); private terms: SearchTerm[] = []; private rows: AASTreeRow[] = []; private index = -1; - constructor(store: Store, private translate: TranslateService) { - this.store = store as Store - - this.subscription.add(this.store.select(AASTreeSelectors.selectRows).pipe() - .subscribe(rows => { - this.rows = rows; - })); - - this.subscription.add(this.store.select(AASTreeSelectors.selectTerms).pipe() - .subscribe(terms => { - this.terms = terms; - this.findFirst(); - })); - - this.subscription.add(this.store.select(AASTreeSelectors.selectMatchIndex).pipe() - .subscribe((value) => this.index = value)); + public constructor( + store: Store, + private translate: TranslateService, + ) { + this.store = store as Store; + + this.subscription.add( + this.store + .select(AASTreeSelectors.selectRows) + .pipe() + .subscribe(rows => { + this.rows = rows; + }), + ); + + this.subscription.add( + this.store + .select(AASTreeSelectors.selectTerms) + .pipe() + .subscribe(terms => { + this.terms = terms; + this.findFirst(); + }), + ); + + this.subscription.add( + this.store + .select(AASTreeSelectors.selectMatchIndex) + .pipe() + .subscribe(value => (this.index = value)), + ); } public destroy(): void { @@ -87,7 +102,7 @@ export class AASTreeSearch { public findNext(): boolean { let completed = false; - if (this.rows.length > 0 && (this.terms.length > 0)) { + if (this.rows.length > 0 && this.terms.length > 0) { let match = false; let i = this.index < 0 ? 0 : this.index + 1; const start = i; @@ -115,7 +130,7 @@ export class AASTreeSearch { public findPrevious(): boolean { let completed = false; - if (this.rows.length > 0 && (this.terms.length > 0)) { + if (this.rows.length > 0 && this.terms.length > 0) { let match = false; let i = this.index <= 0 ? this.rows.length - 1 : this.index - 1; const start = i; @@ -146,7 +161,7 @@ export class AASTreeSearch { } private findFirst(): void { - if (this.rows.length > 0 && (this.terms.length > 0)) { + if (this.rows.length > 0 && this.terms.length > 0) { let match = false; let i = this.index < 0 ? 0 : this.index; const start = i; @@ -202,7 +217,7 @@ export class AASTreeSearch { return query; } - private parseOperator(expression: string): { index: number, operator: Operator } | undefined { + private parseOperator(expression: string): { index: number; operator: Operator } | undefined { let index = expression.indexOf('<='); if (index > 0) { return { index: index, operator: '<=' }; @@ -233,7 +248,7 @@ export class AASTreeSearch { return { index, operator: '<' }; } - return undefined + return undefined; } private fromString(s: string): string | boolean { @@ -268,7 +283,8 @@ export class AASTreeSearch { } } } else if (term.text) { - match = row.name.toLocaleLowerCase(this.translate.currentLang).indexOf(term.text) >= 0 || + match = + row.name.toLocaleLowerCase(this.translate.currentLang).indexOf(term.text) >= 0 || row.typeInfo.toLocaleLowerCase(this.translate.currentLang).indexOf(term.text) >= 0 || (typeof row.value === 'string' && row.value.toLocaleLowerCase(this.translate.currentLang).indexOf(term.text) >= 0); @@ -304,7 +320,9 @@ export class AASTreeSearch { } case 'MultiLanguageProperty': { const langString = (referable as aas.MultiLanguageProperty).value; - return langString ? langString.some(item => item ? this.containsString(item.text, value as string) : false) : false; + return langString + ? langString.some(item => (item ? this.containsString(item.text, value as string) : false)) + : false; } default: return false; @@ -314,7 +332,7 @@ export class AASTreeSearch { private matchProperty(property: aas.Property, b: string | boolean, operator: Operator = '='): boolean { const a = convertFromString(property.value, property.valueType); if (typeof a === 'boolean') { - return (typeof b === 'boolean') && a === b; + return typeof b === 'boolean' && a === b; } else if (typeof b === 'boolean') { return false; } @@ -364,8 +382,10 @@ export class AASTreeSearch { return false; } - return this.containsString(convertToString(a), b) || - this.containsString(convertToString(a, this.translate.currentLang), b); + return ( + this.containsString(convertToString(a), b) || + this.containsString(convertToString(a, this.translate.currentLang), b) + ); } private isDate(valueType: aas.DataTypeDefXsd): boolean { @@ -377,4 +397,4 @@ export class AASTreeSearch { return false; } } -} \ No newline at end of file +} diff --git a/projects/aas-lib/src/lib/aas-tree/aas-tree.actions.ts b/projects/aas-lib/src/lib/aas-tree/aas-tree.actions.ts index 4d935def..59fe7696 100644 --- a/projects/aas-lib/src/lib/aas-tree/aas-tree.actions.ts +++ b/projects/aas-lib/src/lib/aas-tree/aas-tree.actions.ts @@ -25,34 +25,27 @@ export enum AASTreeActionType { export const updateRows = createAction( AASTreeActionType.UPDATE_ROWS, - props<{ document: AASDocument | null; localeId: string }>()); + props<{ document: AASDocument | null; localeId: string }>(), +); -export const expandRow = createAction( - AASTreeActionType.EXPAND_ROW, - props<{ arg: number | AASTreeRow }>()); +export const expandRow = createAction(AASTreeActionType.EXPAND_ROW, props<{ arg: number | AASTreeRow }>()); -export const collapseRow = createAction( - AASTreeActionType.COLLAPSE_ROW, - props<{ row: AASTreeRow }>()); +export const collapseRow = createAction(AASTreeActionType.COLLAPSE_ROW, props<{ row: AASTreeRow }>()); -export const collapse = createAction( - AASTreeActionType.COLLAPSE); +export const collapse = createAction(AASTreeActionType.COLLAPSE); export const toggleSelected = createAction( AASTreeActionType.TOGGLE_SELECTED, - props<{ row: AASTreeRow, altKey: boolean, shiftKey: boolean }>()); + props<{ row: AASTreeRow; altKey: boolean; shiftKey: boolean }>(), +); -export const toggleSelections = createAction( - AASTreeActionType.TOGGLE_SELECTIONS); +export const toggleSelections = createAction(AASTreeActionType.TOGGLE_SELECTIONS); -export const setSearchText = createAction( - AASTreeActionType.SET_SEARCH_TEXT, - props<{ terms: SearchTerm[] }>()); +export const setSearchText = createAction(AASTreeActionType.SET_SEARCH_TEXT, props<{ terms: SearchTerm[] }>()); -export const setMatchIndex = createAction( - AASTreeActionType.SET_MATCH_INDEX, - props<{ index: number }>()); +export const setMatchIndex = createAction(AASTreeActionType.SET_MATCH_INDEX, props<{ index: number }>()); export const setSelectedElements = createAction( AASTreeActionType.SET_SELECTED_ELEMENTS, - props<{ elements: aas.Referable[] }>()); + props<{ elements: aas.Referable[] }>(), +); diff --git a/projects/aas-lib/src/lib/aas-tree/aas-tree.component.ts b/projects/aas-lib/src/lib/aas-tree/aas-tree.component.ts index 23fbcc9e..912c8b83 100644 --- a/projects/aas-lib/src/lib/aas-tree/aas-tree.component.ts +++ b/projects/aas-lib/src/lib/aas-tree/aas-tree.component.ts @@ -6,7 +6,7 @@ * *****************************************************************************/ -import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, } from '@angular/core'; +import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges } from '@angular/core'; import { BehaviorSubject, Subscription, Observable, first } from 'rxjs'; import { WebSocketSubject } from 'rxjs/webSocket'; import { Store } from '@ngrx/store'; @@ -43,21 +43,25 @@ import { DownloadService } from '../download.service'; import { WebSocketFactoryService } from '../web-socket-factory.service'; import { ClipboardService } from '../clipboard.service'; import { LogType, NotifyService } from '../notify/notify.service'; -import { SubmodelViewDescriptor, resolveSemanticId, supportedSubmodelTemplates } from '../submodel-template/submodel-template'; +import { + SubmodelViewDescriptor, + resolveSemanticId, + supportedSubmodelTemplates, +} from '../submodel-template/submodel-template'; import * as AASTreeActions from './aas-tree.actions'; import * as AASTreeSelectors from './aas-tree.selectors'; import { AASTreeApiService } from './aas-tree-api.service'; interface PropertyValue { - property: aas.Property, - value: BehaviorSubject + property: aas.Property; + value: BehaviorSubject; } @Component({ selector: 'fhg-aas-tree', templateUrl: './aas-tree.component.html', styleUrls: ['./aas-tree.component.scss'], - providers: [AASTreeSearch] + providers: [AASTreeSearch], }) export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { private readonly store: Store; @@ -70,7 +74,7 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { private webSocketSubject?: WebSocketSubject; - constructor( + public constructor( private readonly router: Router, store: Store, private readonly api: AASTreeApiService, @@ -89,11 +93,15 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { this.someSelected = this.store.select(AASTreeSelectors.selectSomeSelected); this.everySelected = this.store.select(AASTreeSelectors.selectEverySelected); - this.subscription.add(this.store.select(AASTreeSelectors.selectSelectedElements).pipe() - .subscribe(elements => { - this._selected = elements; - this.selectedChange.emit(elements); - })); + this.subscription.add( + this.store + .select(AASTreeSelectors.selectSelectedElements) + .pipe() + .subscribe(elements => { + this._selected = elements; + this.selectedChange.emit(elements); + }), + ); this.window.addEventListener('keyup', this.keyup); this.window.addEventListener('keydown', this.keydown); @@ -139,45 +147,66 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { public nodes: Observable; public ngOnInit(): void { - this.subscription.add(this.store.select(AASTreeSelectors.selectError).pipe().subscribe(error => { - if (error) { - this.notify.error(error); - } - })); - - this.subscription.add(this.store.select(AASTreeSelectors.selectMatchIndex).pipe().subscribe(index => { - if (index >= 0) { - this.store.dispatch(AASTreeActions.expandRow({ arg: index })); - } - })); - - this.subscription.add(this.store.select(AASTreeSelectors.selectMatchRow).pipe().subscribe(row => { - if (row) { - setTimeout(() => { - const element = this.dom.getElementById(row.id); - element?.scrollIntoView({ block: 'center', behavior: 'smooth' }); - }) - } - })); + this.subscription.add( + this.store + .select(AASTreeSelectors.selectError) + .pipe() + .subscribe(error => { + if (error) { + this.notify.error(error); + } + }), + ); + + this.subscription.add( + this.store + .select(AASTreeSelectors.selectMatchIndex) + .pipe() + .subscribe(index => { + if (index >= 0) { + this.store.dispatch(AASTreeActions.expandRow({ arg: index })); + } + }), + ); + + this.subscription.add( + this.store + .select(AASTreeSelectors.selectMatchRow) + .pipe() + .subscribe(row => { + if (row) { + setTimeout(() => { + const element = this.dom.getElementById(row.id); + element?.scrollIntoView({ block: 'center', behavior: 'smooth' }); + }); + } + }), + ); - this.subscription.add(this.translate.onLangChange.subscribe(() => { - this.store.dispatch(AASTreeActions.updateRows({ - document: this.document, - localeId: this.translate.currentLang - })); - })); + this.subscription.add( + this.translate.onLangChange.subscribe(() => { + this.store.dispatch( + AASTreeActions.updateRows({ + document: this.document, + localeId: this.translate.currentLang, + }), + ); + }), + ); } public ngOnChanges(changes: SimpleChanges): void { if (changes['document']) { - this.store.dispatch(AASTreeActions.updateRows({ - document: this.document, - localeId: this.translate.currentLang - })); + this.store.dispatch( + AASTreeActions.updateRows({ + document: this.document, + localeId: this.translate.currentLang, + }), + ); } if (changes['search'] && this.search) { - this.subscription.add(this.search.subscribe((value) => this.searching.start(value))); + this.subscription.add(this.search.subscribe(value => this.searching.start(value))); } const stateChange = changes['state']; @@ -310,11 +339,13 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { if (template && this.document) { const descriptor: SubmodelViewDescriptor = { template, - submodels: [{ - id: this.document.id, - endpoint: this.document.endpoint, - idShort: submodel.idShort - }] + submodels: [ + { + id: this.document.id, + endpoint: this.document.endpoint, + idShort: submodel.idShort, + }, + ], }; this.clipboard.set('ViewQuery', { descriptor } as ViewQuery); @@ -363,7 +394,6 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { } else if (blob.contentType.startsWith('video/')) { await this.showVideoAsync(name, url); } else if (blob.contentType.endsWith('/pdf')) { - this.window.open(url); } else if (blob) { await this.downloadFileAsync(name, url); @@ -431,8 +461,7 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { modalRef.componentInstance.operation = operation; await modalRef.result; } - } - catch (error) { + } catch (error) { if (error) { this.notify.error(error); } @@ -449,17 +478,17 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { private goOnline(): void { try { - this.store.select(AASTreeSelectors.selectSelectedRows).pipe(first()).subscribe( - { - next: (rows) => { + this.store + .select(AASTreeSelectors.selectSelectedRows) + .pipe(first()) + .subscribe({ + next: rows => { this.prepareOnline(rows); this.play(); }, - error: () => this.stop() - } - ) - } - catch (error) { + error: () => this.stop(), + }); + } catch (error) { this.stop(); } } @@ -471,12 +500,10 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { private play(): void { if (this.document) { this.webSocketSubject = this.webSocketFactory.create(); - this.webSocketSubject.subscribe( - { - next: this.onMessage, - error: this.onError - } - ); + this.webSocketSubject.subscribe({ + next: this.onMessage, + error: this.onError, + }); this.webSocketSubject.next(this.createMessage(this.document)); } @@ -510,7 +537,7 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { if (property.nodeId) { this.liveNodes.push({ nodeId: property.nodeId, - valueType: property.valueType ?? 'undefined' + valueType: property.valueType ?? 'undefined', }); const subject = new BehaviorSubject(this.getPropertyValue(property)); @@ -524,7 +551,7 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { private createMessage(document: AASDocument): WebSocketData { return { type: 'LiveRequest', - data: { endpoint: document.endpoint, id: document.id, nodes: this.liveNodes } as LiveRequest + data: { endpoint: document.endpoint, id: document.id, nodes: this.liveNodes } as LiveRequest, }; } @@ -536,15 +563,16 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { item.value.next( typeof node.value === 'boolean' ? node.value - : convertToString(node.value, this.translate.currentLang)); + : convertToString(node.value, this.translate.currentLang), + ); } } } - } + }; private onError = (error: unknown): void => { this.notify.log(LogType.Error, error); - } + }; private keyup = () => { this.shiftKey = false; @@ -556,8 +584,8 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { this.altKey = event.altKey; }; - private resolveFile(file: aas.File): { url?: string, name?: string } { - const value: { url?: string, name?: string } = {}; + private resolveFile(file: aas.File): { url?: string; name?: string } { + const value: { url?: string; name?: string } = {}; if (this.document?.content && file.value) { const submodel = selectSubmodel(this.document.content, file); if (submodel) { @@ -572,4 +600,4 @@ export class AASTreeComponent implements OnInit, OnChanges, OnDestroy { return value; } -} \ No newline at end of file +} diff --git a/projects/aas-lib/src/lib/aas-tree/aas-tree.reducer.ts b/projects/aas-lib/src/lib/aas-tree/aas-tree.reducer.ts index c763c22a..996bdf9e 100644 --- a/projects/aas-lib/src/lib/aas-tree/aas-tree.reducer.ts +++ b/projects/aas-lib/src/lib/aas-tree/aas-tree.reducer.ts @@ -21,7 +21,7 @@ import { isBooleanType, toLocale, toBoolean, - mimeTypeToExtension + mimeTypeToExtension, } from 'common'; import { AASTreeRow, AASTreeState, DisplayType, SearchTerm } from './aas-tree.state'; @@ -32,53 +32,28 @@ const initialState: AASTreeState = { rows: [], index: -1, terms: [], - error: null + error: null, }; export const aasTreeReducer = createReducer( initialState, - on( - AASTreeActions.collapse, - (state) => collapse(state) + on(AASTreeActions.collapse, state => collapse(state)), + on(AASTreeActions.collapseRow, (state, { row }) => collapseRow(state, row)), + on(AASTreeActions.expandRow, (state, { arg }) => expandRow(state, arg)), + on(AASTreeActions.setMatchIndex, (state, { index }) => setMatchIndex(state, index)), + on(AASTreeActions.setSearchText, (state, { terms }) => setSearchText(state, terms)), + on(AASTreeActions.toggleSelected, (state, { row, altKey, shiftKey }) => + toggleSelected(state, row, altKey, shiftKey), ), - on( - AASTreeActions.collapseRow, - (state, { row }) => collapseRow(state, row) - ), - on( - AASTreeActions.expandRow, - (state, { arg }) => expandRow(state, arg) - ), - on( - AASTreeActions.setMatchIndex, - (state, { index }) => setMatchIndex(state, index) - ), - on( - AASTreeActions.setSearchText, - (state, { terms }) => setSearchText(state, terms) - ), - on( - AASTreeActions.toggleSelected, - (state, { row, altKey, shiftKey }) => toggleSelected(state, row, altKey, shiftKey) - ), - on( - AASTreeActions.toggleSelections, - (state) => toggleSelections(state) - ), - on( - AASTreeActions.updateRows, - (state, { document, localeId }) => { - try { - return updateRows(state, document, localeId); - } catch (error) { - return { ...state, error }; - } + on(AASTreeActions.toggleSelections, state => toggleSelections(state)), + on(AASTreeActions.updateRows, (state, { document, localeId }) => { + try { + return updateRows(state, document, localeId); + } catch (error) { + return { ...state, error }; } - ), - on( - AASTreeActions.setSelectedElements, - (state, {elements}) => setSelectedElements(state, elements), - ), + }), + on(AASTreeActions.setSelectedElements, (state, { elements }) => setSelectedElements(state, elements)), ); function updateRows(state: AASTreeState, document: AASDocument | null, localeId: string): AASTreeState { @@ -104,10 +79,7 @@ function updateRows(state: AASTreeState, document: AASDocument | null, localeId: return { ...state, rows, error: null }; - function traverse( - element: aas.Referable, - parent: number, - level: number): void { + function traverse(element: aas.Referable, parent: number, level: number): void { let previous: AASTreeRow | null = null; for (const child of getChildren(element)) { const row = createRow(child, parent, level, false); @@ -225,7 +197,8 @@ function updateRows(state: AASTreeState, document: AASDocument | null, localeId: isLeaf, parent, -1, - -1); + -1, + ); function getPropertyDisplayType(property: aas.Property): DisplayType { switch (property.valueType) { @@ -240,22 +213,26 @@ function updateRows(state: AASTreeState, document: AASDocument | null, localeId: } function findRow(rows: AASTreeRow[], referable: aas.Referable): AASTreeRow | undefined { - return rows.find((row) => isEqual(createReference(row.element), createReference(referable))); + return rows.find(row => isEqual(createReference(row.element), createReference(referable))); } function createReference(referable: aas.Referable): aas.Reference { let keys: aas.Key[]; if (referable.parent) { - keys = [...referable.parent.keys.map(key => ({ ...key })), - { - type: referable.modelType as aas.KeyTypes, - value: referable.idShort, - }]; + keys = [ + ...referable.parent.keys.map(key => ({ ...key })), + { + type: referable.modelType as aas.KeyTypes, + value: referable.idShort, + }, + ]; } else if (isIdentifiable(referable)) { - keys = [{ - type: referable.modelType as aas.KeyTypes, - value: referable.id, - }]; + keys = [ + { + type: referable.modelType as aas.KeyTypes, + value: referable.id, + }, + ]; } else { throw new Error('Unexpected referable.'); } @@ -311,7 +288,8 @@ function expandRow(state: AASTreeState, arg: number | AASTreeRow): AASTreeState row.isLeaf, row.parent, row.firstChild, - row.nextSibling); + row.nextSibling, + ); } } @@ -333,7 +311,8 @@ function collapseRow(state: AASTreeState, row: AASTreeRow): AASTreeState { row.isLeaf, row.parent, row.firstChild, - row.nextSibling); + row.nextSibling, + ); return { ...state, rows, error: null }; } @@ -357,7 +336,8 @@ function collapse(state: AASTreeState): AASTreeState { row.isLeaf, row.parent, row.firstChild, - row.nextSibling); + row.nextSibling, + ); } } else if (!row.isLeaf && row.expanded) { return new AASTreeRow( @@ -375,7 +355,8 @@ function collapse(state: AASTreeState): AASTreeState { row.isLeaf, row.parent, row.firstChild, - row.nextSibling); + row.nextSibling, + ); } return row; @@ -388,7 +369,7 @@ function toggleSelected(state: AASTreeState, row: AASTreeRow, altKey: boolean, s let rows: AASTreeRow[]; if (altKey) { rows = state.rows.map(item => - item === row ? clone(row, !row.selected) : (item.selected ? clone(item, false) : item), + item === row ? clone(row, !row.selected) : item.selected ? clone(item, false) : item, ); } else if (shiftKey) { const index = state.rows.indexOf(row); @@ -440,7 +421,7 @@ function toggleSelections(state: AASTreeState): AASTreeState { } function setSelectedElements(state: AASTreeState, elements: aas.Referable[]): AASTreeState { - const rows = [ ...state.rows ]; + const rows = [...state.rows]; const set = new Set(elements); for (let i = 0, n = rows.length; i < n; i++) { const row = rows[i]; @@ -470,7 +451,8 @@ function clone(row: AASTreeRow, selected: boolean): AASTreeRow { row.isLeaf, row.parent, row.firstChild, - row.nextSibling); + row.nextSibling, + ); } function getTypeInfo(referable: aas.Referable | null): string { @@ -526,8 +508,7 @@ function getTypeInfo(referable: aas.Referable | null): string { if (operation.outputVariables && operation.outputVariables.length === 1) { value += `: ${variableToString(operation.outputVariables[0].value)}`; - } - else if (operation.outputVariables && operation.outputVariables.length > 1) { + } else if (operation.outputVariables && operation.outputVariables.length > 1) { value += ': {' + operation.outputVariables.map(v => variableToString(v.value)).join(', ') + '}'; } break; @@ -551,7 +532,7 @@ function getTypeInfo(referable: aas.Referable | null): string { return `${value.idShort}: ${value?.value?.keys.map(key => key.value).join('/')}`; } - return `${value.idShort}: ${value.modelType}` + return `${value.idShort}: ${value.modelType}`; } function referenceToString(reference?: aas.Reference): string { @@ -617,14 +598,14 @@ function setMatchIndex(state: AASTreeState, index: number): AASTreeState { ...state, rows: updateHighlighted(index), index: index, - error: null + error: null, }; } else { return { rows: updateHighlighted(-1), index: -1, terms: [], - error: null + error: null, }; } @@ -648,9 +629,9 @@ function setMatchIndex(state: AASTreeState, index: number): AASTreeState { row.isLeaf, row.parent, row.firstChild, - row.nextSibling); - } - else if (rows[i].highlighted) { + row.nextSibling, + ); + } else if (rows[i].highlighted) { rows[i] = new AASTreeRow( row.id, row.element, @@ -666,7 +647,8 @@ function setMatchIndex(state: AASTreeState, index: number): AASTreeState { row.isLeaf, row.parent, row.firstChild, - row.nextSibling); + row.nextSibling, + ); } } diff --git a/projects/aas-lib/src/lib/aas-tree/aas-tree.selectors.ts b/projects/aas-lib/src/lib/aas-tree/aas-tree.selectors.ts index 33127955..26471295 100644 --- a/projects/aas-lib/src/lib/aas-tree/aas-tree.selectors.ts +++ b/projects/aas-lib/src/lib/aas-tree/aas-tree.selectors.ts @@ -29,29 +29,19 @@ export const selectError = createSelector(getError, error => error); export const selectRow = (index: number) => { return createSelector(getRows, rows => rows[index]); -} +}; -export const selectNodes = createSelector( - getRows, - rows => rows.find(row => row.level === 0)?.getExpanded(rows) ?? [] -); +export const selectNodes = createSelector(getRows, rows => rows.find(row => row.level === 0)?.getExpanded(rows) ?? []); -export const selectSelectedElements = createSelector( - getRows, - rows => rows.filter(row => row.selected).map(item => item.element) +export const selectSelectedElements = createSelector(getRows, rows => + rows.filter(row => row.selected).map(item => item.element), ); export const selectSomeSelected = createSelector( getRows, - rows => rows.length > 0 && rows.some(row => row.selected) && !rows.every(row => row.selected) + rows => rows.length > 0 && rows.some(row => row.selected) && !rows.every(row => row.selected), ); -export const selectEverySelected = createSelector( - getRows, - rows => rows.length > 0 && rows.every(row => row.selected) -); +export const selectEverySelected = createSelector(getRows, rows => rows.length > 0 && rows.every(row => row.selected)); -export const selectSelectedRows = createSelector( - getRows, - rows => rows.filter(row => row.selected) -); +export const selectSelectedRows = createSelector(getRows, rows => rows.filter(row => row.selected)); diff --git a/projects/aas-lib/src/lib/aas-tree/aas-tree.state.ts b/projects/aas-lib/src/lib/aas-tree/aas-tree.state.ts index e597f228..095be6e9 100644 --- a/projects/aas-lib/src/lib/aas-tree/aas-tree.state.ts +++ b/projects/aas-lib/src/lib/aas-tree/aas-tree.state.ts @@ -10,7 +10,7 @@ import { aas, isSubmodel } from 'common'; import { resolveSemanticId, supportedSubmodelTemplates } from '../submodel-template/submodel-template'; export class AASTreeRow { - constructor( + public constructor( public readonly id: string, public readonly element: aas.Referable, public expanded: boolean, @@ -25,8 +25,8 @@ export class AASTreeRow { public readonly isLeaf: boolean, public readonly parent: number, public firstChild: number, - public nextSibling: number) { - } + public nextSibling: number, + ) {} public get hasChildren(): boolean { return this.firstChild >= 0; @@ -80,12 +80,12 @@ export enum DisplayType { undefined = '', Text = 'text', Boolean = 'boolean', - Url = 'url' + Url = 'url', } export interface SearchTerm { - text?: string, - query?: SearchQuery + text?: string; + query?: SearchQuery; } export type Operator = '=' | '<' | '>' | '<=' | '>=' | '!='; diff --git a/projects/aas-lib/src/lib/aas-tree/operation-call-form/operation-call-form.component.html b/projects/aas-lib/src/lib/aas-tree/operation-call-form/operation-call-form.component.html index b1bd0c94..98bee296 100644 --- a/projects/aas-lib/src/lib/aas-tree/operation-call-form/operation-call-form.component.html +++ b/projects/aas-lib/src/lib/aas-tree/operation-call-form/operation-call-form.component.html @@ -12,7 +12,7 @@ - +