diff --git a/functions/package-lock.json b/functions/package-lock.json index 57c250ae..fe35c4f6 100644 --- a/functions/package-lock.json +++ b/functions/package-lock.json @@ -11,7 +11,7 @@ "@google-cloud/translate": "^8.5.0", "compressing": "^1.10.1", "cors": "^2.8.5", - "express": "^4.21.0", + "express": "^4.21.1", "firebase-admin": "^12.6.0", "firebase-functions": "^6.0.1", "sharp": "^0.33.5", @@ -3549,9 +3549,9 @@ "peer": true }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -4511,9 +4511,9 @@ } }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", @@ -4521,7 +4521,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", diff --git a/functions/package.json b/functions/package.json index 77448948..359b72f6 100644 --- a/functions/package.json +++ b/functions/package.json @@ -22,7 +22,7 @@ "@google-cloud/translate": "^8.5.0", "compressing": "^1.10.1", "cors": "^2.8.5", - "express": "^4.21.0", + "express": "^4.21.1", "firebase-admin": "^12.6.0", "firebase-functions": "^6.0.1", "sharp": "^0.33.5", diff --git a/package-lock.json b/package-lock.json index a1617cf2..d5cdefa1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,10 +20,10 @@ "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", - "@ngrx/operators": "^18.0.2", - "@ngrx/signals": "^18.0.2", - "@ngrx/store-devtools": "^18.0.2", - "@stoplight/elements": "^8.4.3", + "@ngrx/operators": "^18.1.0", + "@ngrx/signals": "^18.1.0", + "@ngrx/store-devtools": "^18.1.0", + "@stoplight/elements": "^8.4.6", "browser-detect": "^0.2.28", "file-saver-es": "^2.0.5", "marked": "^12.0.2", @@ -61,11 +61,11 @@ "karma-coverage": "~2.2.0", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "~1.7.0", - "ng-openapi-gen": "^0.51.0", + "ng-openapi-gen": "^0.52.0", "postcss": "^8.4.47", "prettier": "^3.3.3", "prettier-eslint": "^16.3.0", - "tailwindcss": "^3.4.12", + "tailwindcss": "^3.4.14", "typescript": "~5.4.5", "webpack-bundle-analyzer": "^4.10.2" }, @@ -1047,10 +1047,11 @@ } }, "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz", + "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==", "dev": true, + "license": "MIT", "dependencies": { "@jsdevtools/ono": "^7.1.3", "@types/json-schema": "^7.0.6", @@ -1058,24 +1059,6 @@ "js-yaml": "^4.1.0" } }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -3441,12 +3424,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3472,18 +3449,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -3527,6 +3492,7 @@ "version": "5.5.3", "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==", + "deprecated": "Please update to a newer version.", "license": "MIT" }, "node_modules/@fastify/busboy": { @@ -4696,7 +4662,8 @@ "node_modules/@jsdevtools/ono": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==" + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "license": "MIT" }, "node_modules/@jsonjoy.com/base64": { "version": "1.1.2", @@ -4969,9 +4936,9 @@ ] }, "node_modules/@ngrx/operators": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/@ngrx/operators/-/operators-18.0.2.tgz", - "integrity": "sha512-4dyNkVKBw9ZqECMJu6bT2t21p3ANaMC+ZkcfiBfv5OUEFtB9HhN5uCem9tcgYeNBK8XQFA7/1tzd1T3KaiBY8A==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/@ngrx/operators/-/operators-18.1.0.tgz", + "integrity": "sha512-C4/57yiBigrFisrEWFA7XS8OgpGK2Vmvu7y6MYltLzK8FTr2r9FsTCG9oxlOHIxGzd5EJrzHNqqBzqVh/9/nww==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -4981,9 +4948,9 @@ } }, "node_modules/@ngrx/signals": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/@ngrx/signals/-/signals-18.0.2.tgz", - "integrity": "sha512-FXmcY2cmkbhZtg9k8Ntq69SyelGmmb6fWtdButH4T8GGFH0o3f1FZTR829j4ynphy8SzuDhD/pzrnpWcV481oQ==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/@ngrx/signals/-/signals-18.1.0.tgz", + "integrity": "sha512-ivuOyCPXoysUxvCRotRAMtwo+ObfWN06kHz/Nnlp8GyCB6wgZaUUGe6luOQyWhrZkbu3K+oCu7HB6YCSY6zT+A==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -4999,9 +4966,9 @@ } }, "node_modules/@ngrx/store": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-18.0.2.tgz", - "integrity": "sha512-ajwv0+njsO4vzArp9esnFvs1wyUb1U1W8E8LSCKrcW2hWWo9o1Pezj+JRsdQwatxHfrrPFuTDyajsl6GQM/JSA==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-18.1.0.tgz", + "integrity": "sha512-ijxAzJMOb3LeiegpJNNaL8BkcxNg2DVgd/NTiGCJNI7vVUEvtlSRPSWDDYY3Z9Q5oVyqJG9CP0IN/o5FGAGyAw==", "license": "MIT", "peer": true, "dependencies": { @@ -5013,15 +4980,16 @@ } }, "node_modules/@ngrx/store-devtools": { - "version": "18.0.2", - "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-18.0.2.tgz", - "integrity": "sha512-NcfVGUOGNvl1luV+Lt8KDqqwuwNYYaSbEuGi4mq70Hb4ws3sO6BFL9v+AeHLCQ51vKccL/cYqDNMYe4QMD7UaA==", + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-18.1.0.tgz", + "integrity": "sha512-46oTChtdiJCgONwJ6SuKmVlAMe7fKnlRE1puSMyYh5O45ZuKOE6j4VFQQhIyecoce21eO/zmH3CxuBDJaoD4OQ==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { - "@ngrx/store": "18.0.2", + "@angular/core": "^18.0.0", + "@ngrx/store": "18.1.0", "rxjs": "^6.5.3 || ^7.5.0" } }, @@ -5539,21 +5507,21 @@ } }, "node_modules/@react-types/checkbox": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.3.tgz", - "integrity": "sha512-f4c1mnLEt0iS1NMkyZXgT3q3AgcxzDk7w6MSONOKydcnh0xG5L2oefY14DhVDLkAuQS7jThlUFwiAs+MxiO3MA==", + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.8.4.tgz", + "integrity": "sha512-fvZrlQmlFNsYHZpl7GVmyYQlKdUtO5MczMSf8z3TlSiCb5Kl3ha9PsZgLhJqGuVnzB2ArIBz0eZrYa3k0PhcpA==", "license": "Apache-2.0", "dependencies": { - "@react-types/shared": "^3.24.1" + "@react-types/shared": "^3.25.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" } }, "node_modules/@react-types/shared": { - "version": "3.24.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.24.1.tgz", - "integrity": "sha512-AUQeGYEm/zDTN6zLzdXolDxz3Jk5dDL7f506F07U8tBwxNNI3WRdhU84G0/AaFikOZzDXhOZDr3MhQMzyE7Ydw==", + "version": "3.25.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.25.0.tgz", + "integrity": "sha512-OZSyhzU6vTdW3eV/mz5i6hQwQUhkRs7xwY2d1aqPvTdMe0+2cY7Fwp45PAiwYLEj73i9ro2FxF9qC4DvHGSCgQ==", "license": "Apache-2.0", "peerDependencies": { "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0" @@ -6051,12 +6019,12 @@ "dev": true }, "node_modules/@stoplight/elements": { - "version": "8.4.3", - "resolved": "https://registry.npmjs.org/@stoplight/elements/-/elements-8.4.3.tgz", - "integrity": "sha512-m/cb5iehF8bjLFy9RxJSuEP/KQ2+xw1Rs8dXgOwFBQ2gLtZiuiFQpgeoQJ0gfaJ+eqiMYzMCkZPW7/G/85nHzA==", + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@stoplight/elements/-/elements-8.4.6.tgz", + "integrity": "sha512-71vy+O09VYwxL4E85j8pDBCWftkWRGOPbFvazlfTNP6IOuFExu2r4JYraZ25nlTq8/LOxF6NLJc6la7xG8ACoA==", "license": "Apache-2.0", "dependencies": { - "@stoplight/elements-core": "^8.4.3", + "@stoplight/elements-core": "^8.4.6", "@stoplight/http-spec": "^7.1.0", "@stoplight/json": "^3.18.1", "@stoplight/mosaic": "^1.53.4", @@ -6077,9 +6045,9 @@ } }, "node_modules/@stoplight/elements-core": { - "version": "8.4.3", - "resolved": "https://registry.npmjs.org/@stoplight/elements-core/-/elements-core-8.4.3.tgz", - "integrity": "sha512-oH0NoO5//EJL5xXy203dXAgu0PGAR4wqaHJ+MCp7hC0hSpsW3w9W92ICmvD+xFVBXIx9HEhT5MPPQyYU2eMXcQ==", + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/@stoplight/elements-core/-/elements-core-8.4.6.tgz", + "integrity": "sha512-Ci5WIalqh4yODjTQL0jBdW2NDPtu7UgTgWcsphzWWhyv7jTY30NCMZ6g6fYE7ny6sZUoCkWkXaG7yFSCCYJFFw==", "license": "Apache-2.0", "dependencies": { "@stoplight/http-spec": "^7.1.0", @@ -6969,9 +6937,9 @@ "dev": true }, "node_modules/@types/har-format": { - "version": "1.2.15", - "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.15.tgz", - "integrity": "sha512-RpQH4rXLuvTXKR0zqHq3go0RVXYv/YVqv4TnPH95VbwUxZdQlK1EtcMvQvMpDngHbt13Csh9Z4qT9AbkiQH5BA==", + "version": "1.2.16", + "resolved": "https://registry.npmjs.org/@types/har-format/-/har-format-1.2.16.tgz", + "integrity": "sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==", "license": "MIT" }, "node_modules/@types/hast": { @@ -7100,9 +7068,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "17.0.82", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.82.tgz", - "integrity": "sha512-wTW8Lu/PARGPFE8tOZqCvprOKg5sen/2uS03yKn2xbCDFP9oLncm7vMDQ2+dEQXHVIXrOpW6u72xUXEXO0ypSw==", + "version": "17.0.83", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.83.tgz", + "integrity": "sha512-l0m4ArKJvmFtR4e8UmKrj1pB4tUgOhJITf+mADyF/p69Ts1YAR/E+G9XEM0mHXKVRa1dQNHseyyDNzeuAXfXQw==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -8040,6 +8008,13 @@ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/aria-query": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", @@ -8620,7 +8595,8 @@ "node_modules/call-me-maybe": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==" + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", @@ -9441,24 +9417,6 @@ } } }, - "node_modules/cosmiconfig/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/cosmiconfig/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/critters": { "version": "0.0.24", "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", @@ -10761,10 +10719,14 @@ } }, "node_modules/eol": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", - "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", - "dev": true + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.10.0.tgz", + "integrity": "sha512-+w3ktYrOphcIqC1XKmhQYvM+o2uxgQFiimL7B6JPZJlWVxf7Lno9e/JWLPIgbHo7DoZ+b7jsf/NzrUcNe6ZTZQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ryanve" + } }, "node_modules/err-code": { "version": "2.0.3", @@ -11128,12 +11090,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -11242,18 +11198,6 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -13812,6 +13756,19 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsbn": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", @@ -16738,20 +16695,21 @@ } }, "node_modules/ng-openapi-gen": { - "version": "0.51.0", - "resolved": "https://registry.npmjs.org/ng-openapi-gen/-/ng-openapi-gen-0.51.0.tgz", - "integrity": "sha512-u85yX2/is1+DC6Mk6iySWPXc4o34Sx0oLvt7/Y2v4kPJ2SQDjhejbBkdzrchqTVpF/SL74IEw3OtprYXONB5xA==", + "version": "0.52.0", + "resolved": "https://registry.npmjs.org/ng-openapi-gen/-/ng-openapi-gen-0.52.0.tgz", + "integrity": "sha512-twhJ9AIjR1LTRewW7Yg2Xu+iu6Qe3Z5SJR445lhraqWJRnoSkdUtf2Uyi8qIWzl3GWkI2KhHkQsDpC5+HA/iMw==", "dev": true, + "license": "MIT", "dependencies": { - "@apidevtools/json-schema-ref-parser": "~9.0.9", + "@apidevtools/json-schema-ref-parser": "~9.1.2", "argparse": "^2.0.1", - "eol": "^0.9.1", - "fs-extra": "^10.0.1", - "handlebars": "^4.7.7", + "eol": "^0.10.0", + "fs-extra": "^10.1.0", + "handlebars": "^4.7.8", "jsesc": "^3.0.2", "json-schema": "^0.4.0", "lodash": "^4.17.21", - "typescript": "~5.0.4" + "typescript": "~5.1.3" }, "bin": { "ng-openapi-gen": "lib/index.js" @@ -16761,12 +16719,6 @@ "rxjs": ">=6.0.0" } }, - "node_modules/ng-openapi-gen/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/ng-openapi-gen/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -16806,16 +16758,17 @@ } }, "node_modules/ng-openapi-gen/node_modules/typescript": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", - "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=12.20" + "node": ">=14.17" } }, "node_modules/ng-openapi-gen/node_modules/universalify": { @@ -20639,9 +20592,9 @@ } }, "node_modules/tailwindcss": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.12.tgz", - "integrity": "sha512-Htf/gHj2+soPb9UayUNci/Ja3d8pTmu9ONTfh4QY8r3MATTZOzmv6UYWF7ZwikEIC8okpfqmGqrmDehua8mF8w==", + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index a6ea33c7..4b2a2cb0 100644 --- a/package.json +++ b/package.json @@ -39,10 +39,10 @@ "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", - "@ngrx/operators": "^18.0.2", - "@ngrx/signals": "^18.0.2", - "@ngrx/store-devtools": "^18.0.2", - "@stoplight/elements": "^8.4.3", + "@ngrx/operators": "^18.1.0", + "@ngrx/signals": "^18.1.0", + "@ngrx/store-devtools": "^18.1.0", + "@stoplight/elements": "^8.4.6", "browser-detect": "^0.2.28", "file-saver-es": "^2.0.5", "marked": "^12.0.2", @@ -80,11 +80,11 @@ "karma-coverage": "~2.2.0", "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "~1.7.0", - "ng-openapi-gen": "^0.51.0", + "ng-openapi-gen": "^0.52.0", "postcss": "^8.4.47", "prettier": "^3.3.3", "prettier-eslint": "^16.3.0", - "tailwindcss": "^3.4.12", + "tailwindcss": "^3.4.14", "typescript": "~5.4.5", "webpack-bundle-analyzer": "^4.10.2" } diff --git a/src/app/features/spaces/schemas/schemas.component.html b/src/app/features/spaces/schemas/schemas.component.html index 9426512b..33ea3f2e 100644 --- a/src/app/features/spaces/schemas/schemas.component.html +++ b/src/app/features/spaces/schemas/schemas.component.html @@ -90,16 +90,19 @@ Actions - @if ('SCHEMA_UPDATE' | canUserPerform | async) { - - } - @if ('SCHEMA_DELETE' | canUserPerform | async) { - - } + @let inUse = schemasInUse()[element.id]; +
+ @if ('SCHEMA_UPDATE' | canUserPerform | async) { + + } + @if ('SCHEMA_DELETE' | canUserPerform | async) { + + } +
diff --git a/src/app/features/spaces/schemas/schemas.component.ts b/src/app/features/spaces/schemas/schemas.component.ts index 2da9f029..59749804 100644 --- a/src/app/features/spaces/schemas/schemas.component.ts +++ b/src/app/features/spaces/schemas/schemas.component.ts @@ -21,7 +21,7 @@ import { NotificationService } from '@shared/services/notification.service'; import { SchemaService } from '@shared/services/schema.service'; import { ConfirmationDialogComponent } from '@shared/components/confirmation-dialog/confirmation-dialog.component'; import { ConfirmationDialogModel } from '@shared/components/confirmation-dialog/confirmation-dialog.model'; -import { Schema, SchemaCreate, SchemaType } from '@shared/models/schema.model'; +import { Schema, SchemaCreate, SchemaFieldKind, SchemaType } from '@shared/models/schema.model'; import { AddDialogComponent } from './add-dialog/add-dialog.component'; import { AddDialogModel } from './add-dialog/add-dialog.model'; import { ExportDialogComponent } from './export-dialog/export-dialog.component'; @@ -56,6 +56,7 @@ export class SchemasComponent implements OnInit { displayedColumns: string[] = ['type', 'name', 'description', 'labels', /*'createdAt',*/ 'updatedAt', 'actions']; schemas = signal([]); schemaIds = computed(() => this.schemas().map(it => it.id)); + schemasInUse = computed(() => this.inUseSchema(this.schemas())); private destroyRef = inject(DestroyRef); @@ -156,7 +157,10 @@ export class SchemasComponent implements OnInit { }); } - openEditIdDialog(element: Schema): void { + openEditIdDialog(event: MouseEvent, element: Schema): void { + // Prevent Default + event.preventDefault(); + event.stopImmediatePropagation(); this.dialog .open(EditIdDialogComponent, { width: '500px', @@ -265,4 +269,37 @@ export class SchemasComponent implements OnInit { }, }); } + + /** + * Schema names that are in use by other schemas + * @param schemas + */ + inUseSchema(schemas: Schema[]): Record { + const result: Record = {}; + for (const schema of schemas) { + if (schema.type === SchemaType.ROOT || schema.type === SchemaType.NODE) { + for (const field of schema.fields || []) { + if (field.kind === SchemaFieldKind.SCHEMA || field.kind === SchemaFieldKind.SCHEMAS) { + for (const fieldSchema of field.schemas || []) { + if (result[fieldSchema]) { + result[fieldSchema].push(schema.id); + } else { + result[fieldSchema] = [schema.id]; + } + } + } else if (field.kind === SchemaFieldKind.OPTION || field.kind === SchemaFieldKind.OPTIONS) { + const fieldEnum = field.source; + if (fieldEnum !== 'self') { + if (result[fieldEnum]) { + result[fieldEnum].push(schema.id); + } else { + result[fieldEnum] = [schema.id]; + } + } + } + } + } + } + return result; + } }