diff --git a/.eslintrc.js b/.eslintrc.js index 5d1c6715e..b766f2804 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -2,12 +2,13 @@ module.exports = { root: true, parser: "@typescript-eslint/parser", plugins: ["@typescript-eslint"], - extends: ["standard-with-typescript", "plugin:prettier/recommended"], + extends: ["standard", "plugin:prettier/recommended"], overrides: [ { - files: ["*.ts", "*.tsx"], + files: ["**/*.ts", "**/*.tsx"], parserOptions: { project: ["tsconfig.json"], + tsconfigRootDir: __dirname, }, }, ], @@ -15,12 +16,16 @@ module.exports = { "prettier/prettier": 1, "no-console": ["error"], "eol-last": ["error"], + "no-undef": 0, + "no-unused-vars": 0, + "no-use-before-define": 0, + "no-useless-return": 0, + "@typescript-eslint/no-unused-vars": 1, "@typescript-eslint/explicit-function-return-type": 0, // prisma delegates are really difficult to handle otherwise. + "@typescript-eslint/no-use-before-define": 1, "@typescript-eslint/restrict-template-expressions": 0, "@typescript-eslint/strict-boolean-expressions": 0, "@typescript-eslint/no-non-null-assertion": 0, - "@typescript-eslint/ban-ts-ignore": 0, - "@typescript-eslint/prefer-ts-expect-error": 0, "@typescript-eslint/consistent-type-imports": 1, "@typescript-eslint/ban-ts-comment": 1, "@typescript-eslint/no-confusing-void-expression": 1, diff --git a/package-lock.json b/package-lock.json index b188e59fa..391fcd025 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,7 +14,7 @@ "@prisma/client": "^5.22.0", "@types/csurf": "^1.11.5", "accessible-autocomplete": "^2.0.3", - "axios": "1.15.0", + "axios": "1.17.0", "body-parser": "^1.19.0", "compression": "^1.7.4", "connect-redis": "^6.0.0", @@ -89,8 +89,8 @@ "@types/pluralize": "0.0.29", "@types/supertest": "^2.0.16", "@types/url-parse": "^1.4.11", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.58.2", + "@typescript-eslint/parser": "^8.58.2", "babel-loader": "^8.4.1", "babel-plugin-module-resolver": "^5.0.2", "cheerio": "^1.0.0-rc.10", @@ -101,12 +101,13 @@ "cypress-file-upload": "^5.0.7", "cz-conventional-changelog": "^3.3.0", "date-fns": "^2.30.0", - "eslint": "^7.32.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^8.10.2", - "eslint-config-standard-with-typescript": "^20.0.0", - "eslint-plugin-n": "^15.7.0", + "eslint-config-standard": "^17.1.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-n": "^16.6.2", "eslint-plugin-prettier": "^4.2.5", - "eslint-plugin-promise": "^5.2.0", + "eslint-plugin-promise": "^6.6.0", "esm": "^3.2.25", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^6.5.3", @@ -776,13 +777,13 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.15", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.15.tgz", - "integrity": "sha512-PxMRlCFNiQnke9YR29vjFQwz4jq+6Q04rOVFeTDR2K7Qpv9h9FOWOxG+zJjageimYbWqE3bTuLjmryWHAWbvaA==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.27.tgz", + "integrity": "sha512-hpsCXCOI436kxWpjtRuIHVvuPP81MOw8f18jzfZeg+UOiiOvlqWcmWChzEhJEu16cOC6+ku4ncBN+7rdt+DZ9g==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.13.1", - "fast-xml-parser": "5.5.8", + "@smithy/types": "^4.14.3", + "fast-xml-parser": "5.7.3", "tslib": "^2.6.2" }, "engines": { @@ -829,13 +830,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -885,14 +886,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -989,9 +990,9 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "dev": true, "license": "MIT", "engines": { @@ -1013,29 +1014,29 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1058,9 +1059,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "dev": true, "license": "MIT", "engines": { @@ -1118,9 +1119,9 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "dev": true, "license": "MIT", "engines": { @@ -1128,9 +1129,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "dev": true, "license": "MIT", "engines": { @@ -1261,13 +1262,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -2106,16 +2107,16 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", - "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz", + "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.29.0" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -2836,33 +2837,33 @@ } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -2870,14 +2871,14 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -3283,9 +3284,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz", - "integrity": "sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-4.0.1.tgz", + "integrity": "sha512-y20e+e6dFYkOUUJLVUZTsJRuTiXZaUQ32WD+R/ux/HBybbTx4ge7cNINcua0pU8+SNkKuRbOF12mBmzuzM8n5w==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -3303,14 +3304,13 @@ "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "~6.14.1", + "qs": "^6.15.2", "safe-buffer": "^5.1.2", "tough-cookie": "^5.0.0", - "tunnel-agent": "^0.6.0", - "uuid": "^8.3.2" + "tunnel-agent": "^0.6.0" }, "engines": { - "node": ">= 6" + "node": ">= 14.17.0" } }, "node_modules/@cypress/xvfb": { @@ -3387,24 +3387,27 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/ajv": { @@ -3424,40 +3427,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "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", @@ -3465,6 +3434,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@googleapis/sheets": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@googleapis/sheets/-/sheets-4.0.2.tgz", @@ -3493,25 +3472,39 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", "dev": true, "license": "BSD-3-Clause" @@ -4012,6 +4005,18 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@nodable/entities": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@nodable/entities/-/entities-2.1.1.tgz", + "integrity": "sha512-Pig3HxDIoMgjdEH8OCf/dkcTmLFjJRjWuq8jSnklu284/TKOPibSRERmOykiwmyXTtv61mP+44f3GMx0tLAyjg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nodable" + } + ], + "license": "MIT" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -5594,9 +5599,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.13.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", - "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.3.tgz", + "integrity": "sha512-YupL0ZWmFtJexUN2cHzkvvF/b9pKrtAIfT1o7/oY/Ppu8IYeZ+lDPM5vZdQJaSeA132dJCqojjGC9NhXeF71VQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -6433,13 +6438,6 @@ "redis": "*" } }, - "node_modules/@types/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/send": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", @@ -6556,64 +6554,43 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.2.tgz", + "integrity": "sha512-aC2qc5thQahutKjP+cl8cgN9DWe3ZUqVko30CMSZHnFEHyhOYoZSzkGtAI2mcwZ38xeImDucI4dnqsHiOYuuCw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.58.2", + "@typescript-eslint/type-utils": "8.58.2", + "@typescript-eslint/utils": "8.58.2", + "@typescript-eslint/visitor-keys": "8.58.2", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.58.2", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 4" } }, "node_modules/@typescript-eslint/experimental-utils": { @@ -6762,87 +6739,120 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.2.tgz", + "integrity": "sha512-/Zb/xaIDfxeJnvishjGdcR4jmr7S+bda8PKNhRGdljDM+elXhlvN0FyPSsMnLmJUrVG9aPO6dof80wjMawsASg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.58.2", + "@typescript-eslint/types": "8.58.2", + "@typescript-eslint/typescript-estree": "8.58.2", + "@typescript-eslint/visitor-keys": "8.58.2", + "debug": "^4.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.2.tgz", + "integrity": "sha512-Cq6UfpZZk15+r87BkIh5rDpi38W4b+Sjnb8wQCPPDDweS/LRCFjCyViEbzHk5Ck3f2QDfgmlxqSa7S7clDtlfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.58.2", + "@typescript-eslint/types": "^8.58.2", + "debug": "^4.4.3" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.2.tgz", + "integrity": "sha512-SgmyvDPexWETQek+qzZnrG6844IaO02UVyOLhI4wpo82dpZJY9+6YZCKAMFzXb7qhx37mFK1QcPQ18tud+vo6Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "8.58.2", + "@typescript-eslint/visitor-keys": "8.58.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.2.tgz", + "integrity": "sha512-3SR+RukipDvkkKp/d0jP0dyzuls3DbGmwDpVEc5wqk5f38KFThakqAAO0XMirWAE+kT00oTauTbzMFGPoAzB0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.2.tgz", + "integrity": "sha512-Z7EloNR/B389FvabdGeTo2XMs4W9TjtPiO9DAsmT0yom0bwlPyRjkJ1uCdW1DvrrrYP50AJZ9Xc3sByZA9+dcg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@typescript-eslint/types": "8.58.2", + "@typescript-eslint/typescript-estree": "8.58.2", + "@typescript-eslint/utils": "8.58.2", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.2.tgz", + "integrity": "sha512-9TukXyATBQf/Jq9AMQXfvurk+G5R2MwfqQGDR2GzGz28HvY/lXNKGhkY+6IOubwcquikWk5cjlgPvD2uAA7htQ==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -6850,74 +6860,73 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.2.tgz", + "integrity": "sha512-ELGuoofuhhoCvNbQjFFiobFcGgcDCEm0ThWdmO4Z0UzLqPXS3KFvnEZ+SHewwOYHjM09tkzOWXNTv9u6Gqtyuw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@typescript-eslint/project-service": "8.58.2", + "@typescript-eslint/tsconfig-utils": "8.58.2", + "@typescript-eslint/types": "8.58.2", + "@typescript-eslint/visitor-keys": "8.58.2", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": "18 || 20 || >=22" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "balanced-match": "^4.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "18 || 20 || >=22" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "engines": { + "node": "18 || 20 || >=22" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", @@ -6930,32 +6939,76 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "node_modules/@typescript-eslint/utils": { + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.2.tgz", + "integrity": "sha512-QZfjHNEzPY8+l0+fIXMvuQ2sJlplB4zgDZvA+NmvZsZv3EQwOcc1DuIU1VJUTWZ/RKouBMhDyNaBMx4sWvrzRA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.58.2", + "@typescript-eslint/types": "8.58.2", + "@typescript-eslint/typescript-estree": "8.58.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.58.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.2.tgz", + "integrity": "sha512-f1WO2Lx8a9t8DARmcWAUPJbu0G20bJlj8L4z72K00TMeJAoyLr/tHhI/pzYBLrR4dXWkcxO1cWYZEOX8DKHTqA==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", + "@typescript-eslint/types": "8.58.2", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, @@ -7844,13 +7897,14 @@ } }, "node_modules/axios": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", - "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, @@ -8311,9 +8365,9 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", + "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", "license": "MIT", "dependencies": { "bytes": "~3.1.2", @@ -8324,7 +8378,7 @@ "http-errors": "~2.0.1", "iconv-lite": "~0.4.24", "on-finished": "~2.4.1", - "qs": "~6.14.0", + "qs": "~6.15.1", "raw-body": "~2.5.3", "type-is": "~1.6.18", "unpipe": "~1.0.0" @@ -8554,13 +8608,13 @@ } }, "node_modules/browserify-sign": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", - "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.6.tgz", + "integrity": "sha512-sd+Q65fjlWCYWtZKXiKfrUc8d+4jtp/8f0W2NkwzLtoW4bI6UDnWusLWIurHnmurW0XShIRxpwiOX4EoPtXUAg==", "dev": true, "license": "ISC", "dependencies": { - "bn.js": "^5.2.2", + "bn.js": "^5.2.3", "browserify-rsa": "^4.1.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", @@ -8664,17 +8718,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": "*" - } - }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -8695,6 +8738,19 @@ "dev": true, "license": "MIT" }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", @@ -9227,23 +9283,68 @@ } }, "node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" }, "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -10398,15 +10499,15 @@ } }, "node_modules/cypress": { - "version": "15.13.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.13.0.tgz", - "integrity": "sha512-hJ9sY++TUC/HlUzHVJpIrDyqKMjlhx5PTXl/A7eA91JNEtUWkJAqefQR5mo9AtLra/9+m+JJaMg2U5Qd0a74Fw==", + "version": "15.16.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-15.16.0.tgz", + "integrity": "sha512-fy0M0c9xDLEp4v9y7LLKFeAQhIdDsobxDSKpD3JcZpqQefjy9TSzEyVV3HA0zu7hUi0bGHlSYlI7ASub8wgR9A==", "dev": true, "hasInstallScript": true, "license": "MIT", "peer": true, "dependencies": { - "@cypress/request": "^3.0.10", + "@cypress/request": "^4.0.0", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", @@ -10415,25 +10516,21 @@ "blob-util": "^2.0.2", "bluebird": "^3.7.2", "buffer": "^5.7.1", - "cachedir": "^2.3.0", + "cachedir": "^2.4.0", "chalk": "^4.1.0", "ci-info": "^4.1.0", - "cli-cursor": "^3.1.0", "cli-table3": "0.6.1", "commander": "^6.2.1", "common-tags": "^1.8.0", "dayjs": "^1.10.4", "debug": "^4.3.4", - "enquirer": "^2.3.6", "eventemitter2": "6.4.7", "execa": "4.1.0", "executable": "^4.1.1", - "extract-zip": "2.0.1", - "figures": "^3.2.0", "fs-extra": "^9.1.0", "hasha": "5.2.2", "is-installed-globally": "~0.4.0", - "listr2": "^3.8.3", + "listr2": "^9.0.5", "lodash": "^4.17.23", "log-symbols": "^4.0.0", "minimist": "^1.2.8", @@ -10448,7 +10545,7 @@ "tree-kill": "1.2.2", "tslib": "1.14.1", "untildify": "^4.0.0", - "yauzl": "^2.10.0" + "yauzl": "^3.3.1" }, "bin": { "cypress": "bin/cypress" @@ -10582,6 +10679,17 @@ "cypress": ">3.0.0" } }, + "node_modules/cypress/node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/cypress/node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -12089,64 +12197,91 @@ } }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-compat-utils/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-config-prettier": { "version": "8.10.2", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.2.tgz", @@ -12161,9 +12296,9 @@ } }, "node_modules/eslint-config-standard": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", - "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz", + "integrity": "sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==", "dev": true, "funding": [ { @@ -12180,255 +12315,86 @@ } ], "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1 || ^5.0.0" + "eslint": "^8.0.1", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-n": "^15.0.0 || ^16.0.0 ", + "eslint-plugin-promise": "^6.0.0" } }, - "node_modules/eslint-config-standard-jsx": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", - "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", - "peerDependencies": { - "eslint": "^7.12.1", - "eslint-plugin-react": "^7.21.5" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/eslint-config-standard-with-typescript": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-20.0.0.tgz", - "integrity": "sha512-IoySf3r0a2+P3Z6GMjv8p1HuOQ6GWQbMpdt9G8uEbkGpnNWAGBXpgaiutbZHbaQAvG5pkVtYepCfHUxYbVDLCA==", - "deprecated": "Please use eslint-config-love, instead.", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint-config-standard": "^16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": ">=4.0.1", - "eslint": ">=7.12.1", - "eslint-plugin-import": ">=2.22.1", - "eslint-plugin-node": ">=11.1.0", - "eslint-plugin-promise": ">=4.2.1", - "typescript": ">=3.9" + "ms": "^2.1.1" } }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" + "debug": "^3.2.7" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + "node": ">=4" }, "peerDependenciesMeta": { - "typescript": { + "eslint": { "optional": true } } }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-config-standard-with-typescript/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", - "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], "license": "MIT", "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" }, "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "eslint": ">=4.19.1" + "eslint": ">=8" } }, "node_modules/eslint-plugin-import": { @@ -12489,23 +12455,26 @@ } }, "node_modules/eslint-plugin-n": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", - "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", + "version": "16.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", + "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", "dev": true, "license": "MIT", "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^13.24.0", + "ignore": "^5.2.4", + "is-builtin-module": "^3.2.1", + "is-core-module": "^2.12.1", "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" + "resolve": "^1.22.2", + "semver": "^7.5.3" }, "engines": { - "node": ">=12.22.0" + "node": ">=16.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" @@ -12514,35 +12483,6 @@ "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-n/node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-plugin-n/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-n/node_modules/semver": { "version": "7.7.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", @@ -12620,16 +12560,19 @@ } }, "node_modules/eslint-plugin-promise": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-5.2.0.tgz", - "integrity": "sha512-SftLb1pUG01QYq2A/hGAWfDRXqYD82zE7j7TopDOyNdU+7SvvoXREls/+PRTY17vUXzXnZA/zfnyKgRH6x4JJw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", + "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", "dev": true, "license": "ISC", "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "eslint": "^7.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-react": { @@ -12789,16 +12732,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, "node_modules/eslint/node_modules/ajv": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", @@ -12816,16 +12749,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -12839,38 +12762,61 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">= 4" + "node": ">=4.0" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/eslint/node_modules/json-schema-traverse": { @@ -12880,17 +12826,52 @@ "dev": true, "license": "MIT" }, - "node_modules/eslint/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/esm": { @@ -12920,28 +12901,34 @@ } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/espree/node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, "node_modules/esprima": { @@ -13172,14 +13159,14 @@ } }, "node_modules/express": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", - "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "~1.20.3", + "body-parser": "~1.20.5", "content-disposition": "~0.5.4", "content-type": "~1.0.4", "cookie": "~0.7.1", @@ -13198,7 +13185,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "~6.14.0", + "qs": "~6.15.1", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "~0.19.0", @@ -13431,28 +13418,6 @@ "node": ">=4" } }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -13539,9 +13504,9 @@ "license": "Apache-2.0" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "dev": true, "funding": [ { @@ -13556,9 +13521,9 @@ "license": "BSD-3-Clause" }, "node_modules/fast-xml-builder": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz", - "integrity": "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz", + "integrity": "sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q==", "funding": [ { "type": "github", @@ -13567,13 +13532,14 @@ ], "license": "MIT", "dependencies": { - "path-expression-matcher": "^1.1.3" + "path-expression-matcher": "^1.5.0", + "xml-naming": "^0.1.0" } }, "node_modules/fast-xml-parser": { - "version": "5.5.8", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.8.tgz", - "integrity": "sha512-Z7Fh2nVQSb2d+poDViM063ix2ZGt9jmY1nWhPfHBOK2Hgnb/OW3P4Et3P/81SEej0J7QbWtJqxO05h8QYfK7LQ==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.7.3.tgz", + "integrity": "sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg==", "funding": [ { "type": "github", @@ -13582,9 +13548,10 @@ ], "license": "MIT", "dependencies": { - "fast-xml-builder": "^1.1.4", - "path-expression-matcher": "^1.2.0", - "strnum": "^2.2.0" + "@nodable/entities": "^2.1.0", + "fast-xml-builder": "^1.1.7", + "path-expression-matcher": "^1.5.0", + "strnum": "^2.2.3" }, "bin": { "fxparser": "src/cli/cli.js" @@ -13620,17 +13587,6 @@ "bser": "2.1.1" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -13946,9 +13902,9 @@ "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -14229,7 +14185,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -14378,9 +14333,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", - "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", "dev": true, "license": "MIT", "engines": { @@ -14495,6 +14450,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -14833,16 +14801,16 @@ } }, "node_modules/googleapis-common/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.1.tgz", + "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/gopd": { @@ -15827,6 +15795,22 @@ "dev": true, "license": "MIT" }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -16091,7 +16075,6 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -18488,81 +18471,6 @@ "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/ansi-escapes": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", - "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/cli-truncate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", - "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^8.0.0", - "string-width": "^8.2.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lint-staged/node_modules/commander": { "version": "14.0.3", "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", @@ -18573,30 +18481,17 @@ "node": ">=20" } }, - "node_modules/lint-staged/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, - "node_modules/lint-staged/node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "node_modules/lint-staged/node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.6.19" } }, - "node_modules/lint-staged/node_modules/listr2": { + "node_modules/listr2": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", @@ -18614,68 +18509,49 @@ "node": ">=20.0.0" } }, - "node_modules/lint-staged/node_modules/log-update": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", - "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-escapes": "^7.0.0", - "cli-cursor": "^5.0.0", - "slice-ansi": "^7.1.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/lint-staged/node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", - "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, "engines": { - "node": ">=18" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/lint-staged/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" }, "engines": { "node": ">=18" @@ -18684,64 +18560,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/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, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lint-staged/node_modules/slice-ansi": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", - "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.3", - "is-fullwidth-code-point": "^5.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/lint-staged/node_modules/string-argv": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", - "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/lint-staged/node_modules/string-width": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", - "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.5.0", - "strip-ansi": "^7.1.2" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lint-staged/node_modules/strip-ansi": { + "node_modules/listr2/node_modules/strip-ansi": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", @@ -18757,7 +18576,7 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/lint-staged/node_modules/wrap-ansi": { + "node_modules/listr2/node_modules/wrap-ansi": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", @@ -18775,107 +18594,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/lint-staged/node_modules/wrap-ansi/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/listr2": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", - "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.1", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } - } - }, - "node_modules/listr2/node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/listr2/node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/listr2/node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -19132,90 +18850,251 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "node_modules/lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", - "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "node_modules/log-update/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", "dev": true, "license": "MIT", "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" + "mimic-function": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "node_modules/log-update/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/log-update/node_modules/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, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/log-update/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/log-update/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/logform": { @@ -19860,9 +19739,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", "dev": true, "funding": [ { @@ -19885,13 +19764,6 @@ "dev": true, "license": "MIT" }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true, - "license": "MIT" - }, "node_modules/negotiator": { "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", @@ -20187,9 +20059,9 @@ } }, "node_modules/nodemon/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "license": "MIT", "dependencies": { @@ -22968,9 +22840,9 @@ } }, "node_modules/path-expression-matcher": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.2.0.tgz", - "integrity": "sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", + "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", "funding": [ { "type": "github", @@ -23487,9 +23359,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", "dev": true, "funding": [ { @@ -23507,7 +23379,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -23999,9 +23871,9 @@ "license": "MIT" }, "node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -24589,6 +24461,16 @@ "node": ">=8" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", @@ -25792,19 +25674,49 @@ } }, "node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" }, "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/source-map": { @@ -26468,9 +26380,9 @@ } }, "node_modules/strnum": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.2.tgz", - "integrity": "sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz", + "integrity": "sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q==", "funding": [ { "type": "github", @@ -26643,9 +26555,9 @@ } }, "node_modules/systeminformation": { - "version": "5.31.5", - "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.5.tgz", - "integrity": "sha512-5SyLdip4/3alxD4Kh+63bUQTJmu7YMfYQTC+koZy7X73HgNqZSD2P4wOZQWtUncvPvcEmnfIjCoygN4MRoEejQ==", + "version": "5.31.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.7.tgz", + "integrity": "sha512-/8NC53e5nP9nmhn42/ncdOkyJnOoue/Vy+tJOyUGd1Yv66G069wK4rrziwhrqDETgk78CudTQupw5z19S5uoZw==", "dev": true, "license": "MIT", "os": [ @@ -27083,9 +26995,9 @@ "peer": true }, "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", "dev": true, "license": "MIT", "engines": { @@ -27233,6 +27145,19 @@ "node": ">= 14.0.0" } }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/ts-essentials": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-10.1.1.tgz", @@ -27254,31 +27179,96 @@ "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "^4.8.2", - "eslint": "^7.14.0", - "eslint-config-standard": "^16.0.2", - "eslint-config-standard-jsx": "^10.0.0", - "eslint-config-standard-with-typescript": "^19.0.1", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-react": "^7.21.5", - "eslint-plugin-standard": "4.1.0", - "get-stdin": "^8.0.0", - "minimist": "^1.2.5", - "pkg-conf": "^3.1.0", - "standard-engine": "^14.0.1" - }, - "bin": { - "ts-standard": "bin/cmd.js" + "@typescript-eslint/eslint-plugin": "^4.8.2", + "eslint": "^7.14.0", + "eslint-config-standard": "^16.0.2", + "eslint-config-standard-jsx": "^10.0.0", + "eslint-config-standard-with-typescript": "^19.0.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-react": "^7.21.5", + "eslint-plugin-standard": "4.1.0", + "get-stdin": "^8.0.0", + "minimist": "^1.2.5", + "pkg-conf": "^3.1.0", + "standard-engine": "^14.0.1" + }, + "bin": { + "ts-standard": "bin/cmd.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=3.8" + } + }, + "node_modules/ts-standard/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/ts-standard/node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/ts-standard/node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ts-standard/node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=3.8" + "node": ">=10.10.0" } }, + "node_modules/ts-standard/node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/ts-standard/node_modules/@typescript-eslint/eslint-plugin": { "version": "4.33.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", @@ -27418,6 +27408,157 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/ts-standard/node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ts-standard/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/ts-standard/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ts-standard/node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/ts-standard/node_modules/eslint-config-standard": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-16.0.3.tgz", + "integrity": "sha512-x4fmJL5hGqNJKGHSjnLdgA6U6h1YW/G2dW9fA+cyVur4SK6lyue8+UgNKWlZtUDTXvgKDD/Oa3GQjmB5kjtVvg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^4.2.1 || ^5.0.0" + } + }, + "node_modules/ts-standard/node_modules/eslint-config-standard-jsx": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-10.0.0.tgz", + "integrity": "sha512-hLeA2f5e06W1xyr/93/QJulN/rLbUVUmqTlexv9PRKHFwEC9ffJcH2LvJhMoEqYQBEYafedgGZXH2W8NUpt5lA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peerDependencies": { + "eslint": "^7.12.1", + "eslint-plugin-react": "^7.21.5" + } + }, "node_modules/ts-standard/node_modules/eslint-config-standard-with-typescript": { "version": "19.0.1", "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-19.0.1.tgz", @@ -27473,6 +27614,41 @@ "node": ">=10" } }, + "node_modules/ts-standard/node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ts-standard/node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/ts-standard/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, "node_modules/ts-standard/node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -27486,6 +27662,27 @@ "node": ">=6" } }, + "node_modules/ts-standard/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/ts-standard/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, "node_modules/ts-standard/node_modules/load-json-file": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-5.3.0.tgz", @@ -29255,6 +29452,21 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/xml-naming": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/xml-naming/-/xml-naming-0.1.0.tgz", + "integrity": "sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", @@ -29334,15 +29546,30 @@ } }, "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.3.2.tgz", + "integrity": "sha512-Md9ankxxN23wncAN8s7+Tn3Co52zLUPMtnrLAbVCnfG5d2tKBFfmygYSgXlqFgXObtzIgqkx7aNgDBpso9+4qA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yoctocolors": { diff --git a/package.json b/package.json index 868ad0204..478d896db 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@prisma/client": "^5.22.0", "@types/csurf": "^1.11.5", "accessible-autocomplete": "^2.0.3", - "axios": "1.15.0", + "axios": "1.17.0", "body-parser": "^1.19.0", "compression": "^1.7.4", "connect-redis": "^6.0.0", @@ -115,8 +115,8 @@ "@types/pluralize": "0.0.29", "@types/supertest": "^2.0.16", "@types/url-parse": "^1.4.11", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@typescript-eslint/eslint-plugin": "^8.58.2", + "@typescript-eslint/parser": "^8.58.2", "babel-loader": "^8.4.1", "babel-plugin-module-resolver": "^5.0.2", "cheerio": "^1.0.0-rc.10", @@ -127,12 +127,13 @@ "cypress-file-upload": "^5.0.7", "cz-conventional-changelog": "^3.3.0", "date-fns": "^2.30.0", - "eslint": "^7.32.0", + "eslint": "^8.57.1", + "eslint-config-standard": "^17.1.0", "eslint-config-prettier": "^8.10.2", - "eslint-config-standard-with-typescript": "^20.0.0", - "eslint-plugin-n": "^15.7.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-n": "^16.6.2", "eslint-plugin-prettier": "^4.2.5", - "eslint-plugin-promise": "^5.2.0", + "eslint-plugin-promise": "^6.6.0", "esm": "^3.2.25", "file-loader": "^6.2.0", "fork-ts-checker-webpack-plugin": "^6.5.3", @@ -181,7 +182,10 @@ "tmp": "^0.2.4", "lodash": "^4.17.21", "npm": "^11.12.0", - "axios": "1.15.0" + "axios": "1.17.0", + "googleapis-common": { + "uuid": "^11.1.1" + } }, "release": { "branches": [ diff --git a/src/scheduler/batch/tasks/populateMissingAnnualReviewDates/addAnnualReviewStartDate.ts b/src/scheduler/batch/tasks/populateMissingAnnualReviewDates/addAnnualReviewStartDate.ts index 5fdda0daa..3323a9fd4 100644 --- a/src/scheduler/batch/tasks/populateMissingAnnualReviewDates/addAnnualReviewStartDate.ts +++ b/src/scheduler/batch/tasks/populateMissingAnnualReviewDates/addAnnualReviewStartDate.ts @@ -12,5 +12,5 @@ export async function addAnnualReviewStartDate({ firstPublished, listId }: First `listId: ${listId} was firstPublished on ${firstPublished.toISOString()} setting newAnnualReviewStartDate: ${startDate}` ); - return await addAnnualReviewToList({ listId, oneYearAfterFirstPublishedDate: startDate }); + return addAnnualReviewToList({ listId, oneYearAfterFirstPublishedDate: startDate }); } diff --git a/src/scheduler/batch/tasks/populateMissingAnnualReviewDates/index.ts b/src/scheduler/batch/tasks/populateMissingAnnualReviewDates/index.ts index 4f2c967d2..f6f35d2fd 100644 --- a/src/scheduler/batch/tasks/populateMissingAnnualReviewDates/index.ts +++ b/src/scheduler/batch/tasks/populateMissingAnnualReviewDates/index.ts @@ -20,9 +20,9 @@ export async function main() { const updates = await Promise.allSettled(listsWithoutNextAnnualReview.map(addAnnualReviewStartDate)); updates - .filter((result) => result.status !== "fulfilled") + .filter((result): result is PromiseRejectedResult => result.status === "rejected") .forEach((failedResult) => { - logger.error(`Unable to add annual review start dates due to ${(failedResult as PromiseRejectedResult).reason}`); + logger.error(`Unable to add annual review start dates due to ${failedResult.reason}`); }); return updates; diff --git a/src/scheduler/dbHelpers.ts b/src/scheduler/dbHelpers.ts index b48a07a87..3e43676c9 100644 --- a/src/scheduler/dbHelpers.ts +++ b/src/scheduler/dbHelpers.ts @@ -188,7 +188,7 @@ export async function updateIsAnnualReview( create: { type: listItemEvent, jsonData: { - eventName: eventName, + eventName, itemId: listItem.id, }, }, diff --git a/src/scheduler/workers/analytics/views/LiveLists.ts b/src/scheduler/workers/analytics/views/LiveLists.ts index f2fc4dacf..8da69b037 100644 --- a/src/scheduler/workers/analytics/views/LiveLists.ts +++ b/src/scheduler/workers/analytics/views/LiveLists.ts @@ -6,5 +6,5 @@ export async function LiveLists() { const rows = (await prisma.$queryRaw`select * from "LiveLists"`) as any[]; const header = ["count", "type"]; const data = rowValuesAsColumns(rows); - return await updateSheet("LiveLists", [header, ...data]); + return updateSheet("LiveLists", [header, ...data]); } diff --git a/src/scheduler/workers/analytics/views/intservicesprovided.ts b/src/scheduler/workers/analytics/views/intservicesprovided.ts index 9e5393741..c0744786f 100644 --- a/src/scheduler/workers/analytics/views/intservicesprovided.ts +++ b/src/scheduler/workers/analytics/views/intservicesprovided.ts @@ -6,5 +6,5 @@ export async function intservicesprovided() { const rows: any[] = await prisma.$queryRaw`select * from "intservicesprovided"`; const header = getHeadersFromRow(rows[0]); const data = rowValuesAsColumns(rows); - return await updateSheet("intservicesprovided", [header, ...data]); + return updateSheet("intservicesprovided", [header, ...data]); } diff --git a/src/scheduler/workers/createAnnualReviewProviderUrl.ts b/src/scheduler/workers/createAnnualReviewProviderUrl.ts index 8c03041d2..3950839b5 100644 --- a/src/scheduler/workers/createAnnualReviewProviderUrl.ts +++ b/src/scheduler/workers/createAnnualReviewProviderUrl.ts @@ -1,4 +1,4 @@ -import { ListItem } from "@prisma/client"; +import type { ListItem } from "@prisma/client"; import { isLocalHost, SERVICE_DOMAIN } from "server/config"; export function createAnnualReviewProviderUrl(listItem: ListItem): string { diff --git a/src/scheduler/workers/main.ts b/src/scheduler/workers/main.ts index de94059f3..ac87f9225 100644 --- a/src/scheduler/workers/main.ts +++ b/src/scheduler/workers/main.ts @@ -9,7 +9,7 @@ import { runSingleTask } from "./runSingleTask"; async function main() { if (process.env.SCHEDULER_WORKER_RUN_TASK) { logger.warn(`Task requested was ${process.env.SCHEDULER_WORKER_RUN_TASK}. Only running this task.`); - return await runSingleTask(process.env.SCHEDULER_WORKER_RUN_TASK); + return runSingleTask(process.env.SCHEDULER_WORKER_RUN_TASK); } // if a task needs to be executed first, await them here. try { @@ -21,7 +21,7 @@ async function main() { // put all worker tasks to be executed here. They will be executed async (non blocking/non sequential). const tasks = [unpublishWeeklyTask(), unpublishDayBeforeTask(), unpublishDayTask(), deleteItemsAfterAYear()]; - return await Promise.allSettled(tasks); + return Promise.allSettled(tasks); } main() diff --git a/src/scheduler/workers/types.ts b/src/scheduler/workers/types.ts index bb51c4e4a..b20eeef8f 100644 --- a/src/scheduler/workers/types.ts +++ b/src/scheduler/workers/types.ts @@ -1,4 +1,4 @@ -import { List } from "@prisma/client"; +import type { List } from "@prisma/client"; export interface Meta { /** diff --git a/src/scheduler/workers/unpublish/day/changeState/changeState.ts b/src/scheduler/workers/unpublish/day/changeState/changeState.ts index d040c632a..4ff1bb364 100644 --- a/src/scheduler/workers/unpublish/day/changeState/changeState.ts +++ b/src/scheduler/workers/unpublish/day/changeState/changeState.ts @@ -28,9 +28,9 @@ export async function main(list: ListWithCountryName) { const results = await Promise.allSettled(unpublishedListItemsTasks); results - .filter((result) => result.status !== "fulfilled") + .filter((result): result is PromiseRejectedResult => result.status === "rejected") .forEach((failedResult) => { - logger.error((failedResult as PromiseRejectedResult).reason); + logger.error(failedResult.reason); }); logger.info( diff --git a/src/scheduler/workers/unpublish/day/changeState/resetAnnualReviewForList.ts b/src/scheduler/workers/unpublish/day/changeState/resetAnnualReviewForList.ts index 668850ff3..6b88abd02 100644 --- a/src/scheduler/workers/unpublish/day/changeState/resetAnnualReviewForList.ts +++ b/src/scheduler/workers/unpublish/day/changeState/resetAnnualReviewForList.ts @@ -1,9 +1,10 @@ import { prisma } from "scheduler/prismaClient"; -import { AuditEvent, List } from "@prisma/client"; -import { ListJsonData } from "shared/types"; +import type { List } from "@prisma/client"; +import { AuditEvent } from "@prisma/client"; +import type { ListJsonData } from "shared/types"; import { addYears } from "date-fns"; import { addAudit } from "./addAudit"; -import { Meta } from "../types"; +import type { Meta } from "../types"; import { schedulerLogger } from "scheduler/logger"; export async function resetAnnualReviewForList(list: List, meta: Meta) { diff --git a/src/scheduler/workers/unpublish/day/findNonRespondentsForList.ts b/src/scheduler/workers/unpublish/day/findNonRespondentsForList.ts index f90b80310..76217bd57 100644 --- a/src/scheduler/workers/unpublish/day/findNonRespondentsForList.ts +++ b/src/scheduler/workers/unpublish/day/findNonRespondentsForList.ts @@ -1,7 +1,7 @@ import { prisma } from "scheduler/prismaClient"; import { schedulerLogger } from "scheduler/logger"; -import { List, Prisma } from "@prisma/client"; -import { ListJsonData } from "server/models/types"; +import type { List, Prisma } from "@prisma/client"; +import type { ListJsonData } from "server/models/types"; import { parseISO } from "date-fns"; export async function findNonRespondentsForList(list: List) { @@ -10,7 +10,11 @@ export async function findNonRespondentsForList(list: List) { const jsonData = list.jsonData as ListJsonData; const { keyDates } = jsonData.currentAnnualReview!; const reminderToFind = parseISO(keyDates.unpublished.UNPUBLISH); - const annualReviewDate = new Date(list.nextAnnualReviewStartDate!).toISOString(); + if (!list.nextAnnualReviewStartDate) { + logger.warn("Skipping list with missing nextAnnualReviewStartDate"); + return []; + } + const annualReviewDate = list.nextAnnualReviewStartDate.toISOString(); const editedSinceAnnualReviewDate: Prisma.EventWhereInput = { type: { diff --git a/src/scheduler/workers/unpublish/day/getMetaForList.ts b/src/scheduler/workers/unpublish/day/getMetaForList.ts index 31891aaa7..19753a512 100644 --- a/src/scheduler/workers/unpublish/day/getMetaForList.ts +++ b/src/scheduler/workers/unpublish/day/getMetaForList.ts @@ -1,7 +1,7 @@ import { differenceInDays, format, parseISO, startOfDay, startOfToday } from "date-fns"; -import { List } from "server/models/types"; -import { ListWithCountryName } from "../types"; -import { Meta } from "./types"; +import type { List } from "server/models/types"; +import type { ListWithCountryName } from "../types"; +import type { Meta } from "./types"; import { schedulerLogger } from "scheduler/logger"; /** diff --git a/src/scheduler/workers/unpublish/day/sendEmails.ts b/src/scheduler/workers/unpublish/day/sendEmails.ts index 38faa338a..d38ee0223 100644 --- a/src/scheduler/workers/unpublish/day/sendEmails.ts +++ b/src/scheduler/workers/unpublish/day/sendEmails.ts @@ -3,8 +3,8 @@ import { sendUnpublishProviderConfirmation } from "./sendUnpublishProviderConfir import { sendUnpublishPostConfirmation } from "./sendUnpublishPostConfirmation"; import { getMetaForList } from "./getMetaForList"; import { schedulerLogger } from "scheduler/logger"; -import { ListWithCountryName } from "../types"; -import { ListJsonData } from "server/models/types"; +import type { ListWithCountryName } from "../types"; +import type { ListJsonData } from "server/models/types"; export async function main(list: ListWithCountryName) { const logger = schedulerLogger.child({ listId: list.id, method: "sendEmails", timeframe: "day" }); @@ -27,16 +27,16 @@ export async function main(list: ListWithCountryName) { } logger.info(`sending provider email for list items ${listItems.map((listItem) => listItem.id)}`); - const emailsForProviders = listItems.map(async (listItem) => await sendUnpublishProviderConfirmation(listItem, meta)); + const emailsForProviders = listItems.map(async (listItem) => sendUnpublishProviderConfirmation(listItem, meta)); const listJsonData = list.jsonData as ListJsonData; if (!listJsonData.users) { - return await Promise.allSettled(emailsForProviders); + return Promise.allSettled(emailsForProviders); } // email post - const emailsForPost = listJsonData.users.map( - async (emailAddress) => await sendUnpublishPostConfirmation(emailAddress, list, listItems.length, meta) + const emailsForPost = listJsonData.users.map(async (emailAddress) => + sendUnpublishPostConfirmation(emailAddress, list, listItems.length, meta) ); - return await Promise.allSettled([...emailsForProviders, ...emailsForPost]); + return Promise.allSettled([...emailsForProviders, ...emailsForPost]); } diff --git a/src/scheduler/workers/unpublish/day/sendUnpublishPostConfirmation.ts b/src/scheduler/workers/unpublish/day/sendUnpublishPostConfirmation.ts index e721c684e..15e9f58ab 100644 --- a/src/scheduler/workers/unpublish/day/sendUnpublishPostConfirmation.ts +++ b/src/scheduler/workers/unpublish/day/sendUnpublishPostConfirmation.ts @@ -1,9 +1,11 @@ import { schedulerLogger } from "scheduler/logger"; -import { NotifyClient, RequestError } from "notifications-node-client"; +import type { RequestError } from "notifications-node-client"; +import { NotifyClient } from "notifications-node-client"; import { NOTIFY } from "server/config"; -import { Meta } from "./types"; +import type { Meta } from "./types"; import { postReminderPersonalisation } from "./dayReminderPersonalisation"; -import { AuditEvent, List } from "@prisma/client"; +import type { List } from "@prisma/client"; +import { AuditEvent } from "@prisma/client"; import { addAudit } from "scheduler/workers/unpublish/day/changeState/addAudit"; const template = NOTIFY.templates.unpublishNotice.postUnpublished; diff --git a/src/scheduler/workers/unpublish/day/sendUnpublishProviderConfirmation.ts b/src/scheduler/workers/unpublish/day/sendUnpublishProviderConfirmation.ts index bd6852fbc..4c0e7d9df 100644 --- a/src/scheduler/workers/unpublish/day/sendUnpublishProviderConfirmation.ts +++ b/src/scheduler/workers/unpublish/day/sendUnpublishProviderConfirmation.ts @@ -1,10 +1,11 @@ -import { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; +import type { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; import { schedulerLogger } from "scheduler/logger"; -import { NotifyClient, RequestError } from "notifications-node-client"; +import type { RequestError } from "notifications-node-client"; +import { NotifyClient } from "notifications-node-client"; import { NOTIFY } from "server/config"; -import { Meta } from "./types"; +import type { Meta } from "./types"; import { providerReminderPersonalisation } from "./dayReminderPersonalisation"; -import { ListItem } from "@prisma/client"; +import type { ListItem } from "@prisma/client"; import { addReminderEvent } from "scheduler/workers/helpers/addReminderEvent"; const template = NOTIFY.templates.unpublishNotice.providerUnpublished; diff --git a/src/scheduler/workers/unpublish/dayBefore/addDayBeforePostReminderAudit.ts b/src/scheduler/workers/unpublish/dayBefore/addDayBeforePostReminderAudit.ts index 783d26466..1005ba8a1 100644 --- a/src/scheduler/workers/unpublish/dayBefore/addDayBeforePostReminderAudit.ts +++ b/src/scheduler/workers/unpublish/dayBefore/addDayBeforePostReminderAudit.ts @@ -1,6 +1,6 @@ import { prisma } from "scheduler/prismaClient"; -import { AuditCreateInput, ListEventJsonData } from "server/models/types"; -import { AuditEvent } from "@prisma/client"; +import type { AuditCreateInput, ListEventJsonData } from "server/models/types"; +import type { AuditEvent } from "@prisma/client"; export async function addUnpublishPostReminderAudit(eventData: ListEventJsonData, auditEvent: AuditEvent) { const data: AuditCreateInput = { diff --git a/src/scheduler/workers/unpublish/dayBefore/findNonRespondentsForList.ts b/src/scheduler/workers/unpublish/dayBefore/findNonRespondentsForList.ts index 0a0382a4a..7c5737c7b 100644 --- a/src/scheduler/workers/unpublish/dayBefore/findNonRespondentsForList.ts +++ b/src/scheduler/workers/unpublish/dayBefore/findNonRespondentsForList.ts @@ -1,17 +1,25 @@ import { prisma } from "scheduler/prismaClient"; import { schedulerLogger } from "scheduler/logger"; -import { List, Prisma } from "@prisma/client"; -import {parseISO, subDays} from "date-fns"; -import { ListJsonData } from "server/models/types"; +import type { List, Prisma } from "@prisma/client"; +import { parseISO, subDays } from "date-fns"; +import type { ListJsonData } from "server/models/types"; export async function findNonRespondentsForList(list: List) { - const logger = schedulerLogger.child({ listId: list.id, method: "findNonRespondentsForList", timeframe: "dayBefore" }); + const logger = schedulerLogger.child({ + listId: list.id, + method: "findNonRespondentsForList", + timeframe: "dayBefore", + }); const jsonData = list.jsonData as ListJsonData; const { keyDates } = jsonData.currentAnnualReview!; const unpublishDate = parseISO(keyDates.unpublished.UNPUBLISH); const reminderToFind = subDays(unpublishDate, 1); - const annualReviewDate = new Date(list.nextAnnualReviewStartDate!).toISOString(); + if (!list.nextAnnualReviewStartDate) { + logger.warn("Skipping list with missing nextAnnualReviewStartDate"); + return []; + } + const annualReviewDate = list.nextAnnualReviewStartDate.toISOString(); const editedSinceAnnualReviewDate: Prisma.EventWhereInput = { type: { diff --git a/src/scheduler/workers/unpublish/dayBefore/getMetaForList.ts b/src/scheduler/workers/unpublish/dayBefore/getMetaForList.ts index 324d4464a..f5c5ca41f 100644 --- a/src/scheduler/workers/unpublish/dayBefore/getMetaForList.ts +++ b/src/scheduler/workers/unpublish/dayBefore/getMetaForList.ts @@ -1,7 +1,7 @@ import { differenceInDays, format, parseISO, startOfDay, startOfToday } from "date-fns"; -import { List } from "server/models/types"; -import { ListWithCountryName } from "../types"; -import { Meta } from "./types"; +import type { List } from "server/models/types"; +import type { ListWithCountryName } from "../types"; +import type { Meta } from "./types"; import { schedulerLogger } from "scheduler/logger"; /** diff --git a/src/scheduler/workers/unpublish/dayBefore/sendDayBeforeEmails.ts b/src/scheduler/workers/unpublish/dayBefore/sendDayBeforeEmails.ts index c71d2d566..64719a0ec 100644 --- a/src/scheduler/workers/unpublish/dayBefore/sendDayBeforeEmails.ts +++ b/src/scheduler/workers/unpublish/dayBefore/sendDayBeforeEmails.ts @@ -3,8 +3,8 @@ import { sendDayBeforeProviderReminder } from "./sendDayBeforeProviderReminder"; import { sendDayBeforePostReminder } from "./sendDayBeforePostReminder"; import { getMetaForList } from "./getMetaForList"; import { schedulerLogger } from "scheduler/logger"; -import { ListWithCountryName } from "../../types"; -import { ListJsonData } from "server/models/types"; +import type { ListWithCountryName } from "../../types"; +import type { ListJsonData } from "server/models/types"; export async function sendDayBeforeEmails(list: ListWithCountryName) { const logger = schedulerLogger.child({ listId: list.id, method: "sendDayBeforeEmails", timeframe: "dayBefore" }); @@ -28,7 +28,7 @@ export async function sendDayBeforeEmails(list: ListWithCountryName) { } logger.info(`sending provider email for list items ${listItems.map((listItem) => listItem.id)}`); - const providerEmailTasks = listItems.map(async (listItem) => await sendDayBeforeProviderReminder(listItem, meta)); + const providerEmailTasks = listItems.map(async (listItem) => sendDayBeforeProviderReminder(listItem, meta)); const emailsForProviders = await Promise.allSettled(providerEmailTasks); logger.info( `Sent ${emailsForProviders.filter((promise) => promise.status === "fulfilled").length} provider emails for list ${ @@ -39,15 +39,15 @@ export async function sendDayBeforeEmails(list: ListWithCountryName) { const listJsonData = list.jsonData as ListJsonData; if (!listJsonData.users) { - return await Promise.allSettled(emailsForProviders); + return emailsForProviders; } // email post - const postEmailTasks = listJsonData.users.map( - async (emailAddress) => await sendDayBeforePostReminder(emailAddress, list, listItems.length, meta) + const postEmailTasks = listJsonData.users.map(async (emailAddress) => + sendDayBeforePostReminder(emailAddress, list, listItems.length, meta) ); const emailsForPost = await Promise.allSettled(postEmailTasks); logger.info( `Sent ${emailsForPost.filter((promise) => promise.status === "fulfilled").length} post emails for list ${list.id}` ); - return await Promise.allSettled([...emailsForProviders, ...emailsForPost]); + return [...emailsForProviders, ...emailsForPost]; } diff --git a/src/scheduler/workers/unpublish/dayBefore/sendDayBeforePostReminder.ts b/src/scheduler/workers/unpublish/dayBefore/sendDayBeforePostReminder.ts index ffa386755..9936d650e 100644 --- a/src/scheduler/workers/unpublish/dayBefore/sendDayBeforePostReminder.ts +++ b/src/scheduler/workers/unpublish/dayBefore/sendDayBeforePostReminder.ts @@ -1,10 +1,12 @@ import { schedulerLogger } from "scheduler/logger"; -import { NotifyClient, RequestError } from "notifications-node-client"; +import type { RequestError } from "notifications-node-client"; +import { NotifyClient } from "notifications-node-client"; import { NOTIFY } from "server/config"; import { postReminderPersonalisation } from "./dayBeforeReminderPersonalisation"; -import { AuditEvent, List } from "@prisma/client"; +import type { List } from "@prisma/client"; +import { AuditEvent } from "@prisma/client"; import { addUnpublishPostReminderAudit } from "./addDayBeforePostReminderAudit"; -import { Meta } from "./types"; +import type { Meta } from "./types"; const template = NOTIFY.templates.unpublishNotice.postOneDay; diff --git a/src/scheduler/workers/unpublish/dayBefore/sendDayBeforeProviderReminder.ts b/src/scheduler/workers/unpublish/dayBefore/sendDayBeforeProviderReminder.ts index 7ac2529c6..4e414007d 100644 --- a/src/scheduler/workers/unpublish/dayBefore/sendDayBeforeProviderReminder.ts +++ b/src/scheduler/workers/unpublish/dayBefore/sendDayBeforeProviderReminder.ts @@ -1,10 +1,11 @@ -import { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; +import type { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; import { schedulerLogger } from "scheduler/logger"; -import { NotifyClient, RequestError } from "notifications-node-client"; +import type { RequestError } from "notifications-node-client"; +import { NotifyClient } from "notifications-node-client"; import { NOTIFY } from "server/config"; import { providerReminderPersonalisation } from "./dayBeforeReminderPersonalisation"; -import { ListItem } from "@prisma/client"; -import { Meta } from "./types"; +import type { ListItem } from "@prisma/client"; +import type { Meta } from "./types"; import { addReminderEvent } from "scheduler/workers/helpers/addReminderEvent"; const template = NOTIFY.templates.unpublishNotice.providerOneDay; diff --git a/src/scheduler/workers/unpublish/types.ts b/src/scheduler/workers/unpublish/types.ts index 76e8fbb3d..4d0c029ac 100644 --- a/src/scheduler/workers/unpublish/types.ts +++ b/src/scheduler/workers/unpublish/types.ts @@ -1,4 +1,4 @@ -import { List } from "@prisma/client"; +import type { List } from "@prisma/client"; interface CountryName { country: { name: string }; diff --git a/src/scheduler/workers/unpublish/weekly/findNonRespondentsForList.ts b/src/scheduler/workers/unpublish/weekly/findNonRespondentsForList.ts index a1cf7f4d4..1ef586e90 100644 --- a/src/scheduler/workers/unpublish/weekly/findNonRespondentsForList.ts +++ b/src/scheduler/workers/unpublish/weekly/findNonRespondentsForList.ts @@ -1,7 +1,7 @@ import { prisma } from "scheduler/prismaClient"; -import { ListJsonData } from "server/models/types"; +import type { ListJsonData } from "server/models/types"; import { schedulerLogger } from "scheduler/logger"; -import { List, Prisma } from "@prisma/client"; +import type { List, Prisma } from "@prisma/client"; import { findReminderToSend } from "./findReminderToSend"; export async function findNonRespondentsForList(list: List) { @@ -13,7 +13,11 @@ export async function findNonRespondentsForList(list: List) { logger.info(`unpublish date ${unpublished.UNPUBLISH}`); const { reminderToFind, weeksSinceStartDate } = findReminderToSend(list); - const annualReviewDate = new Date(list.nextAnnualReviewStartDate!).toISOString(); + if (!list.nextAnnualReviewStartDate) { + logger.warn("Skipping list with missing nextAnnualReviewStartDate"); + return []; + } + const annualReviewDate = list.nextAnnualReviewStartDate.toISOString(); if (weeksSinceStartDate >= 6 || weeksSinceStartDate === 0) { logger.info( diff --git a/src/scheduler/workers/unpublish/weekly/findReminderToSend.ts b/src/scheduler/workers/unpublish/weekly/findReminderToSend.ts index 232d6cb35..03a298631 100644 --- a/src/scheduler/workers/unpublish/weekly/findReminderToSend.ts +++ b/src/scheduler/workers/unpublish/weekly/findReminderToSend.ts @@ -1,6 +1,6 @@ -import { List } from "@prisma/client"; +import type { List } from "@prisma/client"; import { schedulerLogger } from "scheduler/logger"; -import { ListJsonData } from "server/models/types"; +import type { ListJsonData } from "server/models/types"; import { addWeeks, differenceInWeeks, parseISO, startOfDay, startOfToday } from "date-fns"; export function findReminderToSend(list: List) { diff --git a/src/scheduler/workers/unpublish/weekly/getMetaForList.ts b/src/scheduler/workers/unpublish/weekly/getMetaForList.ts index 8a8e08afd..8eeb3e2b2 100644 --- a/src/scheduler/workers/unpublish/weekly/getMetaForList.ts +++ b/src/scheduler/workers/unpublish/weekly/getMetaForList.ts @@ -1,7 +1,7 @@ import { differenceInWeeks, format, parseISO, startOfDay, startOfToday } from "date-fns"; -import { List } from "server/models/types"; -import { ListWithCountryName } from "../types"; -import { Meta } from "./types"; +import type { List } from "server/models/types"; +import type { ListWithCountryName } from "../types"; +import type { Meta } from "./types"; import { schedulerLogger } from "scheduler/logger"; /** diff --git a/src/scheduler/workers/unpublish/weekly/index.ts b/src/scheduler/workers/unpublish/weekly/index.ts index 1f3044526..d8b6e6231 100644 --- a/src/scheduler/workers/unpublish/weekly/index.ts +++ b/src/scheduler/workers/unpublish/weekly/index.ts @@ -6,8 +6,8 @@ export async function main() { const listsInAnnualReview = await findListsInAnnualReview(); const results = await Promise.allSettled(listsInAnnualReview.map(sendEmailsToNonRespondents)); results - .filter((result) => result.status !== "fulfilled") + .filter((result): result is PromiseRejectedResult => result.status === "rejected") .forEach((failedResult) => { - logger.error(`scheduler unpublish weekly: ${(failedResult as PromiseRejectedResult).reason}`); + logger.error(`scheduler unpublish weekly: ${failedResult.reason}`); }); } diff --git a/src/scheduler/workers/unpublish/weekly/sendEmailToNonRespondents.ts b/src/scheduler/workers/unpublish/weekly/sendEmailToNonRespondents.ts index 2eb75b328..ccea7c0d5 100644 --- a/src/scheduler/workers/unpublish/weekly/sendEmailToNonRespondents.ts +++ b/src/scheduler/workers/unpublish/weekly/sendEmailToNonRespondents.ts @@ -2,7 +2,7 @@ import { findNonRespondentsForList } from "./findNonRespondentsForList"; import { sendUnpublishReminder } from "./sendUnpublishReminder"; import { getMetaForList } from "./getMetaForList"; import { schedulerLogger } from "scheduler/logger"; -import { ListWithCountryName } from "../types"; +import type { ListWithCountryName } from "../types"; export async function sendEmailsToNonRespondents(list: ListWithCountryName) { const logger = schedulerLogger.child({ listId: list.id, method: "sendEmailsToNonRespondents", timeframe: "weekly" }); @@ -18,7 +18,7 @@ export async function sendEmailsToNonRespondents(list: ListWithCountryName) { } const listItems = await findNonRespondentsForList(list); - const emailsToSend = listItems.map(async (listItem) => await sendUnpublishReminder(listItem, meta)); + const emailsToSend = listItems.map(async (listItem) => sendUnpublishReminder(listItem, meta)); const emailsSent = await Promise.allSettled(emailsToSend); if (emailsSent.length) { @@ -27,5 +27,5 @@ export async function sendEmailsToNonRespondents(list: ListWithCountryName) { ); } - return await Promise.allSettled(emailsToSend); + return Promise.allSettled(emailsToSend); } diff --git a/src/scheduler/workers/unpublish/weekly/sendUnpublishReminder.ts b/src/scheduler/workers/unpublish/weekly/sendUnpublishReminder.ts index 6c86bed23..821318284 100644 --- a/src/scheduler/workers/unpublish/weekly/sendUnpublishReminder.ts +++ b/src/scheduler/workers/unpublish/weekly/sendUnpublishReminder.ts @@ -1,10 +1,11 @@ -import { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; +import type { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; import { schedulerLogger } from "scheduler/logger"; -import { NotifyClient, RequestError } from "notifications-node-client"; +import type { RequestError } from "notifications-node-client"; +import { NotifyClient } from "notifications-node-client"; import { NOTIFY } from "server/config"; import { weeklyReminderPersonalisation } from "./weeklyReminderPersonalisation"; -import { ListItem } from "@prisma/client"; -import { Meta } from "./types"; +import type { ListItem } from "@prisma/client"; +import type { Meta } from "./types"; import { addReminderEvent } from "scheduler/workers/helpers/addReminderEvent"; const template = NOTIFY.templates.annualReviewNotices.providerStart; diff --git a/src/server/components/annual-review/controller.ts b/src/server/components/annual-review/controller.ts index 7c14932a9..8cc2c84e1 100644 --- a/src/server/components/annual-review/controller.ts +++ b/src/server/components/annual-review/controller.ts @@ -38,9 +38,10 @@ export async function confirmGetController(req: Request, res: Response, next: Ne let error = null; if (!listItem.isAnnualReview || (await dateHasExpired(listItem.listId))) { - return res.render("annual-review/error", { + res.render("annual-review/error", { text: { title: "This link has expired", body: "This link has expired" }, }); + return; } if (listItem.status !== Status.OUT_WITH_PROVIDER && listItem.isAnnualReview) { @@ -67,12 +68,13 @@ export async function confirmGetController(req: Request, res: Response, next: Ne userAlreadySubmitted )}` ); - return res.render("annual-review/error", { + res.render("annual-review/error", { text: { title: "You have already submitted your annual review", body: "The annual review for your business has already been submitted.", }, }); + return; } } @@ -122,11 +124,13 @@ export async function confirmPostController(req: Request, res: Response, next: N if (!chosenValue) { req.flash("annualReviewError", "Select if your information is correct or if you need to update it"); - return res.redirect(`/annual-review/confirm/${req.body.reference}`); + res.redirect(`/annual-review/confirm/${req.body.reference}`); + return; } req.session.updatesRequired = chosenValue === "no"; - return res.redirect(`/annual-review/declaration/${req.body.reference}`); + res.redirect(`/annual-review/declaration/${req.body.reference}`); + return; } catch (err) { next(err); } @@ -154,7 +158,7 @@ async function redirectToFormRunner(req: Request, res: Response, next: NextFunct }); logger.info(`Generated form runner URL [${formRunnerEditUserUrl}], getting list item contact info.`); - return res.redirect(formRunnerEditUserUrl); + res.redirect(formRunnerEditUserUrl); } export async function declarationGetController(req: Request, res: Response, next: NextFunction): Promise { @@ -198,7 +202,8 @@ export async function declarationPostController(req: Request, res: Response, nex if (!confirmation) { req.flash("declarationError", "You must select the declaration box to proceed"); - return res.redirect(`/annual-review/declaration/${listItemRef}`); + res.redirect(`/annual-review/declaration/${listItemRef}`); + return; } if (updatesRequired) { diff --git a/src/server/components/auth/express-session.ts b/src/server/components/auth/express-session.ts index 08caf158e..e4f4a65e6 100644 --- a/src/server/components/auth/express-session.ts +++ b/src/server/components/auth/express-session.ts @@ -71,7 +71,7 @@ export async function configureExpressSession(server: Express): Promise { const secret = await getSecretValue(SECRET_NAME); const options: session.SessionOptions = { - secret: secret, + secret, saveUninitialized: true, resave: false, proxy: !isLocalHost, diff --git a/src/server/components/auth/json-web-token.ts b/src/server/components/auth/json-web-token.ts index c1fe1ae09..7a9592d40 100644 --- a/src/server/components/auth/json-web-token.ts +++ b/src/server/components/auth/json-web-token.ts @@ -1,7 +1,8 @@ -import jwt, { SignOptions } from "jsonwebtoken"; +import type { SignOptions } from "jsonwebtoken"; +import jwt from "jsonwebtoken"; import { logger } from "server/services/logger"; -import { getSecretValue} from "server/services/secrets-manager"; -import { User } from "server/models/types"; +import { getSecretValue } from "server/services/secrets-manager"; +import type { User } from "server/models/types"; import { JWT_ALGORITHM, JWT_EXPIRE_TIME } from "./constants"; import { authRoutes } from "./routes"; import { ENVIRONMENT } from "server/config/server-config"; diff --git a/src/server/components/auth/passport.ts b/src/server/components/auth/passport.ts index 2b3d0fb86..7d685b5e4 100644 --- a/src/server/components/auth/passport.ts +++ b/src/server/components/auth/passport.ts @@ -1,12 +1,9 @@ -import { Express } from "express"; +import type { Express } from "express"; import passport from "passport"; -import { - ExtractJwt, - StrategyOptions, - Strategy as JwtStrategy, -} from "passport-jwt"; +import type { StrategyOptions } from "passport-jwt"; +import { ExtractJwt, Strategy as JwtStrategy } from "passport-jwt"; import { getJwtSecret } from "./json-web-token"; -import { User } from "server/models/types"; +import type { User } from "server/models/types"; import { findUserByEmail, createUser } from "server/models/user"; import AuthenticatedUser from "./authenticated-user"; @@ -28,9 +25,7 @@ export async function configurePassport(server: Express): Promise { const { user } = token; if (user?.email === undefined) { - logger.warn( - `JwtStrategy token is invalid for user ${JSON.stringify(user)}` - ); + logger.warn(`JwtStrategy token is invalid for user ${JSON.stringify(user)}`); done(new Error("Invalid authentication token")); } else { let userData = await findUserByEmail(user.email); diff --git a/src/server/components/auth/router.ts b/src/server/components/auth/router.ts index e45a9da98..da341cc7e 100644 --- a/src/server/components/auth/router.ts +++ b/src/server/components/auth/router.ts @@ -1,10 +1,5 @@ import express from "express"; -import { - authController, - getLoginController, - postLoginController, - getLogoutController, -} from "./controllers"; +import { authController, getLoginController, postLoginController, getLogoutController } from "./controllers"; import { authRoutes } from "./routes"; export const authRouter = express.Router(); diff --git a/src/server/components/auth/types.ts b/src/server/components/auth/types.ts index 8ae640a60..936c04ffb 100644 --- a/src/server/components/auth/types.ts +++ b/src/server/components/auth/types.ts @@ -1,4 +1,4 @@ -import AuthenticatedUser from "./authenticated-user"; +import type AuthenticatedUser from "./authenticated-user"; declare global { // eslint-disable-next-line @typescript-eslint/no-namespace diff --git a/src/server/components/cookies/controllers.ts b/src/server/components/cookies/controllers.ts index f7d681bed..0de431dd0 100644 --- a/src/server/components/cookies/controllers.ts +++ b/src/server/components/cookies/controllers.ts @@ -1,5 +1,5 @@ import { Buffer } from "buffer"; -import { Request, Response } from "express"; +import type { Request, Response } from "express"; import Url from "url-parse"; import { COOKIES_PAGE_VIEW, ONE_YEAR } from "./constants"; import { cookiesPageRoute } from "./routes"; @@ -21,17 +21,13 @@ export function cookiesPOSTController(req: Request, res: Response): void { usage: accept, }; - res.cookie( - "cookies_policy", - Buffer.from(JSON.stringify(cookiesPolicy)).toString("base64"), - { - maxAge: ONE_YEAR, - secure: !isLocalHost, - // disable encode as it breaks form-runner - encode: (v) => v, - httpOnly: false, // Set this to false so that Google tag manager can read cookie preferences - } - ); + res.cookie("cookies_policy", Buffer.from(JSON.stringify(cookiesPolicy)).toString("base64"), { + maxAge: ONE_YEAR, + secure: !isLocalHost, + // disable encode as it breaks form-runner + encode: (v) => v, + httpOnly: false, // Set this to false so that Google tag manager can read cookie preferences + }); if (redirect === cookiesPageRoute) { // If the referrer is the cookie page then load back the page. diff --git a/src/server/components/dashboard/annualReview/controllers.ts b/src/server/components/dashboard/annualReview/controllers.ts index 38d029f7e..70d97d0fb 100644 --- a/src/server/components/dashboard/annualReview/controllers.ts +++ b/src/server/components/dashboard/annualReview/controllers.ts @@ -42,9 +42,10 @@ export async function editDateGetController(req: Request, res: Response, next: N export async function editDatePostController(req: Request, res: Response, next: NextFunction): Promise { try { - return req.body.action === "confirmNewDate" + req.body.action === "confirmNewDate" ? await confirmNewAnnualReviewDate(req, res, next) : await updateNewAnnualReviewDate(req, res); + return; } catch (error) { logger.error(`editDatePostController Error: ${(error as Error).message}`); next(error); @@ -59,10 +60,11 @@ async function confirmNewAnnualReviewDate(req: Request, res: Response, next: Nex if (!annualReviewDate.value) { req.flash("annualReviewError", annualReviewDate.errorMsg!); - return res.redirect(`${res.locals.listsEditUrl}/annual-review-date`); + res.redirect(`${res.locals.listsEditUrl}/annual-review-date`); + return; } - return res.render("dashboard/lists-edit-annual-review-date-confirm", { + res.render("dashboard/lists-edit-annual-review-date-confirm", { ...DEFAULT_VIEW_PROPS, newAnnualReviewDateFormatted: DateFns.format(annualReviewDate.value, DATE_FORMAT), newAnnualReviewDate: annualReviewDate.value.toISOString(), @@ -101,7 +103,8 @@ async function updateNewAnnualReviewDate(req: Request, res: Response): Promise { const userId = req.user?.id; const { listItemUrl, listIndexUrl, listItem } = res.locals; - const changeMessage = req.session.update?.message; + const changeMessage = req.session.update?.message ?? ""; + + if (!userId) { + req.flash("errorMsg", "Could not identify the current user."); + res.redirect(listItemUrl); + return; + } try { - await archiveListItem(listItem.id, userId!, changeMessage!); + await archiveListItem(listItem.id, userId, changeMessage); req.flash("successBannerTitle", `${listItem.jsonData.organisationName} has been archived`); req.flash("successBannerHeading", "Archived"); req.flash("successBannerColour", "green"); - return res.redirect(listIndexUrl); + res.redirect(listIndexUrl); + return; } catch (error: unknown) { req.flash("errorMsg", `${listItem.jsonData.organisationName} could not be archived.`); logger.error(`listItem archive: ${error}`); - return res.redirect(listItemUrl); + res.redirect(listItemUrl); + return; } } diff --git a/src/server/components/dashboard/listsItems/item/update/actionHandlers/helpers.ts b/src/server/components/dashboard/listsItems/item/update/actionHandlers/helpers.ts index c9c5b3374..b150a1896 100644 --- a/src/server/components/dashboard/listsItems/item/update/actionHandlers/helpers.ts +++ b/src/server/components/dashboard/listsItems/item/update/actionHandlers/helpers.ts @@ -9,11 +9,5 @@ export async function sendPublishedEmail(listItem: ListItemWithAddressCountry) { const { contactName, contactEmailAddress } = getListItemContactInformation(listItem); const typeName = serviceName(listItem.type); - return await sendDataPublishedEmail( - contactName, - contactEmailAddress, - typeName, - listItem.address.country.name, - searchLink - ); + return sendDataPublishedEmail(contactName, contactEmailAddress, typeName, listItem.address.country.name, searchLink); } diff --git a/src/server/components/dashboard/listsItems/item/update/actionHandlers/index.ts b/src/server/components/dashboard/listsItems/item/update/actionHandlers/index.ts index 0b26a590d..a82248d65 100644 --- a/src/server/components/dashboard/listsItems/item/update/actionHandlers/index.ts +++ b/src/server/components/dashboard/listsItems/item/update/actionHandlers/index.ts @@ -20,5 +20,5 @@ export const actionHandlers: Record = { publish, archive, unpublish: publish, - editDetails: editDetails, + editDetails, }; diff --git a/src/server/components/dashboard/listsItems/item/update/actionHandlers/pin.ts b/src/server/components/dashboard/listsItems/item/update/actionHandlers/pin.ts index cb4fbe65e..cf408dd8c 100644 --- a/src/server/components/dashboard/listsItems/item/update/actionHandlers/pin.ts +++ b/src/server/components/dashboard/listsItems/item/update/actionHandlers/pin.ts @@ -1,6 +1,6 @@ import { logger } from "server/services/logger"; import { handlePinListItem } from "server/components/dashboard/listsItems/helpers"; -import { Request, Response } from "express"; +import type { Request, Response } from "express"; export async function pin(req: Request, res: Response) { let action = req.session.update?.action; diff --git a/src/server/components/dashboard/listsItems/item/update/actionHandlers/publish.ts b/src/server/components/dashboard/listsItems/item/update/actionHandlers/publish.ts index 71c979d9f..c138a3caf 100644 --- a/src/server/components/dashboard/listsItems/item/update/actionHandlers/publish.ts +++ b/src/server/components/dashboard/listsItems/item/update/actionHandlers/publish.ts @@ -46,13 +46,13 @@ export async function handleListItemUpdate(id: number, userId: User["id"]) { `Updating ${listItem.id} with explicit 3rd parameter: ${JSON.stringify(auditJsonData.updatedJsonData)}` ); // @ts-ignore - return await update(id, userId, auditJsonData.updatedJsonData); + return update(id, userId, auditJsonData.updatedJsonData); } const listItemJsonData = listItem.jsonData as ListItemJsonData; logger.info(`Updating ${listItem.id} with ${JSON.stringify(listItemJsonData.updatedJsonData)}`); - return await update(id, userId); + return update(id, userId); } export async function publish(req: Request, res: Response) { diff --git a/src/server/components/dashboard/listsItems/item/update/actionHandlers/remove.ts b/src/server/components/dashboard/listsItems/item/update/actionHandlers/remove.ts index 2840558b9..00c1c1b07 100644 --- a/src/server/components/dashboard/listsItems/item/update/actionHandlers/remove.ts +++ b/src/server/components/dashboard/listsItems/item/update/actionHandlers/remove.ts @@ -1,4 +1,4 @@ -import { Request, Response } from "express"; +import type { Request, Response } from "express"; import { deleteListItem } from "server/models/listItem"; export async function remove(req: Request, res: Response) { @@ -11,9 +11,11 @@ export async function remove(req: Request, res: Response) { req.flash("successBannerTitle", `${listItem.jsonData.organisationName} has been removed`); req.flash("successBannerHeading", "Removed"); req.flash("successBannerColour", "red"); - return res.redirect(listIndexUrl); + res.redirect(listIndexUrl); + return; } catch (error: any) { req.flash("errorMsg", `${listItem.jsonData.organisationName} could not be updated.`); - return res.redirect(listItemUrl); + res.redirect(listItemUrl); + return; } } diff --git a/src/server/components/dashboard/listsItems/item/update/actionHandlers/update.ts b/src/server/components/dashboard/listsItems/item/update/actionHandlers/update.ts index 396c710ce..2904bd424 100644 --- a/src/server/components/dashboard/listsItems/item/update/actionHandlers/update.ts +++ b/src/server/components/dashboard/listsItems/item/update/actionHandlers/update.ts @@ -1,7 +1,7 @@ -import { Request, Response } from "express"; +import type { Request, Response } from "express"; import { handleListItemUpdate } from "./publish"; import { sendPublishedEmail } from "./helpers"; -import { ListItemWithAddressCountry } from "server/models/listItem/providers/types"; +import type { ListItemWithAddressCountry } from "server/models/listItem/providers/types"; export async function update(req: Request, res: Response): Promise { const userId = req.user!.id; @@ -17,9 +17,11 @@ export async function update(req: Request, res: Response): Promise { req.flash("successBannerTitle", `${organisationName} has been updated and published`); req.flash("successBannerHeading", "Updated and published"); req.flash("successBannerColour", "green"); - return res.redirect(listIndexUrl); + res.redirect(listIndexUrl); + return; } catch (error: any) { req.flash("errorMsg", `${listItem.jsonData.organisationName} could not be updated.`); - return res.redirect(listItemUrl); + res.redirect(listItemUrl); + return; } } diff --git a/src/server/components/dashboard/listsItems/requestValidation.ts b/src/server/components/dashboard/listsItems/requestValidation.ts index 44c7f40ad..01d998352 100644 --- a/src/server/components/dashboard/listsItems/requestValidation.ts +++ b/src/server/components/dashboard/listsItems/requestValidation.ts @@ -1,23 +1,26 @@ -import { NextFunction, Request, Response } from "express"; +import type { NextFunction, Request, Response } from "express"; import { authRoutes } from "server/components/auth"; import { HttpException } from "server/middlewares/error-handlers"; export async function requestValidation(req: Request, res: Response, next: NextFunction): Promise { if (req.isUnauthenticated()) { - return res.redirect(authRoutes.logout); + res.redirect(authRoutes.logout); + return; } const { list, listItem } = res.locals; if (list.type !== listItem.type) { - return next( + next( new HttpException(400, "400", `Trying to edit a list item which is a different service type to list ${list.id}`) ); + return; } if (list.id !== listItem.listId) { const err = new HttpException(400, "400", `Trying to edit a list item which does not belong to list ${list.id}`); - return next(err); + next(err); + return; } - return next(); + next(); } diff --git a/src/server/components/dashboard/listsItems/types.ts b/src/server/components/dashboard/listsItems/types.ts index eca700b96..91494b984 100644 --- a/src/server/components/dashboard/listsItems/types.ts +++ b/src/server/components/dashboard/listsItems/types.ts @@ -1,11 +1,11 @@ /** * Field(s) must be specified for non primitive macros, since they cannot be type checked for. */ -import { Response } from "express"; +import type { Response } from "express"; import { findListItemById } from "server/models/listItem"; import { getListOverview } from "server/components/dashboard/listsItems/helpers"; -import { ListItem } from "server/models/types"; -import { Event } from "@prisma/client"; +import type { ListItem } from "server/models/types"; +import type { Event } from "@prisma/client"; export type NonPrimitiveMacros = "link" | "emailAddress" | "phoneNumber" | "multiLineText"; @@ -84,4 +84,4 @@ export type ListItemRes = Response< } >; -export type ListItemWithHistory = ListItem & {history: Event[]}; +export type ListItemWithHistory = ListItem & { history: Event[] }; diff --git a/src/server/components/dashboard/listsItems/validateAccessToList.ts b/src/server/components/dashboard/listsItems/validateAccessToList.ts index 877645e7b..8d43c6887 100644 --- a/src/server/components/dashboard/listsItems/validateAccessToList.ts +++ b/src/server/components/dashboard/listsItems/validateAccessToList.ts @@ -1,5 +1,5 @@ -import { NextFunction, Request } from "express"; -import { ListIndexRes } from "server/components/dashboard/listsItems/types"; +import type { NextFunction, Request } from "express"; +import type { ListIndexRes } from "server/components/dashboard/listsItems/types"; import { logger } from "server/services/logger"; import { HttpException } from "server/middlewares/error-handlers"; @@ -11,12 +11,14 @@ export async function validateAccessToList(req: Request, res: ListIndexRes, next if (!userHasAccessToList) { logger.warn(`user ${req.user?.id} attempted to change list ${list!.id} but does not have access`); - return next(new HttpException(403, "403", "User is not authorised to access this list.")); + next(new HttpException(403, "403", "User is not authorised to access this list.")); + return; } next(); } catch (error) { logger.error(`validateAccessToList Error: ${(error as Error).message}`); const err = new HttpException(403, "403", "Unable to validate this request. Please try again."); - return next(err); + next(err); + return; } } diff --git a/src/server/components/dashboard/relatedLinks/handlers/confirm.ts b/src/server/components/dashboard/relatedLinks/handlers/confirm.ts index 959ef0aa3..59bd40d52 100644 --- a/src/server/components/dashboard/relatedLinks/handlers/confirm.ts +++ b/src/server/components/dashboard/relatedLinks/handlers/confirm.ts @@ -21,7 +21,8 @@ export async function post(req: Request, res: Response) { const { text, url } = req.session.relatedLink ?? {}; if (!text || !url) { - return res.redirect(`/related-links/${relatedLinkIndex}`); + res.redirect(`/related-links/${relatedLinkIndex}`); + return; } try { diff --git a/src/server/components/dashboard/relatedLinks/handlers/relatedLinkIndexParam.ts b/src/server/components/dashboard/relatedLinks/handlers/relatedLinkIndexParam.ts index 3bc63ae8c..1b501a2c2 100644 --- a/src/server/components/dashboard/relatedLinks/handlers/relatedLinkIndexParam.ts +++ b/src/server/components/dashboard/relatedLinks/handlers/relatedLinkIndexParam.ts @@ -9,21 +9,24 @@ export function handleRelatedLinkIndexParam(req: Request, res: Response, next: N res.locals.relatedLinkIndex = value; if (error) { - return res.redirect(res.locals.listsEditUrl); + res.redirect(res.locals.listsEditUrl); + return; } res.locals.relatedLinkIndex = relatedLinkIndex; if (relatedLinkIndex === "new") { res.locals.relatedLink = req.session.relatedLink; - return next(); + next(); + return; } const { relatedLinks = [] } = res.locals.list.jsonData; const relatedLink = relatedLinks[value]; if (!relatedLink) { - return res.redirect("new"); + res.redirect("new"); + return; } res.locals.relatedLink = { ...relatedLink, ...req.session.relatedLink }; diff --git a/src/server/components/development/controllers.ts b/src/server/components/development/controllers.ts index 0b59e51fb..7bd1be884 100644 --- a/src/server/components/development/controllers.ts +++ b/src/server/components/development/controllers.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-misused-promises */ import { exec } from "child_process"; -import { Request, Response } from "express"; +import type { Request, Response } from "express"; import { UserRoles } from "server/models/types"; import { NOTIFY } from "server/config"; import { createUser, updateUser, findUserByEmail } from "server/models/user"; diff --git a/src/server/components/development/helpers.ts b/src/server/components/development/helpers.ts index 719bd6e46..ba8a16e12 100644 --- a/src/server/components/development/helpers.ts +++ b/src/server/components/development/helpers.ts @@ -1,4 +1,4 @@ -import { Express } from "express"; +import type { Express } from "express"; import { developmentRouter } from "./router"; export async function initDevelopment(server: Express): Promise { diff --git a/src/server/components/feedback/helpers.ts b/src/server/components/feedback/helpers.ts index 44030d698..adb0ecb18 100644 --- a/src/server/components/feedback/helpers.ts +++ b/src/server/components/feedback/helpers.ts @@ -1,4 +1,4 @@ -import { Express } from 'express'; +import type { Express } from "express"; import { feedbackRouter } from "./router"; export async function initFeedback(server: Express): Promise { @@ -20,5 +20,5 @@ export function getFeedbackSuccessContent(): string {

- ` + `; } diff --git a/src/server/components/feedback/index.ts b/src/server/components/feedback/index.ts index ce524d365..28c1eaf10 100644 --- a/src/server/components/feedback/index.ts +++ b/src/server/components/feedback/index.ts @@ -1,2 +1 @@ -export { initFeedback } from './helpers'; - +export { initFeedback } from "./helpers"; diff --git a/src/server/components/formRunner/constants.ts b/src/server/components/formRunner/constants.ts index b8049282f..3a98dc9cb 100644 --- a/src/server/components/formRunner/constants.ts +++ b/src/server/components/formRunner/constants.ts @@ -1,4 +1,4 @@ -export { FORM_RUNNER_URL, FORM_RUNNER_PUBLIC_URL } from "server/config" +export { FORM_RUNNER_URL, FORM_RUNNER_PUBLIC_URL } from "server/config"; export const FORM_RUNNER_INITIALISE_SESSION_ROUTE = "/session"; export enum QuestionName { diff --git a/src/server/components/formRunner/forms.ts b/src/server/components/formRunner/forms.ts index 26a77e12f..182c6e4b7 100644 --- a/src/server/components/formRunner/forms.ts +++ b/src/server/components/formRunner/forms.ts @@ -3,7 +3,7 @@ import lawyers from "@forms/lawyers.json"; import funeralDirectors from "@forms/funeral-directors.json"; export const forms = { - translatorsInterpreters: translatorsInterpreters, - lawyers: lawyers, - funeralDirectors: funeralDirectors, + translatorsInterpreters, + lawyers, + funeralDirectors, }; diff --git a/src/server/components/formRunner/funeralDirectors.ts b/src/server/components/formRunner/funeralDirectors.ts index 4a428ec68..87700eade 100644 --- a/src/server/components/formRunner/funeralDirectors.ts +++ b/src/server/components/formRunner/funeralDirectors.ts @@ -1,6 +1,6 @@ -import { FuneralDirectorListItemGetObject } from "server/models/types"; +import type { FuneralDirectorListItemGetObject } from "server/models/types"; import { ServiceType } from "shared/types"; -import { Field, Question } from "server/components/formRunner/types"; +import type { Field, Question } from "server/components/formRunner/types"; import { parseJsonFormData } from "server/components/formRunner/helpers"; import { get } from "lodash"; diff --git a/src/server/components/formRunner/helpers.ts b/src/server/components/formRunner/helpers.ts index 362b77ede..eb2671793 100644 --- a/src/server/components/formRunner/helpers.ts +++ b/src/server/components/formRunner/helpers.ts @@ -1,5 +1,5 @@ -import * as FormRunner from "./types"; -import { +import type * as FormRunner from "./types"; +import type { FuneralDirectorListItemGetObject, LawyerListItemGetObject, List, @@ -14,9 +14,9 @@ import { isLocalHost, SERVICE_DOMAIN, LISTS_INTERNAL_URL } from "server/config"; import { createFormRunnerEditListItemLink, createFormRunnerReturningUserLink } from "server/components/lists/helpers"; import { getInitiateFormRunnerSessionToken } from "server/components/dashboard/helpers"; import { logger } from "server/services/logger"; -import { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; +import type { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; import { getChangedAddressFields } from "server/models/listItem/providers/helpers"; -import { ListItemWithAddressCountry } from "server/models/listItem/providers/types"; +import type { ListItemWithAddressCountry } from "server/models/listItem/providers/types"; import { forms } from "./forms"; interface NewSessionWebhookDataInput { diff --git a/src/server/components/formRunner/lawyers.ts b/src/server/components/formRunner/lawyers.ts index 0daae7c75..f27c1f9f4 100644 --- a/src/server/components/formRunner/lawyers.ts +++ b/src/server/components/formRunner/lawyers.ts @@ -1,6 +1,6 @@ -import { LawyerListItemGetObject } from "server/models/types"; +import type { LawyerListItemGetObject } from "server/models/types"; import { ServiceType } from "shared/types"; -import { Field, Question } from "server/components/formRunner/types"; +import type { Field, Question } from "server/components/formRunner/types"; import { parseJsonFormData } from "server/components/formRunner/helpers"; import { get } from "lodash"; diff --git a/src/server/components/formRunner/translatorsInterpreters.ts b/src/server/components/formRunner/translatorsInterpreters.ts index f14a6df68..a09afcce5 100644 --- a/src/server/components/formRunner/translatorsInterpreters.ts +++ b/src/server/components/formRunner/translatorsInterpreters.ts @@ -1,6 +1,6 @@ -import { TranslatorInterpreterListItemGetObject } from "server/models/types"; +import type { TranslatorInterpreterListItemGetObject } from "server/models/types"; import { ServiceType } from "shared/types"; -import { Field, Question } from "server/components/formRunner/types"; +import type { Field, Question } from "server/components/formRunner/types"; import { parseJsonFormData } from "server/components/formRunner/helpers"; import { get } from "lodash"; diff --git a/src/server/components/healthCheck/helpers.ts b/src/server/components/healthCheck/helpers.ts index c03f15125..25466e09b 100644 --- a/src/server/components/healthCheck/helpers.ts +++ b/src/server/components/healthCheck/helpers.ts @@ -1,4 +1,4 @@ -import { Express } from "express"; +import type { Express } from "express"; import { healthCheckRouter } from "./router"; export async function initHealthCheck(server: Express): Promise { diff --git a/src/server/components/healthCheck/index.ts b/src/server/components/healthCheck/index.ts index 96396465c..d081a4b22 100644 --- a/src/server/components/healthCheck/index.ts +++ b/src/server/components/healthCheck/index.ts @@ -1 +1 @@ -export { initHealthCheck } from './helpers'; +export { initHealthCheck } from "./helpers"; diff --git a/src/server/components/healthCheck/routes.ts b/src/server/components/healthCheck/routes.ts index fcffd3126..3f276e112 100644 --- a/src/server/components/healthCheck/routes.ts +++ b/src/server/components/healthCheck/routes.ts @@ -1,4 +1,4 @@ export const healthCheckRoutes = { healthCheck: "/health-check", - ping: "/ping" + ping: "/ping", }; diff --git a/src/server/components/lists/find/handlers/funeral-directors/repatriation.ts b/src/server/components/lists/find/handlers/funeral-directors/repatriation.ts index 89d86b309..f7ff1d706 100644 --- a/src/server/components/lists/find/handlers/funeral-directors/repatriation.ts +++ b/src/server/components/lists/find/handlers/funeral-directors/repatriation.ts @@ -29,5 +29,4 @@ export function post(req: Request, res: Response) { } else { res.redirect("country"); } - } diff --git a/src/server/components/sitemap/helpers.ts b/src/server/components/sitemap/helpers.ts index 98c8e0167..4da8a746b 100644 --- a/src/server/components/sitemap/helpers.ts +++ b/src/server/components/sitemap/helpers.ts @@ -1,4 +1,4 @@ -import { Express } from "express"; +import type { Express } from "express"; import { sitemapRouter } from "./router"; export async function initSitemap(server: Express): Promise { diff --git a/src/server/config/database-config.ts b/src/server/config/database-config.ts index 440a1cf65..baab6653c 100644 --- a/src/server/config/database-config.ts +++ b/src/server/config/database-config.ts @@ -7,5 +7,4 @@ export const REDIS_HOST = process.env.REDIS_HOST; export const REDIS_PORT = Number(process.env.REDIS_PORT); export const REDIS_PASSWORD = process.env.REDIS_PASSWORD; export const REDIS_TLS = process.env.REDIS_TLS === "true"; -export const REDIS_CLUSTER_MODE = - process.env.REDIS_CLUSTER_MODE === "true"; +export const REDIS_CLUSTER_MODE = process.env.REDIS_CLUSTER_MODE === "true"; diff --git a/src/server/config/server-config.ts b/src/server/config/server-config.ts index e97ecb865..320f2f4e0 100644 --- a/src/server/config/server-config.ts +++ b/src/server/config/server-config.ts @@ -24,13 +24,12 @@ export const RATE_LIMITING_ENABLED = process.env.RATE_LIMITING_ENABLED === "true export const RATE_LIMIT_MAX = parseInt(process.env.RATE_LIMIT_MAX ?? "120", 10); // AWS -export const AWS_REGION = - process.env.AWS_REGION ?? "eu-west-1"; +export const AWS_REGION = process.env.AWS_REGION ?? "eu-west-1"; export const LOCATION_SERVICE_INDEX_NAME = process.env.LOCATION_SERVICE_INDEX_NAME ?? "fcdo-professional-service-finder"; export const FEEDBACK_EMAIL_ADDRESSES = `${ - process.env.FEEDBACK_EMAIL_ADDRESSES ?? "digitalservicesfeedback@fco.gov.uk,list-management@cautionyourblast.com" + process.env.FEEDBACK_EMAIL_ADDRESSES ?? "digitalservicesfeedback@fco.gov.uk,bcf745d8.kainos.com@emea.teams.ms" }`.split(","); // GOVUK Notify diff --git a/src/server/middlewares/body-parser.ts b/src/server/middlewares/body-parser.ts index 18ef16126..7af5a2dfa 100644 --- a/src/server/middlewares/body-parser.ts +++ b/src/server/middlewares/body-parser.ts @@ -1,4 +1,4 @@ -import { Express } from "express"; +import type { Express } from "express"; import { json, urlencoded } from "body-parser"; export function configureBodyParser(server: Express): void { diff --git a/src/server/middlewares/compression.ts b/src/server/middlewares/compression.ts index aae8d5948..8703f688b 100644 --- a/src/server/middlewares/compression.ts +++ b/src/server/middlewares/compression.ts @@ -1,4 +1,4 @@ -import { Express, Request, Response } from "express"; +import type { Express, Request, Response } from "express"; import compression from "compression"; function shouldCompress(req: Request, res: Response): boolean { diff --git a/src/server/middlewares/logger.ts b/src/server/middlewares/logger.ts index 9754c4d81..2e924e8c7 100644 --- a/src/server/middlewares/logger.ts +++ b/src/server/middlewares/logger.ts @@ -1,4 +1,4 @@ -import { Express } from "express"; +import type { Express } from "express"; import expressWinston from "express-winston"; import { logger } from "server/services/logger"; import { DEBUG } from "server/config"; diff --git a/src/server/middlewares/rate-limit.ts b/src/server/middlewares/rate-limit.ts index 2210b6cf7..b92e95c8d 100644 --- a/src/server/middlewares/rate-limit.ts +++ b/src/server/middlewares/rate-limit.ts @@ -1,5 +1,5 @@ -import rateLimit from 'express-rate-limit'; -import { Express } from "express"; +import rateLimit from "express-rate-limit"; +import type { Express } from "express"; import { RATE_LIMIT_MAX, RATE_LIMITING_ENABLED } from "server/config"; import { rateLimitExceededErrorHandler } from "server/middlewares/error-handlers"; diff --git a/src/server/middlewares/static.ts b/src/server/middlewares/static.ts index b450bb4d7..1b6c71268 100644 --- a/src/server/middlewares/static.ts +++ b/src/server/middlewares/static.ts @@ -1,5 +1,6 @@ import path from "path"; -import express, { Express } from "express"; +import type { Express } from "express"; +import express from "express"; const ROOT = process.cwd(); const NODE_MODULES = path.join(ROOT, "node_modules"); @@ -12,7 +13,9 @@ const errorLogFile = path.join(ROOT, "error.log"); export const configureStaticServer = (server: Express): void => { server.use("/assets", express.static(publicFolderPath)); - server.use("/assets", express.static(govUKAssetsFolderPath, { + server.use( + "/assets", + express.static(govUKAssetsFolderPath, { setHeaders: (res, path) => { const WEBFONT_EXTENSIONS = /\.(?:eot|ttf|woff|svg|woff2)$/i; if (WEBFONT_EXTENSIONS.test(path)) { diff --git a/src/server/models/__mocks__/user.ts b/src/server/models/__mocks__/user.ts index 33de12d27..17c9e96e1 100644 --- a/src/server/models/__mocks__/user.ts +++ b/src/server/models/__mocks__/user.ts @@ -1,4 +1,2 @@ export const findUserByEmail = jest.fn().mockResolvedValue(undefined); -export const createUser = jest - .fn() - .mockImplementation(async (userData) => userData); +export const createUser = jest.fn().mockImplementation(async (userData) => userData); diff --git a/src/server/models/db/__mocks__/prisma-client.ts b/src/server/models/db/__mocks__/prisma-client.ts index 2d76343c4..b8756e9fd 100644 --- a/src/server/models/db/__mocks__/prisma-client.ts +++ b/src/server/models/db/__mocks__/prisma-client.ts @@ -1,5 +1,6 @@ import type { PrismaClient } from "@prisma/client"; -import { mockDeep, mockReset, MockProxy } from "jest-mock-extended"; +import type { MockProxy } from "jest-mock-extended"; +import { mockDeep, mockReset } from "jest-mock-extended"; import { prisma as prismaClient } from "../prisma-client"; jest.mock("../prisma-client", () => ({ diff --git a/src/server/models/feedback.ts b/src/server/models/feedback.ts index 39abbd20d..6c5604a96 100644 --- a/src/server/models/feedback.ts +++ b/src/server/models/feedback.ts @@ -1,10 +1,8 @@ import { prisma } from "server/models/db/prisma-client"; import { logger } from "server/services/logger"; -import { Feedback, FeedbackCreateInput } from "./types"; +import type { Feedback, FeedbackCreateInput } from "./types"; -export async function createFeedback( - data: Pick -): Promise { +export async function createFeedback(data: Pick): Promise { if (data.type === undefined) { throw new Error("Feedback type is required"); } @@ -17,10 +15,7 @@ export async function createFeedback( } } -export async function findFeedbackByType( - type: Feedback["type"], - order: "asc" | "desc" = "desc" -): Promise { +export async function findFeedbackByType(type: Feedback["type"], order: "asc" | "desc" = "desc"): Promise { if (type === undefined) { throw new Error("Feedback type is required"); } @@ -28,7 +23,7 @@ export async function findFeedbackByType( try { return await prisma.feedback.findMany({ where: { type }, - orderBy: { id: order } + orderBy: { id: order }, }); } catch (error) { logger.error(`findFeedbackByType Error: ${error.message}`); diff --git a/src/server/models/helpers.ts b/src/server/models/helpers.ts index 1a0f2fd27..2a5e47c84 100644 --- a/src/server/models/helpers.ts +++ b/src/server/models/helpers.ts @@ -1,7 +1,7 @@ import { isNumber, isArray } from "lodash"; import { getDbPool } from "./db/database"; -import { CountryName } from "server/models/types"; -import { ServiceType } from "shared/types"; +import type { CountryName } from "server/models/types"; +import type { ServiceType } from "shared/types"; import { findListByCountryAndType } from "server/models/list"; import { prisma } from "server/models/db/prisma-client"; import { logger } from "server/services/logger"; diff --git a/src/server/models/listItem/geoHelpers.ts b/src/server/models/listItem/geoHelpers.ts index 0fdfc7cf5..94ec51b3a 100644 --- a/src/server/models/listItem/geoHelpers.ts +++ b/src/server/models/listItem/geoHelpers.ts @@ -1,11 +1,11 @@ // Helpers -import { Country, Point } from "server/models/types"; +import type { Country, Point } from "server/models/types"; import { prisma } from "server/models/db/prisma-client"; import { geoLocatePlaceByText } from "server/services/location"; import { logger } from "server/services/logger"; import { rawInsertGeoLocation } from "server/models/helpers"; -import { Prisma } from "@prisma/client"; -import { DeserialisedWebhookData } from "server/models/listItem/providers/deserialisers/types"; +import type { Prisma } from "@prisma/client"; +import type { DeserialisedWebhookData } from "server/models/listItem/providers/deserialisers/types"; export async function createCountry(country: string): Promise { return await prisma.country.upsert({ @@ -15,10 +15,7 @@ export async function createCountry(country: string): Promise { }); } -export async function getPlaceGeoPoint(props: { - countryName?: string; - text?: string; -}): Promise { +export async function getPlaceGeoPoint(props: { countryName?: string; text?: string }): Promise { const { countryName = 0.0, text = 0.0 } = props; try { @@ -30,9 +27,7 @@ export async function getPlaceGeoPoint(props: { } } -export function makeAddressGeoLocationString( - webhookData: DeserialisedWebhookData -): string { +export function makeAddressGeoLocationString(webhookData: DeserialisedWebhookData): string { const address = [ webhookData["address.firstLine"], webhookData["address.secondLine"], @@ -46,20 +41,16 @@ export function makeAddressGeoLocationString( return address.join(", "); } -export function getCountryFromData( - webhookData: DeserialisedWebhookData -): string { +export function getCountryFromData(webhookData: DeserialisedWebhookData): string { return webhookData.addressCountry ?? webhookData.country; } -export async function createAddressGeoLocation( - item: DeserialisedWebhookData -): Promise { +export async function createAddressGeoLocation(item: DeserialisedWebhookData): Promise { const address = makeAddressGeoLocationString(item); const country = getCountryFromData(item); const point = await geoLocatePlaceByText(address, country); - return await rawInsertGeoLocation(point); + return rawInsertGeoLocation(point); } export async function createAddressObject( diff --git a/src/server/models/listItem/listItem.ts b/src/server/models/listItem/listItem.ts index 5c76935b6..818bf4d01 100644 --- a/src/server/models/listItem/listItem.ts +++ b/src/server/models/listItem/listItem.ts @@ -1,7 +1,11 @@ -import { WebhookData } from "server/components/formRunner"; -import { List, ListItem, Point, User } from "server/models/types"; -import { ServiceType } from "shared/types"; -import { ListItemWithAddressCountry, ListItemWithAddressCountryAndList, ListItemWithJsonData } from "server/models/listItem/providers/types"; +import type { WebhookData } from "server/components/formRunner"; +import type { List, ListItem, Point, User } from "server/models/types"; +import type { ServiceType } from "shared/types"; +import type { + ListItemWithAddressCountry, + ListItemWithAddressCountryAndList, + ListItemWithJsonData, +} from "server/models/listItem/providers/types"; import { makeAddressGeoLocationString } from "server/models/listItem/geoHelpers"; import { rawUpdateGeoLocation } from "server/models/helpers"; import { geoLocatePlaceByText } from "server/services/location"; @@ -11,9 +15,10 @@ import { listItemCreateInputFromWebhook } from "./listItemCreateInputFromWebhook import pgescape from "pg-escape"; import { prisma } from "server/models/db/prisma-client"; import { logger } from "server/services/logger"; -import { AuditEvent, ListItem as PrismaListItem, Prisma, Status } from "@prisma/client"; +import type { ListItem as PrismaListItem, Prisma } from "@prisma/client"; +import { AuditEvent, Status } from "@prisma/client"; import { merge } from "lodash"; -import { DeserialisedWebhookData, ListItemJsonData } from "./providers/deserialisers/types"; +import type { DeserialisedWebhookData, ListItemJsonData } from "./providers/deserialisers/types"; import { EVENTS } from "./listItemEvent"; import { subMonths } from "date-fns"; export { findIndexListItems } from "./summary"; diff --git a/src/server/models/listItem/listItemCreateInputFromWebhook.ts b/src/server/models/listItem/listItemCreateInputFromWebhook.ts index f8a94c2aa..c171c0a05 100644 --- a/src/server/models/listItem/listItemCreateInputFromWebhook.ts +++ b/src/server/models/listItem/listItemCreateInputFromWebhook.ts @@ -1,15 +1,12 @@ -import { Prisma } from "@prisma/client"; +import type { Prisma } from "@prisma/client"; import { getListIdForCountryAndType } from "server/models/helpers"; -import { CountryName } from "server/models/types"; +import type { CountryName } from "server/models/types"; import { logger } from "server/services/logger"; import { createAddressObject } from "./geoHelpers"; -import { - baseDeserialiser, - DESERIALISER, -} from "server/models/listItem/providers/deserialisers"; -import { WebhookData } from "server/components/formRunner"; +import { baseDeserialiser, DESERIALISER } from "server/models/listItem/providers/deserialisers"; +import type { WebhookData } from "server/components/formRunner"; import { checkListItemExists } from "server/models/listItem/providers/helpers"; -import { DeserialisedWebhookData } from "server/models/listItem/providers/deserialisers/types"; +import type { DeserialisedWebhookData } from "server/models/listItem/providers/deserialisers/types"; import { EVENTS } from "./listItemEvent"; export function deserialise(webhook: WebhookData): DeserialisedWebhookData { diff --git a/src/server/models/listItem/providers/FuneralDirectors.ts b/src/server/models/listItem/providers/FuneralDirectors.ts index 2cbc7956e..e96b74019 100644 --- a/src/server/models/listItem/providers/FuneralDirectors.ts +++ b/src/server/models/listItem/providers/FuneralDirectors.ts @@ -1,4 +1,4 @@ -import { FuneralDirectorListItemGetObject } from "server/models/types"; +import type { FuneralDirectorListItemGetObject } from "server/models/types"; import { ServiceType } from "shared/types"; import { getPlaceGeoPoint } from "./../geoHelpers"; import { logger } from "server/services/logger"; diff --git a/src/server/models/listItem/providers/TranslatorsInterpreters.ts b/src/server/models/listItem/providers/TranslatorsInterpreters.ts index 82e84a763..31ac4d1b8 100644 --- a/src/server/models/listItem/providers/TranslatorsInterpreters.ts +++ b/src/server/models/listItem/providers/TranslatorsInterpreters.ts @@ -36,7 +36,7 @@ export async function findPublishedTranslatorsInterpretersPerCountry( const countryName = props.countryName .split("-") // Split the string by hyphen - .map(part => startCase(toLower(part))) // Apply startCase to each part + .map((part) => startCase(toLower(part))) // Apply startCase to each part .join("-"); // Join them back with a hyphen const andWhere: string[] = []; @@ -76,7 +76,7 @@ export async function findPublishedTranslatorsInterpretersPerCountry( const query = fetchPublishedListItemQuery({ type: ServiceType.translatorsInterpreters, countryName, - region: region, + region, fromGeoPoint, andWhere: andWhere.join(" "), offset, diff --git a/src/server/models/listItem/providers/deserialisers/helpers.ts b/src/server/models/listItem/providers/deserialisers/helpers.ts index d1fc6ae7b..9459e80c2 100644 --- a/src/server/models/listItem/providers/deserialisers/helpers.ts +++ b/src/server/models/listItem/providers/deserialisers/helpers.ts @@ -1,5 +1,5 @@ import { uniq } from "lodash"; -import * as FormRunner from "server/components/formRunner"; +import type * as FormRunner from "server/components/formRunner"; function trim(string: string): string { return string.trim(); diff --git a/src/server/models/listItem/providers/helpers.ts b/src/server/models/listItem/providers/helpers.ts index fecbc1003..943a82233 100644 --- a/src/server/models/listItem/providers/helpers.ts +++ b/src/server/models/listItem/providers/helpers.ts @@ -168,7 +168,8 @@ export function getListItemContactInformation(listItem: ListItem): { } { const contactName = get(listItem?.jsonData, "contactName") as string; const contactEmailAddress = get(listItem?.jsonData, "emailAddress") as string; - const contactPhoneNumber = (get(listItem?.jsonData, "contactPhoneNumber") ?? get(listItem?.jsonData, "phoneNumber")) as string; + const contactPhoneNumber = (get(listItem?.jsonData, "contactPhoneNumber") ?? + get(listItem?.jsonData, "phoneNumber")) as string; return { contactName, contactEmailAddress, contactPhoneNumber }; } diff --git a/src/server/models/listItem/queryFactory.ts b/src/server/models/listItem/queryFactory.ts index 7e040823b..e0e3252ec 100644 --- a/src/server/models/listItem/queryFactory.ts +++ b/src/server/models/listItem/queryFactory.ts @@ -1,5 +1,5 @@ -import { PaginationOptions, Tags } from "server/models/listItem/types"; -import { Prisma } from "@prisma/client"; +import type { PaginationOptions, Tags } from "server/models/listItem/types"; +import type { Prisma } from "@prisma/client"; /** * covert TAGS to prisma query options object @@ -67,7 +67,9 @@ export const queryToPrismaQueryMap: Record | { take: number; skip: number } { +export function calculatePagination( + paginationOptions: PaginationOptions +): Record | { take: number; skip: number } { const currentPage = paginationOptions?.pagination?.page ?? 1; const skipAmount = currentPage ? currentPage - 1 : currentPage; return { diff --git a/src/server/models/listItem/summary.ts b/src/server/models/listItem/summary.ts index b25b5b185..0a85c0af5 100644 --- a/src/server/models/listItem/summary.ts +++ b/src/server/models/listItem/summary.ts @@ -1,12 +1,12 @@ -import { IndexListItem, ListIndexOptions } from "server/models/listItem/types"; -import { PaginationResults } from "server/components/lists"; +import type { IndexListItem, ListIndexOptions } from "server/models/listItem/types"; +import type { PaginationResults } from "server/components/lists"; import { queryToPrismaQueryMap } from "server/models/listItem/queryFactory"; import { prisma } from "server/models/db/prisma-client"; import { logger } from "server/services/logger"; import { getPaginationValues } from "server/models/listItem/pagination"; -import { Prisma } from "@prisma/client"; +import type { Prisma } from "@prisma/client"; import { format } from "date-fns"; -import { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; +import type { ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; import type { ListItemWithHistory } from "server/models/listItem/summary.helpers"; import * as SummaryHelpers from "server/models/listItem/summary.helpers"; @@ -93,7 +93,7 @@ export async function findIndexListItems(options: ListIndexOptions): Promise< listId, AND: { ...emailIsVerified, - ...notPinnedByUser(options.userId!), + ...(options.userId && notPinnedByUser(options.userId)), ...(!reqQueries.includes("archived") && { NOT: queryToPrismaQueryMap.archived }), }, ...(OR.length && { OR }), diff --git a/src/server/models/listItem/types.ts b/src/server/models/listItem/types.ts index 4f5709bb9..37a7b49d3 100644 --- a/src/server/models/listItem/types.ts +++ b/src/server/models/listItem/types.ts @@ -1,11 +1,8 @@ -import { JsonObject, List, ListItem, User } from "server/models/types"; -import * as PrismaClient from "@prisma/client"; -import { - DeserialisedWebhookData, - ListItemJsonData, -} from "server/models/listItem/providers/deserialisers/types"; -import { Status } from "@prisma/client"; -import * as SharedTypes from "shared/types"; +import type { JsonObject, List, ListItem, User } from "server/models/types"; +import type * as PrismaClient from "@prisma/client"; +import type { DeserialisedWebhookData, ListItemJsonData } from "server/models/listItem/providers/deserialisers/types"; +import type { Status } from "@prisma/client"; +import type * as SharedTypes from "shared/types"; export enum ACTIVITY_TAGS { to_do = "to_do", diff --git a/src/server/server.ts b/src/server/server.ts index 34d22aa78..8f7dbb599 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -21,7 +21,7 @@ import { initDevelopment } from "./components/development"; import { initHealthCheck } from "./components/healthCheck"; import { configureFormRunnerProxyMiddleware } from "./components/proxyMiddleware"; -import {isDevMode, isLocalHost, isSmokeTest, NODE_ENV, SERVICE_DOMAIN} from "server/config"; +import { isDevMode, isLocalHost, isSmokeTest, NODE_ENV, SERVICE_DOMAIN } from "server/config"; import { logger } from "server/services/logger"; import { ingestRouter } from "server/components/lists/controllers/ingest/router"; import { configureCsrf } from "server/middlewares/csrf"; diff --git a/src/server/services/__mocks__/aws-sdk.ts b/src/server/services/__mocks__/aws-sdk.ts index 2a2961bf8..f9ec83571 100644 --- a/src/server/services/__mocks__/aws-sdk.ts +++ b/src/server/services/__mocks__/aws-sdk.ts @@ -36,10 +36,7 @@ const location = { Summary: { DataSource: "Esri", MaxResults: 1, - ResultBBox: [ - 100.50483000000008, 13.753360000000043, 100.50483000000008, - 13.753360000000043, - ], + ResultBBox: [100.50483000000008, 13.753360000000043, 100.50483000000008, 13.753360000000043], Text: "Bangkok, thailand", }, }), diff --git a/src/server/services/country-codes/index.ts b/src/server/services/country-codes/index.ts index 3baa7e65f..6d8eaaff8 100644 --- a/src/server/services/country-codes/index.ts +++ b/src/server/services/country-codes/index.ts @@ -1,16 +1,13 @@ import { logger } from "../logger"; import { countriesList } from "../../../server/services/metadata"; -export default function getCountryCodeFromCountryName( - countryName: string -): string | undefined { +export default function getCountryCodeFromCountryName(countryName: string): string | undefined { if (!countryName) { logger.error("getCountryCodeFromCountryName: Country name not found"); } const selectedCountry = countriesList.find( - (countryData) => - countryData.text.toLowerCase() === countryName.toLowerCase() + (countryData) => countryData.text.toLowerCase() === countryName.toLowerCase() ); return selectedCountry?.code; diff --git a/src/server/services/govuk-notify.ts b/src/server/services/govuk-notify.ts index fd27d083e..cff47e141 100644 --- a/src/server/services/govuk-notify.ts +++ b/src/server/services/govuk-notify.ts @@ -209,7 +209,7 @@ export async function sendEmails ); const requests = emailAddresses.map(async (emailAddress) => { - return await notifyClient.sendEmail(templateId, emailAddress, options); + return notifyClient.sendEmail(templateId, emailAddress, options); }); const settled = await Promise.allSettled(requests); @@ -221,7 +221,7 @@ export async function sendEmails }); }); - return await Promise.any(requests); + return Promise.any(requests); } function hasNotifyError(settledResult: PromiseSettledResult) { @@ -268,7 +268,7 @@ export async function sendManualActionNotificationToPost(listId: number, trigger } const { users = [] } = list as List; - const userEmails: string[] = users.map(user => user.email); + const userEmails: string[] = users.map((user) => user.email); if (userEmails.length === 0) { return { error: "No email addresses found" }; @@ -276,11 +276,11 @@ export async function sendManualActionNotificationToPost(listId: number, trigger const personalisation = getCommonPersonalisations(list.type, list.country.name); - return await sendEmails(templateId, userEmails, { personalisation, reference: "" }); + return sendEmails(templateId, userEmails, { personalisation, reference: "" }); } export async function sendContactUsEmail(personalisation: Record<"emailSubject" | "emailPayload", string>) { - return await sendEmails(NOTIFY.templates.contactUsApplyJourney, FEEDBACK_EMAIL_ADDRESSES, { + return sendEmails(NOTIFY.templates.contactUsApplyJourney, FEEDBACK_EMAIL_ADDRESSES, { personalisation, reference: "", }); @@ -291,7 +291,7 @@ export async function sendProviderInformedOfEditEmail( personalisation: Record<"contactName" | "typePlural" | "message", string> ) { const { typePlural, ...otherValues } = personalisation; - return await sendEmails( + return sendEmails( NOTIFY.templates.providerInformedOfEdit, [emailAddress], { diff --git a/src/server/services/logger.ts b/src/server/services/logger.ts index bd013c541..07ace32ab 100644 --- a/src/server/services/logger.ts +++ b/src/server/services/logger.ts @@ -4,14 +4,14 @@ import type { TransformableInfo } from "logform"; import { format } from "logform"; const ignoreHttpGET = format((info: TransformableInfo) => { - if (typeof info.message === 'string' && info.message.startsWith("HTTP GET")) { + if (typeof info.message === "string" && info.message.startsWith("HTTP GET")) { return false; } return info; }); const ignoreHttpPOST = format((info: TransformableInfo) => { - if (typeof info.message === 'string' && info.message.startsWith("HTTP POST")) { + if (typeof info.message === "string" && info.message.startsWith("HTTP POST")) { return false; } return info; diff --git a/src/server/services/metadata.ts b/src/server/services/metadata.ts index ebb217f8c..618adf6a6 100644 --- a/src/server/services/metadata.ts +++ b/src/server/services/metadata.ts @@ -398,8 +398,7 @@ export const fcdoLawyersPagesByCountry = { Nicaragua: "https://www.gov.uk/government/publications/nicaragua-list-of-lawyers", "North Macedonia": "https://www.gov.uk/government/publications/north-macedonia-lawyers", Norway: "https://www.gov.uk/government/publications/norway-list-of-lawyers", - "Palestine": - "https://www.gov.uk/government/publications/jerusalem-and-west-bank-list-of-lawyers", + Palestine: "https://www.gov.uk/government/publications/jerusalem-and-west-bank-list-of-lawyers", "Timor-Leste": "https://www.gov.uk/government/publications/timor-leste-list-of-translators-and-interpreters", Pakistan: "https://www.gov.uk/government/publications/pakistan-list-of-lawyers", Panama: "https://www.gov.uk/government/publications/panama-list-of-lawyers", @@ -579,8 +578,7 @@ export const fcdoFuneralDirectorsByCountry = { Tajikistan: "https://www.gov.uk/government/publications/tajikistan-list-of-funeral-directors", Tanzania: "https://www.gov.uk/government/publications/funeral-directors", Thailand: "https://www.gov.uk/government/publications/thailand-funeral-directors", - "Palestine": - "https://www.gov.uk/government/publications/palestine-list-of-funeral-directors", + Palestine: "https://www.gov.uk/government/publications/palestine-list-of-funeral-directors", "Trinidad and Tobago": "https://www.gov.uk/government/publications/trinidad-and-tobago-list-of-funeral-directors", Turkey: "https://www.gov.uk/government/publications/turkey-list-of-funeral-directors", Turkmenistan: "https://www.gov.uk/government/publications/list-of-funeral-directors-in-turkmenistan", @@ -701,8 +699,7 @@ export const fcdoTranslatorsInterpretersByCountry = { Tajikistan: "https://www.gov.uk/government/publications/tajikistan-list-of-translators", Tanzania: "https://www.gov.uk/government/publications/list-of-translators-interpreters", Thailand: "https://www.gov.uk/government/publications/thailand-translators-and-interpreters", - "Palestine": - "https://www.gov.uk/government/publications/jerusalem-and-west-bank-list-of-lawyers", + Palestine: "https://www.gov.uk/government/publications/jerusalem-and-west-bank-list-of-lawyers", "Timor-Leste": "https://www.gov.uk/government/publications/timor-leste-list-of-translators-and-interpreters", Turkey: "https://www.gov.uk/government/publications/turkey-list-of-translators-and-interpreters", Turkmenistan: "https://www.gov.uk/government/publications/turkmenistan-list-of-translators", diff --git a/src/server/services/redis.ts b/src/server/services/redis.ts index 025b9a599..e98da2f0a 100644 --- a/src/server/services/redis.ts +++ b/src/server/services/redis.ts @@ -1,12 +1,6 @@ import IORedis from "ioredis"; import { logger } from "./logger"; -import { - REDIS_HOST, - REDIS_PORT, - REDIS_PASSWORD, - REDIS_TLS, - REDIS_CLUSTER_MODE, -} from "server/config"; +import { REDIS_HOST, REDIS_PORT, REDIS_PASSWORD, REDIS_TLS, REDIS_CLUSTER_MODE } from "server/config"; export type RedisClient = IORedis.Cluster | IORedis.Redis; @@ -29,7 +23,9 @@ export function getRedisClient(): RedisClient { }, ], { - dnsLookup: (address, callback) => callback(null, address), + dnsLookup: (address, callback) => { + callback(null, address); + }, redisOptions: { password: REDIS_PASSWORD, tls: REDIS_TLS ? {} : undefined, diff --git a/src/server/services/secrets-manager/aws.ts b/src/server/services/secrets-manager/aws.ts index 07924eb85..bc85da5cd 100644 --- a/src/server/services/secrets-manager/aws.ts +++ b/src/server/services/secrets-manager/aws.ts @@ -1,4 +1,4 @@ -import { SecretsManagerClient, GetSecretValueCommand} from "@aws-sdk/client-secrets-manager"; +import { SecretsManagerClient, GetSecretValueCommand } from "@aws-sdk/client-secrets-manager"; import { AWS_REGION } from "server/config"; import { logger } from "./../logger"; diff --git a/src/server/services/secrets-manager/index.ts b/src/server/services/secrets-manager/index.ts index 72d262ce7..3d9218253 100644 --- a/src/server/services/secrets-manager/index.ts +++ b/src/server/services/secrets-manager/index.ts @@ -2,8 +2,7 @@ import { isLocalHost, isDev } from "server/config"; import * as local from "./local"; import * as aws from "./aws"; -const shouldUseLocalSecretsManager = - isLocalHost || isDev || process.env.SECRETS_MANAGER === "local"; +const shouldUseLocalSecretsManager = isLocalHost || isDev || process.env.SECRETS_MANAGER === "local"; interface SecretsManager { getSecretValue: (secretName: string) => Promise; diff --git a/src/server/services/secrets-manager/local.ts b/src/server/services/secrets-manager/local.ts index 547b830fd..eb36e9ff0 100644 --- a/src/server/services/secrets-manager/local.ts +++ b/src/server/services/secrets-manager/local.ts @@ -29,9 +29,7 @@ class LocalSecretsManager { this.secrets[SecretId] = { SecretString }; } - async getSecretValue( - params: { SecretId: string } - ): Promise { + async getSecretValue(params: { SecretId: string }): Promise { const { SecretId } = params; const secret = this.secrets[SecretId]; if (secret != null) { @@ -104,6 +102,6 @@ export async function getSecretValue(secretName: string): Promise { return `${secret.SecretString}`; } catch (error) { await createSecret(secretName); - return await getSecretValue(secretName); + return getSecretValue(secretName); } }