diff --git a/apps/backend/.eslintignore b/apps/backend/.eslintignore deleted file mode 100644 index 762a5ca1e1..0000000000 --- a/apps/backend/.eslintignore +++ /dev/null @@ -1,13 +0,0 @@ -# /node_modules/* in the project root is ignored by default -# build artefacts -build/* -coverage/* -# data definition files -**/*.d.ts -# 3rd party libs -/src/public/ -# custom definition files -/src/types/ -# auto-generated REST client for the STFC UserOfficeWebService -openapi.yaml -/generated/ diff --git a/apps/backend/.eslintrc b/apps/backend/.eslintrc deleted file mode 100644 index 33aebeff57..0000000000 --- a/apps/backend/.eslintrc +++ /dev/null @@ -1,76 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 2018, - "sourceType": "module" - }, - "extends": [ - "plugin:@typescript-eslint/recommended", - "plugin:prettier/recommended", - "plugin:jest/recommended" - ], - "plugins": [ - "@typescript-eslint", // Let's us override rules below. - "jest", - "import", - "unused-imports" - ], - "rules": { - "semi": ["error", "always"], - "import/order": [ - "error", - { - "groups": [ - "builtin", - "external", - "internal", - ["parent", "sibling"], - "index" - ], - "pathGroups": [ - { - "pattern": "@src/**", - "group": "internal", - "position": "after" - } - ], - "pathGroupsExcludedImportTypes": ["builtin"], - "newlines-between": "always", - "alphabetize": { - "order": "asc", - "caseInsensitive": true - } - } - ], - "quotes": ["error", "single"], - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "variable", - "format": ["camelCase", "PascalCase", "UPPER_CASE"], - "leadingUnderscore": "allow", - "trailingUnderscore": "allow" - }, - { - "selector": "function", - "format": ["PascalCase", "camelCase"] - } - ], - "@typescript-eslint/no-explicit-any": 1, - "@typescript-eslint/no-inferrable-types": [ - "warn", - { - "ignoreParameters": true - } - ], - "@typescript-eslint/no-unused-vars": "warn", - "@typescript-eslint/ban-ts-comment": "warn", - "padding-line-between-statements": [ - "error", - { "blankLine": "always", "prev": "*", "next": "return" } - ], - "unused-imports/no-unused-imports-ts": 2, - "no-console": "error" // We should use `duo-logger` rather than `console` to log messages - } -} diff --git a/apps/backend/eslint.config.js b/apps/backend/eslint.config.js new file mode 100644 index 0000000000..5b50650255 --- /dev/null +++ b/apps/backend/eslint.config.js @@ -0,0 +1,123 @@ +// For some reason ESLint's own types are not resolved correctly :) +/* eslint-disable import/no-unresolved */ +import eslint from '@eslint/js'; +import tsParser from '@typescript-eslint/parser'; +import { defineConfig } from 'eslint/config'; +import importPlugin from 'eslint-plugin-import'; +import jest from 'eslint-plugin-jest'; +import prettier from 'eslint-plugin-prettier'; +import unusedImports from 'eslint-plugin-unused-imports'; +import globals from 'globals'; +import tseslint from 'typescript-eslint'; + +export default defineConfig([ + { + ignores: [ + 'build/*', + 'coverage/*', + '**/*.d.ts', // data definition files + 'src/public/', //3rd party libs + 'src/types/', + 'openapi.yaml', //# auto-generated REST client for the STFC UserOfficeWebService + 'generated/', + // node_modules is ignored by default + ], + }, + eslint.configs.recommended, + tseslint.configs.recommended, + importPlugin.flatConfigs.recommended, + importPlugin.flatConfigs.typescript, + { + files: ['**/*.{ts,js}'], + languageOptions: { + parser: tsParser, + parserOptions: { + ecmaVersion: 'es2018', + sourceType: 'module', + }, + globals: { ...globals.node }, + }, + plugins: { + 'unused-imports': unusedImports, + prettier, + jest, + }, + rules: { + semi: ['error', 'always'], + quotes: ['error', 'single'], + 'no-console': 'error', // prefer `duo-logger` over console + 'prettier/prettier': 'error', + 'import/order': [ + 'error', + { + groups: [ + 'builtin', + 'external', + 'internal', + ['parent', 'sibling'], + 'index', + ], + // distinctGroup: true, + pathGroups: [ + { + pattern: '@src/**', + group: 'internal', + position: 'after', + }, + ], + pathGroupsExcludedImportTypes: ['builtin'], + 'newlines-between': 'always', + alphabetize: { + order: 'asc', + caseInsensitive: true, + }, + }, + ], + + // TypeScript rules + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'variable', + format: ['camelCase', 'PascalCase', 'UPPER_CASE'], + leadingUnderscore: 'allow', + trailingUnderscore: 'allow', + }, + { + selector: 'function', + format: ['PascalCase', 'camelCase'], + }, + ], + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-inferrable-types': [ + 'warn', + { + ignoreParameters: true, + }, + ], + '@typescript-eslint/no-unused-vars': 'warn', + '@typescript-eslint/ban-ts-comment': 'warn', + + // Other style rules + 'padding-line-between-statements': [ + 'error', + { blankLine: 'always', prev: '*', next: 'return' }, + ], + + // Handle unused imports + 'unused-imports/no-unused-imports': 'error', + //TS already handles undef variables + 'no-undef': 'off', + 'no-unused-vars': 'off', + 'no-unused-expressions': 'off', + //We use these 2 rules in some places intentionally + 'no-prototype-builtins': 'off', + 'no-case-declarations': 'off', + '@typescript-eslint/no-unused-expressions': [ + 'error', + { allowShortCircuit: true, allowTernary: true }, + ], + }, + }, +]); diff --git a/apps/backend/package-lock.json b/apps/backend/package-lock.json index 9fbb583133..1d90bec862 100644 --- a/apps/backend/package-lock.json +++ b/apps/backend/package-lock.json @@ -86,22 +86,24 @@ "@types/simple-oauth2": "^4.1.1", "@types/sinon": "^9.0.11", "@types/yup": "^0.29.13", - "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", + "@typescript-eslint/eslint-plugin": "^8.46.3", + "@typescript-eslint/parser": "^8.46.2", "@user-office-software/uows_client_generator": "^3.1.0", - "eslint": "^8.57.0", + "eslint": "^9.0.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^28.2.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^29.0.1", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-unused-imports": "^3.1.0", + "eslint-plugin-unused-imports": "^4.3.0", + "globals": "^16.5.0", "jest": "^29.7.0", "prettier": "3.2.4", "sinon": "^17.0.1", "ts-jest": "^29.1.1", "ts-node-dev": "^2.0.0", "tsconfig-paths": "^4.2.0", - "typescript": "^5.3.3" + "typescript": "^5.3.3", + "typescript-eslint": "^8.46.3" }, "engines": { "node": ">=22.0.0", @@ -1186,39 +1188,86 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz", + "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -1226,19 +1275,60 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", + "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", "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": { + "url": "https://eslint.org/donate" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@faker-js/faker": { @@ -1403,18 +1493,28 @@ "@hapi/hoek": "9.x.x" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1430,11 +1530,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "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==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/ttlcache": { "version": "1.4.1", @@ -2264,6 +2372,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2277,6 +2386,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -2286,6 +2396,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2953,6 +3064,13 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, "node_modules/@selderee/plugin-htmlparser2": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", @@ -3188,6 +3306,13 @@ "juice": "^7.0.0" } }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/express": { "version": "4.17.13", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", @@ -3300,7 +3425,8 @@ "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/jsonpath": { "version": "0.2.0", @@ -3595,119 +3721,160 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.7.1.tgz", - "integrity": "sha512-KwfdWXJBOviaBVhxO3p5TJiLpNuh2iyXyjmWN0f1nU87pwyvfS0EmjC6ukQVYVFJd/K1+0NWGPDXiyEyQorn0Q==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.4.tgz", + "integrity": "sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/type-utils": "7.7.1", - "@typescript-eslint/utils": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", - "debug": "^4.3.4", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/type-utils": "8.46.4", + "@typescript-eslint/utils": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "ignore": "^7.0.0", "natural-compare": "^1.4.0", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.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": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.46.4", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "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": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.7.1.tgz", - "integrity": "sha512-vmPzBOOtz48F6JAGVS/kZYk4EkXao6iGrD838sp1w3NQQC0W8ry/q641KU4PrG7AKNAf56NOcR8GOpH8l9FPCw==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.4.tgz", + "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.4.tgz", + "integrity": "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.46.4", + "@typescript-eslint/types": "^8.46.4", + "debug": "^4.3.4" }, - "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.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.7.1.tgz", - "integrity": "sha512-PytBif2SF+9SpEUKynYn5g1RHFddJUcyynGpztX3l/ik7KmZEv19WCMhUBkHXPU9es/VWGD3/zg3wg90+Dh2rA==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", + "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1" + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4" + }, + "engines": { + "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.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz", + "integrity": "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==", + "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "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.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.7.1.tgz", - "integrity": "sha512-ZksJLW3WF7o75zaBPScdW1Gbkwhd/lyeXGf1kQCxJaOeITscoSl0MjynVvCzuV5boUz/3fOI06Lz8La55mu29Q==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.4.tgz", + "integrity": "sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.7.1", - "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4", + "@typescript-eslint/utils": "8.46.4", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.7.1.tgz", - "integrity": "sha512-AmPmnGW1ZLTpWa+/2omPrPfR7BcbUU4oha5VIbSbS1a1Tv966bklvLNXxp3mrbc+P2j4MNOTfDffNsk4o0c6/w==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", + "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3715,31 +3882,32 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.7.1.tgz", - "integrity": "sha512-CXe0JHCXru8Fa36dteXqmH2YxngKJjkQLjxzoj6LYwzZ7qZvgsLSc+eqItCrqIop8Vl2UKoAi0StVWu97FQZIQ==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", + "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/visitor-keys": "7.7.1", + "@typescript-eslint/project-service": "8.46.4", + "@typescript-eslint/tsconfig-utils": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.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.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { @@ -3753,10 +3921,11 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3768,52 +3937,59 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.7.1.tgz", - "integrity": "sha512-QUvBxPEaBXf41ZBbaidKICgVL8Hin0p6prQDu6bbetWo39BKbWJxRsErOzMNT1rXvTll+J7ChrbmMCXM9rsvOQ==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", + "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.15", - "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.1", - "@typescript-eslint/types": "7.7.1", - "@typescript-eslint/typescript-estree": "7.7.1", - "semver": "^7.6.0" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.7.1.tgz", - "integrity": "sha512-gBL3Eq25uADw1LQ9kVpf3hRM+DWzs0uZknHYK3hq4jcTPqVCClHGDnB6UUUV2SFeBeA4KWHWbbLqmbGcZ4FYbw==", + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", + "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.7.1", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.46.4", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, "node_modules/@user-office-software/duo-localisation": { "version": "1.2.0", @@ -3948,9 +4124,9 @@ } }, "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -3973,6 +4149,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -3982,6 +4159,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4125,6 +4303,23 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", @@ -4139,16 +4334,20 @@ "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -4165,15 +4364,80 @@ "node": ">=8" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -4205,6 +4469,16 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/async-retry": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", @@ -5295,25 +5569,79 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/dataloader": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", - "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": ">=6.0" + "node": ">= 0.4" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dataloader": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-2.2.2.tgz", + "integrity": "sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/dedent": { @@ -5368,15 +5696,21 @@ } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { - "object-keys": "^1.0.12" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/delayed-stream": { @@ -5464,18 +5798,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/display-notification": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/display-notification/-/display-notification-2.0.0.tgz", @@ -5488,18 +5810,6 @@ "node": ">=4" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/doctypes": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", @@ -5773,31 +6083,66 @@ } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", - "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -5835,15 +6180,45 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -5896,58 +6271,63 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.39.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", + "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.1", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.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", - "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.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -5963,13 +6343,15 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "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", - "resolve": "^1.20.0" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -5977,21 +6359,27 @@ "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.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "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", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { @@ -5999,44 +6387,53 @@ "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-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "dev": true, + "license": "MIT", "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -6056,6 +6453,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -6063,47 +6461,54 @@ "json5": "lib/cli.js" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/eslint-plugin-import/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/eslint-plugin-import/node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/eslint-plugin-jest": { - "version": "28.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.2.0.tgz", - "integrity": "sha512-yRDti/a+f+SMSmNTiT9/M/MzXGkitl8CfzUxnpoQcTyfq8gUrXMriVcWU36W1X6BZSUoyUCJrDAWWUA2N4hE5g==", + "version": "29.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-29.1.0.tgz", + "integrity": "sha512-LabxXbASXVjguqL+kBHTPMf3gUeSqwH4fsrEyHTY/MCs42I/p9+ctg09SJpYiD8eGaIsP6GwYr5xW6xWS9XgZg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^6.0.0" + "@typescript-eslint/utils": "^8.0.0" }, "engines": { - "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + "node": "^20.12.0 || ^22.0.0 || >=24.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", "jest": "*" }, "peerDependenciesMeta": { @@ -6115,131 +6520,6 @@ } } }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/eslint-plugin-jest/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/eslint-plugin-prettier": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", @@ -6271,19 +6551,14 @@ } }, "node_modules/eslint-plugin-unused-imports": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.1.0.tgz", - "integrity": "sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.3.0.tgz", + "integrity": "sha512-ZFBmXMGBYfHttdRtOG9nFFpmUvMtbHSjsKrS20vdWdbfiVYsO3yA2SGYy9i9XmZJDfMGBflZGBCm70SEnFQtOA==", "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, + "license": "MIT", "peerDependencies": { - "@typescript-eslint/eslint-plugin": "6 - 7", - "eslint": "8" + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^9.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "@typescript-eslint/eslint-plugin": { @@ -6291,26 +6566,18 @@ } } }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, "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==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6321,6 +6588,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -6330,6 +6598,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6337,6 +6606,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -6416,17 +6698,31 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6470,6 +6766,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -6482,6 +6779,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -6669,7 +6967,8 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.2.0", @@ -6678,16 +6977,17 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -6698,6 +6998,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -6733,10 +7034,11 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -6757,15 +7059,16 @@ "license": "MIT" }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -6810,18 +7113,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/fixpack": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fixpack/-/fixpack-4.0.0.tgz", @@ -6851,23 +7142,25 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" }, "node_modules/fn.name": { "version": "1.1.0", @@ -6980,6 +7273,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gelf-pro": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/gelf-pro/-/gelf-pro-1.4.0.tgz", @@ -6989,6 +7313,16 @@ "lodash": "~4.17.21" } }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -7086,13 +7420,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7157,38 +7493,33 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/gopd": { @@ -7290,23 +7621,15 @@ "uglify-js": "^3.1.4" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7330,6 +7653,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -7578,10 +7917,11 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -7653,14 +7993,15 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7682,19 +8023,61 @@ "node": ">= 0.10" } }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7713,13 +8096,14 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7755,13 +8139,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7813,6 +8217,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -7830,6 +8250,26 @@ "node": ">=6" } }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -7842,11 +8282,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7864,12 +8318,14 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7878,15 +8334,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -7901,12 +8348,15 @@ "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -7915,11 +8365,31 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7936,12 +8406,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7951,12 +8423,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7980,13 +8455,47 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8794,6 +9303,13 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -8804,7 +9320,8 @@ "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 + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -8944,6 +9461,16 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -9123,19 +9650,6 @@ "uc.micro": "^2.0.0" } }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -9436,6 +9950,7 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -9449,13 +9964,14 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -10367,9 +10883,10 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -10382,19 +10899,23 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -10404,15 +10925,51 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -10574,6 +11131,24 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-event": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", @@ -10596,30 +11171,6 @@ "node": ">=4" } }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/p-timeout": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", @@ -10631,15 +11182,6 @@ "node": ">=8" } }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/p-wait-for": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-3.2.0.tgz", @@ -10664,6 +11206,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -10762,15 +11305,6 @@ "node": ">= 0.8" } }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -10799,15 +11333,6 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/peberminta": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", @@ -11466,7 +11991,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/range-parser": { "version": "1.2.1", @@ -11557,12 +12083,56 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "license": "MIT" }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -11659,6 +12229,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11681,50 +12252,16 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/run-applescript": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-3.2.0.tgz", @@ -11860,10 +12397,38 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -11888,6 +12453,48 @@ "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==" }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-stable-stringify": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", @@ -12094,6 +12701,37 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -12147,14 +12785,69 @@ "license": "BSD-2-Clause" }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -12476,6 +13169,20 @@ "node": ">= 0.8" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamsearch": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", @@ -12523,27 +13230,60 @@ "node": ">=8" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12692,12 +13432,6 @@ "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "license": "MIT" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, "node_modules/tildify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/tildify/-/tildify-2.0.0.tgz", @@ -12810,15 +13544,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-jest": { @@ -13089,18 +13824,6 @@ "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-graphql": { "version": "2.0.0-beta.1", "resolved": "https://registry.npmjs.org/type-graphql/-/type-graphql-2.0.0-beta.1.tgz", @@ -13154,6 +13877,69 @@ "node": ">= 0.4" } }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -13173,6 +13959,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.4.tgz", + "integrity": "sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.46.4", + "@typescript-eslint/parser": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4", + "@typescript-eslint/utils": "8.46.4" + }, + "engines": { + "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", + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/uc.micro": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.0.0.tgz", @@ -13191,15 +14001,19 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13279,6 +14093,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -13472,16 +14287,74 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" diff --git a/apps/backend/package.json b/apps/backend/package.json index a4e155571e..aa08c9b4f5 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -22,8 +22,8 @@ "start:e2e:stfc": "docker compose -f docker-compose-stfc.e2e.yml up -d --remove-orphans && wait-on --verbose --interval 5000 --delay 15000 --timeout 300000 tcp:5432 && node ./build/index.js", "dev:docker": "npm install && ts-node-dev --inspect=0.0.0.0:9229 --respawn -T ./index.ts", "prod": "tsc && node ./build/index.js", - "lint": "npm run generate:uows && tsc --noEmit && eslint . --ext .js,.ts --quiet", - "lint:fix": "npm run generate:uows && tsc --noEmit && eslint . --ext .js,.ts --fix --quiet", + "lint": "npm run generate:uows && tsc --noEmit && eslint . --quiet", + "lint:fix": "npm run generate:uows && tsc --noEmit && eslint . --fix --quiet", "start": "npm run dev", "debug": "ts-node-dev --inspect --respawn -T ./index.ts", "generate:uows": "openapi --output ./generated --name UOWS --input ./openapi.yaml" @@ -108,22 +108,24 @@ "@types/simple-oauth2": "^4.1.1", "@types/sinon": "^9.0.11", "@types/yup": "^0.29.13", - "@typescript-eslint/eslint-plugin": "^7.7.0", - "@typescript-eslint/parser": "^7.7.0", + "@typescript-eslint/eslint-plugin": "^8.46.3", + "@typescript-eslint/parser": "^8.46.2", "@user-office-software/uows_client_generator": "^3.1.0", - "eslint": "^8.57.0", + "eslint": "^9.0.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jest": "^28.2.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^29.0.1", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-unused-imports": "^3.1.0", + "eslint-plugin-unused-imports": "^4.3.0", + "globals": "^16.5.0", "jest": "^29.7.0", "prettier": "3.2.4", "sinon": "^17.0.1", "ts-jest": "^29.1.1", "ts-node-dev": "^2.0.0", "tsconfig-paths": "^4.2.0", - "typescript": "^5.3.3" + "typescript": "^5.3.3", + "typescript-eslint": "^8.46.3" }, "engines": { "npm": ">=10.9.2", diff --git a/apps/backend/src/asyncJobs/AsyncJobs.spec.ts b/apps/backend/src/asyncJobs/AsyncJobs.spec.ts index 827885ac92..4cf6666aa7 100644 --- a/apps/backend/src/asyncJobs/AsyncJobs.spec.ts +++ b/apps/backend/src/asyncJobs/AsyncJobs.spec.ts @@ -2,11 +2,11 @@ import 'reflect-metadata'; import sinon from 'sinon'; -import { CallDataSourceMock } from '../datasources/mockups/CallDataSource'; import checkCallsEndedJob from './jobs/checkAllCallsEnded'; import checkCallsFAPReviewEndedJob from './jobs/checkCallsFAPReviewEnded'; import checkCallsReviewEndedJob from './jobs/checkCallsReviewEnded'; import { runAsyncJobs } from './startAsyncJobs'; +import { CallDataSourceMock } from '../datasources/mockups/CallDataSource'; describe('Test if predefined async jobs are running correctly', () => { let clock: sinon.SinonFakeTimers; diff --git a/apps/backend/src/asyncJobs/jobs/checkAllCallsEnded.ts b/apps/backend/src/asyncJobs/jobs/checkAllCallsEnded.ts index e877f326d4..723315f512 100644 --- a/apps/backend/src/asyncJobs/jobs/checkAllCallsEnded.ts +++ b/apps/backend/src/asyncJobs/jobs/checkAllCallsEnded.ts @@ -37,9 +37,9 @@ const checkCallsEnded = async (dataSource: CallDataSource) => { } } catch (error) { logger.logException('Checking and ending calls failed: ', error); - } finally { - return updatedCalls; } + + return updatedCalls; }; const checkCallsEndedInternal = async (dataSource: CallDataSource) => { const eventBus = resolveApplicationEventBus(); @@ -74,9 +74,9 @@ const checkCallsEndedInternal = async (dataSource: CallDataSource) => { } } catch (error) { logger.logException('Checking and ending calls internal failed: ', error); - } finally { - return updatedCalls; } + + return updatedCalls; }; const checkAllCallsEnded = async (dataSource: CallDataSource) => { diff --git a/apps/backend/src/asyncJobs/jobs/checkInviteReminderJob.spec.ts b/apps/backend/src/asyncJobs/jobs/checkInviteReminderJob.spec.ts index ecedf68d6e..edb77ca580 100644 --- a/apps/backend/src/asyncJobs/jobs/checkInviteReminderJob.spec.ts +++ b/apps/backend/src/asyncJobs/jobs/checkInviteReminderJob.spec.ts @@ -3,13 +3,13 @@ import { faker } from '@faker-js/faker'; import sinon from 'sinon'; import { container } from 'tsyringe'; +import checkInviteReminderJob from './checkInviteReminderJob'; import { Tokens } from '../../config/Tokens'; import { EmailTemplateId } from '../../eventHandlers/email/essEmailHandler'; import { Invite } from '../../models/Invite'; import { RoleClaim } from '../../models/RoleClaim'; import { SettingsId } from '../../models/Settings'; import { User, UserRole } from '../../models/User'; -import checkInviteReminderJob from './checkInviteReminderJob'; const mockUserDataSource = { getBasicUserInfo: sinon.stub(), diff --git a/apps/backend/src/asyncJobs/startAsyncJobs.ts b/apps/backend/src/asyncJobs/startAsyncJobs.ts index 226f46e2bd..1283cb15f5 100644 --- a/apps/backend/src/asyncJobs/startAsyncJobs.ts +++ b/apps/backend/src/asyncJobs/startAsyncJobs.ts @@ -2,9 +2,9 @@ import { CronJob } from 'cron'; import { container } from 'tsyringe'; +import ALL_ASYNC_JOBS from './allAsyncJobs'; import { Tokens } from '../config/Tokens'; import { CallDataSource } from '../datasources/CallDataSource'; -import ALL_ASYNC_JOBS from './allAsyncJobs'; const callDataSource = container.resolve(Tokens.CallDataSource); diff --git a/apps/backend/src/auth/DataAccessUsersAuthorization.spec.ts b/apps/backend/src/auth/DataAccessUsersAuthorization.spec.ts index 1a606a30cb..7be6110f1e 100644 --- a/apps/backend/src/auth/DataAccessUsersAuthorization.spec.ts +++ b/apps/backend/src/auth/DataAccessUsersAuthorization.spec.ts @@ -1,12 +1,12 @@ import { container } from 'tsyringe'; +import { DataAccessUsersAuthorization } from './DataAccessUsersAuthorization'; import { dummyPrincipalInvestigatorWithRole, dummyUserNotOnProposalWithRole, dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import { DataAccessUsersAuthorization } from './DataAccessUsersAuthorization'; const dataAccessUsersAuth = container.resolve(DataAccessUsersAuthorization); diff --git a/apps/backend/src/auth/DataAccessUsersAuthorization.ts b/apps/backend/src/auth/DataAccessUsersAuthorization.ts index 9e7d1aed6e..bfb2f24980 100644 --- a/apps/backend/src/auth/DataAccessUsersAuthorization.ts +++ b/apps/backend/src/auth/DataAccessUsersAuthorization.ts @@ -1,11 +1,11 @@ import { inject, injectable } from 'tsyringe'; +import { ProposalAuthorization } from './ProposalAuthorization'; +import { UserAuthorization } from './UserAuthorization'; import { Tokens } from '../config/Tokens'; import { ProposalDataSource } from '../datasources/ProposalDataSource'; import { UserWithRole } from '../models/User'; import { Proposal } from '../resolvers/types/Proposal'; -import { ProposalAuthorization } from './ProposalAuthorization'; -import { UserAuthorization } from './UserAuthorization'; @injectable() export class DataAccessUsersAuthorization { diff --git a/apps/backend/src/auth/ExperimentSafetyAuthorization.ts b/apps/backend/src/auth/ExperimentSafetyAuthorization.ts index fa38d5ba6a..adb6727614 100644 --- a/apps/backend/src/auth/ExperimentSafetyAuthorization.ts +++ b/apps/backend/src/auth/ExperimentSafetyAuthorization.ts @@ -1,11 +1,11 @@ import { inject, injectable } from 'tsyringe'; +import { ProposalAuthorization } from './ProposalAuthorization'; +import { UserAuthorization } from './UserAuthorization'; import { Tokens } from '../config/Tokens'; import { ExperimentDataSource } from '../datasources/ExperimentDataSource'; import { UserWithRole } from '../models/User'; import { ExperimentSafety } from '../resolvers/types/ExperimentSafety'; -import { ProposalAuthorization } from './ProposalAuthorization'; -import { UserAuthorization } from './UserAuthorization'; @injectable() export class ExperimentSafetyAuthorization { diff --git a/apps/backend/src/auth/ExperimentSafetyReviewAuthorization.ts b/apps/backend/src/auth/ExperimentSafetyReviewAuthorization.ts index ec9e8b9323..fd713c4132 100644 --- a/apps/backend/src/auth/ExperimentSafetyReviewAuthorization.ts +++ b/apps/backend/src/auth/ExperimentSafetyReviewAuthorization.ts @@ -1,11 +1,11 @@ import { inject, injectable } from 'tsyringe'; +import { ProposalAuthorization } from './ProposalAuthorization'; +import { UserAuthorization } from './UserAuthorization'; import { Tokens } from '../config/Tokens'; import { ReviewDataSource } from '../datasources/ReviewDataSource'; import { TechnicalReview } from '../models/TechnicalReview'; import { UserWithRole } from '../models/User'; -import { ProposalAuthorization } from './ProposalAuthorization'; -import { UserAuthorization } from './UserAuthorization'; @injectable() export class ExperimentSafetyReviewAuthorization { diff --git a/apps/backend/src/auth/OAuthAuthorization.spec.ts b/apps/backend/src/auth/OAuthAuthorization.spec.ts index 85a4107f5a..6e213fd13b 100644 --- a/apps/backend/src/auth/OAuthAuthorization.spec.ts +++ b/apps/backend/src/auth/OAuthAuthorization.spec.ts @@ -21,13 +21,13 @@ jest.mock('@user-office-software/openid', () => { import 'reflect-metadata'; import { container } from 'tsyringe'; +import { OAuthAuthorization } from './OAuthAuthorization'; import { Tokens } from '../config/Tokens'; import { AdminDataSource } from '../datasources/AdminDataSource'; import { dummyUser } from '../datasources/mockups/UserDataSource'; import { UserDataSource } from '../datasources/UserDataSource'; import { Institution } from '../models/Institution'; import { User, UserRole } from '../models/User'; -import { OAuthAuthorization } from './OAuthAuthorization'; describe('OAuthAuthorization', () => { let oauthAuthorization: OAuthAuthorization; diff --git a/apps/backend/src/auth/OAuthAuthorization.ts b/apps/backend/src/auth/OAuthAuthorization.ts index e643217b54..ae6202958a 100644 --- a/apps/backend/src/auth/OAuthAuthorization.ts +++ b/apps/backend/src/auth/OAuthAuthorization.ts @@ -9,12 +9,12 @@ import { GraphQLError } from 'graphql'; import { UserinfoResponse } from 'openid-client'; import { container } from 'tsyringe'; +import { UserAuthorization } from './UserAuthorization'; import { Tokens } from '../config/Tokens'; import { AdminDataSource } from '../datasources/AdminDataSource'; import { Rejection } from '../models/Rejection'; import { SettingsId } from '../models/Settings'; import { AuthJwtPayload, User, UserRole } from '../models/User'; -import { UserAuthorization } from './UserAuthorization'; interface UserinfoResponseWithInstitution extends UserinfoResponse { institution_ror_id?: string; diff --git a/apps/backend/src/auth/ProposalAuthorization.spec.ts b/apps/backend/src/auth/ProposalAuthorization.spec.ts index 940b55287a..957df9f8a1 100644 --- a/apps/backend/src/auth/ProposalAuthorization.spec.ts +++ b/apps/backend/src/auth/ProposalAuthorization.spec.ts @@ -1,5 +1,6 @@ import { container } from 'tsyringe'; +import { ProposalAuthorization } from './ProposalAuthorization'; import { dummyFapChairWithRole, dummyFapReviewerWithRole, @@ -13,7 +14,6 @@ import { dummyUserWithRole, dummyVisitorWithRole, } from '../datasources/mockups/UserDataSource'; -import { ProposalAuthorization } from './ProposalAuthorization'; const proposalAuthorization = container.resolve(ProposalAuthorization); diff --git a/apps/backend/src/auth/ReviewAuthorization.ts b/apps/backend/src/auth/ReviewAuthorization.ts index 2aba5b8071..ec4cd7fef5 100644 --- a/apps/backend/src/auth/ReviewAuthorization.ts +++ b/apps/backend/src/auth/ReviewAuthorization.ts @@ -1,12 +1,12 @@ import { inject, injectable } from 'tsyringe'; +import { ProposalAuthorization } from './ProposalAuthorization'; +import { UserAuthorization } from './UserAuthorization'; import { Tokens } from '../config/Tokens'; import { ReviewDataSource } from '../datasources/ReviewDataSource'; import { ReviewStatus } from '../models/Review'; import { UserWithRole } from '../models/User'; import { Review } from '../resolvers/types/Review'; -import { ProposalAuthorization } from './ProposalAuthorization'; -import { UserAuthorization } from './UserAuthorization'; @injectable() export class ReviewAuthorization { diff --git a/apps/backend/src/auth/StfcProposalAuthorization.ts b/apps/backend/src/auth/StfcProposalAuthorization.ts index 996735dd93..22f8d24a5f 100644 --- a/apps/backend/src/auth/StfcProposalAuthorization.ts +++ b/apps/backend/src/auth/StfcProposalAuthorization.ts @@ -1,8 +1,8 @@ import { injectable } from 'tsyringe'; +import { ProposalAuthorization } from './ProposalAuthorization'; import { Proposal } from '../models/Proposal'; import { UserWithRole } from '../models/User'; -import { ProposalAuthorization } from './ProposalAuthorization'; @injectable() export class StfcProposalAuthorization extends ProposalAuthorization { diff --git a/apps/backend/src/auth/StfcUserAuthorization.spec.ts b/apps/backend/src/auth/StfcUserAuthorization.spec.ts index 34bfe69915..bf29bd8188 100644 --- a/apps/backend/src/auth/StfcUserAuthorization.spec.ts +++ b/apps/backend/src/auth/StfcUserAuthorization.spec.ts @@ -1,11 +1,11 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import { StfcUserAuthorization } from './StfcUserAuthorization'; import { Tokens } from '../config/Tokens'; import { InstrumentDataSource } from '../datasources/InstrumentDataSource'; import { dummyUser } from '../datasources/mockups/UserDataSource'; import { Instrument } from '../models/Instrument'; -import { StfcUserAuthorization } from './StfcUserAuthorization'; jest.mock('../utils/Cache'); jest.mock('../datasources/stfc/UOWSClient.ts', () => { diff --git a/apps/backend/src/auth/TechnicalReviewAuthorization.ts b/apps/backend/src/auth/TechnicalReviewAuthorization.ts index a2676fb34d..7a16d1623f 100644 --- a/apps/backend/src/auth/TechnicalReviewAuthorization.ts +++ b/apps/backend/src/auth/TechnicalReviewAuthorization.ts @@ -1,11 +1,11 @@ import { inject, injectable } from 'tsyringe'; +import { ProposalAuthorization } from './ProposalAuthorization'; +import { UserAuthorization } from './UserAuthorization'; import { Tokens } from '../config/Tokens'; import { ReviewDataSource } from '../datasources/ReviewDataSource'; import { TechnicalReview } from '../models/TechnicalReview'; import { UserWithRole } from '../models/User'; -import { ProposalAuthorization } from './ProposalAuthorization'; -import { UserAuthorization } from './UserAuthorization'; @injectable() export class TechnicalReviewAuthorization { diff --git a/apps/backend/src/auth/VisitAuthorization.ts b/apps/backend/src/auth/VisitAuthorization.ts index 3b4d43efc2..312e4704f3 100644 --- a/apps/backend/src/auth/VisitAuthorization.ts +++ b/apps/backend/src/auth/VisitAuthorization.ts @@ -1,13 +1,13 @@ import { logger } from '@user-office-software/duo-logger'; import { inject, injectable } from 'tsyringe'; +import { ProposalAuthorization } from './ProposalAuthorization'; +import { UserAuthorization } from './UserAuthorization'; import { Tokens } from '../config/Tokens'; import { ProposalDataSource } from '../datasources/ProposalDataSource'; import { VisitDataSource } from '../datasources/VisitDataSource'; import { UserWithRole } from '../models/User'; import { Visit } from '../models/Visit'; -import { ProposalAuthorization } from './ProposalAuthorization'; -import { UserAuthorization } from './UserAuthorization'; @injectable() export class VisitAuthorization { diff --git a/apps/backend/src/auth/VisitRegistrationAuthorization.ts b/apps/backend/src/auth/VisitRegistrationAuthorization.ts index e0c0617151..0ee16a3044 100644 --- a/apps/backend/src/auth/VisitRegistrationAuthorization.ts +++ b/apps/backend/src/auth/VisitRegistrationAuthorization.ts @@ -1,5 +1,6 @@ import { inject, injectable } from 'tsyringe'; +import { UserAuthorization } from './UserAuthorization'; import { Tokens } from '../config/Tokens'; import { VisitDataSource } from '../datasources/VisitDataSource'; import { UserWithRole } from '../models/User'; @@ -7,7 +8,6 @@ import { VisitRegistration, VisitRegistrationStatus, } from '../models/VisitRegistration'; -import { UserAuthorization } from './UserAuthorization'; type VisitRegistrationPrimaryKey = Pick< VisitRegistration, diff --git a/apps/backend/src/config/dependencyConfigDefault.ts b/apps/backend/src/config/dependencyConfigDefault.ts index f271d12ed8..68eb5bbc31 100644 --- a/apps/backend/src/config/dependencyConfigDefault.ts +++ b/apps/backend/src/config/dependencyConfigDefault.ts @@ -5,11 +5,14 @@ import { } from '@user-office-software/duo-logger'; import 'reflect-metadata'; +import { Tokens } from './Tokens'; import { DataAccessUsersAuthorization } from '../auth/DataAccessUsersAuthorization'; import { OAuthAuthorization } from '../auth/OAuthAuthorization'; import { ProposalAuthorization } from '../auth/ProposalAuthorization'; import { VisitAuthorization } from '../auth/VisitAuthorization'; import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization'; +import { configureBaseEnvironment } from './base/configureBaseEnvironment'; +import { mapClass, mapValue } from './utils'; import { PostgresAdminDataSourceWithAutoUpgrade } from '../datasources/postgres/AdminDataSource'; import PostgresCallDataSource from '../datasources/postgres/CallDataSource'; import PostgresCoProposerClaimDataSource from '../datasources/postgres/CoProposerClaimDataSource'; @@ -62,9 +65,6 @@ import { } from '../factory/xlsx/FapDataRow'; import BasicUserDetailsLoader from '../loaders/BasicUserDetailsLoader'; import { SkipAssetRegistrar } from '../services/assetRegistrar/skip/SkipAssetRegistrar'; -import { configureBaseEnvironment } from './base/configureBaseEnvironment'; -import { Tokens } from './Tokens'; -import { mapClass, mapValue } from './utils'; async function skipEmailHandler(event: ApplicationEvent) { logger.logInfo('Skip email sending', { event }); diff --git a/apps/backend/src/config/dependencyConfigE2E.ts b/apps/backend/src/config/dependencyConfigE2E.ts index f99f9948cd..29aac6d413 100644 --- a/apps/backend/src/config/dependencyConfigE2E.ts +++ b/apps/backend/src/config/dependencyConfigE2E.ts @@ -1,11 +1,14 @@ import { ConsoleLogger, setLogger } from '@user-office-software/duo-logger'; import 'reflect-metadata'; +import { Tokens } from './Tokens'; import { DataAccessUsersAuthorization } from '../auth/DataAccessUsersAuthorization'; import { OAuthAuthorization } from '../auth/OAuthAuthorization'; import { ProposalAuthorization } from '../auth/ProposalAuthorization'; import { VisitAuthorization } from '../auth/VisitAuthorization'; import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization'; +import { configureESSDevelopmentEnvironment } from './ess/configureESSEnvironment'; +import { mapClass, mapValue } from './utils'; import PostgresAdminDataSource from '../datasources/postgres/AdminDataSource'; import PostgresCallDataSource from '../datasources/postgres/CallDataSource'; import PostgresCoProposerClaimDataSource from '../datasources/postgres/CoProposerClaimDataSource'; @@ -58,9 +61,6 @@ import { } from '../factory/xlsx/FapDataRow'; import BasicUserDetailsLoader from '../loaders/BasicUserDetailsLoader'; import { SkipAssetRegistrar } from '../services/assetRegistrar/skip/SkipAssetRegistrar'; -import { configureESSDevelopmentEnvironment } from './ess/configureESSEnvironment'; -import { Tokens } from './Tokens'; -import { mapClass, mapValue } from './utils'; mapClass(Tokens.AdminDataSource, PostgresAdminDataSource); mapClass(Tokens.CoProposerClaimDataSource, PostgresCoProposerClaimDataSource); diff --git a/apps/backend/src/config/dependencyConfigELI.ts b/apps/backend/src/config/dependencyConfigELI.ts index 6a158f0b8c..9110f67f33 100644 --- a/apps/backend/src/config/dependencyConfigELI.ts +++ b/apps/backend/src/config/dependencyConfigELI.ts @@ -5,6 +5,10 @@ import { OAuthAuthorization } from '../auth/OAuthAuthorization'; import { ProposalAuthorization } from '../auth/ProposalAuthorization'; import { VisitAuthorization } from '../auth/VisitAuthorization'; import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization'; +import { configureELIDevelopmentEnvironment } from './eli/configureELIEnvironment'; +import { configureGraylogLogger } from './ess/configureGrayLogLogger'; +import { Tokens } from './Tokens'; +import { mapClass, mapValue } from './utils'; import { PostgresAdminDataSourceWithAutoUpgrade } from '../datasources/postgres/AdminDataSource'; import PostgresCallDataSource from '../datasources/postgres/CallDataSource'; import PostgresCoProposerClaimDataSource from '../datasources/postgres/CoProposerClaimDataSource'; @@ -57,10 +61,6 @@ import { } from '../factory/xlsx/FapDataRow'; import BasicUserDetailsLoader from '../loaders/BasicUserDetailsLoader'; import { EAMAssetRegistrar } from '../services/assetRegistrar/eam/EAMAssetRegistrar'; -import { configureELIDevelopmentEnvironment } from './eli/configureELIEnvironment'; -import { configureGraylogLogger } from './ess/configureGrayLogLogger'; -import { Tokens } from './Tokens'; -import { mapClass, mapValue } from './utils'; const isProduction = process.env.NODE_ENV === 'production'; diff --git a/apps/backend/src/config/dependencyConfigSTFC.ts b/apps/backend/src/config/dependencyConfigSTFC.ts index bcc7995ff9..dd55d329b4 100644 --- a/apps/backend/src/config/dependencyConfigSTFC.ts +++ b/apps/backend/src/config/dependencyConfigSTFC.ts @@ -5,6 +5,10 @@ import { StfcProposalAuthorization } from '../auth/StfcProposalAuthorization'; import { StfcUserAuthorization } from '../auth/StfcUserAuthorization'; import { VisitAuthorization } from '../auth/VisitAuthorization'; import { VisitRegistrationAuthorization } from '../auth/VisitRegistrationAuthorization'; +import { configureSTFCEnvironment } from './stfc/configureSTFCEnvironment'; +import { configureSTFCWinstonLogger } from './stfc/configureSTFCWinstonLogger'; +import { Tokens } from './Tokens'; +import { mapClass, mapValue } from './utils'; import { PostgresAdminDataSourceWithAutoUpgrade } from '../datasources/postgres/AdminDataSource'; import PostgresCallDataSource from '../datasources/postgres/CallDataSource'; import PostgresCoProposerClaimDataSource from '../datasources/postgres/CoProposerClaimDataSource'; @@ -57,10 +61,6 @@ import { } from '../factory/xlsx/stfc/StfcFapDataRow'; import BasicUserDetailsLoader from '../loaders/BasicUserDetailsLoader'; import { SkipAssetRegistrar } from '../services/assetRegistrar/skip/SkipAssetRegistrar'; -import { configureSTFCEnvironment } from './stfc/configureSTFCEnvironment'; -import { configureSTFCWinstonLogger } from './stfc/configureSTFCWinstonLogger'; -import { Tokens } from './Tokens'; -import { mapClass, mapValue } from './utils'; mapClass(Tokens.AdminDataSource, PostgresAdminDataSourceWithAutoUpgrade); mapClass(Tokens.CoProposerClaimDataSource, PostgresCoProposerClaimDataSource); diff --git a/apps/backend/src/config/index.ts b/apps/backend/src/config/index.ts index 781c100bfc..38705d57d1 100644 --- a/apps/backend/src/config/index.ts +++ b/apps/backend/src/config/index.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-require-imports */ import { logger } from '@user-office-software/duo-logger'; import 'reflect-metadata'; diff --git a/apps/backend/src/config/setTimezoneAndFormat.ts b/apps/backend/src/config/setTimezoneAndFormat.ts index 9eb5223a5e..01c4623394 100644 --- a/apps/backend/src/config/setTimezoneAndFormat.ts +++ b/apps/backend/src/config/setTimezoneAndFormat.ts @@ -1,9 +1,9 @@ import { logger } from '@user-office-software/duo-logger'; import { container } from 'tsyringe'; +import { Tokens } from './Tokens'; import { AdminDataSource } from '../datasources/AdminDataSource'; import { SettingsId } from '../models/Settings'; -import { Tokens } from './Tokens'; /** * Sets the timezone Setting from the 'TZ' environment variable, diff --git a/apps/backend/src/config/updateOIDCSettings.ts b/apps/backend/src/config/updateOIDCSettings.ts index fb707ef20d..9ba272f745 100644 --- a/apps/backend/src/config/updateOIDCSettings.ts +++ b/apps/backend/src/config/updateOIDCSettings.ts @@ -1,9 +1,9 @@ import { OpenIdClient } from '@user-office-software/openid'; import { container } from 'tsyringe'; +import { Tokens } from './Tokens'; import { AdminDataSource } from '../datasources/AdminDataSource'; import { SettingsId } from '../models/Settings'; -import { Tokens } from './Tokens'; export async function updateOIDCSettings() { if (OpenIdClient.hasConfig() === false) { diff --git a/apps/backend/src/datasources/ExperimentDataSource.ts b/apps/backend/src/datasources/ExperimentDataSource.ts index a7ca421f84..f7d4955496 100644 --- a/apps/backend/src/datasources/ExperimentDataSource.ts +++ b/apps/backend/src/datasources/ExperimentDataSource.ts @@ -8,11 +8,11 @@ import { } from '../models/Experiment'; import { Rejection } from '../models/Rejection'; import { User } from '../models/User'; +import { ExperimentSafetyEventsRecord } from './postgres/records'; import { ExperimentsFilter, UserExperimentsFilter, } from '../resolvers/queries/ExperimentsQuery'; -import { ExperimentSafetyEventsRecord } from './postgres/records'; export interface ExperimentDataSource { create( diff --git a/apps/backend/src/datasources/FapDataSource.ts b/apps/backend/src/datasources/FapDataSource.ts index 495c313d09..d3c4cd4e9e 100644 --- a/apps/backend/src/datasources/FapDataSource.ts +++ b/apps/backend/src/datasources/FapDataSource.ts @@ -10,6 +10,10 @@ import { ProposalPks } from '../models/Proposal'; import { Review, ReviewStatus } from '../models/Review'; import { Role, Roles } from '../models/Role'; import { BasicUserDetails } from '../models/User'; +import { + FapReviewsRecord, + AssignProposalsToFapsInput, +} from './postgres/records'; import { UpdateMemberFapArgs, AssignReviewersToFapArgs, @@ -18,10 +22,6 @@ import { import { RemoveProposalsFromFapsArgs } from '../resolvers/mutations/AssignProposalsToFapsMutation'; import { SaveFapMeetingDecisionInput } from '../resolvers/mutations/FapMeetingDecisionMutation'; import { FapsFilter } from '../resolvers/queries/FapsQuery'; -import { - FapReviewsRecord, - AssignProposalsToFapsInput, -} from './postgres/records'; export interface FapDataSource { create( diff --git a/apps/backend/src/datasources/mockups/FapDataSource.ts b/apps/backend/src/datasources/mockups/FapDataSource.ts index 217cfbb6c1..5b1528e5e2 100644 --- a/apps/backend/src/datasources/mockups/FapDataSource.ts +++ b/apps/backend/src/datasources/mockups/FapDataSource.ts @@ -1,3 +1,4 @@ +import { basicDummyUser } from './UserDataSource'; import { Fap, FapAssignment, @@ -23,7 +24,6 @@ import { FapReviewsRecord, AssignProposalsToFapsInput, } from '../postgres/records'; -import { basicDummyUser } from './UserDataSource'; export const dummyFap = new Fap( 1, diff --git a/apps/backend/src/datasources/postgres/CallDataSource.test.ts b/apps/backend/src/datasources/postgres/CallDataSource.test.ts index d78e378171..d925dc79c6 100644 --- a/apps/backend/src/datasources/postgres/CallDataSource.test.ts +++ b/apps/backend/src/datasources/postgres/CallDataSource.test.ts @@ -2,13 +2,13 @@ /* eslint-disable quotes */ import 'reflect-metadata'; +import CallDataSource from './CallDataSource'; +import database from './database'; +import { CallRecord, createCallObject, createProposalObject } from './records'; import { Call } from '../../models/Call'; import { Proposal } from '../../models/Proposal'; import { WorkflowType } from '../../models/Workflow'; import { dummyCallFactory } from '../mockups/CallDataSource'; -import CallDataSource from './CallDataSource'; -import database from './database'; -import { CallRecord, createCallObject, createProposalObject } from './records'; const callDataSource = new CallDataSource(); diff --git a/apps/backend/src/datasources/postgres/ExperimentSafetyPdfTemplateDataSource.ts b/apps/backend/src/datasources/postgres/ExperimentSafetyPdfTemplateDataSource.ts index 85f8f9c2c7..2e97c46c72 100644 --- a/apps/backend/src/datasources/postgres/ExperimentSafetyPdfTemplateDataSource.ts +++ b/apps/backend/src/datasources/postgres/ExperimentSafetyPdfTemplateDataSource.ts @@ -1,6 +1,5 @@ import { logger } from '@user-office-software/duo-logger'; import { GraphQLError } from 'graphql'; -import { ExperimentSafetyPdfTemplateRecord } from 'knex/types/tables'; import { ExperimentSafetyPdfTemplate } from '../../models/ExperimentSafetyPdfTemplate'; import { UpdateExperimentSafetyPdfTemplateArgs } from '../../resolvers/mutations/UpdateExperimentSafetyPdfTemplateMutation'; @@ -10,7 +9,10 @@ import { ExperimentSafetyPdfTemplateDataSource, } from '../ExperimentSafetyPdfTemplateDataSource'; import database from './database'; -import { createExperimentSafetyPdfTemplateObject } from './records'; +import { + createExperimentSafetyPdfTemplateObject, + ExperimentSafetyPdfTemplateRecord, +} from './records'; export default class PostgresExperimentSafetyPdfTemplateDataSource implements ExperimentSafetyPdfTemplateDataSource diff --git a/apps/backend/src/datasources/postgres/FapDataSource.ts b/apps/backend/src/datasources/postgres/FapDataSource.ts index 61e21e26a7..8abefc8abb 100644 --- a/apps/backend/src/datasources/postgres/FapDataSource.ts +++ b/apps/backend/src/datasources/postgres/FapDataSource.ts @@ -640,16 +640,10 @@ export default class PostgresFapDataSource implements FapDataSource { let shortCode: Roles; - if ( - !!fapChairs.find((chair) => { - chair.user_id === userId; - }) - ) { + if (fapChairs.find((chair) => chair.user_id === userId)) { shortCode = Roles.FAP_CHAIR; } else if ( - !!fapSecretaries.find((secretary) => { - secretary.user_id === userId; - }) + fapSecretaries.find((secretary) => secretary.user_id === userId) ) { shortCode = Roles.FAP_SECRETARY; } else { diff --git a/apps/backend/src/datasources/postgres/FileDataSource.ts b/apps/backend/src/datasources/postgres/FileDataSource.ts index eb5ec763e1..3f1ab85074 100644 --- a/apps/backend/src/datasources/postgres/FileDataSource.ts +++ b/apps/backend/src/datasources/postgres/FileDataSource.ts @@ -1,4 +1,3 @@ -/* eslint-disable prefer-const */ import fs from 'fs'; import { logger } from '@user-office-software/duo-logger'; @@ -128,10 +127,12 @@ export default class PostgresFileDataSource implements FileDataSource { throw new GraphQLError('Could not obtain connection'); } - return new Promise(async (resolve, reject) => { + try { const [transactionError] = await to(connection.query('BEGIN')); // start the transaction if (transactionError) { - return reject(`Could not begin transaction \n${transactionError}`); + throw new GraphQLError( + `Could not begin transaction \n${transactionError}` + ); } const blobManager = new LargeObjectManager({ pg: connection }); @@ -142,26 +143,24 @@ export default class PostgresFileDataSource implements FileDataSource { if (writeableStreamError || !response) { connection.emit('error', writeableStreamError); - return reject( + throw new GraphQLError( `Could not create writeable stream \n${writeableStreamError} ${response}` ); } - const [oid, stream] = response; + return new Promise((resolve) => { + const [oid, stream] = response; - stream.on('finish', () => { - connection.query('COMMIT', () => resolve(oid)); - }); + stream.on('finish', () => { + connection.query('COMMIT', () => resolve(oid)); + }); - const fileStream = fs.createReadStream(filePath); - fileStream.pipe(stream); - }) - .then((newOid) => { - return newOid; - }) - .finally(() => { - database.client.releaseConnection(connection); + const fileStream = fs.createReadStream(filePath); + fileStream.pipe(stream); }); + } finally { + database.client.releaseConnection(connection); + } } private async storeBlobFromStream( @@ -178,28 +177,28 @@ export default class PostgresFileDataSource implements FileDataSource { throw new Error('Could not obtain database connection.'); } - return new Promise(async (resolve, reject) => { - const [transactionError] = await to(connection.query('BEGIN')); - if (transactionError) { - database.client.releaseConnection(connection); + const [transactionError] = await to(connection.query('BEGIN')); + if (transactionError) { + database.client.releaseConnection(connection); - return reject(`Could not begin transaction: ${transactionError}`); - } + throw new Error(`Could not begin transaction: ${transactionError}`); + } - const blobManager = new LargeObjectManager({ pg: connection }); + const blobManager = new LargeObjectManager({ pg: connection }); - const [writeableStreamError, response] = await to( - blobManager.createAndWritableStreamAsync() - ); - if (writeableStreamError || !response) { - connection.query('ROLLBACK', () => { - database.client.releaseConnection(connection); - reject(`Could not create writable stream: ${writeableStreamError}`); - }); + const [writeableStreamError, response] = await to( + blobManager.createAndWritableStreamAsync() + ); - return; - } + if (writeableStreamError || !response) { + database.client.releaseConnection(connection); + throw new Error( + `Could not create writable stream: ${writeableStreamError}` + ); + } + + return new Promise((resolve, reject) => { const [oid, stream] = response; let sizeInBytes = 0; @@ -243,39 +242,39 @@ export default class PostgresFileDataSource implements FileDataSource { } private async retrieveBlob(oid: number, output: string): Promise { - return new Promise(async (resolve, reject) => { - if (!output) reject('Output must be specified'); + if (!output) throw new Error('Output must be specified'); - const [connectionError, connection] = await to( - database.client.acquireConnection() as Promise + const [connectionError, connection] = await to( + database.client.acquireConnection() as Promise + ); + if (connectionError || !connection) { + throw new Error( + `Error ocurred while establishing connection with database \n ${connectionError} ${connection}` ); - if (connectionError || !connection) { - return reject( - `Error ocurred while establishing connection with database \n ${connectionError} ${connection}` - ); - } + } - const [transactionError] = await to(connection.query('BEGIN')); // start the transaction - if (transactionError) { - database.client.releaseConnection(connection); + const [transactionError] = await to(connection.query('BEGIN')); // start the transaction + if (transactionError) { + database.client.releaseConnection(connection); - return reject(`Could not begin transaction \n${transactionError}`); - } + throw new Error(`Could not begin transaction \n${transactionError}`); + } - const blobManager = new LargeObjectManager({ pg: connection }); - const [streamErr, response] = await to( - blobManager.openAndReadableStreamAsync(oid) - ); + const blobManager = new LargeObjectManager({ pg: connection }); + const [streamErr, response] = await to( + blobManager.openAndReadableStreamAsync(oid) + ); - if (streamErr || !response) { - connection.emit('error', streamErr); - database.client.releaseConnection(connection); + if (streamErr || !response) { + connection.emit('error', streamErr); + database.client.releaseConnection(connection); - return reject( - `Could not create readable stream \n${streamErr} ${response}` - ); - } + throw new Error( + `Could not create readable stream \n${streamErr} ${response}` + ); + } + return new Promise((resolve, reject) => { const [, stream] = response; stream.on('end', function () { @@ -309,37 +308,37 @@ export default class PostgresFileDataSource implements FileDataSource { } private async retrieveBlobData(oid: number): Promise { - return new Promise(async (resolve, reject) => { - const [connectionError, connection] = await to( - database.client.acquireConnection() as Promise + const [connectionError, connection] = await to( + database.client.acquireConnection() as Promise + ); + if (connectionError || !connection) { + throw new Error( + `Error ocurred while establishing connection with database \n ${connectionError} ${connection}` ); - if (connectionError || !connection) { - return reject( - `Error ocurred while establishing connection with database \n ${connectionError} ${connection}` - ); - } + } - const [transactionError] = await to(connection.query('BEGIN')); - if (transactionError) { - database.client.releaseConnection(connection); + const [transactionError] = await to(connection.query('BEGIN')); + if (transactionError) { + database.client.releaseConnection(connection); - return reject(`Could not begin transaction \n${transactionError}`); - } + throw new Error(`Could not begin transaction \n${transactionError}`); + } - const blobManager = new LargeObjectManager({ pg: connection }); - const [streamErr, response] = await to( - blobManager.openAndReadableStreamAsync(oid) - ); + const blobManager = new LargeObjectManager({ pg: connection }); + const [streamErr, response] = await to( + blobManager.openAndReadableStreamAsync(oid) + ); - if (streamErr || !response) { - await connection.query('ROLLBACK'); - database.client.releaseConnection(connection); + if (streamErr || !response) { + await connection.query('ROLLBACK'); + database.client.releaseConnection(connection); - return reject( - `Could not create readable stream \n${streamErr} ${response}` - ); - } + throw new Error( + `Could not create readable stream \n${streamErr} ${response}` + ); + } + return new Promise((resolve, reject) => { const [, stream] = response; stream.on('error', async (streamError) => { diff --git a/apps/backend/src/datasources/postgres/ProposalDataSource.test.ts b/apps/backend/src/datasources/postgres/ProposalDataSource.test.ts index 6c9fae2ef9..5ca5fec671 100644 --- a/apps/backend/src/datasources/postgres/ProposalDataSource.test.ts +++ b/apps/backend/src/datasources/postgres/ProposalDataSource.test.ts @@ -3,12 +3,12 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; -import { Call } from '../../models/Call'; -import { Proposal } from '../../models/Proposal'; -import { WorkflowType } from '../../models/Workflow'; import database from './database'; import ProposalDataSource from './ProposalDataSource'; import { createCallObject, createProposalObject } from './records'; +import { Call } from '../../models/Call'; +import { Proposal } from '../../models/Proposal'; +import { WorkflowType } from '../../models/Workflow'; const proposalDataSource = container.resolve(ProposalDataSource); diff --git a/apps/backend/src/datasources/postgres/ProposalDataSource.ts b/apps/backend/src/datasources/postgres/ProposalDataSource.ts index e1609b21f0..d20776a2d8 100644 --- a/apps/backend/src/datasources/postgres/ProposalDataSource.ts +++ b/apps/backend/src/datasources/postgres/ProposalDataSource.ts @@ -252,10 +252,10 @@ export default class PostgresProposalDataSource implements ProposalDataSource { ); }) .then(() => { - trx.commit; + trx.commit(); }) .catch((error) => { - trx.rollback; + trx.rollback(); throw error; // re-throw }); }); diff --git a/apps/backend/src/datasources/postgres/ProposalPdfTemplateDataSource.ts b/apps/backend/src/datasources/postgres/ProposalPdfTemplateDataSource.ts index 26d5b7630c..cf4e04ee53 100644 --- a/apps/backend/src/datasources/postgres/ProposalPdfTemplateDataSource.ts +++ b/apps/backend/src/datasources/postgres/ProposalPdfTemplateDataSource.ts @@ -1,6 +1,5 @@ import { logger } from '@user-office-software/duo-logger'; import { GraphQLError } from 'graphql'; -import { ProposalPdfTemplateRecord } from 'knex/types/tables'; import { ProposalPdfTemplate } from '../../models/ProposalPdfTemplate'; import { UpdateProposalPdfTemplateArgs } from '../../resolvers/mutations/UpdateProposalPdfTemplateMutation'; @@ -10,7 +9,10 @@ import { ProposalPdfTemplateDataSource, } from '../ProposalPdfTemplateDataSource'; import database from './database'; -import { createProposalPdfTemplateObject } from './records'; +import { + createProposalPdfTemplateObject, + ProposalPdfTemplateRecord, +} from './records'; export default class PostgresProposalPdfTemplateDataSource implements ProposalPdfTemplateDataSource diff --git a/apps/backend/src/datasources/postgres/TechniqueDataSource.ts b/apps/backend/src/datasources/postgres/TechniqueDataSource.ts index d2d091ba16..2dbb3110ce 100644 --- a/apps/backend/src/datasources/postgres/TechniqueDataSource.ts +++ b/apps/backend/src/datasources/postgres/TechniqueDataSource.ts @@ -246,10 +246,10 @@ export default class PostgresTechniqueDataSource .ignore() .transacting(trx) .then(() => { - trx.commit; + trx.commit(); }) .catch((error) => { - trx.rollback; + trx.rollback(); throw new Error(`Error assigning proposal to technique: ${error}`); }); }); diff --git a/apps/backend/src/datasources/postgres/UserDataSource.ts b/apps/backend/src/datasources/postgres/UserDataSource.ts index b61884d6c2..d355787eab 100644 --- a/apps/backend/src/datasources/postgres/UserDataSource.ts +++ b/apps/backend/src/datasources/postgres/UserDataSource.ts @@ -345,7 +345,7 @@ export default class PostgresUserDataSource implements UserDataSource { }) .first() .then((user: UserRecord & InstitutionRecord & CountryRecord) => - !!user ? createBasicUserObject(user) : null + user ? createBasicUserObject(user) : null ); } diff --git a/apps/backend/src/datasources/postgres/records.ts b/apps/backend/src/datasources/postgres/records.ts index d3abb964b8..4bdc777791 100644 --- a/apps/backend/src/datasources/postgres/records.ts +++ b/apps/backend/src/datasources/postgres/records.ts @@ -1,8 +1,3 @@ -import { - ProposalPdfTemplateRecord, - ExperimentSafetyPdfTemplateRecord, -} from 'knex/types/tables'; - import { EmailTemplateId } from '../../eventHandlers/email/essEmailHandler'; import { Page } from '../../models/Admin'; import { FileMetadata } from '../../models/Blob'; @@ -79,30 +74,6 @@ import { FeedbackStatus } from './../../models/Feedback'; // Adds types to datasources: https://knexjs.org/guide/#typescript declare module 'knex/types/tables' { - export interface ProposalPdfTemplateRecord { - readonly proposal_pdf_template_id: number; - readonly template_id: number; - readonly template_data: string; - readonly template_header: string; - readonly template_footer: string; - readonly template_sample_declaration: string; - readonly dummy_data: string; - readonly creator_id: number; - readonly created_at: Date; - } - - export interface ExperimentSafetyPdfTemplateRecord { - readonly experiment_safety_pdf_template_id: number; - readonly template_id: number; - readonly template_data: string; - readonly template_header: string; - readonly template_footer: string; - readonly template_sample_declaration: string; - readonly dummy_data: string; - readonly creator_id: number; - readonly created_at: Date; - } - interface Tables { proposal_pdf_templates: ProposalPdfTemplateRecord; experiment_safety_pdf_templates: ExperimentSafetyPdfTemplateRecord; @@ -112,7 +83,6 @@ declare module 'knex/types/tables' { } // Interfaces corresponding exactly to database tables - export interface ProposalUserRecord { readonly proposal_pk: number; readonly user_id: number; @@ -1287,6 +1257,18 @@ export const createPredefinedMessageObject = ( export const createQuantityObject = (quantity: QuantityRecord) => new Quantity(quantity.quantity_id); +export interface ProposalPdfTemplateRecord { + readonly proposal_pdf_template_id: number; + readonly template_id: number; + readonly template_data: string; + readonly template_header: string; + readonly template_footer: string; + readonly template_sample_declaration: string; + readonly dummy_data: string; + readonly creator_id: number; + readonly created_at: Date; +} + export const createProposalPdfTemplateObject = ( pdfTemplate: ProposalPdfTemplateRecord ) => { @@ -1303,6 +1285,18 @@ export const createProposalPdfTemplateObject = ( ); }; +export interface ExperimentSafetyPdfTemplateRecord { + readonly experiment_safety_pdf_template_id: number; + readonly template_id: number; + readonly template_data: string; + readonly template_header: string; + readonly template_footer: string; + readonly template_sample_declaration: string; + readonly dummy_data: string; + readonly creator_id: number; + readonly created_at: Date; +} + export const createExperimentSafetyPdfTemplateObject = ( pdfTemplate: ExperimentSafetyPdfTemplateRecord ) => { diff --git a/apps/backend/src/datasources/stfc/StfcFapDataSource.ts b/apps/backend/src/datasources/stfc/StfcFapDataSource.ts index c2709c4b9e..ac730f0e77 100644 --- a/apps/backend/src/datasources/stfc/StfcFapDataSource.ts +++ b/apps/backend/src/datasources/stfc/StfcFapDataSource.ts @@ -2,6 +2,7 @@ import { logger } from '@user-office-software/duo-logger'; import { GraphQLError } from 'graphql'; import { container } from 'tsyringe'; +import { StfcUserDataSource } from './StfcUserDataSource'; import { Tokens } from '../../config/Tokens'; import { Fap } from '../../models/Fap'; import { UserRole, UserRoleShortCodeMap } from '../../models/User'; @@ -13,7 +14,6 @@ import { import { FapDataSource } from '../FapDataSource'; import CallDataSource from '../postgres/CallDataSource'; import PostgresFapDataSource from '../postgres/FapDataSource'; -import { StfcUserDataSource } from './StfcUserDataSource'; enum STFCRolesMap { FAP_CHAIR = 50, diff --git a/apps/backend/src/datasources/stfc/StfcInstrumentDataSource.ts b/apps/backend/src/datasources/stfc/StfcInstrumentDataSource.ts index 7cc9a7344e..6269c0c138 100644 --- a/apps/backend/src/datasources/stfc/StfcInstrumentDataSource.ts +++ b/apps/backend/src/datasources/stfc/StfcInstrumentDataSource.ts @@ -1,5 +1,9 @@ import { container, injectable } from 'tsyringe'; +import { + StfcUserDataSource, + toEssBasicUserDetails, +} from './StfcUserDataSource'; import { Tokens } from '../../config/Tokens'; import { BasicUserDetails } from '../../models/User'; import database from '../postgres/database'; @@ -10,10 +14,6 @@ import { UserRecord, createBasicUserObject, } from '../postgres/records'; -import { - StfcUserDataSource, - toEssBasicUserDetails, -} from './StfcUserDataSource'; @injectable() export default class StfcInstrumentDataSource extends PostgresInstrumentDataSource { diff --git a/apps/backend/src/datasources/stfc/StfcInternalReviewDataSource.ts b/apps/backend/src/datasources/stfc/StfcInternalReviewDataSource.ts index 7823d74749..a4601bda8b 100644 --- a/apps/backend/src/datasources/stfc/StfcInternalReviewDataSource.ts +++ b/apps/backend/src/datasources/stfc/StfcInternalReviewDataSource.ts @@ -1,6 +1,7 @@ import { GraphQLError } from 'graphql'; import { container } from 'tsyringe'; +import { StfcUserDataSource } from './StfcUserDataSource'; import { Tokens } from '../../config/Tokens'; import { InternalReview } from '../../models/InternalReview'; import { Roles } from '../../models/Role'; @@ -9,7 +10,6 @@ import { CreateInternalReviewInput } from '../../resolvers/mutations/internalRev import { DeleteInternalReviewInput } from '../../resolvers/mutations/internalReview/DeleteInternalReviewMutation'; import { InternalReviewDataSource } from '../InternalReviewDataSource'; import PostgresInternalReviewDataSource from '../postgres/InternalReviewDataSource'; -import { StfcUserDataSource } from './StfcUserDataSource'; const InternalReviewRoleNumber = 53; // STFC Internal Reviewer role ID diff --git a/apps/backend/src/datasources/stfc/StfcTechniqueDataSource.ts b/apps/backend/src/datasources/stfc/StfcTechniqueDataSource.ts index 6299b2b1a7..c700bcd72a 100644 --- a/apps/backend/src/datasources/stfc/StfcTechniqueDataSource.ts +++ b/apps/backend/src/datasources/stfc/StfcTechniqueDataSource.ts @@ -1,5 +1,9 @@ import { container, injectable } from 'tsyringe'; +import { + StfcUserDataSource, + toEssBasicUserDetails, +} from './StfcUserDataSource'; import { Tokens } from '../../config/Tokens'; import { BasicUserDetails } from '../../models/User'; import database from '../postgres/database'; @@ -10,10 +14,6 @@ import { UserRecord, } from '../postgres/records'; import PostgresTechniqueDataSource from '../postgres/TechniqueDataSource'; -import { - StfcUserDataSource, - toEssBasicUserDetails, -} from './StfcUserDataSource'; @injectable() export default class StfcTechniqueDataSource extends PostgresTechniqueDataSource { diff --git a/apps/backend/src/datasources/stfc/StfcUserDataSource.spec.ts b/apps/backend/src/datasources/stfc/StfcUserDataSource.spec.ts index 2c8c429a6e..07b1a037ff 100644 --- a/apps/backend/src/datasources/stfc/StfcUserDataSource.spec.ts +++ b/apps/backend/src/datasources/stfc/StfcUserDataSource.spec.ts @@ -1,6 +1,6 @@ +import { StfcUserDataSource } from './StfcUserDataSource'; import { Role, Roles } from '../../models/Role'; import { dummyUser } from '../mockups/UserDataSource'; -import { StfcUserDataSource } from './StfcUserDataSource'; jest.mock('../postgres/UserDataSource.ts'); jest.mock('../../utils/Cache'); @@ -202,7 +202,7 @@ describe('Role tests', () => { describe('Email search tests', () => { const userdataSource = new StfcUserDataSource(); - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const mockedClient = require('./UOWSClient').createUOWSClient(); const mockGetSearchableBasicPersonDetailsFromEmail = jest.spyOn( @@ -262,7 +262,7 @@ describe('Email search tests', () => { describe('Searchable user tests', () => { const userDataSource = new StfcUserDataSource(); - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const mockedClient = require('./UOWSClient').createUOWSClient(); const mockGetSearchableBasicPeople = jest.spyOn( diff --git a/apps/backend/src/eventHandlers/MailService/SMTPMailService.spec.ts b/apps/backend/src/eventHandlers/MailService/SMTPMailService.spec.ts index 48f57ccd84..400a1b7703 100644 --- a/apps/backend/src/eventHandlers/MailService/SMTPMailService.spec.ts +++ b/apps/backend/src/eventHandlers/MailService/SMTPMailService.spec.ts @@ -3,11 +3,11 @@ import * as path from 'path'; import EmailTemplates from 'email-templates'; import { container } from 'tsyringe'; +import EmailSettings from './EmailSettings'; +import { SMTPMailService } from './SMTPMailService'; import { Tokens } from '../../config/Tokens'; import { AdminDataSource } from '../../datasources/AdminDataSource'; import { SettingsId } from '../../models/Settings'; -import EmailSettings from './EmailSettings'; -import { SMTPMailService } from './SMTPMailService'; jest.mock('email-templates'); const mockAdminDataSource = container.resolve( diff --git a/apps/backend/src/eventHandlers/MailService/SMTPMailService.ts b/apps/backend/src/eventHandlers/MailService/SMTPMailService.ts index 38fa36aed7..4d32c5d580 100644 --- a/apps/backend/src/eventHandlers/MailService/SMTPMailService.ts +++ b/apps/backend/src/eventHandlers/MailService/SMTPMailService.ts @@ -8,13 +8,13 @@ import SMTPPool from 'nodemailer/lib/smtp-pool'; import SMTPTransport from 'nodemailer/lib/smtp-transport'; import { container } from 'tsyringe'; +import EmailSettings from './EmailSettings'; +import { MailService, STFCEmailTemplate, SendMailResults } from './MailService'; +import { ResultsPromise } from './SparkPost'; import { Tokens } from '../../config/Tokens'; import { AdminDataSource } from '../../datasources/AdminDataSource'; import { SettingsId } from '../../models/Settings'; import { isProduction } from '../../utils/helperFunctions'; -import EmailSettings from './EmailSettings'; -import { MailService, STFCEmailTemplate, SendMailResults } from './MailService'; -import { ResultsPromise } from './SparkPost'; export class SMTPMailService extends MailService { private emailTemplates: EmailTemplates; diff --git a/apps/backend/src/eventHandlers/MailService/SparkPostMailService.ts b/apps/backend/src/eventHandlers/MailService/SparkPostMailService.ts index 397e88e6bb..ded6523866 100644 --- a/apps/backend/src/eventHandlers/MailService/SparkPostMailService.ts +++ b/apps/backend/src/eventHandlers/MailService/SparkPostMailService.ts @@ -1,9 +1,9 @@ import { logger } from '@user-office-software/duo-logger'; -import { isProduction, isStaging } from '../../utils/helperFunctions'; import EmailSettings from './EmailSettings'; import { MailService } from './MailService'; import { SparkPost } from './SparkPost'; +import { isProduction, isStaging } from '../../utils/helperFunctions'; export class SparkPostMailService extends MailService { private client: SparkPost; diff --git a/apps/backend/src/eventHandlers/customHandler.ts b/apps/backend/src/eventHandlers/customHandler.ts index 269ba9f281..db4298a80a 100644 --- a/apps/backend/src/eventHandlers/customHandler.ts +++ b/apps/backend/src/eventHandlers/customHandler.ts @@ -1,6 +1,7 @@ import { logger } from '@user-office-software/duo-logger'; import { container } from 'tsyringe'; +import { handleWorkflowEngineChange } from './proposalWorkflow'; import { Tokens } from '../config/Tokens'; import { FapDataSource } from '../datasources/FapDataSource'; import { InstrumentDataSource } from '../datasources/InstrumentDataSource'; @@ -18,7 +19,6 @@ import { ReviewStatus } from '../models/Review'; import { SampleStatus } from '../models/Sample'; import { TechnicalReviewStatus } from '../models/TechnicalReview'; import { checkAllReviewsSubmittedOnProposal } from '../utils/helperFunctions'; -import { handleWorkflowEngineChange } from './proposalWorkflow'; export default function createCustomHandler() { const proposalDataSource = container.resolve( diff --git a/apps/backend/src/eventHandlers/email/eliEmailHandler.spec.ts b/apps/backend/src/eventHandlers/email/eliEmailHandler.spec.ts index 6aa5e083f5..e8c3726dfc 100644 --- a/apps/backend/src/eventHandlers/email/eliEmailHandler.spec.ts +++ b/apps/backend/src/eventHandlers/email/eliEmailHandler.spec.ts @@ -2,12 +2,12 @@ import 'reflect-metadata'; import { faker } from '@faker-js/faker'; import { container } from 'tsyringe'; +import { eliEmailHandler } from './eliEmailHandler'; import { Tokens } from '../../config/Tokens'; import { CoProposerClaimDataSourceMock } from '../../datasources/mockups/CoProposerClaimDataSource'; import { RoleClaimDataSourceMock } from '../../datasources/mockups/RoleClaimDataSource'; import { ApplicationEvent } from '../../events/applicationEvents'; import { Event } from '../../events/event.enum'; -import { eliEmailHandler } from './eliEmailHandler'; // Mock MailService const mockMailService = { diff --git a/apps/backend/src/eventHandlers/email/essEmailHandler.spec.ts b/apps/backend/src/eventHandlers/email/essEmailHandler.spec.ts index 84d5df2edf..559b6916a1 100644 --- a/apps/backend/src/eventHandlers/email/essEmailHandler.spec.ts +++ b/apps/backend/src/eventHandlers/email/essEmailHandler.spec.ts @@ -3,6 +3,7 @@ import { faker } from '@faker-js/faker'; import { logger } from '@user-office-software/duo-logger'; import { container } from 'tsyringe'; +import { EmailTemplateId, essEmailHandler } from './essEmailHandler'; import { Tokens } from '../../config/Tokens'; import { CoProposerClaimDataSourceMock } from '../../datasources/mockups/CoProposerClaimDataSource'; import { @@ -17,7 +18,6 @@ import { import { ApplicationEvent } from '../../events/applicationEvents'; import { Event } from '../../events/event.enum'; import { Invite } from '../../models/Invite'; -import { EmailTemplateId, essEmailHandler } from './essEmailHandler'; // Mock MailService const mockMailService = { diff --git a/apps/backend/src/eventHandlers/index.ts b/apps/backend/src/eventHandlers/index.ts index cd18d998c0..4397bac545 100644 --- a/apps/backend/src/eventHandlers/index.ts +++ b/apps/backend/src/eventHandlers/index.ts @@ -1,10 +1,10 @@ import { container } from 'tsyringe'; -import { Tokens } from '../config/Tokens'; -import { ApplicationEvent } from '../events/applicationEvents'; import createCustomHandler from './customHandler'; import createExperimentSafetyWorkflowHandler from './experimentSafetyWorkflow'; import createProposalWorkflowHandler from './proposalWorkflow'; +import { Tokens } from '../config/Tokens'; +import { ApplicationEvent } from '../events/applicationEvents'; export default function createEventHandlers() { const emailHandler = container.resolve< diff --git a/apps/backend/src/events/applicationEvents.ts b/apps/backend/src/events/applicationEvents.ts index 2bff444905..c63652867b 100644 --- a/apps/backend/src/events/applicationEvents.ts +++ b/apps/backend/src/events/applicationEvents.ts @@ -1,3 +1,4 @@ +import { Event } from './event.enum'; import { Call } from '../models/Call'; import { ExperimentSafety } from '../models/Experiment'; import { Fap, FapProposal } from '../models/Fap'; @@ -14,7 +15,6 @@ import { Technique } from '../models/Technique'; import { User, UserRole } from '../models/User'; import { Visit } from '../models/Visit'; import { VisitRegistration } from '../models/VisitRegistration'; -import { Event } from './event.enum'; export interface GeneralEvent { type: Event; diff --git a/apps/backend/src/factory/xlsx/callFaps.ts b/apps/backend/src/factory/xlsx/callFaps.ts index ee5b1772d3..cc0272a24a 100644 --- a/apps/backend/src/factory/xlsx/callFaps.ts +++ b/apps/backend/src/factory/xlsx/callFaps.ts @@ -1,14 +1,14 @@ import { stripHtml } from 'string-strip-html'; import { container } from 'tsyringe'; +import { RowObj, collectFapXLSXRowData } from './fap'; +import { callFapPopulateRow } from './FapDataRow'; import baseContext from '../../buildContext'; +import { callFapStfcPopulateRow } from './stfc/StfcFapDataRow'; import { Tokens } from '../../config/Tokens'; import { FapDataSource } from '../../datasources/FapDataSource'; import { ProposalEndStatus } from '../../models/Proposal'; import { UserWithRole } from '../../models/User'; -import { RowObj, collectFapXLSXRowData } from './fap'; -import { callFapPopulateRow } from './FapDataRow'; -import { callFapStfcPopulateRow } from './stfc/StfcFapDataRow'; const fapDataSource: FapDataSource = container.resolve(Tokens.FapDataSource); diff --git a/apps/backend/src/factory/xlsx/fap.ts b/apps/backend/src/factory/xlsx/fap.ts index aba621973a..df5d6f2316 100644 --- a/apps/backend/src/factory/xlsx/fap.ts +++ b/apps/backend/src/factory/xlsx/fap.ts @@ -2,13 +2,13 @@ import { groupBy } from 'lodash'; import { stripHtml } from 'string-strip-html'; import { container } from 'tsyringe'; +import { collectCallFapXLSXData } from './callFaps'; +import { getDataRow } from './FapDataRow'; import baseContext from '../../buildContext'; +import { getStfcDataRow } from './stfc/StfcFapDataRow'; import { Tokens } from '../../config/Tokens'; import { FapDataSource } from '../../datasources/FapDataSource'; import { UserWithRole } from '../../models/User'; -import { collectCallFapXLSXData } from './callFaps'; -import { getDataRow } from './FapDataRow'; -import { getStfcDataRow } from './stfc/StfcFapDataRow'; type FapXLSXData = Array<{ sheetName: string; diff --git a/apps/backend/src/middlewares/factory/zip.ts b/apps/backend/src/middlewares/factory/zip.ts index ced52f9888..95cc906be1 100644 --- a/apps/backend/src/middlewares/factory/zip.ts +++ b/apps/backend/src/middlewares/factory/zip.ts @@ -2,6 +2,7 @@ import { logger } from '@user-office-software/duo-logger'; import express from 'express'; import { container } from 'tsyringe'; +import FactoryServices, { DownloadTypeServices } from './factoryServices'; import { Tokens } from '../../config/Tokens'; import { AdminDataSource } from '../../datasources/AdminDataSource'; import { @@ -18,7 +19,6 @@ import { getCurrentTimestamp } from '../../factory/util'; import { ProposalAttachmentData } from '../../factory/zip/attachment'; import { FeatureId } from '../../models/Feature'; import { UserWithRole } from '../../models/User'; -import FactoryServices, { DownloadTypeServices } from './factoryServices'; const router = express.Router(); diff --git a/apps/backend/src/middlewares/graphql.ts b/apps/backend/src/middlewares/graphql.ts index a64f55f518..5e89f70c73 100644 --- a/apps/backend/src/middlewares/graphql.ts +++ b/apps/backend/src/middlewares/graphql.ts @@ -24,6 +24,7 @@ import { container } from 'tsyringe'; import 'reflect-metadata'; import { UserAuthorization } from '../auth/UserAuthorization'; import baseContext from '../buildContext'; +import initGraphQLClient from './graphqlClient'; import { Tokens } from '../config/Tokens'; import { ResolverContext } from '../context'; import { UserWithRole } from '../models/User'; @@ -31,7 +32,6 @@ import federationSources from '../resolvers/federationSources'; import { registerEnums } from '../resolvers/registerEnums'; import { buildFederatedSchema } from '../utils/buildFederatedSchema'; import { isProduction } from '../utils/helperFunctions'; -import initGraphQLClient from './graphqlClient'; import { apolloServerMetricsPlugin } from './metrics/apolloServerMetricsPlugin'; export const context: ContextFunction< diff --git a/apps/backend/src/models/ProposalModelFunctions.spec.ts b/apps/backend/src/models/ProposalModelFunctions.spec.ts index 71d0372af5..cc9064f4fa 100644 --- a/apps/backend/src/models/ProposalModelFunctions.spec.ts +++ b/apps/backend/src/models/ProposalModelFunctions.spec.ts @@ -1,18 +1,18 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; -import { Tokens } from '../config/Tokens'; -import { dummyQuestionTemplateRelationFactory } from '../datasources/mockups/QuestionaryDataSource'; -import { QuestionaryDataSource } from '../datasources/QuestionaryDataSource'; -import { BooleanConfig } from '../resolvers/types/FieldConfig'; import { areDependenciesSatisfied, getFieldById, isMatchingConstraints, } from './ProposalModelFunctions'; import { Answer } from './Questionary'; +import { Tokens } from '../config/Tokens'; import { createConfig } from './questionTypes/QuestionRegistry'; import { DataType } from './Template'; +import { dummyQuestionTemplateRelationFactory } from '../datasources/mockups/QuestionaryDataSource'; +import { QuestionaryDataSource } from '../datasources/QuestionaryDataSource'; +import { BooleanConfig } from '../resolvers/types/FieldConfig'; let dataSource: QuestionaryDataSource; diff --git a/apps/backend/src/models/ProposalModelFunctions.ts b/apps/backend/src/models/ProposalModelFunctions.ts index 2705317151..f7cc0bc823 100644 --- a/apps/backend/src/models/ProposalModelFunctions.ts +++ b/apps/backend/src/models/ProposalModelFunctions.ts @@ -1,4 +1,3 @@ -import { FileUploadConfig } from '../resolvers/types/FieldConfig'; import { ConditionEvaluator, DependenciesLogicOperator, @@ -11,6 +10,7 @@ import { TemplateStep, DataType, } from './Template'; +import { FileUploadConfig } from '../resolvers/types/FieldConfig'; type AbstractField = QuestionTemplateRelation | Answer; type AbstractCollection = TemplateStep[] | QuestionaryStep[]; diff --git a/apps/backend/src/models/ProposalView.ts b/apps/backend/src/models/ProposalView.ts index f12a53be2f..a0f83c3c12 100644 --- a/apps/backend/src/models/ProposalView.ts +++ b/apps/backend/src/models/ProposalView.ts @@ -1,3 +1,4 @@ +import { AllocationTimeUnits } from './Call'; import { FapInstrument, ProposalViewFap, @@ -5,7 +6,6 @@ import { ProposalViewTechnicalReview, ProposalViewTechnique, } from '../resolvers/types/ProposalView'; -import { AllocationTimeUnits } from './Call'; export class ProposalView { constructor( public primaryKey: number, diff --git a/apps/backend/src/models/Template.ts b/apps/backend/src/models/Template.ts index 81d25afea0..4127fb0742 100644 --- a/apps/backend/src/models/Template.ts +++ b/apps/backend/src/models/Template.ts @@ -1,9 +1,9 @@ -import { Dependency } from '../datasources/postgres/records'; -import { FieldConfigType } from '../resolvers/types/FieldConfig'; import { DependenciesLogicOperator, EvaluatorOperator, } from './ConditionEvaluator'; +import { Dependency } from '../datasources/postgres/records'; +import { FieldConfigType } from '../resolvers/types/FieldConfig'; export class FieldDependency { constructor( diff --git a/apps/backend/src/mutations/AdminMutations.spec.ts b/apps/backend/src/mutations/AdminMutations.spec.ts index 03dc1b83ce..bf53c338c0 100644 --- a/apps/backend/src/mutations/AdminMutations.spec.ts +++ b/apps/backend/src/mutations/AdminMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import AdminMutations from './AdminMutations'; import { dummyInstitution } from '../datasources/mockups/AdminDataSource'; import { dummyUserOfficerWithRole, @@ -10,7 +11,6 @@ import { Page } from '../models/Admin'; import { FeatureId, FeatureUpdateAction } from '../models/Feature'; import { Permissions } from '../models/Permissions'; import { SettingsId } from '../models/Settings'; -import AdminMutations from './AdminMutations'; const adminMutations = container.resolve(AdminMutations); diff --git a/apps/backend/src/mutations/CallMutations.spec.ts b/apps/backend/src/mutations/CallMutations.spec.ts index 95f8d1c7a9..c720607708 100644 --- a/apps/backend/src/mutations/CallMutations.spec.ts +++ b/apps/backend/src/mutations/CallMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import CallMutations from './CallMutations'; import { dummyCall } from '../datasources/mockups/CallDataSource'; import { dummyUserOfficerWithRole, @@ -8,7 +9,6 @@ import { } from '../datasources/mockups/UserDataSource'; import { AllocationTimeUnits } from '../models/Call'; import { CreateCallInput } from '../resolvers/mutations/CreateCallMutation'; -import CallMutations from './CallMutations'; const callMutations = container.resolve(CallMutations); diff --git a/apps/backend/src/mutations/DataAccessUsersMutations.spec.ts b/apps/backend/src/mutations/DataAccessUsersMutations.spec.ts index a429b0c92a..91cdc39b7a 100644 --- a/apps/backend/src/mutations/DataAccessUsersMutations.spec.ts +++ b/apps/backend/src/mutations/DataAccessUsersMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import DataAccessUsersMutations from './DataAccessUsersMutations'; import { Tokens } from '../config/Tokens'; import { DataAccessUsersDataSource } from '../datasources/DataAccessUsersDataSource'; import { dummyProposalSubmitted } from '../datasources/mockups/ProposalDataSource'; @@ -11,7 +12,6 @@ import { dummyUserNotOnProposalWithRole, } from '../datasources/mockups/UserDataSource'; import { Rejection } from '../models/Rejection'; -import DataAccessUsersMutations from './DataAccessUsersMutations'; const dataAccessUsersMutations = container.resolve(DataAccessUsersMutations); diff --git a/apps/backend/src/mutations/ExperimentMutation.spec.ts b/apps/backend/src/mutations/ExperimentMutation.spec.ts index c46e9e4a41..9c83b283ba 100644 --- a/apps/backend/src/mutations/ExperimentMutation.spec.ts +++ b/apps/backend/src/mutations/ExperimentMutation.spec.ts @@ -1,5 +1,6 @@ import { container } from 'tsyringe'; +import ExperimentMutations from './ExperimentMutation'; import { Tokens } from '../config/Tokens'; import { CallDataSourceMock, @@ -32,7 +33,6 @@ import { Rejection } from '../models/Rejection'; import { Sample } from '../models/Sample'; import { DataType } from '../models/Template'; import { SampleDeclarationConfig } from '../resolvers/types/FieldConfig'; -import ExperimentMutations from './ExperimentMutation'; const experimentMutation = container.resolve(ExperimentMutations); const calldatasource = container.resolve( diff --git a/apps/backend/src/mutations/ExperimentSafetyPdfTemplateMutations.spec.ts b/apps/backend/src/mutations/ExperimentSafetyPdfTemplateMutations.spec.ts index 17cb8928b3..d4f81b9a94 100644 --- a/apps/backend/src/mutations/ExperimentSafetyPdfTemplateMutations.spec.ts +++ b/apps/backend/src/mutations/ExperimentSafetyPdfTemplateMutations.spec.ts @@ -1,5 +1,6 @@ import { container } from 'tsyringe'; +import ExperimentSafetyPdfTemplateMutations from './ExperimentSafetyPdfTemplateMutations'; import { Tokens } from '../config/Tokens'; import { ExperimentSafetyPdfTemplateDataSourceMock } from '../datasources/mockups/ExperimentSafetyPdfTemplateDataSource'; import { TemplateDataSourceMock } from '../datasources/mockups/TemplateDataSource'; @@ -11,7 +12,6 @@ import { ExperimentSafetyPdfTemplate } from '../models/ExperimentSafetyPdfTempla import { isRejection } from '../models/Rejection'; import { TemplateGroupId } from '../models/Template'; import { Template } from '../models/Template'; -import ExperimentSafetyPdfTemplateMutations from './ExperimentSafetyPdfTemplateMutations'; const experimentSafetyPdfTemplateMutations = container.resolve( ExperimentSafetyPdfTemplateMutations diff --git a/apps/backend/src/mutations/FapMutations.spec.ts b/apps/backend/src/mutations/FapMutations.spec.ts index c90820a1bb..a4f8b1ebad 100644 --- a/apps/backend/src/mutations/FapMutations.spec.ts +++ b/apps/backend/src/mutations/FapMutations.spec.ts @@ -2,6 +2,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import FapMutations from './FapMutations'; import { anotherDummyFap, dummyFap, @@ -15,7 +16,6 @@ import { import { ProposalPks } from '../models/Proposal'; import { Rejection } from '../models/Rejection'; import { UserRole } from '../models/User'; -import FapMutations from './FapMutations'; const FapMutationsInstance = container.resolve(FapMutations); diff --git a/apps/backend/src/mutations/GenericTemplateMutations.spec.ts b/apps/backend/src/mutations/GenericTemplateMutations.spec.ts index 5d18bb2d39..9e3834eef3 100644 --- a/apps/backend/src/mutations/GenericTemplateMutations.spec.ts +++ b/apps/backend/src/mutations/GenericTemplateMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import GenericTemplateMutations from './GenericTemplateMutations'; import { Tokens } from '../config/Tokens'; import { GenericTemplateDataSourceMock } from '../datasources/mockups/GenericTemplateDataSource'; import { @@ -10,7 +11,6 @@ import { } from '../datasources/mockups/UserDataSource'; import { GenericTemplate } from '../models/GenericTemplate'; import { isRejection, Rejection } from '../models/Rejection'; -import GenericTemplateMutations from './GenericTemplateMutations'; const genericTemplateMutations = container.resolve(GenericTemplateMutations); diff --git a/apps/backend/src/mutations/InstrumentMutations.spec.ts b/apps/backend/src/mutations/InstrumentMutations.spec.ts index cefba9f173..2e054aaaca 100644 --- a/apps/backend/src/mutations/InstrumentMutations.spec.ts +++ b/apps/backend/src/mutations/InstrumentMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import InstrumentMutations from './InstrumentMutations'; import { Tokens } from '../config/Tokens'; import { dummyInstrument, @@ -14,7 +15,6 @@ import { dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; import { WorkflowType } from '../models/Workflow'; -import InstrumentMutations from './InstrumentMutations'; let statusDataSource: StatusDataSourceMock; let techniqueDataSource: TechniqueDataSourceMock; diff --git a/apps/backend/src/mutations/InternalReviewsMutations.spec.ts b/apps/backend/src/mutations/InternalReviewsMutations.spec.ts index 3b8b8fc0fd..d398f5621e 100644 --- a/apps/backend/src/mutations/InternalReviewsMutations.spec.ts +++ b/apps/backend/src/mutations/InternalReviewsMutations.spec.ts @@ -1,12 +1,12 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import InternalReviewMutations from './InternalReviewMutations'; import { dummyReview } from '../datasources/mockups/InternalReviewDataSource'; import { dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import InternalReviewMutations from './InternalReviewMutations'; const internalReviewMutations = container.resolve(InternalReviewMutations); diff --git a/apps/backend/src/mutations/InviteMutations.spec.ts b/apps/backend/src/mutations/InviteMutations.spec.ts index e1f8a1e907..2d7129b348 100644 --- a/apps/backend/src/mutations/InviteMutations.spec.ts +++ b/apps/backend/src/mutations/InviteMutations.spec.ts @@ -2,6 +2,7 @@ import 'reflect-metadata'; import { faker } from '@faker-js/faker'; import { container } from 'tsyringe'; +import InviteMutations from './InviteMutations'; import { Tokens } from '../config/Tokens'; import { EventLogsDataSource } from '../datasources/EventLogsDataSource'; import { InviteDataSource } from '../datasources/InviteDataSource'; @@ -21,7 +22,6 @@ import { MailService } from '../eventHandlers/MailService/MailService'; import { Event } from '../events/event.enum'; import { Invite } from '../models/Invite'; import { Rejection } from '../models/Rejection'; -import InviteMutations from './InviteMutations'; const inviteMutations = container.resolve(InviteMutations); const visitDataSource = container.resolve( diff --git a/apps/backend/src/mutations/ProposalMutations.spec.ts b/apps/backend/src/mutations/ProposalMutations.spec.ts index b2dda3b247..09cbdcf4c1 100644 --- a/apps/backend/src/mutations/ProposalMutations.spec.ts +++ b/apps/backend/src/mutations/ProposalMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ProposalMutations from './ProposalMutations'; import { Tokens } from '../config/Tokens'; import { ProposalDataSourceMock, @@ -21,7 +22,6 @@ import { Proposal } from '../models/Proposal'; import { isRejection, Rejection } from '../models/Rejection'; import { Status } from '../models/Status'; import { WorkflowType } from '../models/Workflow'; -import ProposalMutations from './ProposalMutations'; const proposalMutations = container.resolve(ProposalMutations); diff --git a/apps/backend/src/mutations/ProposalPdfTemplateMutations.spec.ts b/apps/backend/src/mutations/ProposalPdfTemplateMutations.spec.ts index b9e2da10dc..6ad2473d3c 100644 --- a/apps/backend/src/mutations/ProposalPdfTemplateMutations.spec.ts +++ b/apps/backend/src/mutations/ProposalPdfTemplateMutations.spec.ts @@ -1,5 +1,6 @@ import { container } from 'tsyringe'; +import ProposalPdfTemplateMutations from './ProposalPdfTemplateMutations'; import { Tokens } from '../config/Tokens'; import { ProposalPdfTemplateDataSourceMock } from '../datasources/mockups/ProposalPdfTemplateDataSource'; import { TemplateDataSourceMock } from '../datasources/mockups/TemplateDataSource'; @@ -11,7 +12,6 @@ import { ProposalPdfTemplate } from '../models/ProposalPdfTemplate'; import { isRejection } from '../models/Rejection'; import { TemplateGroupId } from '../models/Template'; import { Template } from '../models/Template'; -import ProposalPdfTemplateMutations from './ProposalPdfTemplateMutations'; const proposalPdfTemplateMutations = container.resolve( ProposalPdfTemplateMutations diff --git a/apps/backend/src/mutations/ProposalSettingsMutations.spec.ts b/apps/backend/src/mutations/ProposalSettingsMutations.spec.ts index 79aaea6d52..59d721805d 100644 --- a/apps/backend/src/mutations/ProposalSettingsMutations.spec.ts +++ b/apps/backend/src/mutations/ProposalSettingsMutations.spec.ts @@ -1,6 +1,8 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import StatusMutations from './StatusMutations'; +import WorkflowMutations from './WorkflowMutations'; import { dummyUserOfficerWithRole, dummyUserWithRole, @@ -12,8 +14,6 @@ import { import { Rejection } from '../models/Rejection'; import { StatusChangingEvent } from '../models/StatusChangingEvent'; import { WorkflowType } from '../models/Workflow'; -import StatusMutations from './StatusMutations'; -import WorkflowMutations from './WorkflowMutations'; const statusMutationsInstance = container.resolve(StatusMutations); diff --git a/apps/backend/src/mutations/QuestionaryMutations.spec.ts b/apps/backend/src/mutations/QuestionaryMutations.spec.ts index 81c81d1b9d..b931611caf 100644 --- a/apps/backend/src/mutations/QuestionaryMutations.spec.ts +++ b/apps/backend/src/mutations/QuestionaryMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import QuestionaryMutations from './QuestionaryMutations'; import { Tokens } from '../config/Tokens'; import { QuestionaryDataSourceMock, @@ -10,7 +11,6 @@ import { dummyUserWithRole } from '../datasources/mockups/UserDataSource'; import { TemplateDataSource } from '../datasources/TemplateDataSource'; import { isRejection } from '../models/Rejection'; import QuestionaryQueries from '../queries/QuestionaryQueries'; -import QuestionaryMutations from './QuestionaryMutations'; const mutations = container.resolve(QuestionaryMutations); const queries = container.resolve(QuestionaryQueries); diff --git a/apps/backend/src/mutations/ReviewMutations.spec.ts b/apps/backend/src/mutations/ReviewMutations.spec.ts index f66ee0eb94..8829dc44f1 100644 --- a/apps/backend/src/mutations/ReviewMutations.spec.ts +++ b/apps/backend/src/mutations/ReviewMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ReviewMutations from './ReviewMutations'; import { dummyReview } from '../datasources/mockups/ReviewDataSource'; import { dummyFapChairWithRole, @@ -10,7 +11,6 @@ import { dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; import { Review, ReviewStatus } from '../models/Review'; -import ReviewMutations from './ReviewMutations'; const reviewMutations = container.resolve(ReviewMutations); diff --git a/apps/backend/src/mutations/SampleMutations.spec.ts b/apps/backend/src/mutations/SampleMutations.spec.ts index 34959f17c0..360545662e 100644 --- a/apps/backend/src/mutations/SampleMutations.spec.ts +++ b/apps/backend/src/mutations/SampleMutations.spec.ts @@ -1,6 +1,8 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ReviewMutations from './ReviewMutations'; +import SampleMutations from './SampleMutations'; import { Tokens } from '../config/Tokens'; import { SampleDataSourceMock } from '../datasources/mockups/SampleDataSource'; import { @@ -11,8 +13,6 @@ import { } from '../datasources/mockups/UserDataSource'; import { isRejection, Rejection } from '../models/Rejection'; import { Sample, SampleStatus } from '../models/Sample'; -import ReviewMutations from './ReviewMutations'; -import SampleMutations from './SampleMutations'; const sampleMutations = container.resolve(SampleMutations); const reviewMutations = container.resolve(ReviewMutations); diff --git a/apps/backend/src/mutations/ShipmentMutations.spec.ts b/apps/backend/src/mutations/ShipmentMutations.spec.ts index f9f152d3b7..3bb1e7a737 100644 --- a/apps/backend/src/mutations/ShipmentMutations.spec.ts +++ b/apps/backend/src/mutations/ShipmentMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ShipmentMutations from './ShipmentMutations'; import { Tokens } from '../config/Tokens'; import { ShipmentDataSourceMock } from '../datasources/mockups/ShipmentDataSource'; import { @@ -9,7 +10,6 @@ import { } from '../datasources/mockups/UserDataSource'; import { isRejection } from '../models/Rejection'; import { Shipment } from '../models/Shipment'; -import ShipmentMutations from './ShipmentMutations'; const mutations = container.resolve(ShipmentMutations); diff --git a/apps/backend/src/mutations/StatusActionsLogsMutations.spec.ts b/apps/backend/src/mutations/StatusActionsLogsMutations.spec.ts index b5eb4aba04..5f42ce4461 100644 --- a/apps/backend/src/mutations/StatusActionsLogsMutations.spec.ts +++ b/apps/backend/src/mutations/StatusActionsLogsMutations.spec.ts @@ -1,9 +1,9 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import StatusActionsLogsMutations from './StatusActionsLogsMutations'; import { dummyStatusActionsLog } from '../datasources/mockups/StatusActionsLogsDataSource'; import { dummyUserOfficerWithRole } from '../datasources/mockups/UserDataSource'; -import StatusActionsLogsMutations from './StatusActionsLogsMutations'; const statusActionsLogsMutations = container.resolve( StatusActionsLogsMutations diff --git a/apps/backend/src/mutations/TechniqueMutations.spec.ts b/apps/backend/src/mutations/TechniqueMutations.spec.ts index 3338e0b37e..54ee103132 100644 --- a/apps/backend/src/mutations/TechniqueMutations.spec.ts +++ b/apps/backend/src/mutations/TechniqueMutations.spec.ts @@ -1,12 +1,12 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import TechniqueMutations from './TechniqueMutations'; import { dummyTechnique1 } from '../datasources/mockups/TechniqueDataSource'; import { dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import TechniqueMutations from './TechniqueMutations'; const techniqueMutations = container.resolve(TechniqueMutations); diff --git a/apps/backend/src/mutations/TemplateMutations.spec.ts b/apps/backend/src/mutations/TemplateMutations.spec.ts index eeca442951..3af459261e 100644 --- a/apps/backend/src/mutations/TemplateMutations.spec.ts +++ b/apps/backend/src/mutations/TemplateMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import TemplateMutations from './TemplateMutations'; import { Tokens } from '../config/Tokens'; import { ProposalPdfTemplateDataSourceMock } from '../datasources/mockups/ProposalPdfTemplateDataSource'; import { TemplateDataSourceMock } from '../datasources/mockups/TemplateDataSource'; @@ -17,7 +18,6 @@ import { Question, TemplateGroupId, } from '../models/Template'; -import TemplateMutations from './TemplateMutations'; const QUESTION_ID = 'links_to_field'; const NON_EXISTING_QUESTION_ID = 'non_existing_question_id'; diff --git a/apps/backend/src/mutations/UserMutations.spec.ts b/apps/backend/src/mutations/UserMutations.spec.ts index f4b13ad824..01ba12d70e 100644 --- a/apps/backend/src/mutations/UserMutations.spec.ts +++ b/apps/backend/src/mutations/UserMutations.spec.ts @@ -1,6 +1,7 @@ import jsonwebtoken from 'jsonwebtoken'; import { container } from 'tsyringe'; +import UserMutations from './UserMutations'; import { dummyPlaceHolderUser, dummyUser, @@ -14,7 +15,6 @@ import { EmailInviteResponse } from '../models/EmailInviteResponse'; import { isRejection, Rejection } from '../models/Rejection'; import { AuthJwtPayload, User, UserRole } from '../models/User'; import { verifyToken } from '../utils/jwt'; -import UserMutations from './UserMutations'; const secret = process.env.JWT_SECRET as string; diff --git a/apps/backend/src/mutations/VisitMutations.spec.ts b/apps/backend/src/mutations/VisitMutations.spec.ts index f12a2ceb52..09a89cfc71 100644 --- a/apps/backend/src/mutations/VisitMutations.spec.ts +++ b/apps/backend/src/mutations/VisitMutations.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import VisitMutations from './VisitMutations'; import { Tokens } from '../config/Tokens'; import { dummyUserNotOnProposalWithRole, @@ -14,7 +15,6 @@ import { VisitRegistration, VisitRegistrationStatus, } from '../models/VisitRegistration'; -import VisitMutations from './VisitMutations'; const mutations = container.resolve(VisitMutations); const visitDataSource = container.resolve( diff --git a/apps/backend/src/queries/AdminQueries.spec.ts b/apps/backend/src/queries/AdminQueries.spec.ts index b7dbb4d939..0fc634515f 100644 --- a/apps/backend/src/queries/AdminQueries.spec.ts +++ b/apps/backend/src/queries/AdminQueries.spec.ts @@ -2,6 +2,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; import context from '../buildContext'; +import AdminQueries from './AdminQueries'; import { Tokens } from '../config/Tokens'; import { AdminDataSourceMock, @@ -12,7 +13,6 @@ import { dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import AdminQueries from './AdminQueries'; const adminQueries = container.resolve(AdminQueries); diff --git a/apps/backend/src/queries/CallQueries.spec.ts b/apps/backend/src/queries/CallQueries.spec.ts index eabdd87f7b..c5d7d39079 100644 --- a/apps/backend/src/queries/CallQueries.spec.ts +++ b/apps/backend/src/queries/CallQueries.spec.ts @@ -1,12 +1,12 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import CallQueries from './CallQueries'; import { dummyCall, dummyCalls } from '../datasources/mockups/CallDataSource'; import { dummyUserWithRole, dummyInstrumentScientist, } from '../datasources/mockups/UserDataSource'; -import CallQueries from './CallQueries'; const callQueries = container.resolve(CallQueries); diff --git a/apps/backend/src/queries/EventLogQueries.spec.ts b/apps/backend/src/queries/EventLogQueries.spec.ts index 191a26dfc2..d1540d2bba 100644 --- a/apps/backend/src/queries/EventLogQueries.spec.ts +++ b/apps/backend/src/queries/EventLogQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import EventLogQueries from './EventLogQueries'; import { dummyEventLogUserUpdated, dummyEventLogs, @@ -10,7 +11,6 @@ import { dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import EventLogQueries from './EventLogQueries'; const eventLogQueries = container.resolve(EventLogQueries); diff --git a/apps/backend/src/queries/ExperimentQueries.spec.ts b/apps/backend/src/queries/ExperimentQueries.spec.ts index f9217367eb..52c26cbf9f 100644 --- a/apps/backend/src/queries/ExperimentQueries.spec.ts +++ b/apps/backend/src/queries/ExperimentQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ExperimentQueries from './ExperimentQueries'; import { Tokens } from '../config/Tokens'; import { DummyExperimentSample1, @@ -9,7 +10,6 @@ import { } from '../datasources/mockups/ExperimentDataSource'; import { dummyUserOfficerWithRole } from '../datasources/mockups/UserDataSource'; import { ExperimentSafety } from '../models/Experiment'; -import ExperimentQueries from './ExperimentQueries'; describe('ExperimentQueries', () => { let queries: ExperimentQueries; diff --git a/apps/backend/src/queries/ExperimentSafetyPdfTemplateQueries.spec.ts b/apps/backend/src/queries/ExperimentSafetyPdfTemplateQueries.spec.ts index 00bc8e7ff5..a2e66718a4 100644 --- a/apps/backend/src/queries/ExperimentSafetyPdfTemplateQueries.spec.ts +++ b/apps/backend/src/queries/ExperimentSafetyPdfTemplateQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ExperimentSafetyPdfTemplateQueries from './ExperimentSafetyPdfTemplateQueries'; import { Tokens } from '../config/Tokens'; import { TemplateDataSourceMock } from '../datasources/mockups/TemplateDataSource'; import { @@ -8,7 +9,6 @@ import { dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; import { ExperimentSafetyPdfTemplate } from '../models/ExperimentSafetyPdfTemplate'; -import ExperimentSafetyPdfTemplateQueries from './ExperimentSafetyPdfTemplateQueries'; const experimentSafetyPdfTemplateQueries = container.resolve( ExperimentSafetyPdfTemplateQueries diff --git a/apps/backend/src/queries/FapQueries.spec.ts b/apps/backend/src/queries/FapQueries.spec.ts index fb04c0e117..5720834042 100644 --- a/apps/backend/src/queries/FapQueries.spec.ts +++ b/apps/backend/src/queries/FapQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import FapQueries from './FapQueries'; import { anotherDummyFap, dummyFap, @@ -12,7 +13,6 @@ import { dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import FapQueries from './FapQueries'; const FapQueriesInstance = container.resolve(FapQueries); diff --git a/apps/backend/src/queries/GenericTemplateQueries.spec.ts b/apps/backend/src/queries/GenericTemplateQueries.spec.ts index 9cc3a2186d..5d2eff57d6 100644 --- a/apps/backend/src/queries/GenericTemplateQueries.spec.ts +++ b/apps/backend/src/queries/GenericTemplateQueries.spec.ts @@ -1,10 +1,10 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import GenericTemplateQueries from './GenericTemplateQueries'; import { Tokens } from '../config/Tokens'; import { GenericTemplateDataSourceMock } from '../datasources/mockups/GenericTemplateDataSource'; import { dummyUserOfficerWithRole } from '../datasources/mockups/UserDataSource'; -import GenericTemplateQueries from './GenericTemplateQueries'; const genericTemplateQueries = container.resolve(GenericTemplateQueries); diff --git a/apps/backend/src/queries/InstrumentQueries.spec.ts b/apps/backend/src/queries/InstrumentQueries.spec.ts index f05efd80c5..a803cae54b 100644 --- a/apps/backend/src/queries/InstrumentQueries.spec.ts +++ b/apps/backend/src/queries/InstrumentQueries.spec.ts @@ -1,12 +1,12 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import InstrumentQueries from './InstrumentQueries'; import { dummyInstrument } from '../datasources/mockups/InstrumentDataSource'; import { dummyUserWithRole, dummyUserOfficerWithRole, } from '../datasources/mockups/UserDataSource'; -import InstrumentQueries from './InstrumentQueries'; const InstrumentQueriesInstance = container.resolve(InstrumentQueries); diff --git a/apps/backend/src/queries/InternalReviewQueries.spec.ts b/apps/backend/src/queries/InternalReviewQueries.spec.ts index 4ec02a6128..3904eea74e 100644 --- a/apps/backend/src/queries/InternalReviewQueries.spec.ts +++ b/apps/backend/src/queries/InternalReviewQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import InternalReviewQueries from './InternalReviewQueries'; import { anotherDummyReview, dummyReview, @@ -11,7 +12,6 @@ import { dummyInstrumentScientist, dummyUserOfficerWithRole, } from '../datasources/mockups/UserDataSource'; -import InternalReviewQueries from './InternalReviewQueries'; const internalReviewQueries = container.resolve(InternalReviewQueries); diff --git a/apps/backend/src/queries/ProposalPdfTemplateQueries.spec.ts b/apps/backend/src/queries/ProposalPdfTemplateQueries.spec.ts index c646f6b497..2ce365b18d 100644 --- a/apps/backend/src/queries/ProposalPdfTemplateQueries.spec.ts +++ b/apps/backend/src/queries/ProposalPdfTemplateQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ProposalPdfTemplateQueries from './ProposalPdfTemplateQueries'; import { Tokens } from '../config/Tokens'; import { TemplateDataSourceMock } from '../datasources/mockups/TemplateDataSource'; import { @@ -8,7 +9,6 @@ import { dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; import { ProposalPdfTemplate } from '../models/ProposalPdfTemplate'; -import ProposalPdfTemplateQueries from './ProposalPdfTemplateQueries'; const proposalPdfTemplateQueries = container.resolve( ProposalPdfTemplateQueries diff --git a/apps/backend/src/queries/ProposalQueries.spec.ts b/apps/backend/src/queries/ProposalQueries.spec.ts index 008d473e02..fca06b0f3f 100644 --- a/apps/backend/src/queries/ProposalQueries.spec.ts +++ b/apps/backend/src/queries/ProposalQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ProposalQueries from './ProposalQueries'; import { Tokens } from '../config/Tokens'; import { dummyProposal, @@ -18,7 +19,6 @@ import { } from '../datasources/mockups/UserDataSource'; import { Proposal } from '../models/Proposal'; import { omit } from '../utils/helperFunctions'; -import ProposalQueries from './ProposalQueries'; const proposalQueries = container.resolve(ProposalQueries); diff --git a/apps/backend/src/queries/QuestionaryQueries.spec.ts b/apps/backend/src/queries/QuestionaryQueries.spec.ts index 7d65d7c0e0..2b89c0ff73 100644 --- a/apps/backend/src/queries/QuestionaryQueries.spec.ts +++ b/apps/backend/src/queries/QuestionaryQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import QuestionaryQueries from './QuestionaryQueries'; import { ProposalAuthorization } from '../auth/ProposalAuthorization'; import { Tokens } from '../config/Tokens'; import { QuestionaryDataSourceMock } from '../datasources/mockups/QuestionaryDataSource'; @@ -8,7 +9,6 @@ import { dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import QuestionaryQueries from './QuestionaryQueries'; const questionaryQueries = container.resolve(QuestionaryQueries); diff --git a/apps/backend/src/queries/ReviewQueries.spec.ts b/apps/backend/src/queries/ReviewQueries.spec.ts index 1d73cee6f4..ca519e76c3 100644 --- a/apps/backend/src/queries/ReviewQueries.spec.ts +++ b/apps/backend/src/queries/ReviewQueries.spec.ts @@ -1,12 +1,12 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ReviewQueries from './ReviewQueries'; import { dummyReview } from '../datasources/mockups/ReviewDataSource'; import { dummyUserNotOnProposalWithRole, dummyUserOfficerWithRole, } from '../datasources/mockups/UserDataSource'; -import ReviewQueries from './ReviewQueries'; const reviewQueries = container.resolve(ReviewQueries); diff --git a/apps/backend/src/queries/SampleQueries.spec.ts b/apps/backend/src/queries/SampleQueries.spec.ts index 0bb9e1dde2..6f04882f28 100644 --- a/apps/backend/src/queries/SampleQueries.spec.ts +++ b/apps/backend/src/queries/SampleQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import SampleQueries from './SampleQueries'; import { Tokens } from '../config/Tokens'; import { SampleDataSourceMock } from '../datasources/mockups/SampleDataSource'; import { @@ -8,7 +9,6 @@ import { dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import SampleQueries from './SampleQueries'; const sampleQueries = container.resolve(SampleQueries); diff --git a/apps/backend/src/queries/ShipmentQueries.spec.ts b/apps/backend/src/queries/ShipmentQueries.spec.ts index 256516237a..7b06a2ca09 100644 --- a/apps/backend/src/queries/ShipmentQueries.spec.ts +++ b/apps/backend/src/queries/ShipmentQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import ShipmentQueries from './ShipmentQueries'; import { Tokens } from '../config/Tokens'; import { ShipmentDataSourceMock } from '../datasources/mockups/ShipmentDataSource'; import { @@ -8,7 +9,6 @@ import { dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import ShipmentQueries from './ShipmentQueries'; const shipmentQueries = container.resolve(ShipmentQueries); diff --git a/apps/backend/src/queries/StatusActionsLogsQueries.spec.ts b/apps/backend/src/queries/StatusActionsLogsQueries.spec.ts index dcb00682cc..2145456cc1 100644 --- a/apps/backend/src/queries/StatusActionsLogsQueries.spec.ts +++ b/apps/backend/src/queries/StatusActionsLogsQueries.spec.ts @@ -1,9 +1,9 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import StatusActionsLogsQueries from './StatusActionsLogsQueries'; import { dummyStatusActionsLog } from '../datasources/mockups/StatusActionsLogsDataSource'; import { dummyUserOfficerWithRole } from '../datasources/mockups/UserDataSource'; -import StatusActionsLogsQueries from './StatusActionsLogsQueries'; const statusActionsLogsQueries = container.resolve(StatusActionsLogsQueries); diff --git a/apps/backend/src/queries/TechniqueQueries.spec.ts b/apps/backend/src/queries/TechniqueQueries.spec.ts index 5b61abc678..19552699d5 100644 --- a/apps/backend/src/queries/TechniqueQueries.spec.ts +++ b/apps/backend/src/queries/TechniqueQueries.spec.ts @@ -1,6 +1,7 @@ import 'reflect-metadata'; import { container } from 'tsyringe'; +import TechniqueQueries from './TechniqueQueries'; import { dummyInstruments } from '../datasources/mockups/InstrumentDataSource'; import { dummyTechnique1, @@ -10,7 +11,6 @@ import { dummyUserOfficerWithRole, dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; -import TechniqueQueries from './TechniqueQueries'; const techniqueQueries = container.resolve(TechniqueQueries); diff --git a/apps/backend/src/queries/TemplateQueries.spec.ts b/apps/backend/src/queries/TemplateQueries.spec.ts index a8c4a6212b..42cd2afc0a 100644 --- a/apps/backend/src/queries/TemplateQueries.spec.ts +++ b/apps/backend/src/queries/TemplateQueries.spec.ts @@ -3,6 +3,7 @@ jest.mock('axios'); import 'reflect-metadata'; import { container } from 'tsyringe'; +import TemplateQueries from './TemplateQueries'; import { Tokens } from '../config/Tokens'; import { TemplateDataSourceMock } from '../datasources/mockups/TemplateDataSource'; import { @@ -10,7 +11,6 @@ import { dummyUserWithRole, } from '../datasources/mockups/UserDataSource'; import { Template, TemplateStep } from '../models/Template'; -import TemplateQueries from './TemplateQueries'; const templateQueries = container.resolve(TemplateQueries); beforeEach(() => { diff --git a/apps/backend/src/queries/UserQueries.spec.ts b/apps/backend/src/queries/UserQueries.spec.ts index c6373c0665..14667b35fd 100644 --- a/apps/backend/src/queries/UserQueries.spec.ts +++ b/apps/backend/src/queries/UserQueries.spec.ts @@ -11,6 +11,7 @@ jest.mock('@user-office-software/duo-logger', () => ({ import { logger } from '@user-office-software/duo-logger'; import { container } from 'tsyringe'; +import UserQueries from './UserQueries'; import { basicDummyUser, basicDummyUserNotOnProposal, @@ -25,7 +26,6 @@ import { UserJWT, } from '../models/User'; import { verifyToken } from '../utils/jwt'; -import UserQueries from './UserQueries'; const userQueries = container.resolve(UserQueries); diff --git a/apps/backend/src/resolvers/mutations/ChangeTechniquesProposalsStatusMutation.ts b/apps/backend/src/resolvers/mutations/ChangeTechniquesProposalsStatusMutation.ts index e6aa9207b6..78aad013e8 100644 --- a/apps/backend/src/resolvers/mutations/ChangeTechniquesProposalsStatusMutation.ts +++ b/apps/backend/src/resolvers/mutations/ChangeTechniquesProposalsStatusMutation.ts @@ -1,8 +1,8 @@ import { Ctx, Mutation, Resolver, Arg } from 'type-graphql'; +import { ChangeProposalsStatusInput } from './ChangeProposalsStatusMutation'; import { ResolverContext } from '../../context'; import { isRejection } from '../../models/Rejection'; -import { ChangeProposalsStatusInput } from './ChangeProposalsStatusMutation'; @Resolver() export class ChangeTechniqueProposalsStatusMutation { diff --git a/apps/backend/src/resolvers/mutations/UpdateAnswerMutation.ts b/apps/backend/src/resolvers/mutations/UpdateAnswerMutation.ts index 1fa06703ef..05d7e94c69 100644 --- a/apps/backend/src/resolvers/mutations/UpdateAnswerMutation.ts +++ b/apps/backend/src/resolvers/mutations/UpdateAnswerMutation.ts @@ -8,8 +8,8 @@ import { Resolver, } from 'type-graphql'; -import { ResolverContext } from '../../context'; import { AnswerInput } from './AnswerTopicMutation'; +import { ResolverContext } from '../../context'; @ArgsType() export class UpdateAnswerArgs { diff --git a/apps/backend/src/resolvers/mutations/UpdateTagMutation.ts b/apps/backend/src/resolvers/mutations/UpdateTagMutation.ts index 18b08c50b5..696d58c356 100644 --- a/apps/backend/src/resolvers/mutations/UpdateTagMutation.ts +++ b/apps/backend/src/resolvers/mutations/UpdateTagMutation.ts @@ -8,9 +8,9 @@ import { Resolver, } from 'type-graphql'; +import { CreateTagArgs } from './CreateTagMutation'; import { ResolverContext } from '../../context'; import { Tag } from '../types/Tag'; -import { CreateTagArgs } from './CreateTagMutation'; @ArgsType() export class UpdateTagArgs extends CreateTagArgs { diff --git a/apps/backend/src/resolvers/queries/ProposalsViewQuery.ts b/apps/backend/src/resolvers/queries/ProposalsViewQuery.ts index 4fe82a7779..8124392490 100644 --- a/apps/backend/src/resolvers/queries/ProposalsViewQuery.ts +++ b/apps/backend/src/resolvers/queries/ProposalsViewQuery.ts @@ -10,9 +10,9 @@ import { Resolver, } from 'type-graphql'; +import { ProposalsFilter } from './ProposalsQuery'; import { ResolverContext } from '../../context'; import { ProposalScientistComment, ProposalView } from '../types/ProposalView'; -import { ProposalsFilter } from './ProposalsQuery'; @ArgsType() class ProposalsViewArgs { diff --git a/apps/backend/src/resolvers/types/AuthJwtPayload.ts b/apps/backend/src/resolvers/types/AuthJwtPayload.ts index fd8b584c42..194ae64242 100644 --- a/apps/backend/src/resolvers/types/AuthJwtPayload.ts +++ b/apps/backend/src/resolvers/types/AuthJwtPayload.ts @@ -1,8 +1,8 @@ import { ObjectType, Field } from 'type-graphql'; -import { AuthJwtPayload as AuthJwtPayloadBase } from '../../models/User'; import { Role } from './Role'; import { UserJWT } from './UserJWT'; +import { AuthJwtPayload as AuthJwtPayloadBase } from '../../models/User'; @ObjectType() export class AuthJwtPayload implements AuthJwtPayloadBase { diff --git a/apps/backend/src/resolvers/types/Call.ts b/apps/backend/src/resolvers/types/Call.ts index 869e4232ad..981338c397 100644 --- a/apps/backend/src/resolvers/types/Call.ts +++ b/apps/backend/src/resolvers/types/Call.ts @@ -10,14 +10,14 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import TemplateDataSource from '../../datasources/postgres/TemplateDataSource'; -import { AllocationTimeUnits, Call as CallOrigin } from '../../models/Call'; import { Fap } from './Fap'; import { InstrumentWithAvailabilityTime } from './Instrument'; import { Tag } from './Tag'; import { Template } from './Template'; import { Workflow } from './Workflow'; +import { ResolverContext } from '../../context'; +import TemplateDataSource from '../../datasources/postgres/TemplateDataSource'; +import { AllocationTimeUnits, Call as CallOrigin } from '../../models/Call'; @ObjectType() @Directive('@key(fields: "id")') diff --git a/apps/backend/src/resolvers/types/ConnectionStatusAction.ts b/apps/backend/src/resolvers/types/ConnectionStatusAction.ts index 2d7eb78a2e..f07c854f96 100644 --- a/apps/backend/src/resolvers/types/ConnectionStatusAction.ts +++ b/apps/backend/src/resolvers/types/ConnectionStatusAction.ts @@ -8,10 +8,10 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { ConnectionHasStatusAction } from '../../models/StatusAction'; import { StatusAction } from './StatusAction'; import { StatusActionConfig } from './StatusActionConfig'; +import { ResolverContext } from '../../context'; +import { ConnectionHasStatusAction } from '../../models/StatusAction'; @ObjectType() export class ConnectionStatusAction diff --git a/apps/backend/src/resolvers/types/EventLog.ts b/apps/backend/src/resolvers/types/EventLog.ts index d2b5a41ade..b191c30b6f 100644 --- a/apps/backend/src/resolvers/types/EventLog.ts +++ b/apps/backend/src/resolvers/types/EventLog.ts @@ -8,9 +8,9 @@ import { Root, } from 'type-graphql'; +import { User } from './User'; import { ResolverContext } from '../../context'; import { EventLog as EventLogOrigin } from '../../models/EventLog'; -import { User } from './User'; @ObjectType() export class EventLog { diff --git a/apps/backend/src/resolvers/types/Experiment.ts b/apps/backend/src/resolvers/types/Experiment.ts index 4f6590d161..90629db088 100644 --- a/apps/backend/src/resolvers/types/Experiment.ts +++ b/apps/backend/src/resolvers/types/Experiment.ts @@ -10,13 +10,6 @@ import { Root, } from 'type-graphql'; -import { Tokens } from '../../config/Tokens'; -import { ResolverContext } from '../../context'; -import { FeedbackDataSource } from '../../datasources/FeedbackDataSource'; -import { - Experiment as ExperimentOrigin, - ExperimentStatus, -} from '../../models/Experiment'; import { BasicUserDetails } from './BasicUserDetails'; import { ExperimentSafety } from './ExperimentSafety'; import { Feedback } from './Feedback'; @@ -25,6 +18,13 @@ import { Instrument } from './Instrument'; import { Proposal } from './Proposal'; import { Shipment } from './Shipment'; import { Visit } from './Visit'; +import { Tokens } from '../../config/Tokens'; +import { ResolverContext } from '../../context'; +import { FeedbackDataSource } from '../../datasources/FeedbackDataSource'; +import { + Experiment as ExperimentOrigin, + ExperimentStatus, +} from '../../models/Experiment'; @ObjectType() @Directive('@key(fields: "experimentPk")') diff --git a/apps/backend/src/resolvers/types/ExperimentHasSample.ts b/apps/backend/src/resolvers/types/ExperimentHasSample.ts index 506154cc37..197420f742 100644 --- a/apps/backend/src/resolvers/types/ExperimentHasSample.ts +++ b/apps/backend/src/resolvers/types/ExperimentHasSample.ts @@ -8,10 +8,10 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { ExperimentHasSample as ExperimentHasSampleOrigin } from '../../models/Experiment'; import { Questionary } from './Questionary'; import { Sample } from './Sample'; +import { ResolverContext } from '../../context'; +import { ExperimentHasSample as ExperimentHasSampleOrigin } from '../../models/Experiment'; @ObjectType() export class ExperimentHasSample implements ExperimentHasSampleOrigin { diff --git a/apps/backend/src/resolvers/types/ExperimentSafety.ts b/apps/backend/src/resolvers/types/ExperimentSafety.ts index cc72d0b405..e0e28d05bd 100644 --- a/apps/backend/src/resolvers/types/ExperimentSafety.ts +++ b/apps/backend/src/resolvers/types/ExperimentSafety.ts @@ -10,6 +10,10 @@ import { Root, } from 'type-graphql'; +import { ExperimentHasSample } from './ExperimentHasSample'; +import { Proposal } from './Proposal'; +import { Questionary } from './Questionary'; +import { Status } from './Status'; import { Tokens } from '../../config/Tokens'; import { ResolverContext } from '../../context'; import { ExperimentDataSource } from '../../datasources/ExperimentDataSource'; @@ -19,10 +23,6 @@ import { InstrumentScientistDecisionEnum, } from '../../models/Experiment'; import { TemplateCategoryId } from '../../models/Template'; -import { ExperimentHasSample } from './ExperimentHasSample'; -import { Proposal } from './Proposal'; -import { Questionary } from './Questionary'; -import { Status } from './Status'; @ObjectType() @Directive('@key(fields: "experimentSafetyPk")') diff --git a/apps/backend/src/resolvers/types/Fap.ts b/apps/backend/src/resolvers/types/Fap.ts index b5767b3de1..566a2ba33f 100644 --- a/apps/backend/src/resolvers/types/Fap.ts +++ b/apps/backend/src/resolvers/types/Fap.ts @@ -8,12 +8,12 @@ import { Ctx, } from 'type-graphql'; +import { BasicUserDetails } from './BasicUserDetails'; import { ResolverContext } from '../../context'; import { Fap as FapBase, FapProposalCount as FapProposalCountBase, } from '../../models/Fap'; -import { BasicUserDetails } from './BasicUserDetails'; @ObjectType() export class FapProposalCount implements FapProposalCountBase { diff --git a/apps/backend/src/resolvers/types/FapAssignments.ts b/apps/backend/src/resolvers/types/FapAssignments.ts index 9720872406..6469569c72 100644 --- a/apps/backend/src/resolvers/types/FapAssignments.ts +++ b/apps/backend/src/resolvers/types/FapAssignments.ts @@ -8,11 +8,11 @@ import { Ctx, } from 'type-graphql'; -import { ResolverContext } from '../../context'; import { BasicUserDetails } from './BasicUserDetails'; import { Proposal } from './Proposal'; import { Review } from './Review'; import { Role } from './Role'; +import { ResolverContext } from '../../context'; @ObjectType() export class FapAssignment { diff --git a/apps/backend/src/resolvers/types/FapProposal.ts b/apps/backend/src/resolvers/types/FapProposal.ts index 19624ff9ad..bc07185498 100644 --- a/apps/backend/src/resolvers/types/FapProposal.ts +++ b/apps/backend/src/resolvers/types/FapProposal.ts @@ -8,10 +8,10 @@ import { Ctx, } from 'type-graphql'; -import { ResolverContext } from '../../context'; import { FapAssignment } from './FapAssignments'; import { Instrument } from './Instrument'; import { Proposal } from './Proposal'; +import { ResolverContext } from '../../context'; @ObjectType() export class FapProposal { diff --git a/apps/backend/src/resolvers/types/FapReviewTemplate.ts b/apps/backend/src/resolvers/types/FapReviewTemplate.ts index 696aa20358..137ddb2c24 100644 --- a/apps/backend/src/resolvers/types/FapReviewTemplate.ts +++ b/apps/backend/src/resolvers/types/FapReviewTemplate.ts @@ -7,8 +7,8 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; import { Template } from './Template'; +import { ResolverContext } from '../../context'; @ObjectType() export class FapReviewTemplate extends Template {} diff --git a/apps/backend/src/resolvers/types/FapReviewers.ts b/apps/backend/src/resolvers/types/FapReviewers.ts index 3d666a09bc..3ba85fd3f0 100644 --- a/apps/backend/src/resolvers/types/FapReviewers.ts +++ b/apps/backend/src/resolvers/types/FapReviewers.ts @@ -8,10 +8,10 @@ import { Ctx, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { FapReviewer as FapReviewerBase } from '../../models/Fap'; import { BasicUserDetails } from './BasicUserDetails'; import { Role } from './Role'; +import { ResolverContext } from '../../context'; +import { FapReviewer as FapReviewerBase } from '../../models/Fap'; @ObjectType() export class FapReviewer implements Partial { diff --git a/apps/backend/src/resolvers/types/Feedback.ts b/apps/backend/src/resolvers/types/Feedback.ts index b0e5278514..96066dea7b 100644 --- a/apps/backend/src/resolvers/types/Feedback.ts +++ b/apps/backend/src/resolvers/types/Feedback.ts @@ -8,10 +8,10 @@ import { Root, } from 'type-graphql'; +import { Questionary } from './Questionary'; import { ResolverContext } from '../../context'; import { Feedback as FeedbackOrigin } from '../../models/Feedback'; import { FeedbackStatus } from '../../models/Feedback'; -import { Questionary } from './Questionary'; @ObjectType() export class Feedback implements Partial { diff --git a/apps/backend/src/resolvers/types/FieldConfig.ts b/apps/backend/src/resolvers/types/FieldConfig.ts index 89085d7d14..b268367282 100644 --- a/apps/backend/src/resolvers/types/FieldConfig.ts +++ b/apps/backend/src/resolvers/types/FieldConfig.ts @@ -9,11 +9,11 @@ import { Root, } from 'type-graphql'; +import { Unit } from './Unit'; import { ResolverContext } from '../../context'; import { InstrumentOptionClass } from '../../models/questionTypes/InstrumentPicker'; import { TechniqueOptionClass } from '../../models/questionTypes/TechniquePicker'; import { Roles } from '../../models/Role'; -import { Unit } from './Unit'; @ObjectType() export class ConfigBase { diff --git a/apps/backend/src/resolvers/types/FieldDependency.ts b/apps/backend/src/resolvers/types/FieldDependency.ts index 8cbbb82093..274aacf830 100644 --- a/apps/backend/src/resolvers/types/FieldDependency.ts +++ b/apps/backend/src/resolvers/types/FieldDependency.ts @@ -1,7 +1,7 @@ import { ObjectType, Field } from 'type-graphql'; -import { FieldDependency as FieldDependencyOrigin } from '../../models/Template'; import { FieldCondition } from './FieldCondition'; +import { FieldDependency as FieldDependencyOrigin } from '../../models/Template'; @ObjectType() export class FieldDependency implements Partial { diff --git a/apps/backend/src/resolvers/types/GenericTemplate.ts b/apps/backend/src/resolvers/types/GenericTemplate.ts index 22aa6c48d1..e902cd5371 100644 --- a/apps/backend/src/resolvers/types/GenericTemplate.ts +++ b/apps/backend/src/resolvers/types/GenericTemplate.ts @@ -8,11 +8,11 @@ import { Root, } from 'type-graphql'; +import { Proposal } from './Proposal'; +import { Questionary } from './Questionary'; import { ResolverContext } from '../../context'; import { GenericTemplate as GenericTemplateOrigin } from '../../models/GenericTemplate'; import { TemplateCategoryId } from '../../models/Template'; -import { Proposal } from './Proposal'; -import { Questionary } from './Questionary'; @ObjectType() export class GenericTemplate implements Partial { diff --git a/apps/backend/src/resolvers/types/Institution.ts b/apps/backend/src/resolvers/types/Institution.ts index d39d108c12..adf861913d 100644 --- a/apps/backend/src/resolvers/types/Institution.ts +++ b/apps/backend/src/resolvers/types/Institution.ts @@ -8,9 +8,9 @@ import { Root, } from 'type-graphql'; +import { Entry } from './Entry'; import { ResolverContext } from '../../context'; import { Institution as InstitutionOrigin } from '../../models/Institution'; -import { Entry } from './Entry'; @ObjectType() export class Institution implements Partial { diff --git a/apps/backend/src/resolvers/types/Instrument.ts b/apps/backend/src/resolvers/types/Instrument.ts index 3c1e9e2d58..5cde6839c3 100644 --- a/apps/backend/src/resolvers/types/Instrument.ts +++ b/apps/backend/src/resolvers/types/Instrument.ts @@ -9,12 +9,12 @@ import { Directive, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { Instrument as InstrumentOrigin } from '../../models/Instrument'; -import { isRejection } from '../../models/Rejection'; import { BasicUserDetails } from './BasicUserDetails'; import { Fap } from './Fap'; import { Tag } from './Tag'; +import { ResolverContext } from '../../context'; +import { Instrument as InstrumentOrigin } from '../../models/Instrument'; +import { isRejection } from '../../models/Rejection'; @ObjectType() @Directive('@key(fields: "id")') diff --git a/apps/backend/src/resolvers/types/InternalReview.ts b/apps/backend/src/resolvers/types/InternalReview.ts index 1c98b4d2b8..b15b9d5f18 100644 --- a/apps/backend/src/resolvers/types/InternalReview.ts +++ b/apps/backend/src/resolvers/types/InternalReview.ts @@ -8,9 +8,9 @@ import { Root, } from 'type-graphql'; +import { BasicUserDetails } from './BasicUserDetails'; import { ResolverContext } from '../../context'; import { InternalReview as InternalReviewOrigin } from '../../models/InternalReview'; -import { BasicUserDetails } from './BasicUserDetails'; @ObjectType() export class InternalReview implements Partial { diff --git a/apps/backend/src/resolvers/types/PredefinedMessage.ts b/apps/backend/src/resolvers/types/PredefinedMessage.ts index 103f036600..f0a83bbb24 100644 --- a/apps/backend/src/resolvers/types/PredefinedMessage.ts +++ b/apps/backend/src/resolvers/types/PredefinedMessage.ts @@ -8,9 +8,9 @@ import { Root, } from 'type-graphql'; +import { BasicUserDetails } from './BasicUserDetails'; import { ResolverContext } from '../../context'; import { PredefinedMessage as PredefinedMessageOrigin } from '../../models/PredefinedMessage'; -import { BasicUserDetails } from './BasicUserDetails'; /** * NOTE: Predefined messages are used as a way to reuse some messages that are repeatable throughout the app. diff --git a/apps/backend/src/resolvers/types/Proposal.ts b/apps/backend/src/resolvers/types/Proposal.ts index f14402443e..92a897d8b4 100644 --- a/apps/backend/src/resolvers/types/Proposal.ts +++ b/apps/backend/src/resolvers/types/Proposal.ts @@ -10,14 +10,6 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { - Proposal as ProposalOrigin, - ProposalEndStatus, - ProposalPublicStatus, -} from '../../models/Proposal'; -import { isRejection } from '../../models/Rejection'; -import { TemplateCategoryId } from '../../models/Template'; import { BasicUserDetails } from './BasicUserDetails'; import { Call } from './Call'; import { Experiment } from './Experiment'; @@ -34,6 +26,14 @@ import { Status } from './Status'; import { TechnicalReview } from './TechnicalReview'; import { Technique } from './Technique'; import { Visit } from './Visit'; +import { ResolverContext } from '../../context'; +import { + Proposal as ProposalOrigin, + ProposalEndStatus, + ProposalPublicStatus, +} from '../../models/Proposal'; +import { isRejection } from '../../models/Rejection'; +import { TemplateCategoryId } from '../../models/Template'; const statusMap = new Map(); statusMap.set(ProposalEndStatus.ACCEPTED, ProposalPublicStatus.accepted); diff --git a/apps/backend/src/resolvers/types/ProposalAttachments.ts b/apps/backend/src/resolvers/types/ProposalAttachments.ts index b2b40312f7..2b2df74b8d 100644 --- a/apps/backend/src/resolvers/types/ProposalAttachments.ts +++ b/apps/backend/src/resolvers/types/ProposalAttachments.ts @@ -1,7 +1,7 @@ import { Field, ObjectType } from 'type-graphql'; -import { ProposalAttachments as ProposalAttachmentsOrigin } from '../../models/ProposalAttachments'; import { Question } from './Question'; +import { ProposalAttachments as ProposalAttachmentsOrigin } from '../../models/ProposalAttachments'; @ObjectType() export class ProposalAttachments implements Partial { diff --git a/apps/backend/src/resolvers/types/ProposalTemplate.ts b/apps/backend/src/resolvers/types/ProposalTemplate.ts index bb31f65a91..f0376ec4fe 100644 --- a/apps/backend/src/resolvers/types/ProposalTemplate.ts +++ b/apps/backend/src/resolvers/types/ProposalTemplate.ts @@ -7,8 +7,8 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; import { Template } from './Template'; +import { ResolverContext } from '../../context'; @ObjectType() export class ProposalTemplate extends Template {} diff --git a/apps/backend/src/resolvers/types/ProposalView.ts b/apps/backend/src/resolvers/types/ProposalView.ts index 0718274e68..807d5fc674 100644 --- a/apps/backend/src/resolvers/types/ProposalView.ts +++ b/apps/backend/src/resolvers/types/ProposalView.ts @@ -9,6 +9,8 @@ import { InputType, } from 'type-graphql'; +import { ProposalInternalComment } from './ProposalInternalComment'; +import { User } from './User'; import { ResolverContext } from '../../context'; import { AllocationTimeUnits } from '../../models/Call'; import { @@ -16,8 +18,6 @@ import { ProposalEndStatus, } from '../../models/Proposal'; import { TechnicalReviewStatus } from '../../models/TechnicalReview'; -import { ProposalInternalComment } from './ProposalInternalComment'; -import { User } from './User'; @InputType('FapInstrumentInput') @ObjectType() diff --git a/apps/backend/src/resolvers/types/Question.ts b/apps/backend/src/resolvers/types/Question.ts index 5573898327..47a1b01d62 100644 --- a/apps/backend/src/resolvers/types/Question.ts +++ b/apps/backend/src/resolvers/types/Question.ts @@ -1,11 +1,11 @@ import { Field, ObjectType } from 'type-graphql'; +import { FieldConfigType } from './FieldConfig'; import { DataType, Question as QuestionOrigin, TemplateCategoryId, } from '../../models/Template'; -import { FieldConfigType } from './FieldConfig'; @ObjectType() export class Question implements Partial { diff --git a/apps/backend/src/resolvers/types/QuestionComparison.ts b/apps/backend/src/resolvers/types/QuestionComparison.ts index 91a576dd0f..2965c487e3 100644 --- a/apps/backend/src/resolvers/types/QuestionComparison.ts +++ b/apps/backend/src/resolvers/types/QuestionComparison.ts @@ -1,11 +1,11 @@ import { ObjectType, Field } from 'type-graphql'; +import { Question } from './Question'; import { ConflictResolutionStrategy, QuestionComparison as QuestionComparisonOrigin, ComparisonStatus, } from '../../models/Template'; -import { Question } from './Question'; @ObjectType() export class QuestionComparison implements Partial { diff --git a/apps/backend/src/resolvers/types/QuestionTemplateRelation.ts b/apps/backend/src/resolvers/types/QuestionTemplateRelation.ts index d98d0dda4d..4b4945a151 100644 --- a/apps/backend/src/resolvers/types/QuestionTemplateRelation.ts +++ b/apps/backend/src/resolvers/types/QuestionTemplateRelation.ts @@ -1,10 +1,10 @@ import { Field, Int, ObjectType } from 'type-graphql'; -import { DependenciesLogicOperator } from '../../models/ConditionEvaluator'; -import { QuestionTemplateRelation as QuestionTemplateRelationOrigin } from '../../models/Template'; import { FieldConfigType } from './FieldConfig'; import { FieldDependency } from './FieldDependency'; import { Question } from './Question'; +import { DependenciesLogicOperator } from '../../models/ConditionEvaluator'; +import { QuestionTemplateRelation as QuestionTemplateRelationOrigin } from '../../models/Template'; @ObjectType() export class QuestionTemplateRelation diff --git a/apps/backend/src/resolvers/types/QuestionWithUsage.ts b/apps/backend/src/resolvers/types/QuestionWithUsage.ts index d4805d9bf5..a73cc6c39c 100644 --- a/apps/backend/src/resolvers/types/QuestionWithUsage.ts +++ b/apps/backend/src/resolvers/types/QuestionWithUsage.ts @@ -1,9 +1,9 @@ import { Ctx, FieldResolver, ObjectType, Resolver, Root } from 'type-graphql'; -import { ResolverContext } from '../../context'; import { AnswerBasic } from './AnswerBasic'; import { Question } from './Question'; import { Template } from './Template'; +import { ResolverContext } from '../../context'; @ObjectType() export class QuestionWithUsage extends Question {} diff --git a/apps/backend/src/resolvers/types/Questionary.ts b/apps/backend/src/resolvers/types/Questionary.ts index b653b12945..b62d6a6680 100644 --- a/apps/backend/src/resolvers/types/Questionary.ts +++ b/apps/backend/src/resolvers/types/Questionary.ts @@ -8,9 +8,9 @@ import { Root, } from 'type-graphql'; +import { QuestionaryStep } from './QuestionaryStep'; import { ResolverContext } from '../../context'; import { Questionary as QuestionaryOrigin } from '../../models/Questionary'; -import { QuestionaryStep } from './QuestionaryStep'; @ObjectType() export class Questionary implements Partial { diff --git a/apps/backend/src/resolvers/types/QuestionaryStep.ts b/apps/backend/src/resolvers/types/QuestionaryStep.ts index b1617bfaa5..52859c1a94 100644 --- a/apps/backend/src/resolvers/types/QuestionaryStep.ts +++ b/apps/backend/src/resolvers/types/QuestionaryStep.ts @@ -1,8 +1,8 @@ import { ObjectType, Field } from 'type-graphql'; -import { QuestionaryStep as QuestionaryStepOrigin } from '../../models/Questionary'; import { Answer } from './Answer'; import { Topic } from './Topic'; +import { QuestionaryStep as QuestionaryStepOrigin } from '../../models/Questionary'; @ObjectType() export class QuestionaryStep implements Partial { diff --git a/apps/backend/src/resolvers/types/Review.ts b/apps/backend/src/resolvers/types/Review.ts index 1ba2565022..8840875b87 100644 --- a/apps/backend/src/resolvers/types/Review.ts +++ b/apps/backend/src/resolvers/types/Review.ts @@ -8,12 +8,12 @@ import { Root, } from 'type-graphql'; +import { BasicUserDetails } from './BasicUserDetails'; +import { Questionary } from './Questionary'; import { ResolverContext } from '../../context'; import { Review as ReviewOrigin, ReviewStatus } from '../../models/Review'; import { TemplateCategoryId } from '../../models/Template'; import { Proposal } from '../types/Proposal'; -import { BasicUserDetails } from './BasicUserDetails'; -import { Questionary } from './Questionary'; @ObjectType() export class Review implements Partial { diff --git a/apps/backend/src/resolvers/types/Sample.ts b/apps/backend/src/resolvers/types/Sample.ts index 69aee68e26..8a531fdc5a 100644 --- a/apps/backend/src/resolvers/types/Sample.ts +++ b/apps/backend/src/resolvers/types/Sample.ts @@ -9,10 +9,10 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { Sample as SampleOrigin, SampleStatus } from '../../models/Sample'; import { Proposal } from './Proposal'; import { Questionary } from './Questionary'; +import { ResolverContext } from '../../context'; +import { Sample as SampleOrigin, SampleStatus } from '../../models/Sample'; @ObjectType() export class Sample implements Partial { diff --git a/apps/backend/src/resolvers/types/Shipment.ts b/apps/backend/src/resolvers/types/Shipment.ts index 50610aac72..9283fc903c 100644 --- a/apps/backend/src/resolvers/types/Shipment.ts +++ b/apps/backend/src/resolvers/types/Shipment.ts @@ -8,15 +8,15 @@ import { Root, } from 'type-graphql'; +import { Proposal } from './Proposal'; +import { Questionary } from './Questionary'; +import { Sample } from './Sample'; import { ResolverContext } from '../../context'; import { Shipment as ShipmentOrigin, ShipmentStatus, } from '../../models/Shipment'; import { TemplateCategoryId } from '../../models/Template'; -import { Proposal } from './Proposal'; -import { Questionary } from './Questionary'; -import { Sample } from './Sample'; @ObjectType() export class Shipment implements Partial { diff --git a/apps/backend/src/resolvers/types/StatusAction.ts b/apps/backend/src/resolvers/types/StatusAction.ts index 95df315dd5..692da60a06 100644 --- a/apps/backend/src/resolvers/types/StatusAction.ts +++ b/apps/backend/src/resolvers/types/StatusAction.ts @@ -8,16 +8,16 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { - StatusAction as StatusActionOrigin, - StatusActionType, -} from '../../models/StatusAction'; import { EmailActionDefaultConfig, StatusActionDefaultConfig, RabbitMQActionDefaultConfig, } from './StatusActionConfig'; +import { ResolverContext } from '../../context'; +import { + StatusAction as StatusActionOrigin, + StatusActionType, +} from '../../models/StatusAction'; @ObjectType() export class StatusAction implements Partial { diff --git a/apps/backend/src/resolvers/types/StatusActionsLog.ts b/apps/backend/src/resolvers/types/StatusActionsLog.ts index ca98776102..a8eebb9c52 100644 --- a/apps/backend/src/resolvers/types/StatusActionsLog.ts +++ b/apps/backend/src/resolvers/types/StatusActionsLog.ts @@ -9,11 +9,11 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { StatusActionsLog as StatusActionsLogOrigin } from '../../models/StatusActionsLog'; import { ConnectionStatusAction } from './ConnectionStatusAction'; import { Proposal } from './Proposal'; import { EmailStatusActionRecipients } from './StatusActionConfig'; +import { ResolverContext } from '../../context'; +import { StatusActionsLog as StatusActionsLogOrigin } from '../../models/StatusActionsLog'; @ObjectType() @Directive('@key(fields: "statusActionsLogId")') diff --git a/apps/backend/src/resolvers/types/Tag.ts b/apps/backend/src/resolvers/types/Tag.ts index bac2649dbf..5f09fb6baa 100644 --- a/apps/backend/src/resolvers/types/Tag.ts +++ b/apps/backend/src/resolvers/types/Tag.ts @@ -8,10 +8,10 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { Tag as TagBase } from '../../models/Tag'; import { Call } from './Call'; import { Instrument } from './Instrument'; +import { ResolverContext } from '../../context'; +import { Tag as TagBase } from '../../models/Tag'; @ObjectType() export class Tag implements TagBase { diff --git a/apps/backend/src/resolvers/types/TechnicalReview.ts b/apps/backend/src/resolvers/types/TechnicalReview.ts index f6450f84dc..854ef89056 100644 --- a/apps/backend/src/resolvers/types/TechnicalReview.ts +++ b/apps/backend/src/resolvers/types/TechnicalReview.ts @@ -8,6 +8,8 @@ import { Root, } from 'type-graphql'; +import { BasicUserDetails } from './BasicUserDetails'; +import { Questionary } from './Questionary'; import { ResolverContext } from '../../context'; import { TechnicalReview as TechnicalReviewOrigin, @@ -15,8 +17,6 @@ import { } from '../../models/TechnicalReview'; import { TemplateCategoryId } from '../../models/Template'; import { Proposal } from '../types/Proposal'; -import { BasicUserDetails } from './BasicUserDetails'; -import { Questionary } from './Questionary'; @ObjectType() export class TechnicalReview implements Partial { diff --git a/apps/backend/src/resolvers/types/TechnicalReviewTemplate.ts b/apps/backend/src/resolvers/types/TechnicalReviewTemplate.ts index 772af6f97a..800b35c105 100644 --- a/apps/backend/src/resolvers/types/TechnicalReviewTemplate.ts +++ b/apps/backend/src/resolvers/types/TechnicalReviewTemplate.ts @@ -7,8 +7,8 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; import { Template } from './Template'; +import { ResolverContext } from '../../context'; @ObjectType() export class TechnicalReviewTemplate extends Template {} diff --git a/apps/backend/src/resolvers/types/Technique.ts b/apps/backend/src/resolvers/types/Technique.ts index cfa1169edc..97df64bf40 100644 --- a/apps/backend/src/resolvers/types/Technique.ts +++ b/apps/backend/src/resolvers/types/Technique.ts @@ -9,11 +9,11 @@ import { Directive, } from 'type-graphql'; +import { BasicUserDetails } from './BasicUserDetails'; +import { Instrument } from './Instrument'; import { ResolverContext } from '../../context'; import { isRejection } from '../../models/Rejection'; import { Technique as TechniqueOrigin } from '../../models/Technique'; -import { BasicUserDetails } from './BasicUserDetails'; -import { Instrument } from './Instrument'; @ObjectType() @Directive('@key(fields: "id")') diff --git a/apps/backend/src/resolvers/types/Template.ts b/apps/backend/src/resolvers/types/Template.ts index 0e2967f24e..7a2c105025 100644 --- a/apps/backend/src/resolvers/types/Template.ts +++ b/apps/backend/src/resolvers/types/Template.ts @@ -9,17 +9,17 @@ import { Root, } from 'type-graphql'; +import { ExperimentSafetyPdfTemplate } from './ExperimentSafetyPdfTemplate'; +import { ProposalPdfTemplate } from './ProposalPdfTemplate'; +import { Question } from './Question'; +import { TemplateGroup } from './TemplateGroup'; +import { TemplateStep } from './TemplateStep'; import { ResolverContext } from '../../context'; import TemplateDataSource from '../../datasources/postgres/TemplateDataSource'; import { Template as TemplateOrigin, TemplateGroupId, } from '../../models/Template'; -import { ExperimentSafetyPdfTemplate } from './ExperimentSafetyPdfTemplate'; -import { ProposalPdfTemplate } from './ProposalPdfTemplate'; -import { Question } from './Question'; -import { TemplateGroup } from './TemplateGroup'; -import { TemplateStep } from './TemplateStep'; @ObjectType() export class Template implements Partial { diff --git a/apps/backend/src/resolvers/types/TemplateStep.ts b/apps/backend/src/resolvers/types/TemplateStep.ts index 569404c56a..275c59eae5 100644 --- a/apps/backend/src/resolvers/types/TemplateStep.ts +++ b/apps/backend/src/resolvers/types/TemplateStep.ts @@ -1,8 +1,8 @@ import { ObjectType, Field } from 'type-graphql'; -import { TemplateStep as TemplateStepOrigin } from '../../models/Template'; import { QuestionTemplateRelation } from './QuestionTemplateRelation'; import { Topic } from './Topic'; +import { TemplateStep as TemplateStepOrigin } from '../../models/Template'; @ObjectType() export class TemplateStep implements Partial { diff --git a/apps/backend/src/resolvers/types/TemplateValidation.ts b/apps/backend/src/resolvers/types/TemplateValidation.ts index 8849ac3ec5..a1ffa1aef0 100644 --- a/apps/backend/src/resolvers/types/TemplateValidation.ts +++ b/apps/backend/src/resolvers/types/TemplateValidation.ts @@ -1,7 +1,7 @@ import { ObjectType, Field } from 'type-graphql'; -import { TemplateValidation as TemplateValidationOrigin } from '../../models/Template'; import { TemplateValidationData } from './TemplateValidationData'; +import { TemplateValidation as TemplateValidationOrigin } from '../../models/Template'; @ObjectType() export class TemplateValidation implements Partial { diff --git a/apps/backend/src/resolvers/types/TemplateValidationData.ts b/apps/backend/src/resolvers/types/TemplateValidationData.ts index e625ed4bba..755ef03526 100644 --- a/apps/backend/src/resolvers/types/TemplateValidationData.ts +++ b/apps/backend/src/resolvers/types/TemplateValidationData.ts @@ -1,7 +1,7 @@ import { ObjectType, Field } from 'type-graphql'; -import { TemplateValidationData as TemplateValidationDataOrigin } from '../../models/Template'; import { QuestionComparison } from './QuestionComparison'; +import { TemplateValidationData as TemplateValidationDataOrigin } from '../../models/Template'; @ObjectType() export class TemplateValidationData diff --git a/apps/backend/src/resolvers/types/UnitComparison.ts b/apps/backend/src/resolvers/types/UnitComparison.ts index 30300b5937..6c19960791 100644 --- a/apps/backend/src/resolvers/types/UnitComparison.ts +++ b/apps/backend/src/resolvers/types/UnitComparison.ts @@ -1,11 +1,11 @@ import { ObjectType, Field } from 'type-graphql'; +import { Unit } from './Unit'; import { ComparisonStatus, ConflictResolutionStrategy, } from '../../models/Template'; import { UnitComparison as UnitComparisonOrigin } from '../../models/Unit'; -import { Unit } from './Unit'; @ObjectType() export class UnitComparison implements Partial { diff --git a/apps/backend/src/resolvers/types/UnitsImportWithValidation.ts b/apps/backend/src/resolvers/types/UnitsImportWithValidation.ts index b91ac5c574..a801137106 100644 --- a/apps/backend/src/resolvers/types/UnitsImportWithValidation.ts +++ b/apps/backend/src/resolvers/types/UnitsImportWithValidation.ts @@ -1,7 +1,7 @@ import { ObjectType, Field } from 'type-graphql'; -import { UnitsImportWithValidation as UnitsImportWithValidationOrigin } from '../../models/Unit'; import { UnitComparison } from './UnitComparison'; +import { UnitsImportWithValidation as UnitsImportWithValidationOrigin } from '../../models/Unit'; @ObjectType() export class UnitsImportWithValidation diff --git a/apps/backend/src/resolvers/types/User.ts b/apps/backend/src/resolvers/types/User.ts index 8b69c0ef6f..d3b9d5c04e 100644 --- a/apps/backend/src/resolvers/types/User.ts +++ b/apps/backend/src/resolvers/types/User.ts @@ -12,18 +12,18 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { ProposalEndStatus } from '../../models/Proposal'; -import { ReviewerFilter, ReviewStatus } from '../../models/Review'; -import { Roles } from '../../models/Role'; -import { User as UserOrigin } from '../../models/User'; -import { UserExperimentsFilter } from '../queries/ExperimentsQuery'; import { Experiment } from './Experiment'; import { Fap } from './Fap'; import { Instrument } from './Instrument'; import { Proposal } from './Proposal'; import { Review } from './Review'; import { Role } from './Role'; +import { ResolverContext } from '../../context'; +import { ProposalEndStatus } from '../../models/Proposal'; +import { ReviewerFilter, ReviewStatus } from '../../models/Review'; +import { Roles } from '../../models/Role'; +import { User as UserOrigin } from '../../models/User'; +import { UserExperimentsFilter } from '../queries/ExperimentsQuery'; @InputType() export class UserProposalsFilter { diff --git a/apps/backend/src/resolvers/types/Visit.ts b/apps/backend/src/resolvers/types/Visit.ts index b089e37ee3..dfd5e2677c 100644 --- a/apps/backend/src/resolvers/types/Visit.ts +++ b/apps/backend/src/resolvers/types/Visit.ts @@ -8,13 +8,13 @@ import { Root, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { Visit as VisitOrigin } from '../../models/Visit'; import { BasicUserDetails } from './BasicUserDetails'; import { Invite } from './Invite'; import { Proposal } from './Proposal'; import { Sample } from './Sample'; import { VisitRegistration } from './VisitRegistration'; +import { ResolverContext } from '../../context'; +import { Visit as VisitOrigin } from '../../models/Visit'; @ObjectType() export class Visit implements Partial { diff --git a/apps/backend/src/resolvers/types/VisitRegistration.ts b/apps/backend/src/resolvers/types/VisitRegistration.ts index 1c7445b93e..2136361e91 100644 --- a/apps/backend/src/resolvers/types/VisitRegistration.ts +++ b/apps/backend/src/resolvers/types/VisitRegistration.ts @@ -8,14 +8,14 @@ import { Root, } from 'type-graphql'; +import { BasicUserDetails } from './BasicUserDetails'; +import { Questionary } from './Questionary'; import { ResolverContext } from '../../context'; import { TemplateCategoryId } from '../../models/Template'; import { VisitRegistration as VisitRegistrationOrig, VisitRegistrationStatus, } from '../../models/VisitRegistration'; -import { BasicUserDetails } from './BasicUserDetails'; -import { Questionary } from './Questionary'; @ObjectType() export class VisitRegistration implements Partial { diff --git a/apps/backend/src/resolvers/types/Workflow.ts b/apps/backend/src/resolvers/types/Workflow.ts index e77b67cbd6..62c4efad5e 100644 --- a/apps/backend/src/resolvers/types/Workflow.ts +++ b/apps/backend/src/resolvers/types/Workflow.ts @@ -8,6 +8,7 @@ import { Ctx, } from 'type-graphql'; +import { WorkflowConnection } from './WorkflowConnection'; import { ResolverContext } from '../../context'; import { Event } from '../../events/event.enum'; import { isRejection } from '../../models/Rejection'; @@ -15,7 +16,6 @@ import { Workflow as WorkflowOrigin, WorkflowType, } from '../../models/Workflow'; -import { WorkflowConnection } from './WorkflowConnection'; @ObjectType() export class Workflow implements Partial { diff --git a/apps/backend/src/resolvers/types/WorkflowConnection.ts b/apps/backend/src/resolvers/types/WorkflowConnection.ts index 2cefe1597e..cd5ed3831e 100644 --- a/apps/backend/src/resolvers/types/WorkflowConnection.ts +++ b/apps/backend/src/resolvers/types/WorkflowConnection.ts @@ -8,12 +8,12 @@ import { Ctx, } from 'type-graphql'; -import { ResolverContext } from '../../context'; -import { isRejection } from '../../models/Rejection'; -import { WorkflowConnectionWithStatus as WorkflowConnectionWithStatusOrigin } from '../../models/WorkflowConnections'; import { ConnectionStatusAction } from './ConnectionStatusAction'; import { Status } from './Status'; import { StatusChangingEvent } from './StatusChangingEvent'; +import { ResolverContext } from '../../context'; +import { isRejection } from '../../models/Rejection'; +import { WorkflowConnectionWithStatus as WorkflowConnectionWithStatusOrigin } from '../../models/WorkflowConnections'; @ObjectType() export class WorkflowConnection diff --git a/apps/backend/src/statusActionEngine/emailActionHandler.ts b/apps/backend/src/statusActionEngine/emailActionHandler.ts index ccf5968b61..0bda04f901 100644 --- a/apps/backend/src/statusActionEngine/emailActionHandler.ts +++ b/apps/backend/src/statusActionEngine/emailActionHandler.ts @@ -1,6 +1,18 @@ import { logger } from '@user-office-software/duo-logger'; import { container } from 'tsyringe'; +import { + EmailReadyType, + getCoProposersAndFormatOutputForEmailSending, + getInstrumentScientistsAndFormatOutputForEmailSending, + getPIAndFormatOutputForEmailSending, + getFapReviewersAndFormatOutputForEmailSending, + getFapChairSecretariesAndFormatOutputForEmailSending, + statusActionLogger, + getOtherAndFormatOutputForEmailSending, + getTechniqueScientistsAndFormatOutputForEmailSending, + constructProposalStatusChangeEvent, +} from './statusActionUtils'; import { Tokens } from '../config/Tokens'; import { AdminDataSource } from '../datasources/AdminDataSource'; import { InstrumentDataSource } from '../datasources/InstrumentDataSource'; @@ -15,18 +27,6 @@ import { EmailStatusActionRecipientsWithTemplate, } from '../resolvers/types/StatusActionConfig'; import { WorkflowEngineProposalType } from '../workflowEngine/proposal'; -import { - EmailReadyType, - getCoProposersAndFormatOutputForEmailSending, - getInstrumentScientistsAndFormatOutputForEmailSending, - getPIAndFormatOutputForEmailSending, - getFapReviewersAndFormatOutputForEmailSending, - getFapChairSecretariesAndFormatOutputForEmailSending, - statusActionLogger, - getOtherAndFormatOutputForEmailSending, - getTechniqueScientistsAndFormatOutputForEmailSending, - constructProposalStatusChangeEvent, -} from './statusActionUtils'; export const emailActionHandler = async ( statusAction: ConnectionHasStatusAction, @@ -91,10 +91,10 @@ export const emailStatusActionRecipient = async ( ) => { const proposalPks = proposals.map((proposal) => proposal.primaryKey); const templateMessage = recipientWithTemplate.emailTemplate.id; - const successfulMessage = !!statusActionsLogId + const successfulMessage = statusActionsLogId ? 'Email successfully sent on status action replay' : 'Email successfully sent'; - const failMessage = !!statusActionsLogId + const failMessage = statusActionsLogId ? 'Email(s) could not be sent on status action replay' : 'Email(s) could not be sent'; switch (recipientWithTemplate.recipient.name) { diff --git a/apps/backend/src/statusActionEngine/proposal.ts b/apps/backend/src/statusActionEngine/proposal.ts index d53a6722f0..2f8ee19f00 100644 --- a/apps/backend/src/statusActionEngine/proposal.ts +++ b/apps/backend/src/statusActionEngine/proposal.ts @@ -1,14 +1,14 @@ import { container } from 'tsyringe'; +import { emailActionHandler } from './emailActionHandler'; +import { proposalDownloadActionHandler } from './proposalDownloadActionHandler'; +import { rabbitMQActionHandler } from './rabbitMQHandler'; +import { groupProposalsByProperties } from './statusActionUtils'; import { Tokens } from '../config/Tokens'; import { StatusActionsDataSource } from '../datasources/StatusActionsDataSource'; import { StatusActionType } from '../models/StatusAction'; import { getWorkflowConnectionByStatusId } from '../workflowEngine/experiment'; import { WorkflowEngineProposalType } from '../workflowEngine/proposal'; -import { emailActionHandler } from './emailActionHandler'; -import { proposalDownloadActionHandler } from './proposalDownloadActionHandler'; -import { rabbitMQActionHandler } from './rabbitMQHandler'; -import { groupProposalsByProperties } from './statusActionUtils'; export const proposalStatusActionEngine = async ( proposals: WorkflowEngineProposalType[] diff --git a/apps/backend/src/statusActionEngine/proposalDownloadActionHandler.ts b/apps/backend/src/statusActionEngine/proposalDownloadActionHandler.ts index bfb8a1b975..34e8ec28bd 100644 --- a/apps/backend/src/statusActionEngine/proposalDownloadActionHandler.ts +++ b/apps/backend/src/statusActionEngine/proposalDownloadActionHandler.ts @@ -4,6 +4,10 @@ import { ReadableStream } from 'stream/web'; import { logger } from '@user-office-software/duo-logger'; import { container } from 'tsyringe'; +import { + constructProposalStatusChangeEvent, + statusActionLogger, +} from './statusActionUtils'; import { Tokens } from '../config/Tokens'; import { FileDataSource } from '../datasources/FileDataSource'; import { ApplicationEvent } from '../events/applicationEvents'; @@ -11,10 +15,6 @@ import type { ProposalPDFData } from '../factory/pdf/proposal'; import { FileMetadata } from '../models/Blob'; import { ConnectionHasStatusAction } from '../models/StatusAction'; import { WorkflowEngineProposalType } from '../workflowEngine/proposal'; -import { - constructProposalStatusChangeEvent, - statusActionLogger, -} from './statusActionUtils'; const FACTORY_ENDPOINT = process.env.USER_OFFICE_FACTORY_ENDPOINT; @@ -34,10 +34,10 @@ export const proposalDownloadActionHandler = async ( (event: ApplicationEvent) => Promise >(Tokens.LoggingHandler); - const successMessage = !!options?.statusActionsLogId + const successMessage = options?.statusActionsLogId ? 'Proposal successfully downloaded on status action replay' : 'Proposal successfully downloaded'; - const failMessage = !!options?.statusActionsLogId + const failMessage = options?.statusActionsLogId ? 'Proposal failed to download on status action replay' : 'Proposal failed to download'; diff --git a/apps/backend/src/statusActionEngine/rabbitMQHandler.ts b/apps/backend/src/statusActionEngine/rabbitMQHandler.ts index cf0e723df8..8445254ec0 100644 --- a/apps/backend/src/statusActionEngine/rabbitMQHandler.ts +++ b/apps/backend/src/statusActionEngine/rabbitMQHandler.ts @@ -1,11 +1,11 @@ import { container } from 'tsyringe'; +import { constructProposalStatusChangeEvent } from './statusActionUtils'; import { Tokens } from '../config/Tokens'; import { ApplicationEvent } from '../events/applicationEvents'; import { ConnectionHasStatusAction } from '../models/StatusAction'; import { RabbitMQActionConfig } from '../resolvers/types/StatusActionConfig'; import { WorkflowEngineProposalType } from '../workflowEngine/proposal'; -import { constructProposalStatusChangeEvent } from './statusActionUtils'; export const rabbitMQActionHandler = async ( statusAction: ConnectionHasStatusAction, diff --git a/apps/backend/src/statusActionEngine/statusActionUtils.ts b/apps/backend/src/statusActionEngine/statusActionUtils.ts index 1fa7af8e38..b19d33a861 100644 --- a/apps/backend/src/statusActionEngine/statusActionUtils.ts +++ b/apps/backend/src/statusActionEngine/statusActionUtils.ts @@ -557,7 +557,7 @@ export const statusActionLogger = (args: { statusActionsMessage, }; - if (!!statusActionsLogsArgs.statusActionsLogId) { + if (statusActionsLogsArgs.statusActionsLogId) { await statusActionsLogsDataSource.update(statusActionsLogsArgs); return; diff --git a/apps/backend/src/utils/helperFunctions.ts b/apps/backend/src/utils/helperFunctions.ts index a3b923536c..e564e397b6 100644 --- a/apps/backend/src/utils/helperFunctions.ts +++ b/apps/backend/src/utils/helperFunctions.ts @@ -3,8 +3,8 @@ import { randomBytes } from 'crypto'; import * as Yup from 'yup'; import { BasicResolverContext } from '../context'; -import { Review, ReviewStatus } from '../models/Review'; import { OmitType } from './utilTypes'; +import { Review, ReviewStatus } from '../models/Review'; export const omit: OmitType = (obj, ...keys) => { const ret = {} as { diff --git a/apps/backend/src/utils/isSiConversionFormulaValid.ts b/apps/backend/src/utils/isSiConversionFormulaValid.ts index 35feea7b21..ff7a357254 100644 --- a/apps/backend/src/utils/isSiConversionFormulaValid.ts +++ b/apps/backend/src/utils/isSiConversionFormulaValid.ts @@ -8,5 +8,6 @@ export function isSiConversionFormulaValid(expression?: string): boolean { return true; } + // eslint-disable-next-line no-useless-escape return expression.match(/[^0-9\+\-\*\/\(\)\s\.x]/g) === null; }