diff --git a/backend/.eslintignore b/backend/.eslintignore deleted file mode 100644 index e19e2338d..000000000 --- a/backend/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -build/ -coverage/ \ No newline at end of file diff --git a/backend/.eslintrc.cjs b/backend/.eslintrc.cjs deleted file mode 100644 index 0cea79509..000000000 --- a/backend/.eslintrc.cjs +++ /dev/null @@ -1,263 +0,0 @@ -// eslint-disable-next-line import/no-commonjs -module.exports = { - root: true, - env: { - node: true, - }, - parser: '@typescript-eslint/parser', - plugins: ['prettier', '@typescript-eslint', 'import', 'n', 'promise', 'security', 'no-catch-all'], - extends: [ - 'standard', - 'eslint:recommended', - 'plugin:n/recommended', - 'plugin:prettier/recommended', - 'plugin:import/recommended', - 'plugin:import/typescript', - 'plugin:promise/recommended', - 'plugin:@eslint-community/eslint-comments/recommended', - 'prettier', - ], - settings: { - 'import/parsers': { - '@typescript-eslint/parser': ['.ts', '.tsx'], - }, - 'import/resolver': { - typescript: { - project: ['./tsconfig.json', './backend/tsconfig.json'], - }, - node: true, - }, - }, - rules: { - 'no-catch-all/no-catch-all': 'error', - 'no-console': 'error', - camelcase: 'error', - 'no-debugger': 'error', - 'prettier/prettier': [ - 'error', - { - htmlWhitespaceSensitivity: 'ignore', - }, - ], - // import - 'import/export': 'error', - // 'import/no-deprecated': 'error', - 'import/no-empty-named-blocks': 'error', - 'import/no-extraneous-dependencies': 'error', - 'import/no-mutable-exports': 'error', - 'import/no-unused-modules': 'error', - 'import/no-named-as-default': 'error', - 'import/no-named-as-default-member': 'error', - 'import/no-amd': 'error', - 'import/no-commonjs': 'error', - 'import/no-import-module-exports': 'error', - 'import/no-nodejs-modules': 'off', - 'import/unambiguous': 'off', // not compatible with .eslintrc.cjs - 'import/default': 'error', - 'import/named': 'off', // has false positives - 'import/namespace': 'error', - 'import/no-absolute-path': 'error', - 'import/no-cycle': 'error', - 'import/no-dynamic-require': 'error', - 'import/no-internal-modules': 'off', - 'import/no-relative-packages': 'error', - 'import/no-relative-parent-imports': ['error', { ignore: ['@/*'] }], - 'import/no-self-import': 'error', - 'import/no-unresolved': 'error', - 'import/no-useless-path-segments': 'error', - 'import/no-webpack-loader-syntax': 'error', - 'import/consistent-type-specifier-style': 'error', - 'import/exports-last': 'off', - 'import/extensions': 'error', - 'import/first': 'error', - 'import/group-exports': 'off', - 'import/newline-after-import': 'error', - 'import/no-anonymous-default-export': 'off', // not compatible with neode - 'import/no-default-export': 'off', // not compatible with neode - 'import/no-duplicates': 'error', - 'import/no-named-default': 'error', - 'import/no-namespace': 'error', - 'import/no-unassigned-import': 'error', - 'import/order': [ - 'error', - { - groups: ['builtin', 'external', 'internal', 'parent', 'sibling', 'index', 'object', 'type'], - 'newlines-between': 'always', - pathGroups: [ - { - pattern: '@?*/**', - group: 'external', - position: 'after', - }, - { - pattern: '@/**', - group: 'external', - position: 'after', - }, - ], - alphabetize: { - order: 'asc' /* sort in ascending order. Options: ['ignore', 'asc', 'desc'] */, - caseInsensitive: true /* ignore case. Options: [true, false] */, - }, - distinctGroup: true, - }, - ], - 'import/prefer-default-export': 'off', - - // n - // 'n/callback-return': 'error', - 'n/exports-style': 'error', - 'n/file-extension-in-import': ['error', 'never'], - 'n/global-require': 'error', - 'n/handle-callback-err': 'error', - // 'n/hashbang': 'error', // part of n/recommended - 'n/no-callback-literal': 'error', - // 'n/no-deprecated-api': 'error', // part of n/recommended - // 'n/no-exports-assign': 'error', // part of n/recommended - 'n/no-extraneous-import': 'off', // duplicate of import/no-extraneous-dependencies // part of n/recommended - // 'n/no-extraneous-require': 'error', // part of n/recommended - 'n/no-hide-core-modules': 'error', - 'n/no-missing-import': 'off', // not compatible with typescript // part of n/recommended - // 'n/no-missing-require': 'error', // part of n/recommended - 'n/no-mixed-requires': 'error', - 'n/no-new-require': 'error', - 'n/no-path-concat': 'error', - 'n/no-process-env': 'error', - // 'n/no-process-exit': 'error', // part of n/recommended - 'n/no-restricted-import': 'error', - 'n/no-restricted-require': 'error', - 'n/no-sync': 'error', - // 'n/no-unpublished-bin': 'error', // part of n/recommended - 'n/no-unpublished-import': [ - 'error', - { allowModules: ['apollo-server-testing', 'rosie', '@faker-js/faker', 'ts-jest'] }, - ], // part of n/recommended - 'n/no-unpublished-require': ['error', { allowModules: ['ts-jest', 'require-json5'] }], // part of n/recommended - // 'n/no-unsupported-features/es-builtins': 'error', // part of n/recommended - // 'n/no-unsupported-features/es-syntax': 'error', // part of n/recommended - // 'n/no-unsupported-features/node-builtins': 'error', // part of n/recommended - 'n/prefer-global/buffer': 'error', - 'n/prefer-global/console': 'error', - 'n/prefer-global/process': 'error', - 'n/prefer-global/text-decoder': 'error', - 'n/prefer-global/text-encoder': 'error', - 'n/prefer-global/url': 'error', - 'n/prefer-global/url-search-params': 'error', - 'n/prefer-node-protocol': 'error', - 'n/prefer-promises/dns': 'error', - 'n/prefer-promises/fs': 'error', - // 'n/process-exit-as-throw': 'error', // part of n/recommended - 'n/shebang': 'error', - - // promise - // 'promise/always-return': 'error', // part of promise/recommended - 'promise/avoid-new': 'error', - // 'promise/catch-or-return': 'error', // part of promise/recommended - // 'promise/no-callback-in-promise': 'warn', // part of promise/recommended - 'promise/no-multiple-resolved': 'error', - 'promise/no-native': 'off', // ES5 only - // 'promise/no-nesting': 'warn', // part of promise/recommended - // 'promise/no-new-statics': 'error', // part of promise/recommended - // 'promise/no-promise-in-callback': 'warn', // part of promise/recommended - // 'promise/no-return-in-finally': 'warn', // part of promise/recommended - // 'promise/no-return-wrap': 'error', // part of promise/recommended - // 'promise/param-names': 'error', // part of promise/recommended - 'promise/prefer-await-to-callbacks': 'error', - 'promise/prefer-catch': 'error', - 'promise/spec-only': 'error', - // 'promise/valid-params': 'error', // part of promise/recommended - - // eslint comments - '@eslint-community/eslint-comments/disable-enable-pair': ['error', { allowWholeFile: true }], - '@eslint-community/eslint-comments/no-restricted-disable': 'error', - '@eslint-community/eslint-comments/no-use': 'off', - '@eslint-community/eslint-comments/require-description': 'off', - }, - overrides: [ - { - files: ['*.js', '*.cjs', '*.ts', '*.tsx'], - extends: ['plugin:security/recommended-legacy'], - }, - // only for ts files - { - files: ['*.ts', '*.tsx'], - extends: [ - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - 'plugin:@typescript-eslint/strict', - 'prettier', - ], - rules: { - // allow explicitly defined dangling promises - // '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }], - 'no-void': ['error', { allowAsStatement: true }], - // ignore prefer-regexp-exec rule to allow string.match(regex) - '@typescript-eslint/prefer-regexp-exec': 'off', - // this should not run on ts files: https://github.com/import-js/eslint-plugin-import/issues/2215#issuecomment-911245486 - 'import/unambiguous': 'off', - // this is not compatible with typeorm, due to joined tables can be null, but are not defined as nullable - '@typescript-eslint/no-unnecessary-condition': 'off', - // respect underscore as acceptable unused variable - '@typescript-eslint/no-unused-vars': [ - 'error', - { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }, - ], - }, - parserOptions: { - tsconfigRootDir: __dirname, - project: ['./tsconfig.json'], - // this is to properly reference the referenced project database without requirement of compiling it - EXPERIMENTAL_useSourceOfProjectReferenceRedirect: true, - }, - }, - { - files: ['*.spec.ts'], - plugins: ['jest'], - env: { - jest: true, - }, - rules: { - 'jest/no-disabled-tests': 'error', - 'jest/no-focused-tests': 'error', - 'jest/no-identical-title': 'error', - 'jest/prefer-to-have-length': 'error', - 'jest/valid-expect': 'error', - '@typescript-eslint/unbound-method': 'off', - 'jest/unbound-method': 'error', - }, - }, - { - extends: ['plugin:jsonc/recommended-with-jsonc'], - files: ['*.json', '*.json5', '*.jsonc'], - parser: 'jsonc-eslint-parser', - }, - { - files: ['*.graphql', '*.gql'], - parser: '@graphql-eslint/eslint-plugin', - plugins: ['@graphql-eslint'], - extends: ['plugin:@graphql-eslint/schema-recommended'], - rules: { - '@graphql-eslint/description-style': ['error', { style: 'inline' }], - '@graphql-eslint/require-description': 'off', - '@graphql-eslint/naming-convention': 'off', - '@graphql-eslint/strict-id-in-types': 'off', - '@graphql-eslint/no-typename-prefix': 'off', - // incompatible: `depends on a GraphQL validation rule "XXX" but it's not available in the "graphql" version you are using. Skipping…` - '@graphql-eslint/known-directives': 'off', - '@graphql-eslint/known-argument-names': 'off', - '@graphql-eslint/known-type-names': 'off', - '@graphql-eslint/lone-schema-definition': 'off', - '@graphql-eslint/provided-required-arguments': 'off', - '@graphql-eslint/unique-directive-names': 'off', - '@graphql-eslint/unique-directive-names-per-location': 'off', - '@graphql-eslint/unique-field-definition-names': 'off', - '@graphql-eslint/unique-operation-types': 'off', - '@graphql-eslint/unique-type-names': 'off', - }, - parserOptions: { - schema: './src/graphql/types/**/*.gql', - assumeValid: true, - }, - }, - ], -} diff --git a/backend/.prettierrc.cjs b/backend/.prettierrc.cjs deleted file mode 100644 index e2cf91e91..000000000 --- a/backend/.prettierrc.cjs +++ /dev/null @@ -1,9 +0,0 @@ - -module.exports = { - semi: false, - printWidth: 100, - singleQuote: true, - trailingComma: "all", - tabWidth: 2, - bracketSpacing: true -}; diff --git a/backend/eslint.config.ts b/backend/eslint.config.ts new file mode 100644 index 000000000..646e6bc3c --- /dev/null +++ b/backend/eslint.config.ts @@ -0,0 +1,100 @@ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import comments from 'eslint-config-it4c/modules/comments' +import eslint from 'eslint-config-it4c/modules/eslint' +import importX from 'eslint-config-it4c/modules/import-x' +import jest from 'eslint-config-it4c/modules/jest' +import json from 'eslint-config-it4c/modules/json' +import node from 'eslint-config-it4c/modules/node' +import prettier from 'eslint-config-it4c/modules/prettier' +import promise from 'eslint-config-it4c/modules/promise' +import security from 'eslint-config-it4c/modules/security' +import typescript from 'eslint-config-it4c/modules/typescript' +import yaml from 'eslint-config-it4c/modules/yaml' + +// TODO: GraphQL linting is disabled because @graphql-eslint/eslint-plugin v4 +// (bundled with eslint-config-it4c) requires graphql@^16, but the backend +// uses graphql@^14 (required by apollo-server v2). Re-enable when upgrading graphql. +// import graphql from 'eslint-config-it4c/modules/graphql' +// +// ...graphql.map((c) => ({ +// ...c, +// files: ['**/*.graphql', '**/*.gql'], +// })), +// { +// files: ['**/*.graphql', '**/*.gql'], +// languageOptions: { +// parserOptions: { +// schema: './src/graphql/types/**/*.gql', +// assumeValid: true, +// }, +// }, +// rules: { +// '@graphql-eslint/require-description': 'off', +// '@graphql-eslint/naming-convention': 'off', +// '@graphql-eslint/strict-id-in-types': 'off', +// '@graphql-eslint/no-typename-prefix': 'off', +// '@graphql-eslint/known-directives': 'off', +// '@graphql-eslint/known-argument-names': 'off', +// '@graphql-eslint/known-type-names': 'off', +// '@graphql-eslint/lone-schema-definition': 'off', +// '@graphql-eslint/provided-required-arguments': 'off', +// '@graphql-eslint/unique-directive-names': 'off', +// '@graphql-eslint/unique-directive-names-per-location': 'off', +// '@graphql-eslint/unique-field-definition-names': 'off', +// '@graphql-eslint/unique-operation-types': 'off', +// '@graphql-eslint/unique-type-names': 'off', +// }, +// }, + +export default [ + { + ignores: ['node_modules/', 'build/', 'coverage/'], + }, + ...eslint, + ...typescript, + ...importX, + ...node, + ...promise, + ...security, + ...comments, + ...json, + ...yaml, + ...prettier, + ...jest, + { + // Backend-specific TypeScript overrides + files: ['**/*.ts'], + languageOptions: { + parserOptions: { + projectService: { + allowDefaultProject: ['eslint.config.ts'], + }, + tsconfigRootDir: import.meta.dirname, + }, + }, + rules: { + // TypeORM compatibility: joined tables can be null but are not defined as nullable + '@typescript-eslint/no-unnecessary-condition': 'off', + // Allow string.match(regex) instead of regex.exec(string) + '@typescript-eslint/prefer-regexp-exec': 'off', + // TODO: gradually add return types to exported functions, then remove this override + '@typescript-eslint/explicit-module-boundary-types': 'off', + // Allow @/* path aliases in relative parent imports + 'import-x/no-relative-parent-imports': ['error', { ignore: ['@/*'] }], + }, + }, + { + // Jest test file overrides + files: ['**/*.spec.ts'], + rules: { + '@typescript-eslint/unbound-method': 'off', + }, + }, + { + // Config files: allow require() of devDependencies + files: ['*.config.{js,mjs,cjs,ts,mts,cts}'], + rules: { + 'n/no-unpublished-require': 'off', + }, + }, +] diff --git a/backend/jest.config.cjs b/backend/jest.config.cjs index 285654e3a..8151c9b1a 100644 --- a/backend/jest.config.cjs +++ b/backend/jest.config.cjs @@ -1,4 +1,4 @@ -/* eslint-disable import/no-commonjs */ +/* eslint-disable import-x/no-commonjs */ const requireJSON5 = require('require-json5') const { pathsToModuleNameMapper } = require('ts-jest') diff --git a/backend/package.json b/backend/package.json index ada2b7bbb..d3d68092f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -12,7 +12,7 @@ "build": "tsc && tsc-alias && ./scripts/build.copy.files.sh", "dev": "nodemon --exec ts-node --require tsconfig-paths/register src/index.ts -e js,ts,gql", "dev:debug": "nodemon --exec node --inspect=0.0.0.0:9229 build/src/index.js -e js,ts,gql", - "lint": "eslint --max-warnings=0 --report-unused-disable-directives --ext .js,.ts,.cjs,.json,.json5,.jsonc,.graphql,.gql .", + "lint": "eslint --max-warnings 0 .", "test": "cross-env NODE_ENV=test NODE_OPTIONS=--max-old-space-size=8192 jest --runInBand --coverage --forceExit --detectOpenHandles", "db:reset": "ts-node --require tsconfig-paths/register src/db/reset.ts", "db:reset:withmigrations": "ts-node --require tsconfig-paths/register src/db/reset-with-migrations.ts", @@ -95,9 +95,7 @@ "xregexp": "^5.1.2" }, "devDependencies": { - "@eslint-community/eslint-plugin-eslint-comments": "^4.6.0", "@faker-js/faker": "9.9.0", - "@graphql-eslint/eslint-plugin": "^3.20.1", "@types/email-templates": "^10.0.4", "@types/jest": "^30.0.0", "@types/jsonwebtoken": "~8.5.1", @@ -106,21 +104,9 @@ "@types/request": "^2.48.13", "@types/slug": "^5.0.9", "@types/uuid": "~9.0.1", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", "apollo-server-testing": "~2.11.0", - "eslint": "^8.57.1", - "eslint-config-prettier": "^10.1.8", - "eslint-config-standard": "^17.1.0", - "eslint-import-resolver-typescript": "^4.4.4", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^29.15.0", - "eslint-plugin-jsonc": "^2.21.1", - "eslint-plugin-n": "^17.23.2", - "eslint-plugin-no-catch-all": "^1.1.0", - "eslint-plugin-prettier": "^5.5.5", - "eslint-plugin-promise": "^7.2.1", - "eslint-plugin-security": "^3.0.1", + "eslint": "^9.27.0", + "eslint-config-it4c": "^0.12.0", "jest": "^30.2.0", "nodemon": "~3.1.11", "prettier": "^3.8.1", diff --git a/backend/prettier.config.mjs b/backend/prettier.config.mjs new file mode 100644 index 000000000..cab45cf18 --- /dev/null +++ b/backend/prettier.config.mjs @@ -0,0 +1 @@ +export { default } from 'eslint-config-it4c/prettier' diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index f424ce754..50db746fd 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -1,14 +1,17 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable import-x/no-namespace */ +/* eslint-disable @typescript-eslint/no-redundant-type-constituents */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ /* eslint-disable n/no-process-env */ import { config } from 'dotenv' -// eslint-disable-next-line import/no-namespace -import * as SMTPTransport from 'nodemailer/lib/smtp-pool' import emails from './emails' import metadata from './metadata' +import type * as SMTPTransport from 'nodemailer/lib/smtp-pool' + // Load env file config() diff --git a/backend/src/context/database.ts b/backend/src/context/database.ts index dc623470d..3abd86626 100644 --- a/backend/src/context/database.ts +++ b/backend/src/context/database.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-shadow */ import { getDriver, getNeode } from '@db/neo4j' import type { Driver } from 'neo4j-driver' diff --git a/backend/src/context/index.ts b/backend/src/context/index.ts index 51b14f74f..fd429de49 100644 --- a/backend/src/context/index.ts +++ b/backend/src/context/index.ts @@ -3,11 +3,11 @@ import databaseContext from '@context/database' import pubsubContext from '@context/pubsub' import CONFIG from '@src/config' -import type { DecodedUser } from '@src/jwt/decode' import { decode } from '@src/jwt/decode' import ocelotLogger from '@src/logger' -import type OcelotLogger from '@src/logger' +import type { DecodedUser } from '@src/jwt/decode' +import type OcelotLogger from '@src/logger' import type { ApolloServerExpressConfig } from 'apollo-server-express' const serverDatabase = databaseContext() @@ -25,7 +25,7 @@ export const getContext = const { database = serverDatabase, pubsub = serverPubsub, - authenticatedUser = undefined, + authenticatedUser, logger = ocelotLogger, config = CONFIG, } = opts ?? {} diff --git a/backend/src/db/badges.ts b/backend/src/db/badges.ts index cbad0b004..895b5780d 100644 --- a/backend/src/db/badges.ts +++ b/backend/src/db/badges.ts @@ -2,7 +2,7 @@ import { getNeode } from './neo4j' import { trophies, verification } from './seed/badges' -// eslint-disable-next-line import/newline-after-import +// eslint-disable-next-line import-x/newline-after-import ;(async function () { const neode = getNeode() try { diff --git a/backend/src/db/compiler.ts b/backend/src/db/compiler.ts index 1b364f919..1770f5ee2 100644 --- a/backend/src/db/compiler.ts +++ b/backend/src/db/compiler.ts @@ -1,9 +1,10 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable import/no-commonjs */ -// eslint-disable-next-line n/no-unpublished-require, @typescript-eslint/no-var-requires +/* eslint-disable @typescript-eslint/no-require-imports */ +/* eslint-disable import-x/no-commonjs */ +// eslint-disable-next-line n/no-unpublished-require const tsNode = require('ts-node') -// eslint-disable-next-line import/no-unassigned-import, n/no-unpublished-require +// eslint-disable-next-line import-x/no-unassigned-import, n/no-unpublished-require require('tsconfig-paths/register') module.exports = tsNode.register diff --git a/backend/src/db/data-branding.ts b/backend/src/db/data-branding.ts index eceaf391b..398b6464b 100644 --- a/backend/src/db/data-branding.ts +++ b/backend/src/db/data-branding.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-floating-promises */ +/* eslint-disable @typescript-eslint/await-thenable */ import { readdir } from 'node:fs/promises' import path from 'node:path' diff --git a/backend/src/db/disable-notifications.ts b/backend/src/db/disable-notifications.ts index 344c835a4..c995c07be 100644 --- a/backend/src/db/disable-notifications.ts +++ b/backend/src/db/disable-notifications.ts @@ -6,7 +6,7 @@ const run = async () => { if (args.length !== 1) { // eslint-disable-next-line no-console console.error('Usage: yarn run db:func:disable-notifications ') - // eslint-disable-next-line n/no-process-exit + process.exit(1) } @@ -16,7 +16,7 @@ const run = async () => { if (!emailRegex.test(email)) { // eslint-disable-next-line no-console console.error('Error: Invalid email address format') - // eslint-disable-next-line n/no-process-exit + process.exit(1) } @@ -46,13 +46,13 @@ const run = async () => { if (result !== '1') { // eslint-disable-next-line no-console console.error(`User with email address ${email} not found`) - // eslint-disable-next-line n/no-process-exit + process.exit(1) } // eslint-disable-next-line no-console console.log(`Notifications for User with email address ${email} disabled`) - // eslint-disable-next-line n/no-process-exit + process.exit(0) } diff --git a/backend/src/db/factories.ts b/backend/src/db/factories.ts index d74b9d0ea..d0ceae9ae 100644 --- a/backend/src/db/factories.ts +++ b/backend/src/db/factories.ts @@ -4,6 +4,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable n/no-unpublished-import */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ import { faker } from '@faker-js/faker' import { hashSync } from 'bcryptjs' import { Factory } from 'rosie' @@ -13,10 +15,11 @@ import { v4 as uuid } from 'uuid' import { generateInviteCode } from '@graphql/resolvers/inviteCodes' import { isUniqueFor } from '@middleware/sluggifyMiddleware' import uniqueSlug from '@middleware/slugify/uniqueSlug' -import { Context } from '@src/context' import { getDriver, getNeode } from './neo4j' +import type { Context } from '@src/context' + const neode = getNeode() const uniqueImageUrl = (imageUrl) => { @@ -49,14 +52,14 @@ Factory.define('category') .attr('id', uuid) .attr('icon', 'globe') .attr('name', 'Global Peace & Nonviolence') - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { return neode.create('Category', buildObject) }) Factory.define('badge') .attr('type', 'crowdfunding') .attr('status', 'permanent') - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { return neode.create('Badge', buildObject) }) @@ -67,7 +70,7 @@ Factory.define('image') .attr('alt', faker.lorem.sentence) .attr('type', 'image/jpeg') .attr('url', null) - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { if (!buildObject.url) { buildObject.url = faker.image.urlPicsumPhotos({ width: buildObject.width, @@ -84,7 +87,7 @@ Factory.define('file') .attr('name', faker.lorem.slug) .attr('type', 'image/jpeg') .attr('url', null) - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { if (!buildObject.url) { buildObject.url = faker.image.urlPicsumPhotos() } @@ -171,8 +174,8 @@ Factory.define('post') return Promise.all([Factory.build('category')]) }) */ .option('tagIds', []) - .option('tags', ['tagIds'], (tagIds) => { - return Promise.all(tagIds.map((id) => neode.find('Tag', id))) + .option('tags', ['tagIds'], async (tagIds) => { + return Promise.all(tagIds.map(async (id) => neode.find('Tag', id))) }) .option('authorId', null) .option('author', ['authorId'], (authorId) => { @@ -264,7 +267,7 @@ Factory.define('donations') .attr('showDonations', true) .attr('goal', 15000) .attr('progress', 7000) - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { return neode.create('Donations', buildObject) }) @@ -275,13 +278,13 @@ const emailDefaults = { Factory.define('emailAddress') .attrs(emailDefaults) - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { return neode.create('EmailAddress', buildObject) }) Factory.define('unverifiedEmailAddress') .attr(emailDefaults) - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { return neode.create('UnverifiedEmailAddress', buildObject) }) @@ -294,7 +297,7 @@ const inviteCodeDefaults = { Factory.define('inviteCode') .attrs(inviteCodeDefaults) .option('groupId', null) - .option('group', ['groupId'], (groupId) => { + .option('group', ['groupId'], async (groupId) => { if (groupId) { return neode.find('Group', groupId) } @@ -331,11 +334,11 @@ Factory.define('location') id: 'country.10743216036480410', type: 'country', }) - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { return neode.create('Location', buildObject) }) -Factory.define('report').after((buildObject, _options) => { +Factory.define('report').after(async (buildObject, _options) => { return neode.create('Report', buildObject) }) @@ -343,7 +346,7 @@ Factory.define('tag') .attrs({ name: '#human-connection', }) - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { return neode.create('Tag', buildObject) }) @@ -351,7 +354,7 @@ Factory.define('socialMedia') .attrs({ url: 'https://mastodon.social/@Gargron', }) - .after((buildObject, _options) => { + .after(async (buildObject, _options) => { return neode.create('SocialMedia', buildObject) }) diff --git a/backend/src/db/migrate/store.ts b/backend/src/db/migrate/store.ts index 9976be8b4..13f6e66ed 100644 --- a/backend/src/db/migrate/store.ts +++ b/backend/src/db/migrate/store.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-confusing-void-expression */ import { getDriver, getNeode } from '@db/neo4j' class Store { @@ -83,7 +84,7 @@ class Store { const driver = getDriver() const session = driver.session() const { migrations } = set - const writeTxResultPromise = session.writeTransaction((txc) => { + const writeTxResultPromise = session.writeTransaction(async (txc) => { return Promise.all( migrations.map(async (migration) => { const { title, description, timestamp } = migration diff --git a/backend/src/db/migrations-examples/20200123150105-merge_duplicate_user_accounts.ts b/backend/src/db/migrations-examples/20200123150105-merge_duplicate_user_accounts.ts index ea64c58af..47d7a64f9 100644 --- a/backend/src/db/migrations-examples/20200123150105-merge_duplicate_user_accounts.ts +++ b/backend/src/db/migrations-examples/20200123150105-merge_duplicate_user_accounts.ts @@ -4,8 +4,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable import/no-extraneous-dependencies */ +/* eslint-disable import-x/no-extraneous-dependencies */ /* eslint-disable promise/prefer-await-to-callbacks */ +/* eslint-disable import-x/no-deprecated */ import { throwError, concat } from 'rxjs' import { flatMap, mergeMap, map, catchError, filter } from 'rxjs/operators' @@ -71,7 +72,7 @@ export function up(next) { ), ) .subscribe({ - next: ({ user, email, _oldUser, oldEmail }) => + next: ({ user, email, _oldUser, oldEmail }) => { // eslint-disable-next-line no-console console.log(` Merged: @@ -79,7 +80,8 @@ export function up(next) { userId: ${user.id} email: ${oldEmail} => ${email.email} ============================= - `), + `) + }, complete: () => { // eslint-disable-next-line no-console console.log('Merging of duplicate users completed') diff --git a/backend/src/db/migrations-examples/20200123150110-merge_duplicate_location_nodes.ts b/backend/src/db/migrations-examples/20200123150110-merge_duplicate_location_nodes.ts index de73bdaae..2f01f7d9d 100644 --- a/backend/src/db/migrations-examples/20200123150110-merge_duplicate_location_nodes.ts +++ b/backend/src/db/migrations-examples/20200123150110-merge_duplicate_location_nodes.ts @@ -4,8 +4,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable import/no-extraneous-dependencies */ +/* eslint-disable import-x/no-extraneous-dependencies */ /* eslint-disable promise/prefer-await-to-callbacks */ +/* eslint-disable import-x/no-deprecated */ import { throwError, concat } from 'rxjs' import { flatMap, mergeMap, map, catchError } from 'rxjs/operators' @@ -65,7 +66,7 @@ export function up(next) { ), ) .subscribe({ - next: ({ updatedLocation, location }) => + next: ({ updatedLocation, location }) => { // eslint-disable-next-line no-console console.log(` Merged: @@ -73,7 +74,8 @@ export function up(next) { locationId: ${location.id} updatedLocation: ${location.id} => ${updatedLocation.id} ============================= - `), + `) + }, complete: () => { // eslint-disable-next-line no-console console.log('Merging of duplicate locations completed') diff --git a/backend/src/db/migrations/1613589876420-null_mutation.ts b/backend/src/db/migrations/1613589876420-null_mutation.ts index daeba5dca..a04fd1dcd 100644 --- a/backend/src/db/migrations/1613589876420-null_mutation.ts +++ b/backend/src/db/migrations/1613589876420-null_mutation.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-empty-function */ 'use strict' export async function up(_next) {} diff --git a/backend/src/db/migrations/20250502230521-migrate-to-s3.ts b/backend/src/db/migrations/20250502230521-migrate-to-s3.ts index 5dd1bbfb8..8a25e724e 100644 --- a/backend/src/db/migrations/20250502230521-migrate-to-s3.ts +++ b/backend/src/db/migrations/20250502230521-migrate-to-s3.ts @@ -1,4 +1,5 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ +/* eslint-disable @typescript-eslint/await-thenable */ import { open } from 'node:fs/promises' import path from 'node:path' diff --git a/backend/src/db/models/User.spec.ts b/backend/src/db/models/User.spec.ts index cea2d4db0..0bcff5604 100644 --- a/backend/src/db/models/User.spec.ts +++ b/backend/src/db/models/User.spec.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ +/* eslint-disable jest/valid-title */ import { cleanDatabase } from '@db/factories' import { getNeode, getDriver } from '@db/neo4j' @@ -65,8 +66,8 @@ describe('slug', () => { }) describe('characters', () => { - const createUser = (attrs) => { - return neode.create('User', attrs).then((user) => user.toJson()) + const createUser = async (attrs) => { + return neode.create('User', attrs).then(async (user) => user.toJson()) } it('-', async () => { @@ -81,7 +82,7 @@ describe('slug', () => { }) }) - it(' ', async () => { + it('', async () => { await expect(createUser({ slug: 'matt rider' })).rejects.toThrow('ERROR_VALIDATION') }) diff --git a/backend/src/db/neo4j.ts b/backend/src/db/neo4j.ts index ecaef68b5..2002f0386 100644 --- a/backend/src/db/neo4j.ts +++ b/backend/src/db/neo4j.ts @@ -1,10 +1,12 @@ -/* eslint-disable import/no-named-as-default-member */ -import neo4j, { Driver } from 'neo4j-driver' +/* eslint-disable import-x/no-named-as-default-member */ +import neo4j from 'neo4j-driver' import Neode from 'neode' import CONFIG from '@config/index' import models from '@db/models/index' +import type { Driver } from 'neo4j-driver' + let driver: Driver const defaultOptions = { uri: CONFIG.NEO4J_URI, diff --git a/backend/src/db/reset-with-migrations.ts b/backend/src/db/reset-with-migrations.ts index 78db831ce..3cdb8c298 100644 --- a/backend/src/db/reset-with-migrations.ts +++ b/backend/src/db/reset-with-migrations.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/restrict-template-expressions */ /* eslint-disable @typescript-eslint/no-floating-promises */ -/* eslint-disable n/no-process-exit */ + import CONFIG from '@config/index' import { cleanDatabase } from './factories' diff --git a/backend/src/db/reset.ts b/backend/src/db/reset.ts index a381799c6..5155c0738 100644 --- a/backend/src/db/reset.ts +++ b/backend/src/db/reset.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/restrict-template-expressions */ /* eslint-disable @typescript-eslint/no-floating-promises */ -/* eslint-disable n/no-process-exit */ + import CONFIG from '@config/index' import { cleanDatabase } from './factories' diff --git a/backend/src/db/seed.ts b/backend/src/db/seed.ts index 238f5a9c9..65937b4cb 100644 --- a/backend/src/db/seed.ts +++ b/backend/src/db/seed.ts @@ -2,7 +2,10 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-floating-promises */ -/* eslint-disable n/no-process-exit */ +/* eslint-disable n/no-unpublished-import */ +/* eslint-disable @typescript-eslint/restrict-template-expressions */ +/* eslint-disable @typescript-eslint/no-confusing-void-expression */ + import { faker } from '@faker-js/faker' import sample from 'lodash/sample' diff --git a/backend/src/db/types/Category.ts b/backend/src/db/types/Category.ts index 94ed11059..0f14b70d5 100644 --- a/backend/src/db/types/Category.ts +++ b/backend/src/db/types/Category.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface CategoryDbProperties { createdAt: string diff --git a/backend/src/db/types/Comment.ts b/backend/src/db/types/Comment.ts index 40263d6b5..cf49b15b7 100644 --- a/backend/src/db/types/Comment.ts +++ b/backend/src/db/types/Comment.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface CommentDbProperties { content: string diff --git a/backend/src/db/types/EmailAddress.ts b/backend/src/db/types/EmailAddress.ts index 768b67d0b..07eccd7f3 100644 --- a/backend/src/db/types/EmailAddress.ts +++ b/backend/src/db/types/EmailAddress.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface EmailAddressDbProperties { createdAt: string diff --git a/backend/src/db/types/Event.ts b/backend/src/db/types/Event.ts index c7a945c48..fc7efd145 100644 --- a/backend/src/db/types/Event.ts +++ b/backend/src/db/types/Event.ts @@ -1,6 +1,5 @@ -import { Integer, Node } from 'neo4j-driver' - -import { PostDbProperties } from './Post' +import type { PostDbProperties } from './Post' +import type { Integer, Node } from 'neo4j-driver' export interface EventDbProperties extends PostDbProperties { eventIsOnline: boolean diff --git a/backend/src/db/types/Group.ts b/backend/src/db/types/Group.ts index ff6d1e5bb..859f7aef3 100644 --- a/backend/src/db/types/Group.ts +++ b/backend/src/db/types/Group.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface GroupDbProperties { about: string diff --git a/backend/src/db/types/Image.ts b/backend/src/db/types/Image.ts index 8c4356e7c..c9790bb75 100644 --- a/backend/src/db/types/Image.ts +++ b/backend/src/db/types/Image.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface ImageDbProperties { alt: string diff --git a/backend/src/db/types/InviteCode.ts b/backend/src/db/types/InviteCode.ts index 90f8ba4da..df15ede31 100644 --- a/backend/src/db/types/InviteCode.ts +++ b/backend/src/db/types/InviteCode.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface InviteCodeDbProperties { code: string diff --git a/backend/src/db/types/Location.ts b/backend/src/db/types/Location.ts index cddcdc142..db6465806 100644 --- a/backend/src/db/types/Location.ts +++ b/backend/src/db/types/Location.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface LocationDbProperties { id: string diff --git a/backend/src/db/types/Message.ts b/backend/src/db/types/Message.ts index 270cc85a6..7835bedcf 100644 --- a/backend/src/db/types/Message.ts +++ b/backend/src/db/types/Message.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface MessageDbProperties { content: string diff --git a/backend/src/db/types/Post.ts b/backend/src/db/types/Post.ts index 39d09a91d..83bc00cbd 100644 --- a/backend/src/db/types/Post.ts +++ b/backend/src/db/types/Post.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface PostDbProperties { clickedCount: number diff --git a/backend/src/db/types/Report.ts b/backend/src/db/types/Report.ts index 93c526820..1c3ff22c5 100644 --- a/backend/src/db/types/Report.ts +++ b/backend/src/db/types/Report.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface ReportDbProperties { closed: boolean diff --git a/backend/src/db/types/Tag.ts b/backend/src/db/types/Tag.ts index 6e6de422a..b357526f8 100644 --- a/backend/src/db/types/Tag.ts +++ b/backend/src/db/types/Tag.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface TagDbProperties { deleted: boolean diff --git a/backend/src/db/types/User.ts b/backend/src/db/types/User.ts index 5f621868b..c699440e5 100644 --- a/backend/src/db/types/User.ts +++ b/backend/src/db/types/User.ts @@ -1,4 +1,4 @@ -import { Integer, Node } from 'neo4j-driver' +import type { Integer, Node } from 'neo4j-driver' export interface UserDbProperties { allowEmbedIframes: boolean diff --git a/backend/src/emails/sendChatMessageMail.spec.ts b/backend/src/emails/sendChatMessageMail.spec.ts index 17bb58a7e..e54d8504d 100644 --- a/backend/src/emails/sendChatMessageMail.spec.ts +++ b/backend/src/emails/sendChatMessageMail.spec.ts @@ -2,7 +2,7 @@ import CONFIG from '@config/index' CONFIG.SUPPORT_EMAIL = 'devops@ocelot.social' -// eslint-disable-next-line import/first +// eslint-disable-next-line import-x/first import { sendChatMessageMail } from './sendEmail' const senderUser = { diff --git a/backend/src/emails/sendEmail.ts b/backend/src/emails/sendEmail.ts index 1690734a0..ff403a584 100644 --- a/backend/src/emails/sendEmail.ts +++ b/backend/src/emails/sendEmail.ts @@ -12,7 +12,8 @@ import { createTransport } from 'nodemailer' import CONFIG, { nodemailerTransportOptions } from '@config/index' import logosWebapp from '@config/logosBranded' import metadata from '@config/metadata' -import { UserDbProperties } from '@db/types/User' + +import type { UserDbProperties } from '@db/types/User' const welcomeImageUrl = new URL(logosWebapp.LOGO_WELCOME_PATH, CONFIG.CLIENT_URI) const settingsUrl = new URL('/settings/notifications', CONFIG.CLIENT_URI) diff --git a/backend/src/emails/sendEmailVerification.spec.ts b/backend/src/emails/sendEmailVerification.spec.ts index f36f81694..ff2db6802 100644 --- a/backend/src/emails/sendEmailVerification.spec.ts +++ b/backend/src/emails/sendEmailVerification.spec.ts @@ -2,7 +2,7 @@ import CONFIG from '@config/index' CONFIG.SUPPORT_EMAIL = 'devops@ocelot.social' -// eslint-disable-next-line import/first +// eslint-disable-next-line import-x/first import { sendEmailVerification } from './sendEmail' describe('sendEmailVerification', () => { diff --git a/backend/src/emails/sendNotificationMail.spec.ts b/backend/src/emails/sendNotificationMail.spec.ts index efb71b788..11d0830d6 100644 --- a/backend/src/emails/sendNotificationMail.spec.ts +++ b/backend/src/emails/sendNotificationMail.spec.ts @@ -2,7 +2,7 @@ import CONFIG from '@config/index' CONFIG.SUPPORT_EMAIL = 'devops@ocelot.social' -// eslint-disable-next-line import/first +// eslint-disable-next-line import-x/first import { sendNotificationMail } from './sendEmail' describe('sendNotificationMail', () => { diff --git a/backend/src/emails/sendRegistrationMail.spec.ts b/backend/src/emails/sendRegistrationMail.spec.ts index fefa2dd19..7d27cc9a1 100644 --- a/backend/src/emails/sendRegistrationMail.spec.ts +++ b/backend/src/emails/sendRegistrationMail.spec.ts @@ -2,7 +2,7 @@ import CONFIG from '@config/index' CONFIG.SUPPORT_EMAIL = 'devops@ocelot.social' -// eslint-disable-next-line import/first +// eslint-disable-next-line import-x/first import { sendRegistrationMail } from './sendEmail' describe('sendRegistrationMail', () => { diff --git a/backend/src/emails/sendResetPasswordMail.spec.ts b/backend/src/emails/sendResetPasswordMail.spec.ts index d49bbe7db..2b735e6a4 100644 --- a/backend/src/emails/sendResetPasswordMail.spec.ts +++ b/backend/src/emails/sendResetPasswordMail.spec.ts @@ -2,7 +2,7 @@ import CONFIG from '@config/index' CONFIG.SUPPORT_EMAIL = 'devops@ocelot.social' -// eslint-disable-next-line import/first +// eslint-disable-next-line import-x/first import { sendResetPasswordMail } from './sendEmail' describe('sendResetPasswordMail', () => { diff --git a/backend/src/emails/sendWrongEmail.spec.ts b/backend/src/emails/sendWrongEmail.spec.ts index d4bb58c1f..a8d3a3793 100644 --- a/backend/src/emails/sendWrongEmail.spec.ts +++ b/backend/src/emails/sendWrongEmail.spec.ts @@ -2,7 +2,7 @@ import CONFIG from '@config/index' CONFIG.SUPPORT_EMAIL = 'devops@ocelot.social' -// eslint-disable-next-line import/first +// eslint-disable-next-line import-x/first import { sendWrongEmail } from './sendEmail' describe('sendWrongEmail', () => { diff --git a/backend/src/graphql/resolvers/attachments/attachments.spec.ts b/backend/src/graphql/resolvers/attachments/attachments.spec.ts index 805e3a38c..ab787cf8d 100644 --- a/backend/src/graphql/resolvers/attachments/attachments.spec.ts +++ b/backend/src/graphql/resolvers/attachments/attachments.spec.ts @@ -3,7 +3,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { ReadStream } from 'node:fs' +/* eslint-disable jest/no-conditional-expect */ import { Readable } from 'node:stream' import { S3Client } from '@aws-sdk/client-s3' @@ -11,16 +11,17 @@ import { Upload } from '@aws-sdk/lib-storage' import { UserInputError } from 'apollo-server' import Factory, { cleanDatabase } from '@db/factories' -import File from '@db/models/File' import { CreateMessage } from '@graphql/queries/CreateMessage' import { CreateRoom } from '@graphql/queries/CreateRoom' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' -import type { S3Config } from '@src/config' import { attachments } from './attachments' import type { FileInput } from './attachments' +import type File from '@db/models/File' +import type { ApolloTestSetup } from '@root/test/helpers' +import type { S3Config } from '@src/config' +import type { ReadStream } from 'node:fs' const s3SendMock = jest.fn() jest.spyOn(S3Client.prototype, 'send').mockImplementation(s3SendMock) @@ -165,7 +166,7 @@ describe('delete Attachment', () => { throw new Error('Ouch!') }) // eslint-disable-next-line no-catch-all/no-catch-all - } catch (err) { + } catch { // nothing has been deleted await expect(database.neode.all('File')).resolves.toHaveLength(1) // all good @@ -194,14 +195,14 @@ describe('add Attachment', () => { fileInput = { ...fileInput, // eslint-disable-next-line promise/avoid-new - upload: new Promise((resolve) => + upload: new Promise((resolve) => { resolve({ createReadStream: () => file1 as ReadStream, filename: 'file1', encoding: '7bit', mimetype: 'application/json', - }), - ), + }) + }), } }) @@ -306,7 +307,7 @@ describe('add Attachment', () => { return transaction.run('Ooops invalid cypher!', { file }) }) // eslint-disable-next-line no-catch-all/no-catch-all - } catch (err) { + } catch { // nothing has been created await expect(database.neode.all('File')).resolves.toHaveLength(0) // all good diff --git a/backend/src/graphql/resolvers/attachments/attachments.ts b/backend/src/graphql/resolvers/attachments/attachments.ts index 5fea27f56..0a55752b5 100644 --- a/backend/src/graphql/resolvers/attachments/attachments.ts +++ b/backend/src/graphql/resolvers/attachments/attachments.ts @@ -1,13 +1,14 @@ +/* eslint-disable @typescript-eslint/no-shadow */ import path from 'node:path' import { UserInputError } from 'apollo-server-express' import slug from 'slugify' import { v4 as uuid } from 'uuid' -import type { S3Config } from '@config/index' import { getDriver } from '@db/neo4j' import { s3Service } from '@src/uploads/s3Service' +import type { S3Config } from '@config/index' import type { FileUpload } from 'graphql-upload' import type { Transaction } from 'neo4j-driver' @@ -59,7 +60,7 @@ const wrapTransactionDeleteAttachment = async ( ): ReturnType => { const session = getDriver().session() try { - const result = await session.writeTransaction((transaction) => { + const result = await session.writeTransaction(async (transaction) => { return wrappedCallback(...args, { ...opts, transaction }) }) return result @@ -80,7 +81,7 @@ const wrapTransactionMergeAttachment = async ( ): ReturnType => { const session = getDriver().session() try { - const result = await session.writeTransaction((transaction) => { + const result = await session.writeTransaction(async (transaction) => { return wrappedCallback(...args, { ...opts, transaction }) }) return result diff --git a/backend/src/graphql/resolvers/badges.spec.ts b/backend/src/graphql/resolvers/badges.spec.ts index f41c2f1bc..774ee904c 100644 --- a/backend/src/graphql/resolvers/badges.spec.ts +++ b/backend/src/graphql/resolvers/badges.spec.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/restrict-template-expressions */ import { TROPHY_BADGES_SELECTED_MAX } from '@constants/badges' import Factory, { cleanDatabase } from '@db/factories' import { revokeBadge } from '@graphql/queries/revokeBadge' @@ -8,8 +9,9 @@ import { rewardTrophyBadge } from '@graphql/queries/rewardTrophyBadge' import { setTrophyBadgeSelected } from '@graphql/queries/setTrophyBadgeSelected' import { setVerificationBadge } from '@graphql/queries/setVerificationBadge' import { User } from '@graphql/queries/User' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let regularUser, administrator, moderator, badge, verification diff --git a/backend/src/graphql/resolvers/badges.ts b/backend/src/graphql/resolvers/badges.ts index 7eecd81d9..b5e0c1688 100644 --- a/backend/src/graphql/resolvers/badges.ts +++ b/backend/src/graphql/resolvers/badges.ts @@ -4,10 +4,12 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-loop-func */ import { neo4jgraphql } from 'neo4j-graphql-js' import { TROPHY_BADGES_SELECTED_MAX } from '@constants/badges' -import { Context } from '@src/context' + +import type { Context } from '@src/context' export const defaultTrophyBadge = { id: 'default_trophy', diff --git a/backend/src/graphql/resolvers/comments.spec.ts b/backend/src/graphql/resolvers/comments.spec.ts index 48923c1b7..a85972966 100644 --- a/backend/src/graphql/resolvers/comments.spec.ts +++ b/backend/src/graphql/resolvers/comments.spec.ts @@ -6,8 +6,9 @@ import Factory, { cleanDatabase } from '@db/factories' import { CreateComment } from '@graphql/queries/CreateComment' import { DeleteComment } from '@graphql/queries/DeleteComment' import { UpdateComment as updateComment } from '@graphql/queries/UpdateComment' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let variables, commentAuthor, newlyCreatedComment diff --git a/backend/src/graphql/resolvers/comments.ts b/backend/src/graphql/resolvers/comments.ts index d7e6141db..5d02d8785 100644 --- a/backend/src/graphql/resolvers/comments.ts +++ b/backend/src/graphql/resolvers/comments.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ import { v4 as uuid } from 'uuid' import Resolver from './helpers/Resolver' diff --git a/backend/src/graphql/resolvers/donations.ts b/backend/src/graphql/resolvers/donations.ts index 8acb2b062..d00d18002 100644 --- a/backend/src/graphql/resolvers/donations.ts +++ b/backend/src/graphql/resolvers/donations.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ export default { Query: { Donations: async (_parent, _params, context, _resolveInfo) => { diff --git a/backend/src/graphql/resolvers/emails.spec.ts b/backend/src/graphql/resolvers/emails.spec.ts index b274fab55..54bebbcdf 100644 --- a/backend/src/graphql/resolvers/emails.spec.ts +++ b/backend/src/graphql/resolvers/emails.spec.ts @@ -3,6 +3,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-confusing-void-expression */ import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '@db/factories' diff --git a/backend/src/graphql/resolvers/emails.ts b/backend/src/graphql/resolvers/emails.ts index c1177a8cc..3e3b976d7 100644 --- a/backend/src/graphql/resolvers/emails.ts +++ b/backend/src/graphql/resolvers/emails.ts @@ -3,7 +3,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { UserInputError } from 'apollo-server' -// eslint-disable-next-line import/extensions +// eslint-disable-next-line import-x/extensions import Validator from 'neode/build/Services/Validator.js' import existingEmailAddress from './helpers/existingEmailAddress' @@ -38,7 +38,7 @@ export default { try { const { neode } = context await new Validator(neode, neode.model('UnverifiedEmailAddress'), args) - } catch (e) { + } catch { throw new UserInputError('must be a valid email') } diff --git a/backend/src/graphql/resolvers/embeds.spec.ts b/backend/src/graphql/resolvers/embeds.spec.ts index adea77bf7..762822b80 100644 --- a/backend/src/graphql/resolvers/embeds.spec.ts +++ b/backend/src/graphql/resolvers/embeds.spec.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-shadow */ import fs from 'node:fs' import path from 'node:path' @@ -61,7 +62,6 @@ describe('Query', () => { beforeEach(() => { embedAction = async (variables) => { const { server } = createServer({ - // eslint-disable-next-line @typescript-eslint/no-empty-function context: () => {}, }) const { query } = createTestClient(server) diff --git a/backend/src/graphql/resolvers/embeds/scraper.ts b/backend/src/graphql/resolvers/embeds/scraper.ts index a8cd07a76..24bc2b923 100644 --- a/backend/src/graphql/resolvers/embeds/scraper.ts +++ b/backend/src/graphql/resolvers/embeds/scraper.ts @@ -4,11 +4,12 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-var-requires */ -/* eslint-disable n/no-extraneous-require */ +/* eslint-disable @typescript-eslint/no-require-imports */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ + /* eslint-disable n/global-require */ -/* eslint-disable import/no-commonjs */ -/* eslint-disable import/no-named-as-default */ +/* eslint-disable import-x/no-commonjs */ +/* eslint-disable import-x/no-named-as-default */ import { ApolloError } from 'apollo-server' import isArray from 'lodash/isArray' @@ -19,7 +20,7 @@ import fetch from 'node-fetch' import findProvider from './findProvider' -// eslint-disable-next-line import/no-extraneous-dependencies +// eslint-disable-next-line import-x/no-extraneous-dependencies const error = require('debug')('embed:error') const metascraper = Metascraper([ diff --git a/backend/src/graphql/resolvers/follow.spec.ts b/backend/src/graphql/resolvers/follow.spec.ts index 45272f956..d09ffc79f 100644 --- a/backend/src/graphql/resolvers/follow.spec.ts +++ b/backend/src/graphql/resolvers/follow.spec.ts @@ -7,6 +7,7 @@ import { followUser } from '@graphql/queries/followUser' import { unfollowUser } from '@graphql/queries/unfollowUser' import { User } from '@graphql/queries/User' import { createApolloTestSetup } from '@root/test/helpers' + import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' diff --git a/backend/src/graphql/resolvers/groups.spec.ts b/backend/src/graphql/resolvers/groups.spec.ts index 2dd41d406..75dd41046 100644 --- a/backend/src/graphql/resolvers/groups.spec.ts +++ b/backend/src/graphql/resolvers/groups.spec.ts @@ -3,6 +3,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ +/* eslint-disable @typescript-eslint/no-use-before-define */ +/* eslint-disable @typescript-eslint/no-shadow */ +/* eslint-disable jest/no-commented-out-tests */ import Factory, { cleanDatabase } from '@db/factories' import { ChangeGroupMemberRole } from '@graphql/queries/ChangeGroupMemberRole' import { CreateGroup } from '@graphql/queries/CreateGroup' @@ -12,8 +15,9 @@ import { JoinGroup } from '@graphql/queries/JoinGroup' import { LeaveGroup } from '@graphql/queries/LeaveGroup' import { RemoveUserFromGroup } from '@graphql/queries/RemoveUserFromGroup' import { UpdateGroup } from '@graphql/queries/UpdateGroup' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' // import CONFIG from '@src/config' @@ -2982,7 +2986,7 @@ describe('in mode', () => { }) }) - describe('"locationName" is empty string – shall change location "Hamburg" to unset location ', () => { + describe('"locationName" is empty string – shall change location "Hamburg" to unset location', () => { it('has updated the location to unset', async () => { await expect( mutate({ diff --git a/backend/src/graphql/resolvers/groups.ts b/backend/src/graphql/resolvers/groups.ts index bbdf6ed7f..45572421d 100644 --- a/backend/src/graphql/resolvers/groups.ts +++ b/backend/src/graphql/resolvers/groups.ts @@ -4,18 +4,22 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ +/* eslint-disable @typescript-eslint/no-shadow */ +/* eslint-disable @typescript-eslint/no-use-before-define */ import { UserInputError } from 'apollo-server' import { v4 as uuid } from 'uuid' import { CATEGORIES_MIN, CATEGORIES_MAX } from '@constants/categories' import { DESCRIPTION_WITHOUT_HTML_LENGTH_MIN } from '@constants/groups' import { removeHtmlTags } from '@middleware/helpers/cleanHtml' -import type { Context } from '@src/context' import Resolver from './helpers/Resolver' import { images } from './images/images' import { createOrUpdateLocations } from './users/location' +import type { Context } from '@src/context' + export default { Query: { Group: async (_object, params, context: Context, _resolveInfo) => { @@ -211,7 +215,7 @@ export default { if (!context.user) { throw new Error('Missing authenticated user.') } - if (config.CATEGORIES_ACTIVE && categoryIds && categoryIds.length) { + if (config.CATEGORIES_ACTIVE && categoryIds?.length) { await transaction.run( ` MATCH (group:Group {id: $groupId})-[previousRelations:CATEGORIZED]->(:Category) @@ -226,7 +230,7 @@ export default { SET group.updatedAt = toString(datetime()) WITH group ` - if (config.CATEGORIES_ACTIVE && categoryIds && categoryIds.length) { + if (config.CATEGORIES_ACTIVE && categoryIds?.length) { updateGroupCypher += ` UNWIND $categoryIds AS categoryId MATCH (category:Category {id: categoryId}) diff --git a/backend/src/graphql/resolvers/helpers/Resolver.ts b/backend/src/graphql/resolvers/helpers/Resolver.ts index 22eb8dc51..e7161589a 100644 --- a/backend/src/graphql/resolvers/helpers/Resolver.ts +++ b/backend/src/graphql/resolvers/helpers/Resolver.ts @@ -6,6 +6,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ /* eslint-disable security/detect-object-injection */ export const undefinedToNullResolver = (list) => { const resolvers = {} diff --git a/backend/src/graphql/resolvers/helpers/createPasswordReset.ts b/backend/src/graphql/resolvers/helpers/createPasswordReset.ts index 5add52762..a2007f0ca 100644 --- a/backend/src/graphql/resolvers/helpers/createPasswordReset.ts +++ b/backend/src/graphql/resolvers/helpers/createPasswordReset.ts @@ -1,9 +1,10 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import type { Context } from '@src/context' - +/* eslint-disable @typescript-eslint/no-shadow */ import normalizeEmail from './normalizeEmail' +import type { Context } from '@src/context' + export default async function createPasswordReset(options: { driver: Context['driver'] nonce: string diff --git a/backend/src/graphql/resolvers/helpers/events.ts b/backend/src/graphql/resolvers/helpers/events.ts index 3e5f8d5a8..6217398ce 100644 --- a/backend/src/graphql/resolvers/helpers/events.ts +++ b/backend/src/graphql/resolvers/helpers/events.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/no-use-before-define */ import { UserInputError } from 'apollo-server' export const validateEventParams = (params) => { diff --git a/backend/src/graphql/resolvers/helpers/existingEmailAddress.ts b/backend/src/graphql/resolvers/helpers/existingEmailAddress.ts index cf04a5495..8aab9d8ba 100644 --- a/backend/src/graphql/resolvers/helpers/existingEmailAddress.ts +++ b/backend/src/graphql/resolvers/helpers/existingEmailAddress.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ import normalizeEmail from './normalizeEmail' export default async function alreadyExistingMail({ args, context }) { @@ -20,6 +21,7 @@ export default async function alreadyExistingMail({ args, context }) { return existingEmailAddressTransactionResponse.records.map((record) => { return { alreadyExistingEmail: record.get('email').properties, + // eslint-disable-next-line @typescript-eslint/prefer-optional-chain user: record.get('user') && record.get('user').properties, } }) diff --git a/backend/src/graphql/resolvers/helpers/generateNonce.ts b/backend/src/graphql/resolvers/helpers/generateNonce.ts index b7585b24f..bee75f723 100644 --- a/backend/src/graphql/resolvers/helpers/generateNonce.ts +++ b/backend/src/graphql/resolvers/helpers/generateNonce.ts @@ -4,6 +4,7 @@ import registrationConstants from '@constants/registrationBranded' export default function generateNonce() { return Array.from( { length: registrationConstants.NONCE_LENGTH }, + // eslint-disable-next-line @typescript-eslint/no-useless-default-assignment (n: number = Math.floor(Math.random() * 10)) => { return String.fromCharCode(n + 48) }, diff --git a/backend/src/graphql/resolvers/images.spec.ts b/backend/src/graphql/resolvers/images.spec.ts index 4a6f8903d..664e3eb95 100644 --- a/backend/src/graphql/resolvers/images.spec.ts +++ b/backend/src/graphql/resolvers/images.spec.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-shadow */ import { TEST_CONFIG } from '@root/test/helpers' import ImageResolver from './images' diff --git a/backend/src/graphql/resolvers/images.ts b/backend/src/graphql/resolvers/images.ts index 9e000d34f..fcd29f41a 100644 --- a/backend/src/graphql/resolvers/images.ts +++ b/backend/src/graphql/resolvers/images.ts @@ -1,10 +1,12 @@ +/* eslint-disable @typescript-eslint/no-use-before-define */ +/* eslint-disable @typescript-eslint/restrict-template-expressions */ import crypto from 'node:crypto' import { join as joinPath } from 'node:path/posix' -import type { Context } from '@src/context' - import Resolver from './helpers/Resolver' +import type { Context } from '@src/context' + type UrlResolver = ( parent: { url: string }, args: { width?: number; height?: number }, diff --git a/backend/src/graphql/resolvers/images/images.ts b/backend/src/graphql/resolvers/images/images.ts index 7d4da562a..34e6f7f6c 100644 --- a/backend/src/graphql/resolvers/images/images.ts +++ b/backend/src/graphql/resolvers/images/images.ts @@ -1,8 +1,7 @@ -import type { Context } from '@src/context' -import type { FileDeleteCallback, FileUploadCallback } from '@src/uploads/types' - import { images as imagesS3 } from './imagesS3' +import type { Context } from '@src/context' +import type { FileDeleteCallback, FileUploadCallback } from '@src/uploads/types' import type { FileUpload } from 'graphql-upload' import type { Transaction } from 'neo4j-driver' diff --git a/backend/src/graphql/resolvers/images/imagesS3.spec.ts b/backend/src/graphql/resolvers/images/imagesS3.spec.ts index 0617c50ba..73ba065ec 100644 --- a/backend/src/graphql/resolvers/images/imagesS3.spec.ts +++ b/backend/src/graphql/resolvers/images/imagesS3.spec.ts @@ -2,17 +2,21 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable jest/no-conditional-expect */ +/* eslint-disable promise/prefer-await-to-callbacks */ +/* eslint-disable no-undef */ +/* eslint-disable @typescript-eslint/no-shadow */ import { DeleteObjectCommand } from '@aws-sdk/client-s3' import { Upload } from '@aws-sdk/lib-storage' import { UserInputError } from 'apollo-server' import Factory, { cleanDatabase } from '@db/factories' import { getNeode, getDriver } from '@db/neo4j' -import type { S3Config } from '@src/config' import { images } from './imagesS3' import type { ImageInput } from './images' +import type { S3Config } from '@src/config' import type { FileUpload } from 'graphql-upload' jest.mock('@aws-sdk/client-s3', () => { @@ -28,7 +32,8 @@ jest.mock('@aws-sdk/client-s3', () => { jest.mock('@aws-sdk/lib-storage', () => { return { Upload: jest.fn().mockImplementation(({ params: { Key } }: { params: { Key: string } }) => ({ - done: () => Promise.resolve({ Location: `http://your-objectstorage.com/bucket/${Key}` }), + done: async () => + Promise.resolve({ Location: `http://your-objectstorage.com/bucket/${Key}` }), })), } }) @@ -125,7 +130,7 @@ describe('deleteImage', () => { throw new Error('Ouch!') }) // eslint-disable-next-line no-catch-all/no-catch-all - } catch (err) { + } catch { // nothing has been deleted await expect(neode.all('Image')).resolves.toHaveLength(1) // all good @@ -151,7 +156,9 @@ describe('mergeImage', () => { beforeEach(() => { const createReadStream: FileUpload['createReadStream'] = (() => ({ pipe: () => ({ - on: (_: unknown, callback: () => void) => callback(), // eslint-disable-line promise/prefer-await-to-callbacks + on: (_: unknown, callback: () => void) => { + callback() + }, }), })) as unknown as FileUpload['createReadStream'] imageInput = { @@ -272,7 +279,7 @@ describe('mergeImage', () => { return transaction.run('Ooops invalid cypher!', { image }) }) // eslint-disable-next-line no-catch-all/no-catch-all - } catch (err) { + } catch { // nothing has been created await expect(neode.all('Image')).resolves.toHaveLength(0) // all good diff --git a/backend/src/graphql/resolvers/images/imagesS3.ts b/backend/src/graphql/resolvers/images/imagesS3.ts index 7b3e92b76..c596b8aa2 100644 --- a/backend/src/graphql/resolvers/images/imagesS3.ts +++ b/backend/src/graphql/resolvers/images/imagesS3.ts @@ -1,16 +1,18 @@ +/* eslint-disable @typescript-eslint/no-use-before-define */ +/* eslint-disable @typescript-eslint/no-shadow */ import path from 'node:path' import { UserInputError } from 'apollo-server' -import { FileUpload } from 'graphql-upload' import slug from 'slugify' import { v4 as uuid } from 'uuid' -import type { S3Config } from '@config/index' import { s3Service } from '@src/uploads/s3Service' import { wrapTransactionDeleteImage, wrapTransactionMergeImage } from './wrapTransaction' import type { Image, Images } from './images' +import type { S3Config } from '@config/index' +import type { FileUpload } from 'graphql-upload' export const images = (config: S3Config) => { const s3 = s3Service(config, 'original') diff --git a/backend/src/graphql/resolvers/images/wrapTransaction.ts b/backend/src/graphql/resolvers/images/wrapTransaction.ts index a91a3f4c0..31185ff16 100644 --- a/backend/src/graphql/resolvers/images/wrapTransaction.ts +++ b/backend/src/graphql/resolvers/images/wrapTransaction.ts @@ -9,7 +9,7 @@ export const wrapTransactionDeleteImage = async ( ): ReturnType => { const session = getDriver().session() try { - const result = await session.writeTransaction((transaction) => { + const result = await session.writeTransaction(async (transaction) => { return wrappedCallback(...args, { ...opts, transaction }) }) return result @@ -29,7 +29,7 @@ export const wrapTransactionMergeImage = async ( ): ReturnType => { const session = getDriver().session() try { - const result = await session.writeTransaction((transaction) => { + const result = await session.writeTransaction(async (transaction) => { return wrappedCallback(...args, { ...opts, transaction }) }) return result diff --git a/backend/src/graphql/resolvers/inviteCodes.spec.ts b/backend/src/graphql/resolvers/inviteCodes.spec.ts index d74694759..948802cde 100644 --- a/backend/src/graphql/resolvers/inviteCodes.spec.ts +++ b/backend/src/graphql/resolvers/inviteCodes.spec.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable jest/expect-expect */ import Factory, { cleanDatabase } from '@db/factories' import { CreateGroup } from '@graphql/queries/CreateGroup' @@ -16,8 +17,9 @@ import { authenticatedValidateInviteCode, unauthenticatedValidateInviteCode, } from '@graphql/queries/validateInviteCode' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup, TEST_CONFIG } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let authenticatedUser: Context['user'] @@ -326,7 +328,7 @@ describe('validateInviteCode', () => { }) }) - // eslint-disable-next-line jest/no-disabled-tests, @typescript-eslint/no-empty-function + // eslint-disable-next-line jest/no-disabled-tests it.skip('throws no authorization error when querying extended hidden group fields as member', async () => {}) }) }) @@ -495,7 +497,7 @@ describe('generatePersonalInviteCode', () => { }) }) - // eslint-disable-next-line jest/no-disabled-tests, @typescript-eslint/no-empty-function + // eslint-disable-next-line jest/no-disabled-tests it.skip('returns a new invite code when colliding with an existing one', () => {}) }) }) @@ -763,7 +765,7 @@ describe('generateGroupInviteCode', () => { }) }) - // eslint-disable-next-line jest/no-disabled-tests, @typescript-eslint/no-empty-function + // eslint-disable-next-line jest/no-disabled-tests it.skip('returns a new group invite code when colliding with an existing one', () => {}) }) diff --git a/backend/src/graphql/resolvers/inviteCodes.ts b/backend/src/graphql/resolvers/inviteCodes.ts index 217df869a..6894bb4e7 100644 --- a/backend/src/graphql/resolvers/inviteCodes.ts +++ b/backend/src/graphql/resolvers/inviteCodes.ts @@ -2,14 +2,16 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-return */ import registrationConstants from '@constants/registrationBranded' -import { Context } from '@src/context' import Resolver from './helpers/Resolver' +import type { Context } from '@src/context' + export const generateInviteCode = () => { // 6 random numbers in [ 0, 35 ] are 36 possible numbers (10 [0-9] + 26 [A-Z]) return Array.from( { length: registrationConstants.INVITE_CODE_LENGTH }, + // eslint-disable-next-line @typescript-eslint/no-useless-default-assignment (n: number = Math.floor(Math.random() * 36)) => { // n > 9: it is a letter (ASCII 65 is A) -> 10 + 55 = 65 // else: it is a number (ASCII 48 is 0) -> 0 + 48 = 48 diff --git a/backend/src/graphql/resolvers/locations.spec.ts b/backend/src/graphql/resolvers/locations.spec.ts index af7580909..b04d50635 100644 --- a/backend/src/graphql/resolvers/locations.spec.ts +++ b/backend/src/graphql/resolvers/locations.spec.ts @@ -5,6 +5,7 @@ import Factory, { cleanDatabase } from '@db/factories' import { UpdateUser } from '@graphql/queries/UpdateUser' import { User } from '@graphql/queries/User' import { createApolloTestSetup } from '@root/test/helpers' + import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' diff --git a/backend/src/graphql/resolvers/locations.ts b/backend/src/graphql/resolvers/locations.ts index 0222e0baf..3341fba7a 100644 --- a/backend/src/graphql/resolvers/locations.ts +++ b/backend/src/graphql/resolvers/locations.ts @@ -2,13 +2,14 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ +/* eslint-disable @typescript-eslint/return-await */ import { UserInputError } from 'apollo-server' -import type { Context } from '@src/context' - import Resolver from './helpers/Resolver' import { queryLocations } from './users/location' +import type { Context } from '@src/context' + export default { Location: { ...Resolver('Location', { diff --git a/backend/src/graphql/resolvers/messages.spec.ts b/backend/src/graphql/resolvers/messages.spec.ts index f2301fc69..f163bd4b3 100644 --- a/backend/src/graphql/resolvers/messages.spec.ts +++ b/backend/src/graphql/resolvers/messages.spec.ts @@ -3,6 +3,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-use-before-define */ +/* eslint-disable @typescript-eslint/no-confusing-void-expression */ import { Readable } from 'node:stream' import { Upload } from 'graphql-upload/public/index' @@ -14,8 +16,9 @@ import { CreateRoom } from '@graphql/queries/CreateRoom' import { MarkMessagesAsSeen } from '@graphql/queries/MarkMessagesAsSeen' import { Message } from '@graphql/queries/Message' import { Room } from '@graphql/queries/Room' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let authenticatedUser: Context['user'] diff --git a/backend/src/graphql/resolvers/messages.ts b/backend/src/graphql/resolvers/messages.ts index 4af6b8862..0ec5cb9a1 100644 --- a/backend/src/graphql/resolvers/messages.ts +++ b/backend/src/graphql/resolvers/messages.ts @@ -4,6 +4,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ import { withFilter } from 'graphql-subscriptions' import { neo4jgraphql } from 'neo4j-graphql-js' diff --git a/backend/src/graphql/resolvers/moderation.ts b/backend/src/graphql/resolvers/moderation.ts index c98cc1df3..62b11156b 100644 --- a/backend/src/graphql/resolvers/moderation.ts +++ b/backend/src/graphql/resolvers/moderation.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ export default { Mutation: { review: async (_object, params, context, _resolveInfo) => { diff --git a/backend/src/graphql/resolvers/notifications.spec.ts b/backend/src/graphql/resolvers/notifications.spec.ts index 8d84a0527..61529cf17 100644 --- a/backend/src/graphql/resolvers/notifications.spec.ts +++ b/backend/src/graphql/resolvers/notifications.spec.ts @@ -3,13 +3,15 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-confusing-void-expression */ import Factory, { cleanDatabase } from '@db/factories' import { DeletePost } from '@graphql/queries/DeletePost' import { markAllAsRead } from '@graphql/queries/markAllAsRead' import { markAsRead } from '@graphql/queries/markAsRead' import { notifications } from '@graphql/queries/notifications' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let user diff --git a/backend/src/graphql/resolvers/passwordReset.spec.ts b/backend/src/graphql/resolvers/passwordReset.spec.ts index 967164eb3..e575747a3 100644 --- a/backend/src/graphql/resolvers/passwordReset.spec.ts +++ b/backend/src/graphql/resolvers/passwordReset.spec.ts @@ -6,11 +6,12 @@ import Factory, { cleanDatabase } from '@db/factories' import { login } from '@graphql/queries/login' import { requestPasswordReset } from '@graphql/queries/requestPasswordReset' import { resetPassword } from '@graphql/queries/resetPassword' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' import createPasswordReset from './helpers/createPasswordReset' +import type { ApolloTestSetup } from '@root/test/helpers' + let variables let mutate: ApolloTestSetup['mutate'] diff --git a/backend/src/graphql/resolvers/passwordReset.ts b/backend/src/graphql/resolvers/passwordReset.ts index 53097268b..862979ec0 100644 --- a/backend/src/graphql/resolvers/passwordReset.ts +++ b/backend/src/graphql/resolvers/passwordReset.ts @@ -8,11 +8,12 @@ import bcrypt from 'bcryptjs' import { v4 as uuid } from 'uuid' import registrationConstants from '@constants/registrationBranded' -import type { Context } from '@src/context' import createPasswordReset from './helpers/createPasswordReset' import normalizeEmail from './helpers/normalizeEmail' +import type { Context } from '@src/context' + export default { Mutation: { requestPasswordReset: async (_parent, { email }, context: Context) => { diff --git a/backend/src/graphql/resolvers/posts.filter.spec.ts b/backend/src/graphql/resolvers/posts.filter.spec.ts index 8d0064313..d91da9b56 100644 --- a/backend/src/graphql/resolvers/posts.filter.spec.ts +++ b/backend/src/graphql/resolvers/posts.filter.spec.ts @@ -5,8 +5,9 @@ import Factory, { cleanDatabase } from '@db/factories' import { CreatePost } from '@graphql/queries/CreatePost' import { Post } from '@graphql/queries/Post' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let user diff --git a/backend/src/graphql/resolvers/posts.group.pin.spec.ts b/backend/src/graphql/resolvers/posts.group.pin.spec.ts index 1115be332..bfd441c13 100644 --- a/backend/src/graphql/resolvers/posts.group.pin.spec.ts +++ b/backend/src/graphql/resolvers/posts.group.pin.spec.ts @@ -8,8 +8,9 @@ import { CreatePost } from '@graphql/queries/CreatePost' import { pinGroupPost } from '@graphql/queries/pinGroupPost' import { profilePagePosts } from '@graphql/queries/profilePagePosts' import { unpinGroupPost } from '@graphql/queries/unpinGroupPost' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' const defaultConfig = { diff --git a/backend/src/graphql/resolvers/posts.inGroups.spec.ts b/backend/src/graphql/resolvers/posts.inGroups.spec.ts index 26abc6f88..29272410d 100644 --- a/backend/src/graphql/resolvers/posts.inGroups.spec.ts +++ b/backend/src/graphql/resolvers/posts.inGroups.spec.ts @@ -12,8 +12,9 @@ import { Post } from '@graphql/queries/Post' import { profilePagePosts } from '@graphql/queries/profilePagePosts' import { searchPosts } from '@graphql/queries/searchPosts' import { SignupVerification } from '@graphql/queries/SignupVerification' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' jest.mock('@constants/groups', () => { diff --git a/backend/src/graphql/resolvers/posts.observe.spec.ts b/backend/src/graphql/resolvers/posts.observe.spec.ts index e76a77e24..b90af0d99 100644 --- a/backend/src/graphql/resolvers/posts.observe.spec.ts +++ b/backend/src/graphql/resolvers/posts.observe.spec.ts @@ -6,8 +6,9 @@ import { CreateComment } from '@graphql/queries/CreateComment' import { CreatePost } from '@graphql/queries/CreatePost' import { Post } from '@graphql/queries/Post' import { toggleObservePost } from '@graphql/queries/toggleObservePost' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let user diff --git a/backend/src/graphql/resolvers/posts.spec.ts b/backend/src/graphql/resolvers/posts.spec.ts index d1e8a89d3..b1f65a292 100644 --- a/backend/src/graphql/resolvers/posts.spec.ts +++ b/backend/src/graphql/resolvers/posts.spec.ts @@ -2,8 +2,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-use-before-define */ +/* eslint-disable jest/no-commented-out-tests */ import Factory, { cleanDatabase } from '@db/factories' -import Image from '@db/models/Image' import { AddPostEmotions } from '@graphql/queries/AddPostEmotions' import { CreateGroup } from '@graphql/queries/CreateGroup' import { CreatePost } from '@graphql/queries/CreatePost' @@ -17,8 +18,10 @@ import { RemovePostEmotions } from '@graphql/queries/RemovePostEmotions' import { unpinPost } from '@graphql/queries/unpinPost' import { unpushPost } from '@graphql/queries/unpushPost' import { UpdatePost } from '@graphql/queries/UpdatePost' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type Image from '@db/models/Image' +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let user diff --git a/backend/src/graphql/resolvers/posts.ts b/backend/src/graphql/resolvers/posts.ts index a194619c6..69b3aecf3 100644 --- a/backend/src/graphql/resolvers/posts.ts +++ b/backend/src/graphql/resolvers/posts.ts @@ -4,13 +4,12 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ import { UserInputError } from 'apollo-server' import { isEmpty } from 'lodash' import { neo4jgraphql } from 'neo4j-graphql-js' import { v4 as uuid } from 'uuid' -import { Context } from '@src/context' - import { validateEventParams } from './helpers/events' import { filterForMutedUsers } from './helpers/filterForMutedUsers' import { filterInvisiblePosts } from './helpers/filterInvisiblePosts' @@ -19,6 +18,8 @@ import Resolver from './helpers/Resolver' import { images } from './images/images' import { createOrUpdateLocations } from './users/location' +import type { Context } from '@src/context' + const maintainPinnedPosts = (params) => { const pinnedPostFilter = { pinned: true } if (isEmpty(params.filter)) { @@ -235,7 +236,7 @@ export default { WITH post ` - if (config.CATEGORIES_ACTIVE && categoryIds && categoryIds.length) { + if (config.CATEGORIES_ACTIVE && categoryIds?.length) { const cypherDeletePreviousRelations = ` MATCH (post:Post { id: $params.id })-[previousRelations:CATEGORIZED]->(category:Category) DELETE previousRelations diff --git a/backend/src/graphql/resolvers/registration.spec.ts b/backend/src/graphql/resolvers/registration.spec.ts index e4adc65f2..b2de6ad10 100644 --- a/backend/src/graphql/resolvers/registration.spec.ts +++ b/backend/src/graphql/resolvers/registration.spec.ts @@ -1,13 +1,15 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-use-before-define */ import Factory, { cleanDatabase } from '@db/factories' -import EmailAddress from '@db/models/EmailAddress' -import User from '@db/models/User' import { Signup } from '@graphql/queries/Signup' import { SignupVerification } from '@graphql/queries/SignupVerification' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type EmailAddress from '@db/models/EmailAddress' +import type User from '@db/models/User' +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let variables diff --git a/backend/src/graphql/resolvers/registration.ts b/backend/src/graphql/resolvers/registration.ts index 949aedf6c..32ab9a883 100644 --- a/backend/src/graphql/resolvers/registration.ts +++ b/backend/src/graphql/resolvers/registration.ts @@ -7,7 +7,6 @@ import { UserInputError } from 'apollo-server' import { hash } from 'bcryptjs' import { getNeode } from '@db/neo4j' -import { Context } from '@src/context' import existingEmailAddress from './helpers/existingEmailAddress' import generateNonce from './helpers/generateNonce' @@ -15,6 +14,8 @@ import normalizeEmail from './helpers/normalizeEmail' import { redeemInviteCode } from './inviteCodes' import { createOrUpdateLocations } from './users/location' +import type { Context } from '@src/context' + const neode = getNeode() export default { diff --git a/backend/src/graphql/resolvers/reports.ts b/backend/src/graphql/resolvers/reports.ts index f9b3a3b63..84d800f6d 100644 --- a/backend/src/graphql/resolvers/reports.ts +++ b/backend/src/graphql/resolvers/reports.ts @@ -3,6 +3,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ export default { Mutation: { fileReport: async (_parent, params, context, _resolveInfo) => { diff --git a/backend/src/graphql/resolvers/roles.spec.ts b/backend/src/graphql/resolvers/roles.spec.ts index e01dc1fbe..7958dc0cf 100644 --- a/backend/src/graphql/resolvers/roles.spec.ts +++ b/backend/src/graphql/resolvers/roles.spec.ts @@ -1,13 +1,15 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { ApolloServerTestClient, createTestClient } from 'apollo-server-testing' +import { createTestClient } from 'apollo-server-testing' import Factory, { cleanDatabase } from '@db/factories' import { getDriver, getNeode } from '@db/neo4j' import { availableRoles } from '@graphql/queries/availableRoles' import createServer from '@src/server' +import type { ApolloServerTestClient } from 'apollo-server-testing' + const instance = getNeode() const driver = getDriver() diff --git a/backend/src/graphql/resolvers/rooms.spec.ts b/backend/src/graphql/resolvers/rooms.spec.ts index 5998eb598..a619f0651 100644 --- a/backend/src/graphql/resolvers/rooms.spec.ts +++ b/backend/src/graphql/resolvers/rooms.spec.ts @@ -7,8 +7,9 @@ import { CreateMessage } from '@graphql/queries/CreateMessage' import { CreateRoom } from '@graphql/queries/CreateRoom' import { Room } from '@graphql/queries/Room' import { UnreadRooms } from '@graphql/queries/UnreadRooms' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let chattingUser, otherChattingUser, notChattingUser diff --git a/backend/src/graphql/resolvers/rooms.ts b/backend/src/graphql/resolvers/rooms.ts index d986a9b32..060eccf34 100644 --- a/backend/src/graphql/resolvers/rooms.ts +++ b/backend/src/graphql/resolvers/rooms.ts @@ -3,6 +3,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ +/* eslint-disable @typescript-eslint/no-shadow */ import { withFilter } from 'graphql-subscriptions' import { neo4jgraphql } from 'neo4j-graphql-js' diff --git a/backend/src/graphql/resolvers/searches.ts b/backend/src/graphql/resolvers/searches.ts index 54ac9152d..2f1a74662 100644 --- a/backend/src/graphql/resolvers/searches.ts +++ b/backend/src/graphql/resolvers/searches.ts @@ -4,6 +4,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ import { queryString } from './searches/queryString' // see http://lucene.apache.org/core/8_3_1/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package.description diff --git a/backend/src/graphql/resolvers/searches/queryString.ts b/backend/src/graphql/resolvers/searches/queryString.ts index da8e7bffb..f81acd75d 100644 --- a/backend/src/graphql/resolvers/searches/queryString.ts +++ b/backend/src/graphql/resolvers/searches/queryString.ts @@ -4,6 +4,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-use-before-define */ export function queryString(str) { const normalizedString = normalizeWhitespace(str) const escapedString = escapeSpecialCharacters(normalizedString) diff --git a/backend/src/graphql/resolvers/statistics.spec.ts b/backend/src/graphql/resolvers/statistics.spec.ts index 17b7cf886..53faffd11 100644 --- a/backend/src/graphql/resolvers/statistics.spec.ts +++ b/backend/src/graphql/resolvers/statistics.spec.ts @@ -4,8 +4,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import Factory, { cleanDatabase } from '@db/factories' import { statistics } from '@graphql/queries/statistics' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let currentUser @@ -49,7 +50,7 @@ describe('statistics', () => { }) }) - describe('authenticated as user ', () => { + describe('authenticated as user', () => { beforeEach(async () => { currentUser = await database.neode.create('User', { name: 'Current User', @@ -66,7 +67,7 @@ describe('statistics', () => { }) }) - describe('authenticated as moderator ', () => { + describe('authenticated as moderator', () => { beforeEach(async () => { currentUser = await database.neode.create('User', { name: 'Current User', @@ -84,7 +85,7 @@ describe('statistics', () => { }) }) - describe('authenticated as admin ', () => { + describe('authenticated as admin', () => { beforeEach(async () => { currentUser = await database.neode.create('User', { name: 'Current User', diff --git a/backend/src/graphql/resolvers/statistics.ts b/backend/src/graphql/resolvers/statistics.ts index d07a9ba62..74b51c961 100644 --- a/backend/src/graphql/resolvers/statistics.ts +++ b/backend/src/graphql/resolvers/statistics.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/dot-notation */ -import { Context } from '@src/context' + +import type { Context } from '@src/context' export default { Query: { diff --git a/backend/src/graphql/resolvers/userData.ts b/backend/src/graphql/resolvers/userData.ts index feccb55b3..cd87f09ad 100644 --- a/backend/src/graphql/resolvers/userData.ts +++ b/backend/src/graphql/resolvers/userData.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-use-before-define */ export default { Query: { userData: async (_object, _args, context, _resolveInfo) => { diff --git a/backend/src/graphql/resolvers/user_management.spec.ts b/backend/src/graphql/resolvers/user_management.spec.ts index 50e0d8ca6..1568972fa 100644 --- a/backend/src/graphql/resolvers/user_management.spec.ts +++ b/backend/src/graphql/resolvers/user_management.spec.ts @@ -6,6 +6,9 @@ /* eslint-disable promise/prefer-await-to-callbacks */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable jest/unbound-method */ +/* eslint-disable @typescript-eslint/no-shadow */ +/* eslint-disable jest/expect-expect */ +/* eslint-disable @typescript-eslint/restrict-template-expressions */ import { verify } from 'jsonwebtoken' import { categories } from '@constants/categories' @@ -16,9 +19,10 @@ import { login } from '@graphql/queries/login' import { saveCategorySettings } from '@graphql/queries/saveCategorySettings' import { decode } from '@jwt/decode' import { encode } from '@jwt/encode' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup, TEST_CONFIG } from '@root/test/helpers' +import type { ApolloTestSetup } from '@root/test/helpers' + const jwt = { verify } let variables, req, user let mutate: ApolloTestSetup['mutate'] @@ -265,7 +269,7 @@ describe('login', () => { }) describe('normalization', () => { - describe('email address is a gmail address ', () => { + describe('email address is a gmail address', () => { beforeEach(async () => { const email = await database.neode.first( 'EmailAddress', diff --git a/backend/src/graphql/resolvers/user_management.ts b/backend/src/graphql/resolvers/user_management.ts index b88d1afd5..0e2604abc 100644 --- a/backend/src/graphql/resolvers/user_management.ts +++ b/backend/src/graphql/resolvers/user_management.ts @@ -7,10 +7,11 @@ import bcrypt from 'bcryptjs' import { getNeode } from '@db/neo4j' import { encode } from '@jwt/encode' -import type { Context } from '@src/context' import normalizeEmail from './helpers/normalizeEmail' +import type { Context } from '@src/context' + const neode = getNeode() export default { diff --git a/backend/src/graphql/resolvers/users.spec.ts b/backend/src/graphql/resolvers/users.spec.ts index a7413c19b..e5710841a 100644 --- a/backend/src/graphql/resolvers/users.spec.ts +++ b/backend/src/graphql/resolvers/users.spec.ts @@ -3,10 +3,11 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/require-await */ /* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable @typescript-eslint/no-shadow */ +/* eslint-disable @typescript-eslint/restrict-template-expressions */ import { categories } from '@constants/categories' import pubsubContext from '@context/pubsub' import Factory, { cleanDatabase } from '@db/factories' -import User from '@db/models/User' import { DeleteUser } from '@graphql/queries/DeleteUser' import { resetTrophyBadgesSelected } from '@graphql/queries/resetTrophyBadgesSelected' import { saveCategorySettings } from '@graphql/queries/saveCategorySettings' @@ -15,8 +16,10 @@ import { switchUserRole } from '@graphql/queries/switchUserRole' import { updateOnlineStatus } from '@graphql/queries/updateOnlineStatus' import { UpdateUser } from '@graphql/queries/UpdateUser' import { UserEmailNotificationSettings, User as userQuery } from '@graphql/queries/User' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type User from '@db/models/User' +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' import type { DecodedUser } from '@src/jwt/decode' // import CONFIG from '@src/config' diff --git a/backend/src/graphql/resolvers/users.ts b/backend/src/graphql/resolvers/users.ts index a5ad85adb..a74282986 100644 --- a/backend/src/graphql/resolvers/users.ts +++ b/backend/src/graphql/resolvers/users.ts @@ -4,12 +4,12 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-shadow */ import { UserInputError, ForbiddenError } from 'apollo-server' import { neo4jgraphql } from 'neo4j-graphql-js' import { TROPHY_BADGES_SELECTED_MAX } from '@constants/badges' import { getNeode } from '@db/neo4j' -import { Context } from '@src/context' import { defaultTrophyBadge, defaultVerificationBadge } from './badges' import normalizeEmail from './helpers/normalizeEmail' @@ -17,6 +17,8 @@ import Resolver from './helpers/Resolver' import { images } from './images/images' import { createOrUpdateLocations } from './users/location' +import type { Context } from '@src/context' + const neode = getNeode() export const getMutedUsers = async (context) => { @@ -235,7 +237,7 @@ export default { return Promise.all( txResult.records .map((record) => record.get('resource')) - .map((resource) => + .map(async (resource) => images(context.config).deleteImage(resource, 'HERO_IMAGE', { transaction }), ), ) diff --git a/backend/src/graphql/resolvers/users/blockedUsers.spec.ts b/backend/src/graphql/resolvers/users/blockedUsers.spec.ts index 83c4c4e8c..c66fddf5a 100644 --- a/backend/src/graphql/resolvers/users/blockedUsers.spec.ts +++ b/backend/src/graphql/resolvers/users/blockedUsers.spec.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable jest/expect-expect */ import { cleanDatabase } from '@db/factories' import { blockedUsers } from '@graphql/queries/blockedUsers' import { blockUser } from '@graphql/queries/blockUser' @@ -9,6 +10,7 @@ import { Post } from '@graphql/queries/Post' import { unblockUser } from '@graphql/queries/unblockUser' import { User } from '@graphql/queries/User' import { createApolloTestSetup } from '@root/test/helpers' + import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' diff --git a/backend/src/graphql/resolvers/users/location.spec.ts b/backend/src/graphql/resolvers/users/location.spec.ts index 83495fce0..bdd1b3c67 100644 --- a/backend/src/graphql/resolvers/users/location.spec.ts +++ b/backend/src/graphql/resolvers/users/location.spec.ts @@ -4,8 +4,9 @@ import Factory, { cleanDatabase } from '@db/factories' import { queryLocations } from '@graphql/queries/queryLocations' import { UpdateUser } from '@graphql/queries/UpdateUser' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let variables diff --git a/backend/src/graphql/resolvers/users/location.ts b/backend/src/graphql/resolvers/users/location.ts index 343503a70..36861a93a 100644 --- a/backend/src/graphql/resolvers/users/location.ts +++ b/backend/src/graphql/resolvers/users/location.ts @@ -6,7 +6,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable n/no-unsupported-features/node-builtins */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ +/* eslint-disable @typescript-eslint/no-loop-func */ + import { UserInputError } from 'apollo-server' import type { Context } from '@src/context' diff --git a/backend/src/graphql/resolvers/users/mutedUsers.spec.ts b/backend/src/graphql/resolvers/users/mutedUsers.spec.ts index d86c7e9e0..641d20258 100644 --- a/backend/src/graphql/resolvers/users/mutedUsers.spec.ts +++ b/backend/src/graphql/resolvers/users/mutedUsers.spec.ts @@ -2,6 +2,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-call */ +/* eslint-disable jest/expect-expect */ import { createTestClient } from 'apollo-server-testing' import { cleanDatabase } from '@db/factories' @@ -97,7 +98,7 @@ describe('muteUser', () => { beforeEach(() => { currentUser = undefined - muteAction = (variables) => { + muteAction = async (variables) => { const { mutate } = createTestClient(server) return mutate({ mutation: muteUser, variables }) } @@ -361,7 +362,7 @@ describe('unmuteUser', () => { beforeEach(() => { currentUser = undefined - unmuteAction = (variables) => { + unmuteAction = async (variables) => { const { mutate } = createTestClient(server) return mutate({ mutation: unmuteUser, variables }) } diff --git a/backend/src/jwt/decode.spec.ts b/backend/src/jwt/decode.spec.ts index fa074aa82..3bcaf75fa 100644 --- a/backend/src/jwt/decode.spec.ts +++ b/backend/src/jwt/decode.spec.ts @@ -1,14 +1,17 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable jest/expect-expect */ +/* eslint-disable @typescript-eslint/no-shadow */ import Factory, { cleanDatabase } from '@db/factories' -import User from '@db/models/User' import { getDriver, getNeode } from '@db/neo4j' import { TEST_CONFIG } from '@root/test/helpers' import { decode } from './decode' import { encode } from './encode' +import type User from '@db/models/User' + const driver = getDriver() const neode = getNeode() const config = { diff --git a/backend/src/jwt/decode.ts b/backend/src/jwt/decode.ts index 93cc64275..78a045015 100644 --- a/backend/src/jwt/decode.ts +++ b/backend/src/jwt/decode.ts @@ -3,7 +3,6 @@ import { verify } from 'jsonwebtoken' import type CONFIG from '@src/config' - import type { JwtPayload } from 'jsonwebtoken' import type { Driver } from 'neo4j-driver' @@ -26,7 +25,7 @@ export const decode = const decoded = jwt.verify(token, context.config.JWT_SECRET) as JwtPayload id = decoded.sub ?? null // eslint-disable-next-line no-catch-all/no-catch-all - } catch (err) { + } catch { return null } const session = context.driver.session() diff --git a/backend/src/logger.ts b/backend/src/logger.ts index 1d3f5f461..bba960932 100644 --- a/backend/src/logger.ts +++ b/backend/src/logger.ts @@ -1,7 +1,9 @@ -import { ILogObj, Logger } from 'tslog' +import { Logger } from 'tslog' import CONFIG from './config' +import type { ILogObj } from 'tslog' + const { LOG_LEVEL } = CONFIG const logLevels = ['SILLY', 'TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL'] as const @@ -39,7 +41,7 @@ class LoggerSingleton { * The Singleton's constructor should always be private to prevent direct * construction calls with the `new` operator. */ - // eslint-disable-next-line @typescript-eslint/no-empty-function + private constructor() {} /** diff --git a/backend/src/middleware/categories.spec.ts b/backend/src/middleware/categories.spec.ts index 51e831da5..6199da30e 100644 --- a/backend/src/middleware/categories.spec.ts +++ b/backend/src/middleware/categories.spec.ts @@ -2,9 +2,10 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ import Factory, { cleanDatabase } from '@db/factories' import { Category } from '@graphql/queries/Category' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' import { categories } from '@src/constants/categories' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let config: Partial diff --git a/backend/src/middleware/categories.ts b/backend/src/middleware/categories.ts index 609811e29..c229b513c 100644 --- a/backend/src/middleware/categories.ts +++ b/backend/src/middleware/categories.ts @@ -1,6 +1,5 @@ -import { GraphQLResolveInfo } from 'graphql' - import type { Context } from '@src/context' +import type { GraphQLResolveInfo } from 'graphql' type Resolver = ( root: unknown, diff --git a/backend/src/middleware/chatMiddleware.ts b/backend/src/middleware/chatMiddleware.ts index 17d01fd95..76a179d8f 100644 --- a/backend/src/middleware/chatMiddleware.ts +++ b/backend/src/middleware/chatMiddleware.ts @@ -4,6 +4,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ import { isArray } from 'lodash' +import type { IMiddlewareResolver } from 'graphql-middleware/dist/types' + const setRoomProps = (room) => { if (room.users) { room.users.forEach((user) => { @@ -22,7 +24,7 @@ const setMessageProps = (message, context) => { } } -const roomProperties = async (resolve, root, args, context, info) => { +const roomProperties: IMiddlewareResolver = async (resolve, root, args, context, info) => { const resolved = await resolve(root, args, context, info) if (resolved) { if (isArray(resolved)) { @@ -36,7 +38,7 @@ const roomProperties = async (resolve, root, args, context, info) => { return resolved } -const messageProperties = async (resolve, root, args, context, info) => { +const messageProperties: IMiddlewareResolver = async (resolve, root, args, context, info) => { const resolved = await resolve(root, args, context, info) if (resolved) { if (isArray(resolved)) { diff --git a/backend/src/middleware/excerptMiddleware.ts b/backend/src/middleware/excerptMiddleware.ts index 7a865be90..b3b23555a 100644 --- a/backend/src/middleware/excerptMiddleware.ts +++ b/backend/src/middleware/excerptMiddleware.ts @@ -7,32 +7,46 @@ import trunc from 'trunc-html' import { DESCRIPTION_EXCERPT_HTML_LENGTH } from '@constants/groups' +import type { IMiddlewareResolver } from 'graphql-middleware/dist/types' + +const createGroup: IMiddlewareResolver = async (resolve, root, args, context, info) => { + args.descriptionExcerpt = trunc(args.description, DESCRIPTION_EXCERPT_HTML_LENGTH).html + return resolve(root, args, context, info) +} + +const updateGroup: IMiddlewareResolver = async (resolve, root, args, context, info) => { + if (args.description) + args.descriptionExcerpt = trunc(args.description, DESCRIPTION_EXCERPT_HTML_LENGTH).html + return resolve(root, args, context, info) +} + +const createPost: IMiddlewareResolver = async (resolve, root, args, context, info) => { + args.contentExcerpt = trunc(args.content, 120).html + return resolve(root, args, context, info) +} + +const updatePost: IMiddlewareResolver = async (resolve, root, args, context, info) => { + args.contentExcerpt = trunc(args.content, 120).html + return resolve(root, args, context, info) +} + +const createComment: IMiddlewareResolver = async (resolve, root, args, context, info) => { + args.contentExcerpt = trunc(args.content, 180).html + return resolve(root, args, context, info) +} + +const updateComment: IMiddlewareResolver = async (resolve, root, args, context, info) => { + args.contentExcerpt = trunc(args.content, 180).html + return resolve(root, args, context, info) +} + export default { Mutation: { - CreateGroup: async (resolve, root, args, context, info) => { - args.descriptionExcerpt = trunc(args.description, DESCRIPTION_EXCERPT_HTML_LENGTH).html - return resolve(root, args, context, info) - }, - UpdateGroup: async (resolve, root, args, context, info) => { - if (args.description) - args.descriptionExcerpt = trunc(args.description, DESCRIPTION_EXCERPT_HTML_LENGTH).html - return resolve(root, args, context, info) - }, - CreatePost: async (resolve, root, args, context, info) => { - args.contentExcerpt = trunc(args.content, 120).html - return resolve(root, args, context, info) - }, - UpdatePost: async (resolve, root, args, context, info) => { - args.contentExcerpt = trunc(args.content, 120).html - return resolve(root, args, context, info) - }, - CreateComment: async (resolve, root, args, context, info) => { - args.contentExcerpt = trunc(args.content, 180).html - return resolve(root, args, context, info) - }, - UpdateComment: async (resolve, root, args, context, info) => { - args.contentExcerpt = trunc(args.content, 180).html - return resolve(root, args, context, info) - }, + CreateGroup: createGroup, + UpdateGroup: updateGroup, + CreatePost: createPost, + UpdatePost: updatePost, + CreateComment: createComment, + UpdateComment: updateComment, }, } diff --git a/backend/src/middleware/hashtags/extractHashtags.ts b/backend/src/middleware/hashtags/extractHashtags.ts index 26b224a9a..6e1d1eee9 100644 --- a/backend/src/middleware/hashtags/extractHashtags.ts +++ b/backend/src/middleware/hashtags/extractHashtags.ts @@ -4,7 +4,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { load } from 'cheerio' -// eslint-disable-next-line import/extensions +// eslint-disable-next-line import-x/extensions import { exec, build } from 'xregexp/xregexp-all.js' // formats of a Hashtag: // https://en.wikipedia.org/w/index.php?title=Hashtag&oldid=905141980#Style diff --git a/backend/src/middleware/hashtags/hashtagsMiddleware.spec.ts b/backend/src/middleware/hashtags/hashtagsMiddleware.spec.ts index 7f0e911ab..c60c34b25 100644 --- a/backend/src/middleware/hashtags/hashtagsMiddleware.spec.ts +++ b/backend/src/middleware/hashtags/hashtagsMiddleware.spec.ts @@ -1,12 +1,14 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-shadow */ import { cleanDatabase } from '@db/factories' import { CreatePost } from '@graphql/queries/CreatePost' import { Post } from '@graphql/queries/Post' import { UpdatePost } from '@graphql/queries/UpdatePost' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let hashtagingUser diff --git a/backend/src/middleware/helpers/cleanHtml.ts b/backend/src/middleware/helpers/cleanHtml.ts index d429f8f9d..452531a62 100644 --- a/backend/src/middleware/helpers/cleanHtml.ts +++ b/backend/src/middleware/helpers/cleanHtml.ts @@ -4,6 +4,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable security/detect-unsafe-regex */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ import linkifyHtml from 'linkify-html' import sanitizeHtml from 'sanitize-html' diff --git a/backend/src/middleware/index.spec.ts b/backend/src/middleware/index.spec.ts index 4bdea7df5..1b09595e8 100644 --- a/backend/src/middleware/index.spec.ts +++ b/backend/src/middleware/index.spec.ts @@ -1,5 +1,5 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ /* eslint-disable n/global-require */ +/* eslint-disable @typescript-eslint/no-require-imports */ // Unit tests for addMiddleware – testing append, prepend, before, after, and error cases. // Each test uses jest.isolateModules + jest.doMock to get a fresh ocelotMiddlewares array. @@ -55,7 +55,7 @@ const loadModule = ( }, })) setupMocks(options) - // eslint-disable-next-line n/no-missing-require + const mod = require('./index') as MiddlewareModule return { mod, @@ -77,7 +77,7 @@ describe('default', () => { it('calls brandingMiddlewares', () => { jest.isolateModules(() => { const { mod } = loadModule() - // eslint-disable-next-line n/no-missing-require + const brandingMiddlewares = require('./branding/brandingMiddlewares') as jest.Mock mod.default({}) expect(brandingMiddlewares).toHaveBeenCalledTimes(1) @@ -197,26 +197,26 @@ describe('addMiddleware', () => { it('throws when "before" anchor does not exist', () => { jest.isolateModules(() => { const { mod } = loadModule() - expect(() => + expect(() => { mod.addMiddleware({ name: 'failure', middleware: {}, position: { before: 'nonexistent' }, - }), - ).toThrow('Could not find middleware "nonexistent" to append the middleware "failure"') + }) + }).toThrow('Could not find middleware "nonexistent" to append the middleware "failure"') }) }) it('throws when "after" anchor does not exist', () => { jest.isolateModules(() => { const { mod } = loadModule() - expect(() => + expect(() => { mod.addMiddleware({ name: 'failure', middleware: {}, position: { after: 'nonexistent' }, - }), - ).toThrow('Could not find middleware "nonexistent" to append the middleware "failure"') + }) + }).toThrow('Could not find middleware "nonexistent" to append the middleware "failure"') }) }) }) diff --git a/backend/src/middleware/index.ts b/backend/src/middleware/index.ts index 34e10eb1f..85ac04a41 100644 --- a/backend/src/middleware/index.ts +++ b/backend/src/middleware/index.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { applyMiddleware, IMiddleware, IMiddlewareGenerator } from 'graphql-middleware' +import { applyMiddleware } from 'graphql-middleware' import CONFIG from '@config/index' @@ -23,6 +23,8 @@ import userInteractions from './userInteractions' import validation from './validation/validationMiddleware' import xss from './xssMiddleware' +import type { IMiddleware, IMiddlewareGenerator } from 'graphql-middleware' + export interface MiddlewareOrder { position: 'prepend' | 'append' | { before: string } | { after: string } name: string diff --git a/backend/src/middleware/languages/languages.spec.ts b/backend/src/middleware/languages/languages.spec.ts index 87ab723be..90c950c3b 100644 --- a/backend/src/middleware/languages/languages.spec.ts +++ b/backend/src/middleware/languages/languages.spec.ts @@ -3,8 +3,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import Factory, { cleanDatabase } from '@db/factories' import { CreatePost } from '@graphql/queries/CreatePost' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let authenticatedUser: Context['user'] diff --git a/backend/src/middleware/languages/languages.ts b/backend/src/middleware/languages/languages.ts index fb8c51a1f..cef82f21b 100644 --- a/backend/src/middleware/languages/languages.ts +++ b/backend/src/middleware/languages/languages.ts @@ -1,5 +1,4 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ -/* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/await-thenable */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ @@ -8,6 +7,8 @@ import LanguageDetect from 'languagedetect' import { removeHtmlTags } from '@middleware/helpers/cleanHtml' +import type { IMiddlewareResolver } from 'graphql-middleware/dist/types' + const setPostLanguage = (text, defaultLanguage) => { const lngDetector = new LanguageDetect() lngDetector.setLanguageType('iso2') @@ -18,15 +19,19 @@ const setPostLanguage = (text, defaultLanguage) => { return languages[0][0] } +const createPost: IMiddlewareResolver = async (resolve, root, args, context, info) => { + args.language = await setPostLanguage(args.content, context.user.locale) + return resolve(root, args, context, info) +} + +const updatePost: IMiddlewareResolver = async (resolve, root, args, context, info) => { + args.language = await setPostLanguage(args.content, context.user.locale) + return resolve(root, args, context, info) +} + export default { Mutation: { - CreatePost: async (resolve, root, args, context, info) => { - args.language = await setPostLanguage(args.content, context.user.locale) - return resolve(root, args, context, info) - }, - UpdatePost: async (resolve, root, args, context, info) => { - args.language = await setPostLanguage(args.content, context.user.locale) - return resolve(root, args, context, info) - }, + CreatePost: createPost, + UpdatePost: updatePost, }, } diff --git a/backend/src/middleware/notifications/mentions/extractMentionedUsers.spec.ts b/backend/src/middleware/notifications/mentions/extractMentionedUsers.spec.ts index 9865eab0d..671f33f03 100644 --- a/backend/src/middleware/notifications/mentions/extractMentionedUsers.spec.ts +++ b/backend/src/middleware/notifications/mentions/extractMentionedUsers.spec.ts @@ -24,7 +24,7 @@ describe('extractMentionedUsers', () => { expect(extractMentionedUsers(contentWithDuplicateIds)).toEqual(['you']) }) - describe('given a link with .mention class and `data-mention-id` attribute ', () => { + describe('given a link with .mention class and `data-mention-id` attribute', () => { it('extracts ids', () => { expect(extractMentionedUsers(contentWithMentions)).toEqual(['u3']) }) diff --git a/backend/src/middleware/notifications/notificationsMiddleware.emails.spec.ts b/backend/src/middleware/notifications/notificationsMiddleware.emails.spec.ts index ae5e83b09..8dce92a4e 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.emails.spec.ts +++ b/backend/src/middleware/notifications/notificationsMiddleware.emails.spec.ts @@ -9,13 +9,16 @@ import { followUser } from '@graphql/queries/followUser' import { JoinGroup } from '@graphql/queries/JoinGroup' import { markAllAsRead } from '@graphql/queries/markAllAsRead' import { notifications } from '@graphql/queries/notifications' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' const sendNotificationMailMock: (notification) => void = jest.fn() jest.mock('@src/emails/sendEmail', () => ({ - sendNotificationMail: (notification) => sendNotificationMailMock(notification), + sendNotificationMail: (notification) => { + sendNotificationMailMock(notification) + }, })) let emaillessMember diff --git a/backend/src/middleware/notifications/notificationsMiddleware.followed-users.spec.ts b/backend/src/middleware/notifications/notificationsMiddleware.followed-users.spec.ts index bf745d4c7..35bce3b1a 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.followed-users.spec.ts +++ b/backend/src/middleware/notifications/notificationsMiddleware.followed-users.spec.ts @@ -6,13 +6,16 @@ import { CreateGroup } from '@graphql/queries/CreateGroup' import { CreatePost } from '@graphql/queries/CreatePost' import { followUser } from '@graphql/queries/followUser' import { notifications } from '@graphql/queries/notifications' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' const sendNotificationMailMock: (notification) => void = jest.fn() jest.mock('@src/emails/sendEmail', () => ({ - sendNotificationMail: (notification) => sendNotificationMailMock(notification), + sendNotificationMail: (notification) => { + sendNotificationMailMock(notification) + }, })) let authenticatedUser: Context['user'] diff --git a/backend/src/middleware/notifications/notificationsMiddleware.mentions-in-groups.spec.ts b/backend/src/middleware/notifications/notificationsMiddleware.mentions-in-groups.spec.ts index 2beac88d5..5410f3e0c 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.mentions-in-groups.spec.ts +++ b/backend/src/middleware/notifications/notificationsMiddleware.mentions-in-groups.spec.ts @@ -9,13 +9,16 @@ import { CreatePost } from '@graphql/queries/CreatePost' import { JoinGroup } from '@graphql/queries/JoinGroup' import { markAllAsRead } from '@graphql/queries/markAllAsRead' import { notifications } from '@graphql/queries/notifications' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' const sendNotificationMailMock: (notification) => void = jest.fn() jest.mock('@src/emails/sendEmail', () => ({ - sendNotificationMail: (notification) => sendNotificationMailMock(notification), + sendNotificationMail: (notification) => { + sendNotificationMailMock(notification) + }, })) let authenticatedUser: Context['user'] diff --git a/backend/src/middleware/notifications/notificationsMiddleware.observing-posts.spec.ts b/backend/src/middleware/notifications/notificationsMiddleware.observing-posts.spec.ts index 7d1bd7956..5de65d0fe 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.observing-posts.spec.ts +++ b/backend/src/middleware/notifications/notificationsMiddleware.observing-posts.spec.ts @@ -6,13 +6,16 @@ import { CreateComment } from '@graphql/queries/CreateComment' import { CreatePost } from '@graphql/queries/CreatePost' import { notifications } from '@graphql/queries/notifications' import { toggleObservePost } from '@graphql/queries/toggleObservePost' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' const sendNotificationMailMock: (notification) => void = jest.fn() jest.mock('@src/emails/sendEmail', () => ({ - sendNotificationMail: (notification) => sendNotificationMailMock(notification), + sendNotificationMail: (notification) => { + sendNotificationMailMock(notification) + }, })) let authenticatedUser: Context['user'] diff --git a/backend/src/middleware/notifications/notificationsMiddleware.online-status.spec.ts b/backend/src/middleware/notifications/notificationsMiddleware.online-status.spec.ts index 6516ae600..aba5c68c1 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.online-status.spec.ts +++ b/backend/src/middleware/notifications/notificationsMiddleware.online-status.spec.ts @@ -4,13 +4,16 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ import Factory, { cleanDatabase } from '@db/factories' import { CreatePost } from '@graphql/queries/CreatePost' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' const sendNotificationMailMock: (notification) => void = jest.fn() jest.mock('@src/emails/sendEmail', () => ({ - sendNotificationMail: (notification) => sendNotificationMailMock(notification), + sendNotificationMail: (notification) => { + sendNotificationMailMock(notification) + }, })) let isUserOnlineMock = jest.fn().mockReturnValue(false) diff --git a/backend/src/middleware/notifications/notificationsMiddleware.posts-in-groups.spec.ts b/backend/src/middleware/notifications/notificationsMiddleware.posts-in-groups.spec.ts index 95c90aceb..ecd0ebb9e 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.posts-in-groups.spec.ts +++ b/backend/src/middleware/notifications/notificationsMiddleware.posts-in-groups.spec.ts @@ -10,13 +10,16 @@ import { markAllAsRead } from '@graphql/queries/markAllAsRead' import { muteGroup } from '@graphql/queries/muteGroup' import { notifications } from '@graphql/queries/notifications' import { unmuteGroup } from '@graphql/queries/unmuteGroup' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' const sendNotificationMailMock: (notification) => void = jest.fn() jest.mock('@src/emails/sendEmail', () => ({ - sendNotificationMail: (notification) => sendNotificationMailMock(notification), + sendNotificationMail: (notification) => { + sendNotificationMailMock(notification) + }, })) let authenticatedUser: Context['user'] diff --git a/backend/src/middleware/notifications/notificationsMiddleware.spec.ts b/backend/src/middleware/notifications/notificationsMiddleware.spec.ts index 216cb5543..6e8d7a7ee 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.spec.ts +++ b/backend/src/middleware/notifications/notificationsMiddleware.spec.ts @@ -18,16 +18,21 @@ import { markAsRead } from '@graphql/queries/markAsRead' import { notifications } from '@graphql/queries/notifications' import { RemoveUserFromGroup } from '@graphql/queries/RemoveUserFromGroup' import { UpdatePost } from '@graphql/queries/UpdatePost' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' import type { DecodedUser } from '@src/jwt/decode' const sendChatMessageMailMock: (notification) => void = jest.fn() const sendNotificationMailMock: (notification) => void = jest.fn() jest.mock('@src/emails/sendEmail', () => ({ - sendChatMessageMail: (notification) => sendChatMessageMailMock(notification), - sendNotificationMail: (notification) => sendNotificationMailMock(notification), + sendChatMessageMail: (notification) => { + sendChatMessageMailMock(notification) + }, + sendNotificationMail: (notification) => { + sendNotificationMailMock(notification) + }, })) let isUserOnlineMock = jest.fn() diff --git a/backend/src/middleware/notifications/notificationsMiddleware.ts b/backend/src/middleware/notifications/notificationsMiddleware.ts index 7eb359927..24c6273c6 100644 --- a/backend/src/middleware/notifications/notificationsMiddleware.ts +++ b/backend/src/middleware/notifications/notificationsMiddleware.ts @@ -4,6 +4,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable security/detect-object-injection */ +/* eslint-disable @typescript-eslint/no-use-before-define */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ +/* eslint-disable @typescript-eslint/restrict-plus-operands */ import { NOTIFICATION_ADDED, ROOM_COUNT_UPDATED, @@ -16,6 +19,8 @@ import { sendNotificationMail, sendChatMessageMail } from '@src/emails/sendEmail import extractMentionedUsers from './mentions/extractMentionedUsers' +import type { IMiddlewareResolver } from 'graphql-middleware/dist/types' + const publishNotifications = async ( context, notificationsPromise, @@ -38,7 +43,7 @@ const publishNotifications = async ( return emailsSent } -const handleJoinGroup = async (resolve, root, args, context, resolveInfo) => { +const handleJoinGroup: IMiddlewareResolver = async (resolve, root, args, context, resolveInfo) => { const { groupId, userId } = args const user = await resolve(root, args, context, resolveInfo) if (user) { @@ -51,7 +56,7 @@ const handleJoinGroup = async (resolve, root, args, context, resolveInfo) => { return user } -const handleLeaveGroup = async (resolve, root, args, context, resolveInfo) => { +const handleLeaveGroup: IMiddlewareResolver = async (resolve, root, args, context, resolveInfo) => { const { groupId, userId } = args const user = await resolve(root, args, context, resolveInfo) if (user) { @@ -64,7 +69,13 @@ const handleLeaveGroup = async (resolve, root, args, context, resolveInfo) => { return user } -const handleChangeGroupMemberRole = async (resolve, root, args, context, resolveInfo) => { +const handleChangeGroupMemberRole: IMiddlewareResolver = async ( + resolve, + root, + args, + context, + resolveInfo, +) => { const { groupId, userId } = args const user = await resolve(root, args, context, resolveInfo) if (user) { @@ -77,7 +88,13 @@ const handleChangeGroupMemberRole = async (resolve, root, args, context, resolve return user } -const handleRemoveUserFromGroup = async (resolve, root, args, context, resolveInfo) => { +const handleRemoveUserFromGroup: IMiddlewareResolver = async ( + resolve, + root, + args, + context, + resolveInfo, +) => { const { groupId, userId } = args const user = await resolve(root, args, context, resolveInfo) if (user) { @@ -90,7 +107,13 @@ const handleRemoveUserFromGroup = async (resolve, root, args, context, resolveIn return user } -const handleContentDataOfPost = async (resolve, root, args, context, resolveInfo) => { +const handleContentDataOfPost: IMiddlewareResolver = async ( + resolve, + root, + args, + context, + resolveInfo, +) => { const { groupId } = args const idsOfUsers = extractMentionedUsers(args.content) const post = await resolve(root, args, context, resolveInfo) @@ -118,7 +141,13 @@ const handleContentDataOfPost = async (resolve, root, args, context, resolveInfo return post } -const handleContentDataOfComment = async (resolve, root, args, context, resolveInfo) => { +const handleContentDataOfComment: IMiddlewareResolver = async ( + resolve, + root, + args, + context, + resolveInfo, +) => { const { content } = args let idsOfMentionedUsers = extractMentionedUsers(content) const comment = await resolve(root, args, context, resolveInfo) @@ -419,7 +448,13 @@ const notifyUsersOfComment = async (label, commentId, reason, context) => { } } -const handleCreateMessage = async (resolve, root, args, context, resolveInfo) => { +const handleCreateMessage: IMiddlewareResolver = async ( + resolve, + root, + args, + context, + resolveInfo, +) => { // Execute resolver const message = await resolve(root, args, context, resolveInfo) diff --git a/backend/src/middleware/orderByMiddleware.ts b/backend/src/middleware/orderByMiddleware.ts index cf579e9d3..e78b9cafc 100644 --- a/backend/src/middleware/orderByMiddleware.ts +++ b/backend/src/middleware/orderByMiddleware.ts @@ -1,22 +1,26 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ import cloneDeep from 'lodash/cloneDeep' -const defaultOrderBy = (resolve, root, args, context, resolveInfo) => { +import type { IMiddlewareResolver } from 'graphql-middleware/dist/types' + +const defaultOrderBy: IMiddlewareResolver = (resolve, root, args, context, resolveInfo) => { const copy = cloneDeep(resolveInfo) const [fieldNode] = copy.fieldNodes if (fieldNode) { + // @ts-expect-error cloneDeep returns mutable copy, but TS sees readonly type const orderByArg = fieldNode.arguments.find((arg) => arg.name.value === 'orderBy') if (!orderByArg) { + // @ts-expect-error cloneDeep returns mutable copy, but TS sees readonly type fieldNode.arguments.push({ kind: 'Argument', name: { kind: 'Name', value: 'orderBy' }, value: { kind: 'EnumValue', value: 'sortDate_desc' }, }) } else if (args.orderBy === undefined) { + // @ts-expect-error cloneDeep returns mutable copy, but TS sees readonly type orderByArg.value = { kind: 'EnumValue', value: 'sortDate_desc' } } } diff --git a/backend/src/middleware/permissionsMiddleware.spec.ts b/backend/src/middleware/permissionsMiddleware.spec.ts index c49a1dd21..0eb9754e2 100644 --- a/backend/src/middleware/permissionsMiddleware.spec.ts +++ b/backend/src/middleware/permissionsMiddleware.spec.ts @@ -4,8 +4,9 @@ import Factory, { cleanDatabase } from '@db/factories' import { Signup } from '@graphql/queries/Signup' import { User, UserEmail } from '@graphql/queries/User' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let variables diff --git a/backend/src/middleware/permissionsMiddleware.ts b/backend/src/middleware/permissionsMiddleware.ts index aea2c46f0..3cbcdd0b5 100644 --- a/backend/src/middleware/permissionsMiddleware.ts +++ b/backend/src/middleware/permissionsMiddleware.ts @@ -4,12 +4,15 @@ /* eslint-disable @typescript-eslint/require-await */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-unnecessary-type-conversion */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ import { rule, shield, deny, allow, or, and } from 'graphql-shield' import CONFIG from '@config/index' -import SocialMedia from '@db/models/SocialMedia' import { getNeode } from '@db/neo4j' import { validateInviteCode } from '@graphql/resolvers/inviteCodes' + +import type SocialMedia from '@db/models/SocialMedia' import type { Context } from '@src/context' const debug = !!CONFIG.DEBUG @@ -28,7 +31,7 @@ const isModerator = rule()(async (_parent, _args, { user }: Context, _info) => { }) const isAdmin = rule()(async (_parent, _args, { user }: Context, _info) => { - return !!(user && user.role === 'admin') + return !!(user?.role === 'admin') }) const onlyYourself = rule({ diff --git a/backend/src/middleware/sentryMiddleware.ts b/backend/src/middleware/sentryMiddleware.ts index 743ec32df..f8e52eca5 100644 --- a/backend/src/middleware/sentryMiddleware.ts +++ b/backend/src/middleware/sentryMiddleware.ts @@ -6,7 +6,7 @@ import { sentry } from 'graphql-middleware-sentry' import CONFIG from '@config/index' -// eslint-disable-next-line import/no-mutable-exports, @typescript-eslint/no-explicit-any +// eslint-disable-next-line import-x/no-mutable-exports, @typescript-eslint/no-explicit-any let sentryMiddleware: any = (resolve, root, args, context, resolveInfo) => resolve(root, args, context, resolveInfo) diff --git a/backend/src/middleware/sluggifyMiddleware.ts b/backend/src/middleware/sluggifyMiddleware.ts index b940f4851..686629be0 100644 --- a/backend/src/middleware/sluggifyMiddleware.ts +++ b/backend/src/middleware/sluggifyMiddleware.ts @@ -1,10 +1,10 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-return */ -import type { Context } from '@src/context' - import uniqueSlug from './slugify/uniqueSlug' +import type { Context } from '@src/context' + export const isUniqueFor = (context: Context, type: string) => { return async (slug: string) => { const session = context.driver.session() diff --git a/backend/src/middleware/slugify/uniqueSlug.ts b/backend/src/middleware/slugify/uniqueSlug.ts index 7880ece5c..ace6d49b7 100644 --- a/backend/src/middleware/slugify/uniqueSlug.ts +++ b/backend/src/middleware/slugify/uniqueSlug.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/no-shadow */ +/* eslint-disable @typescript-eslint/restrict-template-expressions */ import slugify from 'slugify' slugify.extend({ Ä: 'AE', ä: 'ae', Ö: 'OE', ö: 'oe', Ü: 'UE', ü: 'ue', ß: 'ss' }) diff --git a/backend/src/middleware/slugifyMiddleware.spec.ts b/backend/src/middleware/slugifyMiddleware.spec.ts index f2c35d696..4be9fb1a6 100644 --- a/backend/src/middleware/slugifyMiddleware.spec.ts +++ b/backend/src/middleware/slugifyMiddleware.spec.ts @@ -7,8 +7,9 @@ import { CreateGroup } from '@graphql/queries/CreateGroup' import { CreatePost } from '@graphql/queries/CreatePost' import { SignupVerification } from '@graphql/queries/SignupVerification' import { UpdateGroup } from '@graphql/queries/UpdateGroup' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' let variables diff --git a/backend/src/middleware/softDelete/softDeleteMiddleware.spec.ts b/backend/src/middleware/softDelete/softDeleteMiddleware.spec.ts index f080040b2..ef87a5cc6 100644 --- a/backend/src/middleware/softDelete/softDeleteMiddleware.spec.ts +++ b/backend/src/middleware/softDelete/softDeleteMiddleware.spec.ts @@ -6,8 +6,9 @@ import Factory, { cleanDatabase } from '@db/factories' import { Post } from '@graphql/queries/Post' import { User } from '@graphql/queries/User' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' + +import type { ApolloTestSetup } from '@root/test/helpers' import type { Context } from '@src/context' const categoryIds = ['cat9'] @@ -223,10 +224,15 @@ describe('softDeleteMiddleware', () => { describe('User', () => { beforeEach(beforeUser) - it('displays name', () => expect(subject.name).toEqual('Offensive Name')) - it('displays slug', () => expect(subject.slug).toEqual('offensive-name')) - it('displays about', () => - expect(subject.about).toEqual('This self description is very offensive')) + it('displays name', () => { + expect(subject.name).toEqual('Offensive Name') + }) + it('displays slug', () => { + expect(subject.slug).toEqual('offensive-name') + }) + it('displays about', () => { + expect(subject.about).toEqual('This self description is very offensive') + }) it('displays avatar', async () => { expect(subject.avatar).toEqual({ url: expect.stringMatching('http://localhost/some/offensive/avatar.jpg'), @@ -237,24 +243,34 @@ describe('softDeleteMiddleware', () => { describe('Post', () => { beforeEach(beforePost) - it('displays title', () => expect(subject.title).toEqual('Disabled post')) - it('displays slug', () => expect(subject.slug).toEqual('disabled-post')) - it('displays content', () => - expect(subject.content).toEqual('This is an offensive post content')) - it('displays contentExcerpt', () => - expect(subject.contentExcerpt).toEqual('This is an offensive post content')) - it('displays image', () => + it('displays title', () => { + expect(subject.title).toEqual('Disabled post') + }) + it('displays slug', () => { + expect(subject.slug).toEqual('disabled-post') + }) + it('displays content', () => { + expect(subject.content).toEqual('This is an offensive post content') + }) + it('displays contentExcerpt', () => { + expect(subject.contentExcerpt).toEqual('This is an offensive post content') + }) + it('displays image', () => { expect(subject.image).toEqual({ url: expect.stringMatching('http://localhost/some/offensive/image.jpg'), - })) + }) + }) }) describe('Comment', () => { beforeEach(beforeComment) - it('displays content', () => expect(subject.content).toEqual('Disabled comment')) - it('displays contentExcerpt', () => - expect(subject.contentExcerpt).toEqual('Disabled comment')) + it('displays content', () => { + expect(subject.content).toEqual('Disabled comment') + }) + it('displays contentExcerpt', () => { + expect(subject.contentExcerpt).toEqual('Disabled comment') + }) }) }) @@ -266,27 +282,49 @@ describe('softDeleteMiddleware', () => { describe('User', () => { beforeEach(beforeUser) - it('obfuscates name', () => expect(subject.name).toEqual('UNAVAILABLE')) - it('obfuscates slug', () => expect(subject.slug).toEqual('UNAVAILABLE')) - it('obfuscates about', () => expect(subject.about).toEqual('UNAVAILABLE')) - it('obfuscates avatar', () => expect(subject.avatar).toEqual(null)) + it('obfuscates name', () => { + expect(subject.name).toEqual('UNAVAILABLE') + }) + it('obfuscates slug', () => { + expect(subject.slug).toEqual('UNAVAILABLE') + }) + it('obfuscates about', () => { + expect(subject.about).toEqual('UNAVAILABLE') + }) + it('obfuscates avatar', () => { + expect(subject.avatar).toEqual(null) + }) }) describe('Post', () => { beforeEach(beforePost) - it('obfuscates title', () => expect(subject.title).toEqual('UNAVAILABLE')) - it('obfuscates slug', () => expect(subject.slug).toEqual('UNAVAILABLE')) - it('obfuscates content', () => expect(subject.content).toEqual('UNAVAILABLE')) - it('obfuscates contentExcerpt', () => expect(subject.contentExcerpt).toEqual('UNAVAILABLE')) - it('obfuscates image', () => expect(subject.image).toEqual(null)) + it('obfuscates title', () => { + expect(subject.title).toEqual('UNAVAILABLE') + }) + it('obfuscates slug', () => { + expect(subject.slug).toEqual('UNAVAILABLE') + }) + it('obfuscates content', () => { + expect(subject.content).toEqual('UNAVAILABLE') + }) + it('obfuscates contentExcerpt', () => { + expect(subject.contentExcerpt).toEqual('UNAVAILABLE') + }) + it('obfuscates image', () => { + expect(subject.image).toEqual(null) + }) }) describe('Comment', () => { beforeEach(beforeComment) - it('obfuscates content', () => expect(subject.content).toEqual('UNAVAILABLE')) - it('obfuscates contentExcerpt', () => expect(subject.contentExcerpt).toEqual('UNAVAILABLE')) + it('obfuscates content', () => { + expect(subject.content).toEqual('UNAVAILABLE') + }) + it('obfuscates contentExcerpt', () => { + expect(subject.contentExcerpt).toEqual('UNAVAILABLE') + }) }) }) }) diff --git a/backend/src/middleware/softDelete/softDeleteMiddleware.ts b/backend/src/middleware/softDelete/softDeleteMiddleware.ts index 4120733ff..6f277e7d6 100644 --- a/backend/src/middleware/softDelete/softDeleteMiddleware.ts +++ b/backend/src/middleware/softDelete/softDeleteMiddleware.ts @@ -1,13 +1,14 @@ /* eslint-disable @typescript-eslint/require-await */ -/* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-return */ +import type { IMiddlewareResolver } from 'graphql-middleware/dist/types' + const isModerator = ({ user }) => { return user && (user.role === 'moderator' || user.role === 'admin') } -const setDefaultFilters = (resolve, root, args, context, info) => { +const setDefaultFilters: IMiddlewareResolver = async (resolve, root, args, context, info) => { args.deleted = false if (!isModerator(context)) { @@ -16,7 +17,7 @@ const setDefaultFilters = (resolve, root, args, context, info) => { return resolve(root, args, context, info) } -const obfuscate = async (resolve, root, args, context, info) => { +const obfuscate: IMiddlewareResolver = async (resolve, root, args, context, info) => { if (root.deleted || (!isModerator(context) && root.disabled)) { root.content = 'UNAVAILABLE' root.contentExcerpt = 'UNAVAILABLE' @@ -30,6 +31,15 @@ const obfuscate = async (resolve, root, args, context, info) => { return resolve(root, args, context, info) } +const mutationDefaults: IMiddlewareResolver = async (resolve, root, args, context, info) => { + args.disabled = false + // TODO: remove as soon as our factories don't need this anymore + if (typeof args.deleted !== 'boolean') { + args.deleted = false + } + return resolve(root, args, context, info) +} + export default { Query: { Post: setDefaultFilters, @@ -37,14 +47,7 @@ export default { User: setDefaultFilters, profilePagePosts: setDefaultFilters, }, - Mutation: async (resolve, root, args, context, info) => { - args.disabled = false - // TODO: remove as soon as our factories don't need this anymore - if (typeof args.deleted !== 'boolean') { - args.deleted = false - } - return resolve(root, args, context, info) - }, + Mutation: mutationDefaults, Post: obfuscate, User: obfuscate, Comment: obfuscate, diff --git a/backend/src/middleware/userInteractions.ts b/backend/src/middleware/userInteractions.ts index 469abf318..3433d8adb 100644 --- a/backend/src/middleware/userInteractions.ts +++ b/backend/src/middleware/userInteractions.ts @@ -3,6 +3,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ +import type { IMiddlewareResolver } from 'graphql-middleware/dist/types' + const createRelatedCypher = (relation) => ` MATCH (user:User { id: $currentUser}) MATCH (post:Post { id: $postId}) @@ -35,7 +37,7 @@ const setPostCounter = async (postId, relation, context) => { } } -const userClickedPost = async (resolve, root, args, context, info) => { +const userClickedPost: IMiddlewareResolver = async (resolve, root, args, context, info) => { if (args.id && context.user) { await setPostCounter(args.id, 'CLICKED', context) } diff --git a/backend/src/middleware/validation/validationMiddleware.spec.ts b/backend/src/middleware/validation/validationMiddleware.spec.ts index d30358f9d..a5271af41 100644 --- a/backend/src/middleware/validation/validationMiddleware.spec.ts +++ b/backend/src/middleware/validation/validationMiddleware.spec.ts @@ -249,7 +249,7 @@ describe('validateReview', () => { }) }) - describe('moderate a resource that is not a (Comment|Post|User) ', () => { + describe('moderate a resource that is not a (Comment|Post|User)', () => { beforeEach(async () => { await Promise.all([Factory.build('tag', { id: 'tag-id' })]) }) diff --git a/backend/src/middleware/validation/validationMiddleware.ts b/backend/src/middleware/validation/validationMiddleware.ts index 80da928b7..c70236ae1 100644 --- a/backend/src/middleware/validation/validationMiddleware.ts +++ b/backend/src/middleware/validation/validationMiddleware.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/require-await */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ /* eslint-disable @typescript-eslint/no-unsafe-return */ @@ -7,10 +6,12 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { UserInputError } from 'apollo-server' +import type { IMiddlewareResolver } from 'graphql-middleware/dist/types' + const COMMENT_MIN_LENGTH = 1 const NO_POST_ERR_MESSAGE = 'Comment cannot be created without a post!' const USERNAME_MIN_LENGTH = 3 -const validateCreateComment = async (resolve, root, args, context, info) => { +const validateCreateComment: IMiddlewareResolver = async (resolve, root, args, context, info) => { const content = args.content.replace(/<(?:.|\n)*?>/gm, '').trim() const { postId } = args @@ -42,7 +43,7 @@ const validateCreateComment = async (resolve, root, args, context, info) => { } } -const validateUpdateComment = async (resolve, root, args, context, info) => { +const validateUpdateComment: IMiddlewareResolver = async (resolve, root, args, context, info) => { const content = args.content.replace(/<(?:.|\n)*?>/gm, '').trim() if (!args.content || content.length < COMMENT_MIN_LENGTH) { throw new UserInputError(`Comment must be at least ${COMMENT_MIN_LENGTH} character long!`) @@ -51,14 +52,14 @@ const validateUpdateComment = async (resolve, root, args, context, info) => { return resolve(root, args, context, info) } -const validateReport = async (resolve, root, args, context, info) => { +const validateReport: IMiddlewareResolver = async (resolve, root, args, context, info) => { const { resourceId } = args const { user } = context if (resourceId === user.id) throw new Error('You cannot report yourself!') return resolve(root, args, context, info) } -const validateReview = async (resolve, root, args, context, info) => { +const validateReview: IMiddlewareResolver = async (resolve, root, args, context, info) => { const { resourceId } = args let existingReportedResource const { user, driver } = context @@ -106,7 +107,7 @@ const validateReview = async (resolve, root, args, context, info) => { return resolve(root, args, context, info) } -export const validateNotifyUsers = async (label, reason) => { +export const validateNotifyUsers = async (label: string, reason: string): Promise => { const reasonsAllowed = [ 'mentioned_in_post', 'mentioned_in_comment', @@ -123,7 +124,7 @@ export const validateNotifyUsers = async (label, reason) => { } } -const validateUpdateUser = async (resolve, root, params, context, info) => { +const validateUpdateUser: IMiddlewareResolver = async (resolve, root, params, context, info) => { const { name } = params if (typeof name === 'string' && name.trim().length < USERNAME_MIN_LENGTH) throw new UserInputError(`Username must be at least ${USERNAME_MIN_LENGTH} character long!`) diff --git a/backend/src/middleware/xssMiddleware.ts b/backend/src/middleware/xssMiddleware.ts index e8beb5463..e7863efb2 100644 --- a/backend/src/middleware/xssMiddleware.ts +++ b/backend/src/middleware/xssMiddleware.ts @@ -8,6 +8,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ import { cleanHtml } from './helpers/cleanHtml' +import type { IMiddlewareResolver } from 'graphql-middleware/dist/types' + /** * iterate through all fields and replace it with the callback result * @property data Array @@ -45,13 +47,17 @@ const fields = [ { field: 'descriptionExcerpt' }, ] -export default { - Mutation: async (resolve, root, args, context, info) => { - args = walkRecursive(args, fields, info.fieldName, cleanHtml) - return resolve(root, args, context, info) - }, - Query: async (resolve, root, args, context, info) => { - const result = await resolve(root, args, context, info) - return walkRecursive(result, fields, info.fieldName, cleanHtml) - }, +const mutationXss: IMiddlewareResolver = async (resolve, root, args, context, info) => { + args = walkRecursive(args, fields, info.fieldName, cleanHtml) + return resolve(root, args, context, info) +} + +const queryXss: IMiddlewareResolver = async (resolve, root, args, context, info) => { + const result = await resolve(root, args, context, info) + return walkRecursive(result, fields, info.fieldName, cleanHtml) +} + +export default { + Mutation: mutationXss, + Query: queryXss, } diff --git a/backend/src/plugins/apolloLogger.spec.ts b/backend/src/plugins/apolloLogger.spec.ts index 7b1f2a91a..1f40820dd 100644 --- a/backend/src/plugins/apolloLogger.spec.ts +++ b/backend/src/plugins/apolloLogger.spec.ts @@ -1,16 +1,16 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ -import { ApolloServer } from 'apollo-server-express' - import Factory, { cleanDatabase } from '@db/factories' -import type { ApolloTestSetup } from '@root/test/helpers' import { createApolloTestSetup } from '@root/test/helpers' -import type { Context } from '@src/context' import { login } from '@src/graphql/queries/login' import ocelotLogger from '@src/logger' import { loggerPlugin } from '@src/plugins/apolloLogger' +import type { ApolloTestSetup } from '@root/test/helpers' +import type { Context } from '@src/context' +import type { ApolloServer } from 'apollo-server-express' + let server: ApolloServer const authenticatedUser: Context['user'] = null diff --git a/backend/src/plugins/apolloLogger.ts b/backend/src/plugins/apolloLogger.ts index cfd79b85a..e04562b5d 100644 --- a/backend/src/plugins/apolloLogger.ts +++ b/backend/src/plugins/apolloLogger.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +/* eslint-disable @typescript-eslint/no-shadow */ import { randomBytes } from 'node:crypto' diff --git a/backend/src/server.ts b/backend/src/server.ts index f1bdb60c3..0b9e63647 100644 --- a/backend/src/server.ts +++ b/backend/src/server.ts @@ -3,7 +3,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable import/no-named-as-default-member */ +/* eslint-disable import-x/no-named-as-default-member */ +/* eslint-disable import-x/no-deprecated */ +/* eslint-disable @typescript-eslint/prefer-nullish-coalescing */ import http from 'node:http' import { ApolloServer } from 'apollo-server-express' @@ -26,7 +28,7 @@ const createServer = (options?: ApolloServerExpressConfig) => { schema: middleware(schema), subscriptions: { keepAlive: 10000, - onConnect: (connectionParams) => + onConnect: async (connectionParams) => getContext()(connectionParams as { headers: { authorization?: string } }), onDisconnect: () => { logger.debug('WebSocket client disconnected') diff --git a/backend/src/uploads/s3Service.spec.ts b/backend/src/uploads/s3Service.spec.ts index cf2d3d54b..b684e6b44 100644 --- a/backend/src/uploads/s3Service.spec.ts +++ b/backend/src/uploads/s3Service.spec.ts @@ -1,9 +1,9 @@ +/* eslint-disable promise/prefer-await-to-callbacks */ import { Upload } from '@aws-sdk/lib-storage' -import type { S3Config } from '@config/index' - import { s3Service } from './s3Service' +import type { S3Config } from '@config/index' import type { FileUpload } from 'graphql-upload' jest.mock('@aws-sdk/client-s3', () => { @@ -27,7 +27,9 @@ const uploadMock = Upload as unknown as jest.Mock // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const createReadStream: FileUpload['createReadStream'] = (() => ({ pipe: () => ({ - on: (_: unknown, callback: () => void) => callback(), // eslint-disable-line promise/prefer-await-to-callbacks + on: (_: unknown, callback: () => void) => { + callback() + }, }), })) as unknown as FileUpload['createReadStream'] const input = { @@ -52,7 +54,8 @@ describe('s3Service', () => { describe('if the S3 service returns a valid URL as a `Location`', () => { beforeEach(() => { uploadMock.mockImplementation(({ params: { Key } }: { params: { Key: string } }) => ({ - done: () => Promise.resolve({ Location: `http://your-objectstorage.com/bucket/${Key}` }), + done: async () => + Promise.resolve({ Location: `http://your-objectstorage.com/bucket/${Key}` }), })) }) @@ -67,7 +70,7 @@ describe('s3Service', () => { describe('but if for some reason, the S3 service returns a `Location` wich is not a valid URL and misses the protocol part', () => { beforeEach(() => { uploadMock.mockImplementation(({ params: { Key } }: { params: { Key: string } }) => ({ - done: () => Promise.resolve({ Location: `your-objectstorage.com/bucket/${Key}` }), + done: async () => Promise.resolve({ Location: `your-objectstorage.com/bucket/${Key}` }), })) }) diff --git a/backend/src/uploads/s3Service.ts b/backend/src/uploads/s3Service.ts index cc7fa3592..b9927edc8 100644 --- a/backend/src/uploads/s3Service.ts +++ b/backend/src/uploads/s3Service.ts @@ -1,10 +1,10 @@ +/* eslint-disable @typescript-eslint/no-shadow */ import { S3Client, DeleteObjectCommand, ObjectCannedACL } from '@aws-sdk/client-s3' import { Upload } from '@aws-sdk/lib-storage' +import type { FileUploadCallback, FileDeleteCallback } from './types' import type { S3Config } from '@config/index' -import { FileUploadCallback, FileDeleteCallback } from './types' - let cachedClient: S3Client | null = null let cachedConfig: S3Config | null = null diff --git a/backend/test/helpers.ts b/backend/test/helpers.ts index d359c83ab..d9d140cc2 100644 --- a/backend/test/helpers.ts +++ b/backend/test/helpers.ts @@ -1,11 +1,12 @@ +/* eslint-disable n/no-unpublished-import */ import { createTestClient } from 'apollo-server-testing' import databaseContext from '@context/database' -import type CONFIG from '@src/config' -import type { Context } from '@src/context' import { getContext } from '@src/context' import createServer from '@src/server' +import type CONFIG from '@src/config' +import type { Context } from '@src/context' import type { ApolloServerExpressConfig } from 'apollo-server-express' export const TEST_CONFIG = { diff --git a/backend/test/setup.ts b/backend/test/setup.ts index d1d32be5b..bc2487c64 100644 --- a/backend/test/setup.ts +++ b/backend/test/setup.ts @@ -1,2 +1,3 @@ +/* eslint-disable no-undef */ // Metascraper takes longer nowadays, double time jest.setTimeout(10000) diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 7da05a2f0..dcf6defeb 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -117,5 +117,6 @@ /* Completeness */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + }, + "exclude": ["eslint.config.ts", "prettier.config.mjs"] } diff --git a/backend/yarn.lock b/backend/yarn.lock index 22c682b12..11592ffcd 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -59,13 +59,6 @@ http-errors "^1.7.3" object-path "^0.11.4" -"@ardatan/sync-fetch@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@ardatan/sync-fetch/-/sync-fetch-0.0.1.tgz#3385d3feedceb60a896518a1db857ec1e945348f" - integrity sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA== - dependencies: - node-fetch "^2.6.1" - "@asamuzakjp/css-color@^4.1.1": version "4.1.1" resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-4.1.1.tgz#e5c662f488367dc74194609179fe6621f2586114" @@ -716,7 +709,7 @@ js-tokens "^4.0.0" picocolors "^1.1.1" -"@babel/code-frame@^7.18.6", "@babel/code-frame@^7.27.1": +"@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== @@ -725,6 +718,15 @@ js-tokens "^4.0.0" picocolors "^1.1.1" +"@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + "@babel/compat-data@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.28.6.tgz#103f466803fa0f059e82ccac271475470570d74c" @@ -751,6 +753,27 @@ json5 "^2.2.3" semver "^6.3.1" +"@babel/core@^7.26.10": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.29.0.tgz#5286ad785df7f79d656e88ce86e650d16ca5f322" + integrity sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-compilation-targets" "^7.28.6" + "@babel/helper-module-transforms" "^7.28.6" + "@babel/helpers" "^7.28.6" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/traverse" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/remapping" "^2.3.5" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + "@babel/core@^7.27.4": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.28.6.tgz#531bf883a1126e53501ba46eb3bb414047af507f" @@ -783,15 +806,15 @@ "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" -"@babel/generator@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230" - integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w== +"@babel/generator@^7.29.0": + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== dependencies: - "@babel/parser" "^7.27.1" - "@babel/types" "^7.27.1" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" + "@babel/parser" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" jsesc "^3.0.2" "@babel/helper-compilation-targets@^7.26.5", "@babel/helper-compilation-targets@^7.28.6": @@ -832,11 +855,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== -"@babel/helper-plugin-utils@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== - "@babel/helper-plugin-utils@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz#6f13ea251b68c8532e985fd532f28741a8af9ac8" @@ -887,13 +905,6 @@ dependencies: "@babel/types" "^7.27.0" -"@babel/parser@^7.16.8", "@babel/parser@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.1.tgz#c55d5bed74449d1223701f1869b9ee345cc94cc9" - integrity sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ== - dependencies: - "@babel/types" "^7.27.1" - "@babel/parser@^7.26.10", "@babel/parser@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.6.tgz#f01a8885b7fa1e56dd8a155130226cd698ef13fd" @@ -901,6 +912,13 @@ dependencies: "@babel/types" "^7.28.6" +"@babel/parser@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.0.tgz#669ef345add7d057e92b7ed15f0bac07611831b6" + integrity sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww== + dependencies: + "@babel/types" "^7.29.0" + "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -929,12 +947,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-import-assertions@^7.20.0": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" - integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz#ae9bc1923a6ba527b70104dd2191b0cd872c8507" + integrity sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.28.6" "@babel/plugin-syntax-import-attributes@^7.24.7": version "7.28.6" @@ -1055,28 +1073,6 @@ "@babel/parser" "^7.28.6" "@babel/types" "^7.28.6" -"@babel/template@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.1.tgz#b9e4f55c17a92312774dfbdde1b3c01c547bbae2" - integrity sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/traverse@^7.16.8": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291" - integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.27.1" - "@babel/parser" "^7.27.1" - "@babel/template" "^7.27.1" - "@babel/types" "^7.27.1" - debug "^4.3.1" - globals "^11.1.0" - "@babel/traverse@^7.26.10", "@babel/traverse@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.28.6.tgz#871ddc79a80599a5030c53b1cc48cbe3a5583c2e" @@ -1090,6 +1086,19 @@ "@babel/types" "^7.28.6" debug "^4.3.1" +"@babel/traverse@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + debug "^4.3.1" + "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.0", "@babel/types@^7.6.1", "@babel/types@^7.9.6": version "7.27.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" @@ -1098,14 +1107,6 @@ "@babel/helper-string-parser" "^7.25.9" "@babel/helper-validator-identifier" "^7.25.9" -"@babel/types@^7.16.8", "@babel/types@^7.27.1": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560" - integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q== - dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/types@^7.26.10", "@babel/types@^7.27.3", "@babel/types@^7.28.6": version "7.28.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.6.tgz#c3e9377f1b155005bcc4c46020e7e394e13089df" @@ -1122,6 +1123,14 @@ "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" +"@babel/types@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1189,6 +1198,32 @@ dependencies: tslib "^2.4.0" +"@envelop/core@^5.2.3", "@envelop/core@^5.3.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@envelop/core/-/core-5.5.1.tgz#ca30c927b3a7d7f118d36111e17b355eedae9ff4" + integrity sha512-3DQg8sFskDo386TkL5j12jyRAdip/8yzK3x7YGbZBgobZ4aKXrvDU0GppU0SnmrpQnNaiTUsxBs9LKkwQ/eyvw== + dependencies: + "@envelop/instrumentation" "^1.0.0" + "@envelop/types" "^5.2.1" + "@whatwg-node/promise-helpers" "^1.2.4" + tslib "^2.5.0" + +"@envelop/instrumentation@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@envelop/instrumentation/-/instrumentation-1.0.0.tgz#43268392e065d8ba975cacbdf4fc297dfe3e11e5" + integrity sha512-cxgkB66RQB95H3X27jlnxCRNTmPuSTgmBAq6/4n2Dtv4hsk4yz8FadA1ggmd0uZzvKqWD6CR+WFgTjhDqg7eyw== + dependencies: + "@whatwg-node/promise-helpers" "^1.2.1" + tslib "^2.5.0" + +"@envelop/types@^5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@envelop/types/-/types-5.2.1.tgz#6bc9713f2aea56d7de3ea39e8bb70035c0475b36" + integrity sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg== + dependencies: + "@whatwg-node/promise-helpers" "^1.0.0" + tslib "^2.5.0" + "@epic-web/invariant@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@epic-web/invariant/-/invariant-1.0.0.tgz#1073e5dee6dd540410784990eb73e4acd25c9813" @@ -1202,37 +1237,105 @@ escape-string-regexp "^4.0.0" ignore "^7.0.5" -"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0", "@eslint-community/eslint-utils@^4.5.0", "@eslint-community/eslint-utils@^4.5.1", "@eslint-community/eslint-utils@^4.9.1": +"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.4.0", "@eslint-community/eslint-utils@^4.5.0", "@eslint-community/eslint-utils@^4.5.1", "@eslint-community/eslint-utils@^4.8.0", "@eslint-community/eslint-utils@^4.9.1": version "4.9.1" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.6.1": +"@eslint-community/regexpp@^4.11.0", "@eslint-community/regexpp@^4.12.1", "@eslint-community/regexpp@^4.12.2": version "4.12.2" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== + dependencies: + "@eslint/object-schema" "^2.1.7" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" + +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/core@^1.0.1", "@eslint/core@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-1.1.0.tgz#51f5cd970e216fbdae6721ac84491f57f965836d" + integrity sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/css-tree@^3.6.6": + version "3.6.9" + resolved "https://registry.yarnpkg.com/@eslint/css-tree/-/css-tree-3.6.9.tgz#d52d4c823893644f2e2910a035c9a77953d529f4" + integrity sha512-3D5/OHibNEGk+wKwNwMbz63NMf367EoR4mVNNpxddCHKEb2Nez7z62J2U6YjtErSsZDoY0CsccmoUpdEbkogNA== + dependencies: + mdn-data "2.23.0" + source-map-js "^1.0.1" + +"@eslint/css@^0.14.1": + version "0.14.1" + resolved "https://registry.yarnpkg.com/@eslint/css/-/css-0.14.1.tgz#ca80b9c21b5de901e173ba8180f9cd8879315604" + integrity sha512-NXiteSacmpaXqgyIW3+GcNzexXyfC0kd+gig6WTjD4A74kBGJeNx1tV0Hxa0v7x0+mnIyKfGPhGNs1uhRFdh+w== + dependencies: + "@eslint/core" "^0.17.0" + "@eslint/css-tree" "^3.6.6" + "@eslint/plugin-kit" "^0.4.1" + +"@eslint/eslintrc@^3.3.1": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.3.tgz#26393a0806501b5e2b6a43aa588a4d8df67880ac" + integrity sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ== 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" + js-yaml "^4.1.1" minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.1": - version "8.57.1" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" - integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== +"@eslint/js@9.39.3", "@eslint/js@^9.39.3": + version "9.39.3" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.3.tgz#c6168736c7e0c43ead49654ed06a4bcb3833363d" + integrity sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw== + +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== + +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== + dependencies: + "@eslint/core" "^0.17.0" + levn "^0.4.1" + +"@eslint/plugin-kit@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.6.0.tgz#e0cb12ec66719cb2211ad36499fb516f2a63899d" + integrity sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ== + dependencies: + "@eslint/core" "^1.1.0" + levn "^0.4.1" "@exodus/bytes@^1.6.0": version "1.10.0" @@ -1244,22 +1347,29 @@ resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-9.9.0.tgz#3ad015fbbaaae7af3149555e0f22b4b30134c69d" integrity sha512-OEl393iCOoo/z8bMezRlJu+GlRGlsKbUAN7jKB6LhnKoqKve5DXRpalbItIIcwnCjs1k/FOPjFzcA6Qn+H+YbA== -"@graphql-eslint/eslint-plugin@^3.20.1": - version "3.20.1" - resolved "https://registry.yarnpkg.com/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.20.1.tgz#5ae22ee54a5624b852a7cb5f52a103da6384c643" - integrity sha512-RbwVlz1gcYG62sECR1u0XqMh8w5e5XMCCZoMvPQ3nJzEBCTfXLGX727GBoRmSvY1x4gJmqNZ1lsOX7lZY14RIw== +"@fastify/busboy@^3.1.1": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-3.2.0.tgz#13ed8212f3b9ba697611529d15347f8528058cea" + integrity sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA== + +"@graphql-eslint/eslint-plugin@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@graphql-eslint/eslint-plugin/-/eslint-plugin-4.4.0.tgz#3c1d8f92c9b1466097d3311fda7c84cb0d7a6249" + integrity sha512-dhW6fpk3Souuaphhc38uMAGCcgKMgtCJWFygIKODw/Kns43wiQqRPVay0aNFY1JBx3aevn4KPT/BCOdm6HNncA== dependencies: - "@babel/code-frame" "^7.18.6" - "@graphql-tools/code-file-loader" "^7.3.6" - "@graphql-tools/graphql-tag-pluck" "^7.3.6" - "@graphql-tools/utils" "^9.0.0" - chalk "^4.1.2" + "@graphql-tools/code-file-loader" "^8.0.0" + "@graphql-tools/graphql-tag-pluck" "^8.3.4" + "@graphql-tools/utils" "^10.0.0" debug "^4.3.4" fast-glob "^3.2.12" - graphql-config "^4.4.0" + graphql-config "^5.1.3" graphql-depth-limit "^1.1.0" lodash.lowercase "^4.3.0" - tslib "^2.4.1" + +"@graphql-hive/signal@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@graphql-hive/signal/-/signal-1.0.0.tgz#6e2193660a47c925abadbe72293dfc9430e24f8f" + integrity sha512-RiwLMc89lTjvyLEivZ/qxAC5nBHoS2CtsWFSOsN35sxG9zoo5Z+JsFHM8MlvmO9yt+MJNIyC5MLE1rsbOphlag== "@graphql-toolkit/common@0.10.4": version "0.10.4" @@ -1299,27 +1409,42 @@ tslib "^2.4.0" value-or-promise "1.0.11" -"@graphql-tools/batch-execute@^8.5.22": - version "8.5.22" - resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.22.tgz#a742aa9d138fe794e786d8fb6429665dc7df5455" - integrity sha512-hcV1JaY6NJQFQEwCKrYhpfLK8frSXDbtNMoTur98u10Cmecy1zrqNKSqhEyGetpgHxaJRqszGzKeI3RuroDN6A== +"@graphql-tools/batch-execute@^9.0.19": + version "9.0.19" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-9.0.19.tgz#b724f3542e2cee8a3a71262a711469afa39cae88" + integrity sha512-VGamgY4PLzSx48IHPoblRw0oTaBa7S26RpZXt0Y4NN90ytoE0LutlpB2484RbkfcTjv9wa64QD474+YP1kEgGA== dependencies: - "@graphql-tools/utils" "^9.2.1" - dataloader "^2.2.2" - tslib "^2.4.0" - value-or-promise "^1.0.12" + "@graphql-tools/utils" "^10.9.1" + "@whatwg-node/promise-helpers" "^1.3.0" + dataloader "^2.2.3" + tslib "^2.8.1" -"@graphql-tools/code-file-loader@^7.3.6": - version "7.3.23" - resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-7.3.23.tgz#33793f9a1f8e74981f8ae6ec4ab7061f9713db15" - integrity sha512-8Wt1rTtyTEs0p47uzsPJ1vAtfAx0jmxPifiNdmo9EOCuUPyQGEbMaik/YkqZ7QUFIEYEQu+Vgfo8tElwOPtx5Q== +"@graphql-tools/code-file-loader@^8.0.0": + version "8.1.28" + resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-8.1.28.tgz#c90655d86210d7ad8489f452867754b49c89f57a" + integrity sha512-BL3Ft/PFlXDE5nNuqA36hYci7Cx+8bDrPDc8X3VSpZy9iKFBY+oQ+IwqnEHCkt8OSp2n2V0gqTg4u3fcQP1Kwg== dependencies: - "@graphql-tools/graphql-tag-pluck" "7.5.2" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/graphql-tag-pluck" "8.3.27" + "@graphql-tools/utils" "^11.0.0" globby "^11.0.3" tslib "^2.4.0" unixify "^1.0.0" +"@graphql-tools/delegate@^10.2.23": + version "10.2.23" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-10.2.23.tgz#fcd42e7aa70149269ad644e03098c8d28810bd87" + integrity sha512-xrPtl7f1LxS+B6o+W7ueuQh67CwRkfl+UKJncaslnqYdkxKmNBB4wnzVcW8ZsRdwbsla/v43PtwAvSlzxCzq2w== + dependencies: + "@graphql-tools/batch-execute" "^9.0.19" + "@graphql-tools/executor" "^1.4.9" + "@graphql-tools/schema" "^10.0.25" + "@graphql-tools/utils" "^10.9.1" + "@repeaterjs/repeater" "^3.0.6" + "@whatwg-node/promise-helpers" "^1.3.0" + dataloader "^2.2.3" + dset "^3.1.2" + tslib "^2.8.1" + "@graphql-tools/delegate@^8.8.1": version "8.8.1" resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-8.8.1.tgz#0653a72f38947f38ab7917dfac50ebf6a6b883e9" @@ -1332,117 +1457,124 @@ tslib "~2.4.0" value-or-promise "1.0.11" -"@graphql-tools/delegate@^9.0.31": - version "9.0.35" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-9.0.35.tgz#94683f4bcec63520b4a6c8b2abf2e2e9324ea4f1" - integrity sha512-jwPu8NJbzRRMqi4Vp/5QX1vIUeUPpWmlQpOkXQD2r1X45YsVceyUUBnktCrlJlDB4jPRVy7JQGwmYo3KFiOBMA== +"@graphql-tools/executor-common@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-common/-/executor-common-0.0.4.tgz#763603a6d7a22bb09d67ce682e84a0d730ff2bf9" + integrity sha512-SEH/OWR+sHbknqZyROCFHcRrbZeUAyjCsgpVWCRjqjqRbiJiXq6TxNIIOmpXgkrXWW/2Ev4Wms6YSGJXjdCs6Q== dependencies: - "@graphql-tools/batch-execute" "^8.5.22" - "@graphql-tools/executor" "^0.0.20" - "@graphql-tools/schema" "^9.0.19" - "@graphql-tools/utils" "^9.2.1" - dataloader "^2.2.2" - tslib "^2.5.0" - value-or-promise "^1.0.12" + "@envelop/core" "^5.2.3" + "@graphql-tools/utils" "^10.8.1" -"@graphql-tools/executor-graphql-ws@^0.0.14": - version "0.0.14" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-0.0.14.tgz#e0f53fc4cfc8a06cc461b2bc1edb4bb9a8e837ed" - integrity sha512-P2nlkAsPZKLIXImFhj0YTtny5NQVGSsKnhi7PzXiaHSXc6KkzqbWZHKvikD4PObanqg+7IO58rKFpGXP7eeO+w== +"@graphql-tools/executor-common@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-common/-/executor-common-0.0.6.tgz#f681de443d7e90e1768c44bd64a4cd418dc356e3" + integrity sha512-JAH/R1zf77CSkpYATIJw+eOJwsbWocdDjY+avY7G+P5HCXxwQjAjWVkJI1QJBQYjPQDVxwf1fmTZlIN3VOadow== dependencies: - "@graphql-tools/utils" "^9.2.1" - "@repeaterjs/repeater" "3.0.4" - "@types/ws" "^8.0.0" - graphql-ws "5.12.1" - isomorphic-ws "5.0.0" - tslib "^2.4.0" - ws "8.13.0" + "@envelop/core" "^5.3.0" + "@graphql-tools/utils" "^10.9.1" -"@graphql-tools/executor-http@^0.1.7": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor-http/-/executor-http-0.1.10.tgz#faf48e18e62a925796c9653c2f50cf2095bc8e6f" - integrity sha512-hnAfbKv0/lb9s31LhWzawQ5hghBfHS+gYWtqxME6Rl0Aufq9GltiiLBcl7OVVOnkLF0KhwgbYP1mB5VKmgTGpg== +"@graphql-tools/executor-graphql-ws@^2.0.1": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-graphql-ws/-/executor-graphql-ws-2.0.7.tgz#e8d7689d266b3ccea962b708d6f5d31a1a246c66" + integrity sha512-J27za7sKF6RjhmvSOwOQFeNhNHyP4f4niqPnerJmq73OtLx9Y2PGOhkXOEB0PjhvPJceuttkD2O1yMgEkTGs3Q== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/executor-common" "^0.0.6" + "@graphql-tools/utils" "^10.9.1" + "@whatwg-node/disposablestack" "^0.0.6" + graphql-ws "^6.0.6" + isomorphic-ws "^5.0.0" + tslib "^2.8.1" + ws "^8.18.3" + +"@graphql-tools/executor-http@^1.1.9": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-http/-/executor-http-1.3.3.tgz#057de79ebc90edbd242259cccb1268d37ee6c579" + integrity sha512-LIy+l08/Ivl8f8sMiHW2ebyck59JzyzO/yF9SFS4NH6MJZUezA1xThUXCDIKhHiD56h/gPojbkpcFvM2CbNE7A== + dependencies: + "@graphql-hive/signal" "^1.0.0" + "@graphql-tools/executor-common" "^0.0.4" + "@graphql-tools/utils" "^10.8.1" "@repeaterjs/repeater" "^3.0.4" - "@whatwg-node/fetch" "^0.8.1" - dset "^3.1.2" - extract-files "^11.0.0" + "@whatwg-node/disposablestack" "^0.0.6" + "@whatwg-node/fetch" "^0.10.4" + "@whatwg-node/promise-helpers" "^1.3.0" meros "^1.2.1" - tslib "^2.4.0" - value-or-promise "^1.0.12" + tslib "^2.8.1" -"@graphql-tools/executor-legacy-ws@^0.0.11": - version "0.0.11" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-0.0.11.tgz#a1e12be8279e92a363a23d4105461a34cd9e389e" - integrity sha512-4ai+NnxlNfvIQ4c70hWFvOZlSUN8lt7yc+ZsrwtNFbFPH/EroIzFMapAxM9zwyv9bH38AdO3TQxZ5zNxgBdvUw== +"@graphql-tools/executor-legacy-ws@^1.1.19": + version "1.1.25" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor-legacy-ws/-/executor-legacy-ws-1.1.25.tgz#235c334443a4dba79ceff9c20b0a03e766743d4c" + integrity sha512-6uf4AEXO0QMxJ7AWKVPqEZXgYBJaiz5vf29X0boG8QtcqWy8mqkXKWLND2Swdx0SbEx0efoGFcjuKufUcB0ASQ== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^11.0.0" "@types/ws" "^8.0.0" - isomorphic-ws "5.0.0" + isomorphic-ws "^5.0.0" tslib "^2.4.0" - ws "8.13.0" + ws "^8.19.0" -"@graphql-tools/executor@^0.0.20": - version "0.0.20" - resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-0.0.20.tgz#d51d159696e839522dd49d936636af251670e425" - integrity sha512-GdvNc4vszmfeGvUqlcaH1FjBoguvMYzxAfT6tDd4/LgwymepHhinqLNA5otqwVLW+JETcDaK7xGENzFomuE6TA== +"@graphql-tools/executor@^1.4.9": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/executor/-/executor-1.5.1.tgz#2171473cc7cd0b7ca468c21d767eec9ac9df00fe" + integrity sha512-n94Qcu875Mji9GQ52n5UbgOTxlgvFJicBPYD+FRks9HKIQpdNPjkkrKZUYNG51XKa+bf03rxNflm4+wXhoHHrA== dependencies: - "@graphql-tools/utils" "^9.2.1" - "@graphql-typed-document-node/core" "3.2.0" + "@graphql-tools/utils" "^11.0.0" + "@graphql-typed-document-node/core" "^3.2.0" "@repeaterjs/repeater" "^3.0.4" + "@whatwg-node/disposablestack" "^0.0.6" + "@whatwg-node/promise-helpers" "^1.0.0" tslib "^2.4.0" - value-or-promise "^1.0.12" -"@graphql-tools/graphql-file-loader@^7.3.7": - version "7.5.17" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.5.17.tgz#7c281617ea3ab4db4d42a2bdb49850f2b937f0f9" - integrity sha512-hVwwxPf41zOYgm4gdaZILCYnKB9Zap7Ys9OhY1hbwuAuC4MMNY9GpUjoTU3CQc3zUiPoYStyRtUGkHSJZ3HxBw== +"@graphql-tools/graphql-file-loader@^8.0.0": + version "8.1.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-8.1.9.tgz#c0a6a7619ab22b7e3297296b842e29c387b7f53f" + integrity sha512-rkLK46Q62Zxift8B6Kfw6h8SH3pCR3DPCfNeC/lpLwYReezZz+2ARuLDFZjQGjW+4lpMwiAw8CIxDyQAUgqU6A== dependencies: - "@graphql-tools/import" "6.7.18" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/import" "7.1.9" + "@graphql-tools/utils" "^11.0.0" globby "^11.0.3" tslib "^2.4.0" unixify "^1.0.0" -"@graphql-tools/graphql-tag-pluck@7.5.2", "@graphql-tools/graphql-tag-pluck@^7.3.6": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.5.2.tgz#502f1e066e19d832ebdeba5f571d7636dc27572d" - integrity sha512-RW+H8FqOOLQw0BPXaahYepVSRjuOHw+7IL8Opaa5G5uYGOBxoXR7DceyQ7BcpMgktAOOmpDNQ2WtcboChOJSRA== +"@graphql-tools/graphql-tag-pluck@8.3.27", "@graphql-tools/graphql-tag-pluck@^8.3.4": + version "8.3.27" + resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-8.3.27.tgz#5f138347addfa3df5c169be69dbe41c902c6227f" + integrity sha512-CJ0WVXhGYsfFngpRrAAcjRHyxSDHx4dEz2W15bkwvt9he/AWhuyXm07wuGcoLrl0q0iQp1BiRjU7D8SxWZo3JQ== dependencies: - "@babel/parser" "^7.16.8" - "@babel/plugin-syntax-import-assertions" "^7.20.0" - "@babel/traverse" "^7.16.8" - "@babel/types" "^7.16.8" - "@graphql-tools/utils" "^9.2.1" + "@babel/core" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" + "@graphql-tools/utils" "^11.0.0" tslib "^2.4.0" -"@graphql-tools/import@6.7.18": - version "6.7.18" - resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.7.18.tgz#ad092d8a4546bb6ffc3e871e499eec7ac368680b" - integrity sha512-XQDdyZTp+FYmT7as3xRWH/x8dx0QZA2WZqfMF5EWb36a0PiH7WwlRQYIdyYXj8YCLpiWkeBXgBRHmMnwEYR8iQ== +"@graphql-tools/import@7.1.9": + version "7.1.9" + resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-7.1.9.tgz#c3738c3ce0ff9b66b5c1df8d9f162aeab977ae0f" + integrity sha512-mHzOgyfzsAgstaZPIFEtKg4GVH4FbDHeHYrSs73mAPKS5F59/FlRuUJhAoRnxbVnc3qIZ6EsWBjOjNbnPK8viA== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^11.0.0" + "@theguild/federation-composition" "^0.21.1" resolve-from "5.0.0" tslib "^2.4.0" -"@graphql-tools/json-file-loader@^7.3.7": - version "7.4.18" - resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-7.4.18.tgz#d78ae40979bde51cfc59717757354afc9e35fba2" - integrity sha512-AJ1b6Y1wiVgkwsxT5dELXhIVUPs/u3VZ8/0/oOtpcoyO/vAeM5rOvvWegzicOOnQw8G45fgBRMkkRfeuwVt6+w== +"@graphql-tools/json-file-loader@^8.0.0": + version "8.0.26" + resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-8.0.26.tgz#82ff8afbecb77082625c7ee76384da7aed0f70ce" + integrity sha512-kwy9IFi5QtXXTLBgWkvA1RqsZeJDn0CxsTbhNlziCzmga9fNo7qtZ18k9FYIq3EIoQQlok+b7W7yeyJATA2xhw== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^11.0.0" globby "^11.0.3" tslib "^2.4.0" unixify "^1.0.0" -"@graphql-tools/load@^7.5.5": - version "7.8.14" - resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-7.8.14.tgz#f2356f9a5f658a42e33934ae036e4b2cadf2d1e9" - integrity sha512-ASQvP+snHMYm+FhIaLxxFgVdRaM0vrN9wW2BKInQpktwWTXVyk+yP5nQUCEGmn0RTdlPKrffBaigxepkEAJPrg== +"@graphql-tools/load@^8.1.0": + version "8.1.8" + resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-8.1.8.tgz#977fdf0005078283942e0e4a028ff97c78dd6f0b" + integrity sha512-gxO662b64qZSToK3N6XUxWG5E6HOUjlg5jEnmGvD4bMtGJ0HwEe/BaVZbBQemCfLkxYjwRIBiVfOY9o0JyjZJg== dependencies: - "@graphql-tools/schema" "^9.0.18" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/schema" "^10.0.31" + "@graphql-tools/utils" "^11.0.0" p-limit "3.1.0" tslib "^2.4.0" @@ -1454,12 +1586,12 @@ "@graphql-tools/utils" "8.9.0" tslib "^2.4.0" -"@graphql-tools/merge@^8.2.6", "@graphql-tools/merge@^8.4.1": - version "8.4.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.4.2.tgz#95778bbe26b635e8d2f60ce9856b388f11fe8288" - integrity sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw== +"@graphql-tools/merge@^9.0.0", "@graphql-tools/merge@^9.1.7": + version "9.1.7" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-9.1.7.tgz#8040553c19aeadf6df41060b811e9c5df8716be1" + integrity sha512-Y5E1vTbTabvcXbkakdFUt4zUIzB1fyaEnVmIWN0l0GMed2gdD01TpZWLUm4RNAxpturvolrb24oGLQrBbPLSoQ== dependencies: - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/utils" "^11.0.0" tslib "^2.4.0" "@graphql-tools/schema@8.5.1", "@graphql-tools/schema@^8.5.1": @@ -1472,34 +1604,32 @@ tslib "^2.4.0" value-or-promise "1.0.11" -"@graphql-tools/schema@^9.0.18", "@graphql-tools/schema@^9.0.19": - version "9.0.19" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.19.tgz#c4ad373b5e1b8a0cf365163435b7d236ebdd06e7" - integrity sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w== +"@graphql-tools/schema@^10.0.25", "@graphql-tools/schema@^10.0.31": + version "10.0.31" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-10.0.31.tgz#dea275db4d7423f293826cff2aa11e7b3027ddce" + integrity sha512-ZewRgWhXef6weZ0WiP7/MV47HXiuFbFpiDUVLQl6mgXsWSsGELKFxQsyUCBos60Qqy1JEFAIu3Ns6GGYjGkqkQ== dependencies: - "@graphql-tools/merge" "^8.4.1" - "@graphql-tools/utils" "^9.2.1" + "@graphql-tools/merge" "^9.1.7" + "@graphql-tools/utils" "^11.0.0" tslib "^2.4.0" - value-or-promise "^1.0.12" -"@graphql-tools/url-loader@^7.9.7": - version "7.17.18" - resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-7.17.18.tgz#3e253594d23483e4c0dd3a4c3dd2ad5cd0141192" - integrity sha512-ear0CiyTj04jCVAxi7TvgbnGDIN2HgqzXzwsfcqiVg9cvjT40NcMlZ2P1lZDgqMkZ9oyLTV8Bw6j+SyG6A+xPw== +"@graphql-tools/url-loader@^8.0.0": + version "8.0.33" + resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-8.0.33.tgz#1e5ebfa6a840e3bdc25336c231df2889028f7e0c" + integrity sha512-Fu626qcNHcqAj8uYd7QRarcJn5XZ863kmxsg1sm0fyjyfBJnsvC7ddFt6Hayz5kxVKfsnjxiDfPMXanvsQVBKw== dependencies: - "@ardatan/sync-fetch" "^0.0.1" - "@graphql-tools/delegate" "^9.0.31" - "@graphql-tools/executor-graphql-ws" "^0.0.14" - "@graphql-tools/executor-http" "^0.1.7" - "@graphql-tools/executor-legacy-ws" "^0.0.11" - "@graphql-tools/utils" "^9.2.1" - "@graphql-tools/wrap" "^9.4.2" + "@graphql-tools/executor-graphql-ws" "^2.0.1" + "@graphql-tools/executor-http" "^1.1.9" + "@graphql-tools/executor-legacy-ws" "^1.1.19" + "@graphql-tools/utils" "^10.9.1" + "@graphql-tools/wrap" "^10.0.16" "@types/ws" "^8.0.0" - "@whatwg-node/fetch" "^0.8.0" + "@whatwg-node/fetch" "^0.10.0" + "@whatwg-node/promise-helpers" "^1.0.0" isomorphic-ws "^5.0.0" + sync-fetch "0.6.0-2" tslib "^2.4.0" - value-or-promise "^1.0.11" - ws "^8.12.0" + ws "^8.17.1" "@graphql-tools/utils@8.9.0": version "8.9.0" @@ -1508,26 +1638,38 @@ dependencies: tslib "^2.4.0" -"@graphql-tools/utils@^9.0.0", "@graphql-tools/utils@^9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-9.2.1.tgz#1b3df0ef166cfa3eae706e3518b17d5922721c57" - integrity sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A== +"@graphql-tools/utils@^10.0.0", "@graphql-tools/utils@^10.8.1", "@graphql-tools/utils@^10.9.1": + version "10.11.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.11.0.tgz#2513dca9ca25bab5a2651da2d66c37b1e2616bdf" + integrity sha512-iBFR9GXIs0gCD+yc3hoNswViL1O5josI33dUqiNStFI/MHLCEPduasceAcazRH77YONKNiviHBV8f7OgcT4o2Q== dependencies: "@graphql-typed-document-node/core" "^3.1.1" + "@whatwg-node/promise-helpers" "^1.0.0" + cross-inspect "1.0.1" tslib "^2.4.0" -"@graphql-tools/wrap@^9.4.2": - version "9.4.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-9.4.2.tgz#30835587c4c73be1780908a7cb077d8013aa2703" - integrity sha512-DFcd9r51lmcEKn0JW43CWkkI2D6T9XI1juW/Yo86i04v43O9w2/k4/nx2XTJv4Yv+iXwUw7Ok81PGltwGJSDSA== +"@graphql-tools/utils@^11.0.0": + version "11.0.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-11.0.0.tgz#f54a09372e96c32416fcbd0eb8e9e0f1338900bd" + integrity sha512-bM1HeZdXA2C3LSIeLOnH/bcqSgbQgKEDrjxODjqi3y58xai2TkNrtYcQSoWzGbt9VMN1dORGjR7Vem8SPnUFQA== dependencies: - "@graphql-tools/delegate" "^9.0.31" - "@graphql-tools/schema" "^9.0.18" - "@graphql-tools/utils" "^9.2.1" + "@graphql-typed-document-node/core" "^3.1.1" + "@whatwg-node/promise-helpers" "^1.0.0" + cross-inspect "1.0.1" tslib "^2.4.0" - value-or-promise "^1.0.12" -"@graphql-typed-document-node/core@3.2.0", "@graphql-typed-document-node/core@^3.1.1": +"@graphql-tools/wrap@^10.0.16": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-10.1.4.tgz#46f94b00113693d4d4eccddcf262494164234ba6" + integrity sha512-7pyNKqXProRjlSdqOtrbnFRMQAVamCmEREilOXtZujxY6kYit3tvWWSjUrcIOheltTffoRh7EQSjpy2JDCzasg== + dependencies: + "@graphql-tools/delegate" "^10.2.23" + "@graphql-tools/schema" "^10.0.25" + "@graphql-tools/utils" "^10.9.1" + "@whatwg-node/promise-helpers" "^1.3.0" + tslib "^2.8.1" + +"@graphql-typed-document-node/core@^3.1.1", "@graphql-typed-document-node/core@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== @@ -1564,24 +1706,33 @@ dependencies: "@hapi/hoek" "^8.3.0" -"@humanwhocodes/config-array@^0.13.0": - version "0.13.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" - integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.7" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== dependencies: - "@humanwhocodes/object-schema" "^2.0.3" - debug "^4.3.1" - minimatch "^3.0.5" + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.4.0" + +"@humanwhocodes/gitignore-to-minimatch@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz#316b0a63b91c10e53f242efb4ace5c3b34e8728d" + integrity sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA== "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== "@ioredis/commands@1.5.0": version "1.5.0" @@ -2066,7 +2217,7 @@ resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": +"@nodelib/fs.walk@^1.2.3": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -2074,6 +2225,11 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@nolyfill/is-core-module@1.0.39": + version "1.0.39" + resolved "https://registry.yarnpkg.com/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz#3dc35ba0f1e66b403c00b39344f870298ebb1c8e" + integrity sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA== + "@npmcli/agent@^4.0.0": version "4.0.0" resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-4.0.0.tgz#2bb2b1c0a170940511554a7986ae2a8be9fedcce" @@ -2092,32 +2248,10 @@ dependencies: semver "^7.3.5" -"@peculiar/asn1-schema@^2.3.13", "@peculiar/asn1-schema@^2.3.8": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.15.tgz#e926bfdeed51945a06f38be703499e7d8341a5d3" - integrity sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w== - dependencies: - asn1js "^3.0.5" - pvtsutils "^1.3.6" - tslib "^2.8.1" - -"@peculiar/json-schema@^1.1.12": - version "1.1.12" - resolved "https://registry.yarnpkg.com/@peculiar/json-schema/-/json-schema-1.1.12.tgz#fe61e85259e3b5ba5ad566cb62ca75b3d3cd5339" - integrity sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w== - dependencies: - tslib "^2.0.0" - -"@peculiar/webcrypto@^1.4.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz#9e57174c02c1291051c553600347e12b81469e10" - integrity sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg== - dependencies: - "@peculiar/asn1-schema" "^2.3.8" - "@peculiar/json-schema" "^1.1.12" - pvtsutils "^1.3.5" - tslib "^2.6.2" - webcrypto-core "^1.8.0" +"@ota-meshi/ast-token-store@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@ota-meshi/ast-token-store/-/ast-token-store-0.2.1.tgz#cc4a45518fd3029f286f4f90f4a5a3920cab0ec5" + integrity sha512-+8oB1wcOSWJCR6vAm2ioSLas7SoPwp+8tZ1Tcy8DSVEHMip6jxxlGu6EsRzJLAYVCyzKQ38B5pAqSbon1l1rmA== "@pkgjs/parseargs@^0.11.0": version "0.11.0" @@ -2182,21 +2316,11 @@ resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== -"@repeaterjs/repeater@3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.4.tgz#a04d63f4d1bf5540a41b01a921c9a7fddc3bd1ca" - integrity sha512-AW8PKd6iX3vAZ0vA43nOUOnbq/X5ihgU+mSXXqunMkeQADGiqw/PY0JNeYtD5sr0PAy51YPgAPbDoeapv9r8WA== - -"@repeaterjs/repeater@^3.0.4": +"@repeaterjs/repeater@^3.0.4", "@repeaterjs/repeater@^3.0.6": version "3.0.6" resolved "https://registry.yarnpkg.com/@repeaterjs/repeater/-/repeater-3.0.6.tgz#be23df0143ceec3c69f8b6c2517971a5578fdaa2" integrity sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA== -"@rtsao/scc@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" - integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== - "@selderee/plugin-htmlparser2@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz#d5b5e29a7ba6d3958a1972c7be16f4b2c188c517" @@ -2797,6 +2921,17 @@ dependencies: tslib "^2.6.2" +"@stylistic/eslint-plugin@2.11.0": + version "2.11.0" + resolved "https://registry.yarnpkg.com/@stylistic/eslint-plugin/-/eslint-plugin-2.11.0.tgz#50d0289f36f7201055b7fa1729fdc1d8c46e93fa" + integrity sha512-PNRHbydNG5EH8NK4c+izdJlxajIR6GxcUhzsYNRsn6Myep4dsZt0qFCz3rCPnkvgO5FYibDcMqgNHUT+zvjYZw== + dependencies: + "@typescript-eslint/utils" "^8.13.0" + eslint-visitor-keys "^4.2.0" + espree "^10.3.0" + estraverse "^5.3.0" + picomatch "^4.0.2" + "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" @@ -2804,6 +2939,16 @@ dependencies: defer-to-connect "^2.0.0" +"@theguild/federation-composition@^0.21.1": + version "0.21.3" + resolved "https://registry.yarnpkg.com/@theguild/federation-composition/-/federation-composition-0.21.3.tgz#29126aa594123f36789928955e66fd210fff76c0" + integrity sha512-+LlHTa4UbRpZBog3ggAxjYIFvdfH3UMvvBUptur19TMWkqU4+n3GmN+mDjejU+dyBXIG27c25RsiQP1HyvM99g== + dependencies: + constant-case "^3.0.4" + debug "4.4.3" + json5 "^2.2.3" + lodash.sortby "^4.7.0" + "@tsconfig/node10@^1.0.7": version "1.0.12" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.12.tgz#be57ceac1e4692b41be9de6be8c32a106636dba4" @@ -2930,6 +3075,16 @@ "@types/nodemailer" "*" juice "^8.0.0" +"@types/esrecurse@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/esrecurse/-/esrecurse-4.3.1.tgz#6f636af962fbe6191b830bd676ba5986926bccec" + integrity sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw== + +"@types/estree@^1.0.6", "@types/estree@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + "@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": version "4.19.8" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz#99b960322a4d576b239a640ab52ef191989b036f" @@ -3004,16 +3159,11 @@ expect "^30.0.0" pretty-format "^30.0.0" -"@types/json-schema@^7.0.9": +"@types/json-schema@^7.0.15": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - "@types/jsonwebtoken@~8.5.1": version "8.5.9" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz#2c064ecb0b3128d837d2764aa0b117b0ff6e4586" @@ -3125,11 +3275,6 @@ dependencies: "@types/node" "*" -"@types/semver@^7.3.12": - version "7.7.1" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.1.tgz#3ce3af1a5524ef327d2da9e4fd8b6d95c8d70528" - integrity sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA== - "@types/send@*": version "1.2.1" resolved "https://registry.yarnpkg.com/@types/send/-/send-1.2.1.tgz#6a784e45543c18c774c049bff6d3dbaf045c9c74" @@ -3205,31 +3350,30 @@ resolved "https://registry.yarnpkg.com/@types/yup/-/yup-0.26.37.tgz#7a52854ac602ba0dc969bebc960559f7464a1686" integrity sha512-cDqR/ez4+iAVQYOwadXjKX4Dq1frtnDGV2GNVKj3aUVKVCKRvsr8esFk66j+LgeeJGmrMcBkkfCf3zk13MjV7A== -"@typescript-eslint/eslint-plugin@^5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== +"@typescript-eslint/eslint-plugin@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.56.0.tgz#5aec3db807a6b8437ea5d5ebf7bd16b4119aba8d" + integrity sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw== dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/type-utils" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" + "@eslint-community/regexpp" "^4.12.2" + "@typescript-eslint/scope-manager" "8.56.0" + "@typescript-eslint/type-utils" "8.56.0" + "@typescript-eslint/utils" "8.56.0" + "@typescript-eslint/visitor-keys" "8.56.0" + ignore "^7.0.5" + natural-compare "^1.4.0" + ts-api-utils "^2.4.0" -"@typescript-eslint/parser@^5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== +"@typescript-eslint/parser@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.56.0.tgz#8ecff1678b8b1a742d29c446ccf5eeea7f971d72" + integrity sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg== dependencies: - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - debug "^4.3.4" + "@typescript-eslint/scope-manager" "8.56.0" + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/typescript-estree" "8.56.0" + "@typescript-eslint/visitor-keys" "8.56.0" + debug "^4.4.3" "@typescript-eslint/project-service@8.54.0": version "8.54.0" @@ -3240,13 +3384,14 @@ "@typescript-eslint/types" "^8.54.0" debug "^4.4.3" -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== +"@typescript-eslint/project-service@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.56.0.tgz#bb8562fecd8f7922e676fc6a1189c20dd7991d73" + integrity sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg== dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" + "@typescript-eslint/tsconfig-utils" "^8.56.0" + "@typescript-eslint/types" "^8.56.0" + debug "^4.4.3" "@typescript-eslint/scope-manager@8.54.0": version "8.54.0" @@ -3256,43 +3401,44 @@ "@typescript-eslint/types" "8.54.0" "@typescript-eslint/visitor-keys" "8.54.0" +"@typescript-eslint/scope-manager@8.56.0", "@typescript-eslint/scope-manager@^8.55.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.56.0.tgz#604030a4c6433df3728effdd441d47f45a86edb4" + integrity sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w== + dependencies: + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/visitor-keys" "8.56.0" + "@typescript-eslint/tsconfig-utils@8.54.0", "@typescript-eslint/tsconfig-utils@^8.54.0": version "8.54.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.54.0.tgz#71dd7ba1674bd48b172fc4c85b2f734b0eae3dbc" integrity sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw== -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" +"@typescript-eslint/tsconfig-utils@8.56.0", "@typescript-eslint/tsconfig-utils@^8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.56.0.tgz#2538ce83cbc376e685487960cbb24b65fe2abc4e" + integrity sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg== -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== +"@typescript-eslint/type-utils@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.56.0.tgz#72b4edc1fc73988998f1632b3ec99c2a66eaac6e" + integrity sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA== + dependencies: + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/typescript-estree" "8.56.0" + "@typescript-eslint/utils" "8.56.0" + debug "^4.4.3" + ts-api-utils "^2.4.0" "@typescript-eslint/types@8.54.0", "@typescript-eslint/types@^8.54.0": version "8.54.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.54.0.tgz#c12d41f67a2e15a8a96fbc5f2d07b17331130889" integrity sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA== -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" +"@typescript-eslint/types@8.56.0", "@typescript-eslint/types@^8.35.0", "@typescript-eslint/types@^8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.56.0.tgz#a2444011b9a98ca13d70411d2cbfed5443b3526a" + integrity sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ== "@typescript-eslint/typescript-estree@8.54.0": version "8.54.0" @@ -3309,19 +3455,30 @@ tinyglobby "^0.2.15" ts-api-utils "^2.4.0" -"@typescript-eslint/utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== +"@typescript-eslint/typescript-estree@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.56.0.tgz#fadbc74c14c5bac947db04980ff58bb178701c2e" + integrity sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.62.0" - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/typescript-estree" "5.62.0" - eslint-scope "^5.1.1" - semver "^7.3.7" + "@typescript-eslint/project-service" "8.56.0" + "@typescript-eslint/tsconfig-utils" "8.56.0" + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/visitor-keys" "8.56.0" + debug "^4.4.3" + minimatch "^9.0.5" + semver "^7.7.3" + tinyglobby "^0.2.15" + ts-api-utils "^2.4.0" + +"@typescript-eslint/utils@8.56.0", "@typescript-eslint/utils@^8.13.0", "@typescript-eslint/utils@^8.55.0", "@typescript-eslint/utils@^8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.56.0.tgz#063ce6f702ec603de1b83ee795ed5e877d6f7841" + integrity sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ== + dependencies: + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.56.0" + "@typescript-eslint/types" "8.56.0" + "@typescript-eslint/typescript-estree" "8.56.0" "@typescript-eslint/utils@^8.0.0": version "8.54.0" @@ -3333,14 +3490,6 @@ "@typescript-eslint/types" "8.54.0" "@typescript-eslint/typescript-estree" "8.54.0" -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@8.54.0": version "8.54.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.54.0.tgz#0e4b50124b210b8600b245dd66cbad52deb15590" @@ -3349,10 +3498,13 @@ "@typescript-eslint/types" "8.54.0" eslint-visitor-keys "^4.2.1" -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== +"@typescript-eslint/visitor-keys@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.56.0.tgz#7d6592ab001827d3ce052155edf7ecad19688d7d" + integrity sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg== + dependencies: + "@typescript-eslint/types" "8.56.0" + eslint-visitor-keys "^5.0.0" "@ungap/structured-clone@^1.3.0": version "1.3.0" @@ -3456,32 +3608,56 @@ resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz#538b1e103bf8d9864e7b85cc96fa8d6fb6c40777" integrity sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g== -"@whatwg-node/events@^0.0.3": - version "0.0.3" - resolved "https://registry.yarnpkg.com/@whatwg-node/events/-/events-0.0.3.tgz#13a65dd4f5893f55280f766e29ae48074927acad" - integrity sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA== - -"@whatwg-node/fetch@^0.8.0", "@whatwg-node/fetch@^0.8.1": - version "0.8.8" - resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.8.8.tgz#48c6ad0c6b7951a73e812f09dd22d75e9fa18cae" - integrity sha512-CdcjGC2vdKhc13KKxgsc6/616BQ7ooDIgPeTuAiE8qfCnS0mGzcfCOoZXypQSz73nxI+GWc7ZReIAVhxoE1KCg== +"@vitest/eslint-plugin@^1.6.9": + version "1.6.9" + resolved "https://registry.yarnpkg.com/@vitest/eslint-plugin/-/eslint-plugin-1.6.9.tgz#ba00bd9bcf42ba901ea95c2c05e0049a0f930abd" + integrity sha512-9WfPx1OwJ19QLCSRLkqVO7//1WcWnK3fE/3fJhKMAmDe8+9G4rB47xCNIIeCq3FdEzkIoLTfDlwDlPBaUTMhow== dependencies: - "@peculiar/webcrypto" "^1.4.0" - "@whatwg-node/node-fetch" "^0.3.6" - busboy "^1.6.0" - urlpattern-polyfill "^8.0.0" - web-streams-polyfill "^3.2.1" + "@typescript-eslint/scope-manager" "^8.55.0" + "@typescript-eslint/utils" "^8.55.0" -"@whatwg-node/node-fetch@^0.3.6": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.3.6.tgz#e28816955f359916e2d830b68a64493124faa6d0" - integrity sha512-w9wKgDO4C95qnXZRwZTfCmLWqyRnooGjcIwG0wADWjw9/HN0p7dtvtgSvItZtUyNteEvgTrd8QojNEqV6DAGTA== +"@vue/eslint-config-typescript@^14.7.0": + version "14.7.0" + resolved "https://registry.yarnpkg.com/@vue/eslint-config-typescript/-/eslint-config-typescript-14.7.0.tgz#76f0122f39447e8596ef83a771ce54ee0bd51380" + integrity sha512-iegbMINVc+seZ/QxtzWiOBozctrHiF2WvGedruu2EbLujg9VuU0FQiNcN2z1ycuaoKKpF4m2qzB5HDEMKbxtIg== dependencies: - "@whatwg-node/events" "^0.0.3" - busboy "^1.6.0" - fast-querystring "^1.1.1" - fast-url-parser "^1.1.3" - tslib "^2.3.1" + "@typescript-eslint/utils" "^8.56.0" + fast-glob "^3.3.3" + typescript-eslint "^8.56.0" + vue-eslint-parser "^10.4.0" + +"@whatwg-node/disposablestack@^0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@whatwg-node/disposablestack/-/disposablestack-0.0.6.tgz#2064a1425ea66194def6df0c7a1851b6939c82bb" + integrity sha512-LOtTn+JgJvX8WfBVJtF08TGrdjuFzGJc4mkP8EdDI8ADbvO7kiexYep1o8dwnt0okb0jYclCDXF13xU7Ge4zSw== + dependencies: + "@whatwg-node/promise-helpers" "^1.0.0" + tslib "^2.6.3" + +"@whatwg-node/fetch@^0.10.0", "@whatwg-node/fetch@^0.10.4": + version "0.10.13" + resolved "https://registry.yarnpkg.com/@whatwg-node/fetch/-/fetch-0.10.13.tgz#2d47190c620f134dda31c7f827976a909b2cca7a" + integrity sha512-b4PhJ+zYj4357zwk4TTuF2nEe0vVtOrwdsrNo5hL+u1ojXNhh1FgJ6pg1jzDlwlT4oBdzfSwaBwMCtFCsIWg8Q== + dependencies: + "@whatwg-node/node-fetch" "^0.8.3" + urlpattern-polyfill "^10.0.0" + +"@whatwg-node/node-fetch@^0.8.3": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@whatwg-node/node-fetch/-/node-fetch-0.8.5.tgz#5ab2226866ae10a9d0403f9d44bd684178963781" + integrity sha512-4xzCl/zphPqlp9tASLVeUhB5+WJHbuWGYpfoC2q1qh5dw0AqZBW7L27V5roxYWijPxj4sspRAAoOH3d2ztaHUQ== + dependencies: + "@fastify/busboy" "^3.1.1" + "@whatwg-node/disposablestack" "^0.0.6" + "@whatwg-node/promise-helpers" "^1.3.2" + tslib "^2.6.3" + +"@whatwg-node/promise-helpers@^1.0.0", "@whatwg-node/promise-helpers@^1.2.1", "@whatwg-node/promise-helpers@^1.2.4", "@whatwg-node/promise-helpers@^1.3.0", "@whatwg-node/promise-helpers@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.3.2.tgz#3b54987ad6517ef6db5920c66a6f0dada606587d" + integrity sha512-Nst5JdK47VIl9UcGwtv2Rcgyn5lWtZ0/mhRQ4G8NN2isxpq2TO30iqHzmwoJycjWuyUfg3GFXqP/gFHXeV57IA== + dependencies: + tslib "^2.6.3" "@wry/equality@^0.1.2": version "0.1.11" @@ -3529,11 +3705,16 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.9.0: +acorn@^8.11.0, acorn@^8.15.0, acorn@^8.4.1, acorn@^8.5.0: version "8.15.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== +acorn@^8.16.0: + version "8.16.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== + agent-base@6: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -3856,7 +4037,7 @@ array-flatten@1.1.1: resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.9: +array-includes@^3.1.6, array-includes@^3.1.8: version "3.1.9" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.9.tgz#1f0ccaa08e90cdbc3eb433210f903ad0f17c3f3a" integrity sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ== @@ -3875,20 +4056,19 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.6: - version "1.2.6" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" - integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== +array.prototype.findlast@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" + integrity sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ== dependencies: - call-bind "^1.0.8" - call-bound "^1.0.4" + call-bind "^1.0.7" define-properties "^1.2.1" - es-abstract "^1.23.9" + es-abstract "^1.23.2" es-errors "^1.3.0" - es-object-atoms "^1.1.1" - es-shim-unscopables "^1.1.0" + es-object-atoms "^1.0.0" + es-shim-unscopables "^1.0.2" -array.prototype.flat@^1.3.3: +array.prototype.flat@^1.3.1: version "1.3.3" resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== @@ -3922,6 +4102,17 @@ array.prototype.reduce@^1.0.8: es-object-atoms "^1.1.1" is-string "^1.1.1" +array.prototype.tosorted@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz#fe954678ff53034e717ea3352a03f0b0b86f7ffc" + integrity sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-abstract "^1.23.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" + arraybuffer.prototype.slice@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" @@ -3950,15 +4141,6 @@ asap@~2.0.3: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== -asn1js@^3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.6.tgz#53e002ebe00c5f7fd77c1c047c3557d7c04dce25" - integrity sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA== - dependencies: - pvtsutils "^1.3.6" - pvutils "^1.1.3" - tslib "^2.8.1" - assert-never@^1.2.1: version "1.4.0" resolved "https://registry.yarnpkg.com/assert-never/-/assert-never-1.4.0.tgz#b0d4988628c87f35eb94716cc54422a63927e175" @@ -4237,13 +4419,6 @@ busboy@^0.3.1: dependencies: dicer "0.3.0" -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - bytes@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" @@ -4609,6 +4784,11 @@ commander@^9.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== +comment-parser@^1.4.1: + version "1.4.5" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.5.tgz#6c595cd090737a1010fe5ff40d86e1d21b7bd6ce" + integrity sha512-aRDkn3uyIlCFfk5NUA+VdwMmMsh8JGhc4hapfV4yxymHGQ3BVskMQfoXGpCo5IoBuQ9tS5iiVKhCpTcB4pW4qw== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -4624,6 +4804,15 @@ condense-whitespace@~2.0.0: resolved "https://registry.yarnpkg.com/condense-whitespace/-/condense-whitespace-2.0.0.tgz#94e9644938f66aa7be4b8849f8f0b3cec97d6b3a" integrity sha512-Ath9o58/0rxZXbyoy3zZgrVMoIemi30sukG/btuMKCLyqfQt3dNOWc9N3EHEMa2Q3i0tXQPDJluYFLwy7pJuQw== +constant-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-3.0.4.tgz#3b84a9aeaf4cf31ec45e6bf5de91bdfb0589faf1" + integrity sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + upper-case "^2.0.2" + constantinople@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-4.0.1.tgz#0def113fa0e4dc8de83331a5cf79c8b325213151" @@ -4682,14 +4871,14 @@ cors@^2.8.5: object-assign "^4" vary "^1" -cosmiconfig@8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.0.0.tgz#e9feae014eab580f858f8a0288f38997a7bebe97" - integrity sha512-da1EafcpH6b/TD8vDRaWV7xFINlHlF6zKsGwS1TsuVJTZRkquaS5HTMq7uq6h31619QjbsYl21gVDOm32KM1vQ== +cosmiconfig@^8.1.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== dependencies: - import-fresh "^3.2.1" + import-fresh "^3.3.0" js-yaml "^4.1.0" - parse-json "^5.0.0" + parse-json "^5.2.0" path-type "^4.0.0" create-require@^1.1.0: @@ -4705,6 +4894,13 @@ cross-env@~10.1.0: "@epic-web/invariant" "^1.0.0" cross-spawn "^7.0.6" +cross-inspect@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cross-inspect/-/cross-inspect-1.0.1.tgz#15f6f65e4ca963cf4cc1a2b5fef18f6ca328712b" + integrity sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A== + dependencies: + tslib "^2.4.0" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -4725,7 +4921,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: +cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -4769,6 +4965,11 @@ css-what@^6.0.1, css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.2.2.tgz#cdcc8f9b6977719fdfbd1de7aec24abf756b9dea" integrity sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA== +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + cssfilter@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" @@ -4784,6 +4985,11 @@ cssstyle@^5.3.4: css-tree "^3.1.0" lru-cache "^11.2.4" +data-uri-to-buffer@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz#d8feb2b2881e6a4f58c2e08acfd0e2834e26222e" + integrity sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A== + data-uri-to-buffer@~5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz#db89a9e279c2ffe74f50637a59a32fb23b3e4d7c" @@ -4836,7 +5042,7 @@ dataloader@2.1.0: resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== -dataloader@^2.2.2: +dataloader@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.3.tgz#42d10b4913515f5b37c6acedcb4960d6ae1b1517" integrity sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA== @@ -4862,20 +5068,13 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.1, debug@^4.4.3: +debug@4, debug@4.4.3, debug@^4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.0, debug@^4.4.1, debug@^4.4.3: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - decimal.js@^10.6.0: version "10.6.0" resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" @@ -4927,7 +5126,7 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-properties@^1.2.1: +define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -4983,10 +5182,10 @@ dicer@0.3.0: dependencies: streamsearch "0.1.2" -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== +diff-sequences@^29.0.0, diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== diff@^4.0.1: version "4.0.4" @@ -5015,13 +5214,6 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - doctypes@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" @@ -5237,7 +5429,7 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: +es-abstract@^1.17.5, es-abstract@^1.23.2, es-abstract@^1.23.3, es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9, es-abstract@^1.24.0, es-abstract@^1.24.1: version "1.24.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.1.tgz#f0c131ed5ea1bb2411134a8dd94def09c46c7899" integrity sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw== @@ -5312,6 +5504,28 @@ es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== +es-iterator-helpers@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.2.2.tgz#d979a9f686e2b0b72f88dbead7229924544720bc" + integrity sha512-BrUQ0cPTB/IwXj23HtwHjS9n7O4h9FX94b4xc5zlTHxeLgTAdzYUDyy6KdExAl9lbN5rtfe44xpjpmj9grxs5w== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.24.1" + es-errors "^1.3.0" + es-set-tostringtag "^2.1.0" + function-bind "^1.1.2" + get-intrinsic "^1.3.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" + internal-slot "^1.1.0" + iterator.prototype "^1.1.5" + safe-array-concat "^1.1.3" + es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" @@ -5329,7 +5543,7 @@ es-set-tostringtag@^2.1.0: has-tostringtag "^1.0.2" hasown "^2.0.2" -es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: +es-shim-unscopables@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== @@ -5365,6 +5579,11 @@ escape-string-applescript@^1.0.0: resolved "https://registry.yarnpkg.com/escape-string-applescript/-/escape-string-applescript-1.0.0.tgz#6f1c2294245d82c63bc03338dc19a94aa8428892" integrity sha512-4/hFwoYaC6TkpDn9A3pTC52zQPArFeXuIfhUtCGYdauTzXVP9H3BDr3oO/QzQehMpLDC7srvYgfwvImPFGfvBA== +escape-string-regexp@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -5387,24 +5606,36 @@ eslint-compat-utils@^0.5.1: dependencies: semver "^7.5.4" -eslint-compat-utils@^0.6.4: - version "0.6.5" - resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.6.5.tgz#6b06350a1c947c4514cfa64a170a6bfdbadc7ec2" - integrity sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ== +eslint-config-it4c@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/eslint-config-it4c/-/eslint-config-it4c-0.12.0.tgz#0853b246e14b716f9f6bf70c3f7c52617a7103c3" + integrity sha512-XxlqDqimN2dp7ja5IzefivfpdKjJohp6bqKTZ3ZJrwuQS4+cpeJbBAWrvnAHziChMJi264fJ1CHNTCrud3jZmw== dependencies: - semver "^7.5.4" + "@eslint-community/eslint-plugin-eslint-comments" "^4.6.0" + "@eslint/css" "^0.14.1" + "@eslint/js" "^9.39.3" + "@graphql-eslint/eslint-plugin" "^4.4.0" + "@vitest/eslint-plugin" "^1.6.9" + "@vue/eslint-config-typescript" "^14.7.0" + eslint-config-prettier "^10.1.8" + eslint-import-resolver-typescript "^4.4.4" + eslint-plugin-import-x "^4.16.1" + eslint-plugin-jest "^29.15.0" + eslint-plugin-jsonc "^3.0.0" + eslint-plugin-no-catch-all "^1.1.0" + eslint-plugin-prettier "^5.5.5" + eslint-plugin-security "^4.0.0" + eslint-plugin-vue "^10.8.0" + eslint-plugin-yml "^3.2.1" + neostandard "^0.12.2" + typescript-eslint "^8.56.0" eslint-config-prettier@^10.1.8: version "10.1.8" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz#15734ce4af8c2778cc32f0b01b37b0b5cd1ecb97" integrity sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w== -eslint-config-standard@^17.1.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" - integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== - -eslint-import-context@^0.1.8: +eslint-import-context@^0.1.8, eslint-import-context@^0.1.9: version "0.1.9" resolved "https://registry.yarnpkg.com/eslint-import-context/-/eslint-import-context-0.1.9.tgz#967b0b2f0a90ef4b689125e088f790f0b7756dbe" integrity sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg== @@ -5412,14 +5643,18 @@ eslint-import-context@^0.1.8: get-tsconfig "^4.10.1" stable-hash-x "^0.2.0" -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== +eslint-import-resolver-typescript@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz#23dac32efa86a88e2b8232eb244ac499ad636db2" + integrity sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ== dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" + "@nolyfill/is-core-module" "1.0.39" + debug "^4.4.0" + get-tsconfig "^4.10.0" + is-bun-module "^2.0.0" + stable-hash "^0.0.5" + tinyglobby "^0.2.13" + unrs-resolver "^1.6.2" eslint-import-resolver-typescript@^4.4.4: version "4.4.4" @@ -5441,13 +5676,6 @@ eslint-json-compat-utils@^0.2.1: dependencies: esquery "^1.6.0" -eslint-module-utils@^2.12.1: - version "2.12.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz#f76d3220bfb83c057651359295ab5854eaad75ff" - integrity sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw== - dependencies: - debug "^3.2.7" - eslint-plugin-es-x@^7.8.0: version "7.8.0" resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz#a207aa08da37a7923f2a9599e6d3eb73f3f92b74" @@ -5457,30 +5685,20 @@ eslint-plugin-es-x@^7.8.0: "@eslint-community/regexpp" "^4.11.0" eslint-compat-utils "^0.5.1" -eslint-plugin-import@^2.32.0: - version "2.32.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz#602b55faa6e4caeaa5e970c198b5c00a37708980" - integrity sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA== +eslint-plugin-import-x@^4.16.1: + version "4.16.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import-x/-/eslint-plugin-import-x-4.16.1.tgz#a96ee1ad5ba6816f9a5573a9617935011a24c4df" + integrity sha512-vPZZsiOKaBAIATpFE2uMI4w5IRwdv/FpQ+qZZMR4E+PeOcM4OeoEbqxRMnywdxP19TyB/3h6QBB0EWon7letSQ== dependencies: - "@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.9" - eslint-module-utils "^2.12.1" - hasown "^2.0.2" - is-core-module "^2.16.1" + "@typescript-eslint/types" "^8.35.0" + comment-parser "^1.4.1" + debug "^4.4.1" + eslint-import-context "^0.1.9" is-glob "^4.0.3" - minimatch "^3.1.2" - 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" + minimatch "^9.0.3 || ^10.0.1" + semver "^7.7.2" + stable-hash-x "^0.2.0" + unrs-resolver "^1.9.2" eslint-plugin-jest@^29.15.0: version "29.15.0" @@ -5489,25 +5707,25 @@ eslint-plugin-jest@^29.15.0: dependencies: "@typescript-eslint/utils" "^8.0.0" -eslint-plugin-jsonc@^2.21.1: - version "2.21.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.21.1.tgz#ca1381a36baaa2227b73a2a103477cf69fb4168c" - integrity sha512-dbNR5iEnQeORwsK2WZzr3QaMtFCY3kKJVMRHPzUpKzMhmVy2zIpVgFDpX8MNoIdoqz6KCpCfOJavhfiSbZbN+w== +eslint-plugin-jsonc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsonc/-/eslint-plugin-jsonc-3.0.0.tgz#5bcbd4e45b9de0a34be84bb4a89715fb87142477" + integrity sha512-v2brGbpGAePVWdMP+TCar5TuHTX+QM0NahF4sEgL1LIZnRvQQ9iBdNN9wUzsVZxpVjsLnuaCVATwzLxsJApd0Q== dependencies: "@eslint-community/eslint-utils" "^4.5.1" - diff-sequences "^27.5.1" - eslint-compat-utils "^0.6.4" + "@eslint/core" "^1.0.1" + "@eslint/plugin-kit" "^0.6.0" + "@ota-meshi/ast-token-store" "^0.2.1" + diff-sequences "^29.6.3" eslint-json-compat-utils "^0.2.1" - espree "^9.6.1 || ^10.3.0" - graphemer "^1.4.0" - jsonc-eslint-parser "^2.4.0" + jsonc-eslint-parser "^3.1.0" natural-compare "^1.4.0" - synckit "^0.6.2 || ^0.7.3 || ^0.11.5" + synckit "^0.11.12" -eslint-plugin-n@^17.23.2: - version "17.23.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-17.23.2.tgz#cd1be342b56771385028d8039d67f11fb9cca5f3" - integrity sha512-RhWBeb7YVPmNa2eggvJooiuehdL76/bbfj/OJewyoGT80qn5PXdz8zMOTO6YHOsI7byPt7+Ighh/i/4a5/v7hw== +eslint-plugin-n@^17.20.0: + version "17.24.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-17.24.0.tgz#b66fa05f7a6c1ba16768f0921b8974147dddd060" + integrity sha512-/gC7/KAYmfNnPNOb3eu8vw+TdVnV0zhdQwexsw6FLXbhzroVj20vRn2qL8lDWDGnAQ2J8DhdfvXxX9EoxvERvw== dependencies: "@eslint-community/eslint-utils" "^4.5.0" enhanced-resolve "^5.17.1" @@ -5539,93 +5757,137 @@ eslint-plugin-promise@^7.2.1: dependencies: "@eslint-community/eslint-utils" "^4.4.0" -eslint-plugin-security@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-3.0.1.tgz#bc52904f77c3b74c3942e12bdb0751831a3223d2" - integrity sha512-XjVGBhtDZJfyuhIxnQ/WMm385RbX3DBu7H1J7HNNhmB2tnGxMeqVSnYv79oAj992ayvIBZghsymwkYFS6cGH4Q== +eslint-plugin-react@^7.37.5: + version "7.37.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz#2975511472bdda1b272b34d779335c9b0e877065" + integrity sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA== + dependencies: + array-includes "^3.1.8" + array.prototype.findlast "^1.2.5" + array.prototype.flatmap "^1.3.3" + array.prototype.tosorted "^1.1.4" + doctrine "^2.1.0" + es-iterator-helpers "^1.2.1" + estraverse "^5.3.0" + hasown "^2.0.2" + jsx-ast-utils "^2.4.1 || ^3.0.0" + minimatch "^3.1.2" + object.entries "^1.1.9" + object.fromentries "^2.0.8" + object.values "^1.2.1" + prop-types "^15.8.1" + resolve "^2.0.0-next.5" + semver "^6.3.1" + string.prototype.matchall "^4.0.12" + string.prototype.repeat "^1.0.0" + +eslint-plugin-security@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-security/-/eslint-plugin-security-4.0.0.tgz#f6ffde295d8911f032d0e460bc3a9ec47ed68fa6" + integrity sha512-tfuQT8K/Li1ZxhFzyD8wPIKtlzZxqBcPr9q0jFMQ77wWAbKBVEhaMPVQRTMTvCMUDhwBe5vPVqQPwAGk/ASfxQ== dependencies: safe-regex "^2.1.1" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-plugin-vue@^10.8.0: + version "10.8.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-vue/-/eslint-plugin-vue-10.8.0.tgz#a856d73b53ba5f4b2b4bb6cd8051ca7ac65cb21d" + integrity sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA== dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" + "@eslint-community/eslint-utils" "^4.4.0" + natural-compare "^1.4.0" + nth-check "^2.1.1" + postcss-selector-parser "^7.1.0" + semver "^7.6.3" + xml-name-validator "^4.0.0" -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== +eslint-plugin-yml@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-yml/-/eslint-plugin-yml-3.2.1.tgz#112adf556d3ee55c663fa1970476dae7f439f586" + integrity sha512-/oFj7MWk56AKLelLSUb7zN1OKDI9kR+uKEzbf/sGu7Bov0tJs3qwtMcu+VCcEtFAFD7KZe0LSYhyy0Uq8hKF9g== + dependencies: + "@eslint/core" "^1.0.1" + "@eslint/plugin-kit" "^0.6.0" + "@ota-meshi/ast-token-store" "^0.2.1" + debug "^4.3.2" + diff-sequences "^29.0.0" + escape-string-regexp "5.0.0" + natural-compare "^1.4.0" + yaml-eslint-parser "^2.0.0" + +"eslint-scope@^8.2.0 || ^9.0.0": + version "9.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-9.1.1.tgz#f6a209486e38bd28356b5feb07d445cc99c89967" + integrity sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw== + dependencies: + "@types/esrecurse" "^4.3.1" + "@types/estree" "^1.0.8" + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.2.1: +eslint-visitor-keys@^4.2.0, eslint-visitor-keys@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@^8.57.1: - version "8.57.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" - integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== +"eslint-visitor-keys@^4.2.0 || ^5.0.0", eslint-visitor-keys@^5.0.0, eslint-visitor-keys@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz#9e3c9489697824d2d4ce3a8ad12628f91e9f59be" + integrity sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA== + +eslint@^9.27.0: + version "9.39.3" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.3.tgz#08d63df1533d7743c0907b32a79a7e134e63ee2f" + integrity sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg== dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.1" - "@humanwhocodes/config-array" "^0.13.0" + "@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.3" + "@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" -espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -"espree@^9.6.1 || ^10.3.0": +espree@^10.0.1, espree@^10.3.0, espree@^10.4.0: version "10.4.0" resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== @@ -5634,6 +5896,15 @@ espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^4.2.1" +"espree@^10.3.0 || ^11.0.0": + version "11.1.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-11.1.1.tgz#866f6bc9ccccd6f28876b7a6463abb281b9cb847" + integrity sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ== + dependencies: + acorn "^8.16.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^5.0.1" + esprima@^1.2.0: version "1.2.5" resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" @@ -5644,7 +5915,7 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== -esquery@^1.4.2, esquery@^1.6.0: +esquery@^1.5.0, esquery@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== @@ -5663,12 +5934,7 @@ estraverse@^1.5.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: +estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== @@ -5803,21 +6069,11 @@ extendable-error@^0.1.5: resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96" integrity sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg== -extract-files@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a" - integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ== - extract-files@^8.0.0: version "8.1.0" resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-8.1.0.tgz#46a0690d0fe77411a2e3804852adeaa65cd59288" integrity sha512-PTGtfthZK79WUMk+avLmwx3NGdU8+iVFXC2NMGxKsn0MnihOG2lvumj+AZo8CTwTrwjXDgZ5tztbRlEdRjBonQ== -fast-decode-uri-component@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" - integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -5828,7 +6084,7 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== -fast-glob@^3.1.1, fast-glob@^3.2.12, fast-glob@^3.2.9: +fast-glob@^3.1.1, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== @@ -5854,20 +6110,6 @@ fast-printf@^1.6.10: resolved "https://registry.yarnpkg.com/fast-printf/-/fast-printf-1.6.10.tgz#c44ad871726152159d7a903a5af0d65cf3d75875" integrity sha512-GwTgG9O4FVIdShhbVF3JxOgSBY2+ePGsu2V/UONgoCPzF9VY6ZdBMKsHKCYQHZwNk3qNouUolRDsgVxcVA5G1w== -fast-querystring@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" - integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== - dependencies: - fast-decode-uri-component "^1.0.1" - -fast-url-parser@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" - integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== - dependencies: - punycode "^1.3.2" - fast-xml-parser@5.3.6: version "5.3.6" resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.3.6.tgz#85a69117ca156b1b3c52e426495b6de266cb6a4b" @@ -5894,12 +6136,20 @@ fdir@^6.5.0: resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350" integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== dependencies: - flat-cache "^3.0.4" + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" file-extension@~4.0.5: version "4.0.5" @@ -5954,14 +6204,13 @@ fixpack@^4.0.0: extend-object "^1.0.0" rc "^1.2.8" -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" + keyv "^4.5.4" flatted@^3.2.9: version "3.3.3" @@ -6011,6 +6260,13 @@ form-data@^3.0.0: hasown "^2.0.2" mime-types "^2.1.35" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -6120,7 +6376,7 @@ get-port@5.1.1: resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" integrity sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ== -get-proto@^1.0.1: +get-proto@^1.0.0, get-proto@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== @@ -6201,7 +6457,7 @@ glob@^13.0.0: minipass "^7.1.2" path-scurry "^2.0.0" -glob@^7.1.3, glob@^7.1.4: +glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -6213,19 +6469,12 @@ glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== -globals@^13.19.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globals@^15.11.0: +globals@^15.11.0, globals@^15.15.0: version "15.15.0" resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8" integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== @@ -6250,7 +6499,7 @@ globby@11.0.0: merge2 "^1.3.0" slash "^3.0.0" -globby@^11.0.3, globby@^11.0.4, globby@^11.1.0: +globby@^11.0.3, globby@^11.0.4: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== @@ -6294,11 +6543,6 @@ graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - graphql-auth-directives@^2.1.0: version "2.2.2" resolved "https://registry.yarnpkg.com/graphql-auth-directives/-/graphql-auth-directives-2.2.2.tgz#5844a8dcdc159437decd60cc6f9fa82d08f51f7c" @@ -6308,21 +6552,21 @@ graphql-auth-directives@^2.1.0: graphql-tools "^4.0.7" jsonwebtoken "^8.3.0" -graphql-config@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-4.5.0.tgz#257c2338950b8dce295a27f75c5f6c39f8f777b2" - integrity sha512-x6D0/cftpLUJ0Ch1e5sj1TZn6Wcxx4oMfmhaG9shM0DKajA9iR+j1z86GSTQ19fShbGvrSSvbIQsHku6aQ6BBw== +graphql-config@^5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-5.1.5.tgz#34e0bfba88e74b6eefd889716a9378086f595f7f" + integrity sha512-mG2LL1HccpU8qg5ajLROgdsBzx/o2M6kgI3uAmoaXiSH9PCUbtIyLomLqUtCFaAeG2YCFsl0M5cfQ9rKmDoMVA== dependencies: - "@graphql-tools/graphql-file-loader" "^7.3.7" - "@graphql-tools/json-file-loader" "^7.3.7" - "@graphql-tools/load" "^7.5.5" - "@graphql-tools/merge" "^8.2.6" - "@graphql-tools/url-loader" "^7.9.7" - "@graphql-tools/utils" "^9.0.0" - cosmiconfig "8.0.0" - jiti "1.17.1" - minimatch "4.2.3" - string-env-interpolation "1.0.1" + "@graphql-tools/graphql-file-loader" "^8.0.0" + "@graphql-tools/json-file-loader" "^8.0.0" + "@graphql-tools/load" "^8.1.0" + "@graphql-tools/merge" "^9.0.0" + "@graphql-tools/url-loader" "^8.0.0" + "@graphql-tools/utils" "^10.0.0" + cosmiconfig "^8.1.0" + jiti "^2.0.0" + minimatch "^9.0.5" + string-env-interpolation "^1.0.1" tslib "^2.4.0" graphql-depth-limit@^1.1.0: @@ -6435,10 +6679,10 @@ graphql-upload@^13.0.0: http-errors "^1.8.1" object-path "^0.11.8" -graphql-ws@5.12.1: - version "5.12.1" - resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-5.12.1.tgz#c62d5ac54dbd409cc6520b0b39de374b3d59d0dd" - integrity sha512-umt4f5NnMK46ChM2coO36PTFhHouBrK9stWWBczERguwYrGnPNxJ9dimU6IyOBfOkC6Izhkg4H8+F51W/8CYDg== +graphql-ws@^6.0.6: + version "6.0.7" + resolved "https://registry.yarnpkg.com/graphql-ws/-/graphql-ws-6.0.7.tgz#140307a513f0ba659ecec618d6cf15354a842f96" + integrity sha512-yoLRW+KRlDmnnROdAu7sX77VNLC0bsFoZyGQJLy1cF+X/SkLg/fWkRGrEEYQK8o2cafJ2wmEaMqMEZB3U3DYDg== graphql@^14.2.1, graphql@^14.6.0: version "14.6.0" @@ -6746,7 +6990,7 @@ image-extensions@~1.1.0: resolved "https://registry.yarnpkg.com/image-extensions/-/image-extensions-1.1.0.tgz#b8e6bf6039df0056e333502a00b6637a3105d894" integrity sha512-P0t7ByhK8Jk9TU05ct/7+f7h8dNuXq5OY4m0IO/T+1aga/qHkpC0Wf472x3FLdq/zFDG17pgapCM3JDTxwZzow== -import-fresh@^3.2.1: +import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== @@ -6921,7 +7165,7 @@ is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.16.0, is-core-module@^2.16.1: +is-core-module@^2.16.0, is-core-module@^2.16.1: version "2.16.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== @@ -7021,11 +7265,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -7176,7 +7415,7 @@ isobject@^4.0.0: resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== -isomorphic-ws@5.0.0, isomorphic-ws@^5.0.0: +isomorphic-ws@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== @@ -7244,6 +7483,18 @@ iterall@^1.1.3, iterall@^1.2.1, iterall@^1.2.2, iterall@^1.3.0: resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.3.0.tgz#afcb08492e2915cbd8a0884eb93a8c94d0d72fea" integrity sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg== +iterator.prototype@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/iterator.prototype/-/iterator.prototype-1.1.5.tgz#12c959a29de32de0aa3bbbb801f4d777066dae39" + integrity sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g== + dependencies: + define-data-property "^1.1.4" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + get-proto "^1.0.0" + has-symbols "^1.1.0" + set-function-name "^2.0.2" + jackspeak@^3.1.2: version "3.4.3" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" @@ -7616,17 +7867,17 @@ jest@^30.2.0: import-local "^3.2.0" jest-cli "30.2.0" -jiti@1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.17.1.tgz#264daa43ee89a03e8be28c3d712ccc4eb9f1e8ed" - integrity sha512-NZIITw8uZQFuzQimqjUxIrIcEdxYDFIe/0xYfIlVXTkiBjjyBEvgasj5bb0/cHtPRD/NziPbT312sFrkI5ALpw== +jiti@^2.0.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.6.1.tgz#178ef2fc9a1a594248c20627cd820187a4d78d92" + integrity sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ== js-stringify@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== -js-tokens@^4.0.0: +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -7639,7 +7890,7 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^4.1.0: +js-yaml@^4.1.0, js-yaml@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== @@ -7697,26 +7948,18 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - json5@^2.2.2, json5@^2.2.3, json5@^2.x: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonc-eslint-parser@^2.4.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz#f135454fd35784ecc1b848908f0d3e98a5be9433" - integrity sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA== +jsonc-eslint-parser@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-3.1.0.tgz#ecbd62bdfe8acc299812d0610bff938377987626" + integrity sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng== dependencies: acorn "^8.5.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" + eslint-visitor-keys "^5.0.0" semver "^7.3.5" jsonrepair@~3.13.2: @@ -7748,6 +7991,16 @@ jstransformer@1.0.0: is-promise "^2.0.0" promise "^7.0.1" +"jsx-ast-utils@^2.4.1 || ^3.0.0": + version "3.3.5" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" + integrity sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ== + dependencies: + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + object.assign "^4.1.4" + object.values "^1.1.6" + juice@^11.0.3: version "11.1.1" resolved "https://registry.yarnpkg.com/juice/-/juice-11.1.1.tgz#5a8a39e531b42c4a5b7cfd470a091602c4488d6e" @@ -7788,7 +8041,7 @@ jws@^3.2.2: jwa "^1.4.2" safe-buffer "^5.0.1" -keyv@^4.0.0, keyv@^4.5.3: +keyv@^4.0.0, keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== @@ -7969,6 +8222,13 @@ long@^4.0.0: resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -8090,6 +8350,11 @@ mdn-data@2.12.2: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.12.2.tgz#9ae6c41a9e65adf61318b32bff7b64fbfb13f8cf" integrity sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA== +mdn-data@2.23.0: + version "2.23.0" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.23.0.tgz#f136a03eeed90d368dc0d849794043b237b53f5b" + integrity sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ== + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -8329,21 +8594,14 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.3.tgz#b4dcece1d674dee104bb0fb833ebb85a78cbbca6" - integrity sha512-lIUdtK5hdofgCTu3aT0sOaHsYR37viUuIc0rwnnDXImbwFRcumyLMeZaM0t0I/fgxS6s6JMfu0rLD1Wz9pv1ng== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^10.1.1, minimatch@^10.2.2: +minimatch@^10.1.1, minimatch@^10.2.2, "minimatch@^9.0.3 || ^10.0.1": version "10.2.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.2.tgz#361603ee323cfb83496fea2ae17cc44ea4e1f99f" integrity sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw== dependencies: brace-expansion "^5.0.2" -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -8486,11 +8744,6 @@ napi-postinstall@^0.3.0: resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.3.4.tgz#7af256d6588b5f8e952b9190965d6b019653bbb9" integrity sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ== -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -8558,6 +8811,23 @@ neode@^0.4.9: neo4j-driver "^4.2.2" uuid "^3.4.0" +neostandard@^0.12.2: + version "0.12.2" + resolved "https://registry.yarnpkg.com/neostandard/-/neostandard-0.12.2.tgz#da64aae492385746d379a8318e7c789c705ad6ab" + integrity sha512-VZU8EZpSaNadp3rKEwBhVD1Kw8jE3AftQLkCyOaM7bWemL1LwsYRsBnAmXy2LjG9zO8t66qJdqB7ccwwORyrAg== + dependencies: + "@humanwhocodes/gitignore-to-minimatch" "^1.0.2" + "@stylistic/eslint-plugin" "2.11.0" + eslint-import-resolver-typescript "^3.10.1" + eslint-plugin-import-x "^4.16.1" + eslint-plugin-n "^17.20.0" + eslint-plugin-promise "^7.2.1" + eslint-plugin-react "^7.37.5" + find-up "^5.0.0" + globals "^15.15.0" + peowly "^1.3.2" + typescript-eslint "^8.35.1" + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -8571,6 +8841,21 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-exports-info@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/node-exports-info/-/node-exports-info-1.6.0.tgz#1aedafb01a966059c9a5e791a94a94d93f5c2a13" + integrity sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw== + dependencies: + array.prototype.flatmap "^1.3.3" + es-errors "^1.3.0" + object.entries "^1.1.9" + semver "^6.3.1" + node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -8578,6 +8863,15 @@ node-fetch@^2.6.0, node-fetch@^2.6.1, node-fetch@^2.7.0: dependencies: whatwg-url "^5.0.0" +node-fetch@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" + integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + node-gyp@^12.1.0: version "12.2.0" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-12.2.0.tgz#ff73f6f509e33d8b7e768f889ffc9738ad117b07" @@ -8685,7 +8979,7 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nth-check@^2.0.1: +nth-check@^2.0.1, nth-check@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== @@ -8734,6 +9028,16 @@ object.assign@^4.1.4, object.assign@^4.1.7: has-symbols "^1.1.0" object-keys "^1.1.1" +object.entries@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.9.tgz#e4770a6a1444afb61bd39f984018b5bede25f8b3" + integrity sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-object-atoms "^1.1.1" + object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" @@ -8757,16 +9061,7 @@ object.getownpropertydescriptors@^2.1.8: gopd "^1.2.0" safe-array-concat "^1.1.3" -object.groupby@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" - integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - es-abstract "^1.23.2" - -object.values@^1.2.1: +object.values@^1.1.6, object.values@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== @@ -8912,7 +9207,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.0.0, parse-json@^5.2.0: +parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -9055,6 +9350,11 @@ peberminta@^0.9.0: resolved "https://registry.yarnpkg.com/peberminta/-/peberminta-0.9.0.tgz#8ec9bc0eb84b7d368126e71ce9033501dca2a352" integrity sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ== +peowly@^1.3.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/peowly/-/peowly-1.3.3.tgz#049bfb91494c6a25b1f04896506378fce2453e9f" + integrity sha512-5UmUtvuCv3KzBX2NuQw2uF28o0t8Eq4KkPRZfUCzJs+DiNVKw7OaYn29vNDgrt/Pggs23CPlSTqgzlhHJfpT0A== + picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -9099,6 +9399,14 @@ possible-typed-array-names@^1.0.0: resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== +postcss-selector-parser@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz#e75d2e0d843f620e5df69076166f4e16f891cb9f" + integrity sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + postcss@^8.3.11: version "8.5.6" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.6.tgz#2825006615a619b4f62a9e7426cc120b349a8f3c" @@ -9187,6 +9495,15 @@ promise@^7.0.1: dependencies: asap "~2.0.3" +prop-types@^15.8.1: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + property-expr@^2.0.2: version "2.0.6" resolved "https://registry.yarnpkg.com/property-expr/-/property-expr-2.0.6.tgz#f77bc00d5928a6c748414ad12882e83f24aec1e8" @@ -9331,11 +9648,6 @@ punycode2@~1.0.0: resolved "https://registry.yarnpkg.com/punycode2/-/punycode2-1.0.1.tgz#7190290a2f672a97c18bda38ad9f402787b4eded" integrity sha512-+TXpd9YRW4YUZZPoRHJ3DILtWwootGc2DsgvfHmklQ8It1skINAuqSdqizt5nlTaBmwrYACHkHApCXjc9gHk2Q== -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - punycode@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" @@ -9351,18 +9663,6 @@ pure-rand@^7.0.0: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-7.0.1.tgz#6f53a5a9e3e4a47445822af96821ca509ed37566" integrity sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ== -pvtsutils@^1.3.5, pvtsutils@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.6.tgz#ec46e34db7422b9e4fdc5490578c1883657d6001" - integrity sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg== - dependencies: - tslib "^2.8.1" - -pvutils@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3" - integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ== - qs@^6.14.0, qs@~6.14.0: version "6.14.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.1.tgz#a41d85b9d3902f31d27861790506294881871159" @@ -9427,6 +9727,11 @@ reachable-url@~1.8.3: got "~11.8.0" p-reflect "~2.1.0" +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + react-is@^18.3.1: version "18.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" @@ -9479,7 +9784,7 @@ regexp-tree@~0.1.1: resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.27.tgz#2198f0ef54518ffa743fe74d983b56ffd631b6cd" integrity sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA== -regexp.prototype.flags@^1.5.4: +regexp.prototype.flags@^1.5.3, regexp.prototype.flags@^1.5.4: version "1.5.4" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== @@ -9549,12 +9854,15 @@ resolve@^1.15.1: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== +resolve@^2.0.0-next.5: + version "2.0.0-next.6" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.6.tgz#b3961812be69ace7b3bc35d5bf259434681294af" + integrity sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA== dependencies: - is-core-module "^2.13.0" + es-errors "^1.3.0" + is-core-module "^2.16.1" + node-exports-info "^1.6.0" + object-keys "^1.1.1" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -9580,13 +9888,6 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rosie@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/rosie/-/rosie-2.1.1.tgz#f8c9b8145d581d19fb1c933cf6ac1c554ad68798" @@ -9699,7 +10000,7 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2, semver@^7.7.3: +semver@^7.3.5, semver@^7.5.3, semver@^7.5.4, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2, semver@^7.7.3: version "7.7.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== @@ -9941,6 +10242,11 @@ stable-hash-x@^0.2.0: resolved "https://registry.yarnpkg.com/stable-hash-x/-/stable-hash-x-0.2.0.tgz#dfd76bfa5d839a7470125c6a6b3c8b22061793e9" integrity sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ== +stable-hash@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" + integrity sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA== + stack-utils@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" @@ -9984,12 +10290,7 @@ streamsearch@0.1.2: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" integrity sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA== -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -string-env-interpolation@1.0.1: +string-env-interpolation@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz#ad4397ae4ac53fe6c91d1402ad6f6a52862c7152" integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== @@ -10020,6 +10321,33 @@ string-width@4.2.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2. is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.matchall@^4.0.12: + version "4.0.12" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz#6c88740e49ad4956b1332a911e949583a275d4c0" + integrity sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-abstract "^1.23.6" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.6" + gopd "^1.2.0" + has-symbols "^1.1.0" + internal-slot "^1.1.0" + regexp.prototype.flags "^1.5.3" + set-function-name "^2.0.2" + side-channel "^1.1.0" + +string.prototype.repeat@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz#e90872ee0308b29435aa26275f6e1b762daee01a" + integrity sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trim@^1.2.10: version "1.2.10" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" @@ -10162,12 +10490,21 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +sync-fetch@0.6.0-2: + version "0.6.0-2" + resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.6.0-2.tgz#d82d6dc8efaf2d103a9015e7bd7ba0bfc8e078f2" + integrity sha512-c7AfkZ9udatCuAy9RSfiGPpeOKKUAUK5e1cXadLOGUjasdxqYqAK0jTNkM/FSEyJ3a5Ra27j/tw/PS0qLmaF/A== + dependencies: + node-fetch "^3.3.2" + timeout-signal "^2.0.0" + whatwg-mimetype "^4.0.0" + synchronous-promise@^2.0.10: version "2.0.17" resolved "https://registry.yarnpkg.com/synchronous-promise/-/synchronous-promise-2.0.17.tgz#38901319632f946c982152586f2caf8ddc25c032" integrity sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g== -synckit@^0.11.12, synckit@^0.11.8, "synckit@^0.6.2 || ^0.7.3 || ^0.11.5": +synckit@^0.11.12, synckit@^0.11.8: version "0.11.12" resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.12.tgz#abe74124264fbc00a48011b0d98bdc1cffb64a7b" integrity sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ== @@ -10199,12 +10536,12 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== +timeout-signal@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/timeout-signal/-/timeout-signal-2.0.0.tgz#23207ea448d50258bb0defe3beea4a467643abba" + integrity sha512-YBGpG4bWsHoPvofT6y/5iqulfXIiIErl5B0LdtHT1mGXDFTAhhRrbUpTvBgYbovr+3cKblya2WAOcpoy90XguA== -tinyglobby@^0.2.12, tinyglobby@^0.2.14, tinyglobby@^0.2.15: +tinyglobby@^0.2.12, tinyglobby@^0.2.13, tinyglobby@^0.2.14, tinyglobby@^0.2.15: version "0.2.15" resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.15.tgz#e228dd1e638cea993d2fdb4fcd2d4602a79951c2" integrity sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ== @@ -10408,16 +10745,6 @@ tsc-alias@^1.8.16: normalize-path "^3.0.0" plimit-lit "^1.2.6" -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - tsconfig-paths@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" @@ -10432,12 +10759,12 @@ tslib@1.11.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== -tslib@^1.10.0, tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: +tslib@^1.10.0, tslib@^1.11.1, tslib@^1.9.0, tslib@^1.9.3: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.0, tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.4.1, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.7.0, tslib@^2.8.1: +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.2, tslib@^2.6.3, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -10452,13 +10779,6 @@ tslog@^4.10.2: resolved "https://registry.yarnpkg.com/tslog/-/tslog-4.10.2.tgz#45c870d7fe9558d59ce288eeb86ba49eaaf25e1e" integrity sha512-XuELoRpMR+sq8fuWwX7P0bcj+PRNiicOKDEb3fGNURhxWVyykCi9BNq7c4uVz7h7P0sj8qgBsr5SWS6yBClq3g== -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -10471,11 +10791,6 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" @@ -10539,6 +10854,16 @@ typed-array-length@^1.0.7: possible-typed-array-names "^1.0.0" reflect.getprototypeof "^1.0.6" +typescript-eslint@^8.35.1, typescript-eslint@^8.56.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.56.0.tgz#f4686ccaaf2fb86daf0133820da40ca5961a2236" + integrity sha512-c7toRLrotJ9oixgdW7liukZpsnq5CZ7PuKztubGYlNppuTqhIoWfhgHo/7EU0v06gS2l/x0i2NEFK1qMIf0rIg== + dependencies: + "@typescript-eslint/eslint-plugin" "8.56.0" + "@typescript-eslint/parser" "8.56.0" + "@typescript-eslint/typescript-estree" "8.56.0" + "@typescript-eslint/utils" "8.56.0" + typescript@^5.8.3: version "5.9.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" @@ -10620,7 +10945,7 @@ unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unrs-resolver@^1.7.11: +unrs-resolver@^1.6.2, unrs-resolver@^1.7.11, unrs-resolver@^1.9.2: version "1.11.1" resolved "https://registry.yarnpkg.com/unrs-resolver/-/unrs-resolver-1.11.1.tgz#be9cd8686c99ef53ecb96df2a473c64d304048a9" integrity sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg== @@ -10655,6 +10980,13 @@ update-browserslist-db@^1.2.0: escalade "^3.2.0" picocolors "^1.1.1" +upper-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-2.0.2.tgz#d89810823faab1df1549b7d97a76f8662bae6f7a" + integrity sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg== + dependencies: + tslib "^2.0.3" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -10678,12 +11010,12 @@ url-regex@~4.1.1: ip-regex "^1.0.1" tlds "^1.187.0" -urlpattern-polyfill@^8.0.0: - version "8.0.2" - resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-8.0.2.tgz#99f096e35eff8bf4b5a2aa7d58a1523d6ebc7ce5" - integrity sha512-Qp95D4TPJl1kC9SKigDcqgyM2VDVO4RiJc2d4qe5GrYm+zbIQCWWKAFaJNQ4BhdFeDGwBmAxqJBwWSJDb9T3BQ== +urlpattern-polyfill@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.1.0.tgz#1b2517e614136c73ba32948d5e7a3a063cba8e74" + integrity sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw== -util-deprecate@^1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -10767,11 +11099,6 @@ value-or-promise@1.0.11: resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== -value-or-promise@^1.0.11, value-or-promise@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" - integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== - vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -10792,6 +11119,18 @@ void-elements@^3.1.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09" integrity sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w== +vue-eslint-parser@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/vue-eslint-parser/-/vue-eslint-parser-10.4.0.tgz#fd7251d0e710a88a6618f50e8a27973bc3c8d69c" + integrity sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg== + dependencies: + debug "^4.4.0" + eslint-scope "^8.2.0 || ^9.0.0" + eslint-visitor-keys "^4.2.0 || ^5.0.0" + espree "^10.3.0 || ^11.0.0" + esquery "^1.6.0" + semver "^7.6.3" + w3c-xmlserializer@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" @@ -10829,22 +11168,11 @@ web-resource-inliner@^8.0.0: mime "^2.4.6" valid-data-url "^3.0.0" -web-streams-polyfill@^3.2.1: +web-streams-polyfill@^3.0.3: version "3.3.3" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz#2073b91a2fdb1fbfbd401e7de0ac9f8214cecb4b" integrity sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw== -webcrypto-core@^1.8.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/webcrypto-core/-/webcrypto-core-1.8.1.tgz#09d5bd8a9c48e9fbcaf412e06b1ff1a57514ce86" - integrity sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A== - dependencies: - "@peculiar/asn1-schema" "^2.3.13" - "@peculiar/json-schema" "^1.1.12" - asn1js "^3.0.5" - pvtsutils "^1.3.5" - tslib "^2.7.0" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -11018,26 +11346,21 @@ write-file-atomic@^5.0.1: imurmurhash "^0.1.4" signal-exit "^4.0.1" -ws@8.13.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - "ws@^5.2.0 || ^6.0.0 || ^7.0.0": version "7.5.10" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== -ws@^8.12.0: - version "8.18.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.1.tgz#ea131d3784e1dfdff91adb0a4a116b127515e3cb" - integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== - -ws@^8.18.3: +ws@^8.17.1, ws@^8.18.3, ws@^8.19.0: version "8.19.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.19.0.tgz#ddc2bdfa5b9ad860204f5a72a4863a8895fd8c8b" integrity sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg== +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + xml-name-validator@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" @@ -11088,6 +11411,19 @@ yallist@^5.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-5.0.0.tgz#00e2de443639ed0d78fd87de0d27469fbcffb533" integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== +yaml-eslint-parser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yaml-eslint-parser/-/yaml-eslint-parser-2.0.0.tgz#8cb63e3e28787557b9f295df0a8307c327b7fde4" + integrity sha512-h0uDm97wvT2bokfwwTmY6kJ1hp6YDFL0nRHwNKz8s/VD1FH/vvZjAKoMUE+un0eaYBSG7/c6h+lJTP+31tjgTw== + dependencies: + eslint-visitor-keys "^5.0.0" + yaml "^2.0.0" + +yaml@^2.0.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.8.2.tgz#5694f25eca0ce9c3e7a9d9e00ce0ddabbd9e35c5" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"