diff --git a/.eslintrc.cjs b/.eslintrc.cjs deleted file mode 100644 index 53283906..00000000 --- a/.eslintrc.cjs +++ /dev/null @@ -1,187 +0,0 @@ -const path = require('node:path'); - -const rulesDirPlugin = require('eslint-plugin-rulesdir'); - -rulesDirPlugin.RULES_DIR = path.join(__dirname, 'eslint'); - -module.exports = { - extends: [ - 'eslint:recommended', - 'plugin:import/recommended', - 'plugin:import/typescript', - 'plugin:promise/recommended', - 'plugin:n/recommended', - 'plugin:unicorn/recommended', - 'prettier', - ], - plugins: ['import', 'unicorn', 'unused-imports', 'rulesdir', 'simple-import-sort'], - ignorePatterns: ['**/dist/*', 'lib/generated/**/*', 'coverage/**/*', '**/__generated__/**'], - env: { - browser: false, - node: true, - }, - parserOptions: { - sourceType: 'module', - ecmaVersion: 2022, - }, - rules: { - 'space-before-function-paren': 'off', - }, - settings: { - 'import/parsers': { - '@typescript-eslint/parser': ['.ts'], - }, - 'import/resolver': { - typescript: {}, - }, - }, - overrides: [ - { - files: ['**/*.ts'], - parser: '@typescript-eslint/parser', - parserOptions: { - project: './tsconfig.json', - }, - extends: [ - 'plugin:@typescript-eslint/recommended', - 'plugin:@typescript-eslint/recommended-requiring-type-checking', - 'plugin:@typescript-eslint/strict', - ], - plugins: ['@typescript-eslint', 'tsdoc'], - rules: { - '@typescript-eslint/restrict-template-expressions': 'off', - 'unicorn/import-style': 'off', - 'rulesdir/no-relative-parent-import': 'error', - 'unused-imports/no-unused-imports': 'error', - curly: ['error'], - 'tsdoc/syntax': 'error', - 'no-new-object': 'error', - 'no-console': 'error', - 'no-new-wrappers': 'error', - 'unicorn/no-null': 'off', - 'unicorn/no-unsafe-regex': 'error', - 'unicorn/numeric-separators-style': 'off', - 'unicorn/prevent-abbreviations': 'off', - 'unicorn/better-regex': 'error', - 'unicorn/prefer-ternary': 'off', - 'unicorn/no-instanceof-array': 'error', - 'unicorn/no-new-array': 'error', - 'unicorn/no-new-buffer': 'error', - 'unicorn/no-unnecessary-await': 'error', - 'unicorn/throw-new-error': 'off', - 'unicorn/no-useless-promise-resolve-reject': 'error', - 'unicorn/prefer-string-starts-ends-with': 'error', - 'unicorn/prefer-string-slice': 'error', - 'unicorn/prefer-regexp-test': 'error', - 'unicorn/prefer-module': 'error', - 'unicorn/prefer-modern-math-apis': 'error', - 'unicorn/prefer-includes': 'error', - quotes: 'off', - '@typescript-eslint/quotes': 'off', - 'n/no-missing-import': 'off', - 'linebreak-style': ['error', 'unix'], - indent: 'off', - 'array-element-newline': ['error', 'consistent'], - 'array-bracket-newline': ['error', 'consistent'], - 'promise/catch-or-return': ['error', { allowFinally: true }], - '@typescript-eslint/restrict-plus-operands': ['error', { skipCompoundAssignments: false }], - '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }], - '@typescript-eslint/object-curly-spacing': ['error', 'always'], - 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], - '@typescript-eslint/no-unsafe-enum-comparison': 'off', - '@typescript-eslint/consistent-type-imports': [ - 'error', - { - prefer: 'type-imports', - fixStyle: 'separate-type-imports', - }, - ], - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/member-delimiter-style': [ - 'error', - { - multiline: { - delimiter: 'semi', - requireLast: true, - }, - singleline: { - delimiter: 'semi', - requireLast: false, - }, - multilineDetection: 'brackets', - }, - ], - '@typescript-eslint/space-before-function-paren': 'off', - '@typescript-eslint/semi': ['error', 'always'], - semi: ['error', 'always'], - 'comma-dangle': [ - 'error', - { - arrays: 'always-multiline', - objects: 'always-multiline', - imports: 'always-multiline', - exports: 'always-multiline', - functions: 'ignore', - }, - ], - 'import/first': 'error', - 'import/no-duplicates': 'error', - 'import/newline-after-import': 'error', - 'import/no-named-as-default': 'off', - 'simple-import-sort/imports': [ - 'error', - { - groups: [ - // Side effect imports. - [String.raw`^\u0000`], - // Node.js builtins prefixed with `node:`. - ['^node:'], - // Absolute imports and other imports such as Vue-style `@/foo`. - // Anything not matched in another group. - ['^'], - // Packages. - // Things that start with a letter (or digit or underscore), or `@` followed by a letter. - ['^@app/.*'], - // Relative imports. - // Anything that starts with a dot. - [String.raw`^\.`], - ], - }, - ], - 'simple-import-sort/exports': 'error', - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': [ - 'error', - { args: 'after-used', varsIgnorePattern: '_', destructuredArrayIgnorePattern: '^_' }, - ], - '@typescript-eslint/strict-boolean-expressions': 'off', - }, - }, - { - files: ['tests/**/*', '*.test.ts'], - rules: { - '@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }], - '@typescript-eslint/require-await': 'off', - '@typescript-eslint/no-unnecessary-condition': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-explicit-any': 'off', - }, - }, - { - files: ['**/*.cjs'], - rules: { - '@typescript-eslint/consistent-type-imports': 'off', - '@typescript-eslint/require-await': 'off', - '@typescript-eslint/no-unnecessary-condition': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-non-null-assertion': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-explicit-any': 'off', - }, - }, - ], -}; diff --git a/bin/main.ts b/bin/main.ts index c57f9b11..da51c4e8 100644 --- a/bin/main.ts +++ b/bin/main.ts @@ -9,9 +9,8 @@ import { Subscriber } from '@app/lib/redis.ts'; import { createServer } from '@app/lib/server.ts'; if (process.argv.includes('--help') || process.argv.includes('-h')) { - // eslint-disable-next-line no-console console.log('check ./lib/config.ts for all available env'); - // eslint-disable-next-line n/no-process-exit,unicorn/no-process-exit + // eslint-disable-next-line unicorn/no-process-exit process.exit(); } diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..0de263bf --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,206 @@ +import eslint from '@eslint/js'; +import eslintConfigPrettier from 'eslint-config-prettier'; +import pluginPromise from 'eslint-plugin-promise'; +import simpleImportSort from 'eslint-plugin-simple-import-sort'; +import eslintPluginTsDoc from 'eslint-plugin-tsdoc'; +import eslintPluginUnicorn from 'eslint-plugin-unicorn'; +import unusedImports from 'eslint-plugin-unused-imports'; +import tsEslint from 'typescript-eslint'; + +import firstPartEslintPlugin from './eslint/index.mjs'; + +export default tsEslint.config( + { ignores: ['dist/**', 'coverage/**', '**/*.test.ts', '**/__generated__/**', '**/generated/**'] }, + eslint.configs.recommended, + pluginPromise.configs['flat/recommended'], + ...tsEslint.configs.recommendedTypeChecked, + ...tsEslint.configs.stylisticTypeChecked, + { + languageOptions: { + parserOptions: { + projectService: { + defaultProject: 'tsconfig.json', + }, + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + eslintPluginUnicorn.configs['flat/recommended'], + { + rules: { + 'unicorn/import-style': 'off', + 'unicorn/no-array-reduce': 'off', + 'unicorn/no-null': 'off', + 'unicorn/no-unsafe-regex': 'error', + 'unicorn/numeric-separators-style': 'off', + 'unicorn/prevent-abbreviations': 'off', + 'unicorn/better-regex': 'error', + 'unicorn/prefer-ternary': 'off', + 'unicorn/no-instanceof-array': 'error', + 'unicorn/no-new-array': 'error', + 'unicorn/no-new-buffer': 'error', + 'unicorn/no-unnecessary-await': 'error', + 'unicorn/throw-new-error': 'error', + 'unicorn/no-useless-promise-resolve-reject': 'error', + 'unicorn/prefer-string-starts-ends-with': 'error', + 'unicorn/prefer-string-slice': 'error', + 'unicorn/prefer-regexp-test': 'error', + 'unicorn/prefer-module': 'error', + 'unicorn/prefer-modern-math-apis': 'error', + 'unicorn/prefer-includes': 'error', + }, + }, + { + plugins: { + tsdoc: eslintPluginTsDoc, + 'simple-import-sort': simpleImportSort, + 'first-part': firstPartEslintPlugin, + 'unused-imports': unusedImports, + }, + }, + { + rules: { + '@typescript-eslint/restrict-template-expressions': 'off', + 'unicorn/import-style': 'off', + 'first-part/no-relative-parent-import': 'error', + 'unused-imports/no-unused-imports': 'error', + curly: ['error'], + 'tsdoc/syntax': 'error', + 'no-new-object': 'error', + 'no-console': 'error', + 'no-new-wrappers': 'error', + 'unicorn/no-null': 'off', + 'unicorn/no-unsafe-regex': 'error', + 'unicorn/numeric-separators-style': 'off', + 'unicorn/prevent-abbreviations': 'off', + 'unicorn/better-regex': 'error', + 'unicorn/prefer-ternary': 'off', + 'unicorn/no-instanceof-array': 'error', + 'unicorn/no-new-array': 'error', + 'unicorn/no-new-buffer': 'error', + 'unicorn/no-unnecessary-await': 'error', + 'unicorn/throw-new-error': 'off', + 'unicorn/no-useless-promise-resolve-reject': 'error', + 'unicorn/prefer-string-starts-ends-with': 'error', + 'unicorn/prefer-string-slice': 'error', + 'unicorn/prefer-regexp-test': 'error', + 'unicorn/prefer-module': 'error', + 'unicorn/prefer-modern-math-apis': 'error', + 'unicorn/prefer-includes': 'error', + quotes: 'off', + '@typescript-eslint/quotes': 'off', + 'n/no-missing-import': 'off', + 'linebreak-style': ['error', 'unix'], + indent: 'off', + 'array-element-newline': ['error', 'consistent'], + 'array-bracket-newline': ['error', 'consistent'], + 'promise/catch-or-return': ['error', { allowFinally: true }], + 'require-await': 'off', + '@typescript-eslint/no-non-null-assertion': 'error', + '@typescript-eslint/require-await': 'error', + '@typescript-eslint/no-unsafe-enum-comparison': 'off', + '@typescript-eslint/restrict-plus-operands': ['error', { skipCompoundAssignments: false }], + '@typescript-eslint/no-floating-promises': ['error', { ignoreVoid: true }], + '@typescript-eslint/object-curly-spacing': ['error', 'always'], // 'import/consistent-type-specifier-style': ['error', 'prefer-top-level'], + '@typescript-eslint/consistent-type-imports': [ + 'error', + { + prefer: 'type-imports', + fixStyle: 'separate-type-imports', + }, + ], + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/member-delimiter-style': [ + 'error', + { + multiline: { + delimiter: 'semi', + requireLast: true, + }, + singleline: { + delimiter: 'semi', + requireLast: false, + }, + multilineDetection: 'brackets', + }, + ], + '@typescript-eslint/space-before-function-paren': 'off', + '@typescript-eslint/semi': ['error', 'always'], + semi: ['error', 'always'], + 'comma-dangle': [ + 'error', + { + arrays: 'always-multiline', + objects: 'always-multiline', + imports: 'always-multiline', + exports: 'always-multiline', + functions: 'ignore', + }, + ], // 'import/first': 'error', + // 'import/no-duplicates': 'error', + // 'import/newline-after-import': 'error', + // 'import/no-named-as-default': 'off', + 'simple-import-sort/imports': [ + 'error', + { + groups: [ + // Side effect imports. + [String.raw`^\u0000`], // Node.js builtins prefixed with `node:`. + ['^node:'], // Absolute imports and other imports such as Vue-style `@/foo`. + // Anything not matched in another group. + ['^'], // Packages. + // Things that start with a letter (or digit or underscore), or `@` followed by a letter. + ['^@app/.*'], // Relative imports. + // Anything that starts with a dot. + [String.raw`^\.`], + ], + }, + ], + 'simple-import-sort/exports': 'error', + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + args: 'after-used', + varsIgnorePattern: '_', + destructuredArrayIgnorePattern: '^_', + }, + ], + '@typescript-eslint/strict-boolean-expressions': 'off', + }, + }, + { + files: ['tests/**/*', '*.test.ts'], + rules: { + '@typescript-eslint/consistent-type-imports': ['error', { disallowTypeAnnotations: false }], + '@typescript-eslint/require-await': 'off', + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, + }, + { + files: ['**/*.cjs', '**/*.js', '**/*.mjs'], + rules: { + '@typescript-eslint/consistent-type-imports': 'off', + '@typescript-eslint/require-await': 'off', + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, + }, + { + files: ['scripts/*.js', 'scripts/*.mjs'], + rules: { + 'no-console': 'off', + }, + }, + eslintConfigPrettier, +); diff --git a/eslint/index.mjs b/eslint/index.mjs new file mode 100644 index 00000000..950852e2 --- /dev/null +++ b/eslint/index.mjs @@ -0,0 +1,7 @@ +import noRelativeParentImport from './no-relative-parent-import.mjs'; + +export default { + rules: { + 'no-relative-parent-import': noRelativeParentImport, + }, +}; diff --git a/eslint/no-relative-parent-import.cjs b/eslint/no-relative-parent-import.mjs similarity index 84% rename from eslint/no-relative-parent-import.cjs rename to eslint/no-relative-parent-import.mjs index 15203186..a6c5eabf 100644 --- a/eslint/no-relative-parent-import.cjs +++ b/eslint/no-relative-parent-import.mjs @@ -1,15 +1,15 @@ // TODO: remove this after https://github.com/import-js/eslint-plugin-import/issues/2467 is fixed -const path = require('node:path'); -const posix = require('node:path/posix'); +import * as path from 'node:path'; +import * as posix from 'node:path/posix'; -const { ESLintUtils } = require('@typescript-eslint/utils'); +import { ESLintUtils } from '@typescript-eslint/utils'; -const projectRoot = posix.normalize(path.dirname(__dirname)); +const projectRoot = posix.normalize(path.dirname(import.meta.dirname)); const createRule = ESLintUtils.RuleCreator((name) => name); -module.exports = createRule({ +export default createRule({ name: 'no-relative-parent-import', meta: { type: 'problem', diff --git a/lib/auth/authcode.ts b/lib/auth/authcode.ts index 2c028e87..5efd2ad2 100644 --- a/lib/auth/authcode.ts +++ b/lib/auth/authcode.ts @@ -44,7 +44,6 @@ function authCode(str: string, decode: boolean, key = '') { } if (decode) { - // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with if (result.slice(0, 8) === md5(result.slice(8) + key).slice(0, 8)) { return result.slice(8); } diff --git a/lib/config.ts b/lib/config.ts index 19dfaf9b..80dce3a6 100644 --- a/lib/config.ts +++ b/lib/config.ts @@ -183,7 +183,6 @@ export function validateConfig(config: unknown) { ajv.errors ?.map((x) => { if (x.keyword === 'additionalProperties') { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions return `$${x.instancePath}: ${x.message}: ${JSON.stringify( x.params.additionalProperty, )}`; diff --git a/lib/graphql/__generated__/resolvers.ts b/lib/graphql/__generated__/resolvers.ts index f38e2526..80a916ee 100644 --- a/lib/graphql/__generated__/resolvers.ts +++ b/lib/graphql/__generated__/resolvers.ts @@ -1,4 +1,5 @@ import type { GraphQLResolveInfo } from 'graphql'; + import type { Context } from '@app/lib/graphql/context.ts'; export type Maybe = T | null; export type InputMaybe = Maybe; diff --git a/lib/graphql/context.ts b/lib/graphql/context.ts index 59ff4f2e..875bcad0 100644 --- a/lib/graphql/context.ts +++ b/lib/graphql/context.ts @@ -7,5 +7,6 @@ export interface Context { } declare module 'mercurius' { + // eslint-disable-next-line @typescript-eslint/no-empty-object-type interface MercuriusContext extends Context {} } diff --git a/lib/image/base.ts b/lib/image/base.ts index b8eb0e24..1e7d6153 100644 --- a/lib/image/base.ts +++ b/lib/image/base.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unnecessary-condition */ import config, { Image, testing } from '@app/lib/config.ts'; import { logger } from '@app/lib/logger.ts'; diff --git a/lib/orm/index.ts b/lib/orm/index.ts index d6bb4e80..56cdc7c5 100644 --- a/lib/orm/index.ts +++ b/lib/orm/index.ts @@ -73,8 +73,10 @@ export const AppDataSource = new DataSource({ logQuery(query, params) { logger.trace({ query, params }); }, + // eslint-disable-next-line @typescript-eslint/no-empty-function logSchemaBuild() {}, + // eslint-disable-next-line @typescript-eslint/no-empty-function logMigration() {}, }, diff --git a/lib/utils/date.ts b/lib/utils/date.ts index 140a4cb2..bafdcc45 100644 --- a/lib/utils/date.ts +++ b/lib/utils/date.ts @@ -1,8 +1,8 @@ export class DATE { constructor( readonly year: number, - readonly month: number = 0, - readonly day: number = 0, + readonly month = 0, + readonly day = 0, ) {} static parse(s: string): DATE { diff --git a/package.json b/package.json index 3f1cfb7b..83de4445 100644 --- a/package.json +++ b/package.json @@ -12,8 +12,8 @@ "scripts": { "format": "prettier --list-different -w ./", "tsc": "tsc", - "build-common": "node scripts/build-common.cjs", - "lint": "eslint --ext ts,cjs,js ./", + "lint": "eslint -c eslint.config.mjs ./", + "build-common": "node scripts/build-common.mjs", "start": "nodemon ./bin/main.ts", "test": "vitest --run", "vitest": "vitest", @@ -72,6 +72,7 @@ "yaml": "^2.5.1" }, "devDependencies": { + "@eslint/js": "^9.10.0", "@graphql-codegen/cli": "5.0.2", "@graphql-codegen/introspection": "4.0.3", "@graphql-codegen/typescript": "4.0.9", @@ -83,20 +84,17 @@ "@types/luxon": "^3.4.2", "@types/mime-types": "^2.1.4", "@types/node": "^20.16.10", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", - "@typescript-eslint/utils": "^7.18.0", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "@typescript-eslint/parser": "^8.5.0", + "@typescript-eslint/utils": "^8.5.0", "@vitest/coverage-v8": "^2.1.1", "@vitest/ui": "^2.1.1", "dotenv": "^16.4.5", "drizzle-kit": "^0.24.2", - "eslint": "^8.57.1", + "eslint": "9.11.1", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.6.3", - "eslint-plugin-import": "^2.30.0", - "eslint-plugin-n": "^17.10.3", - "eslint-plugin-promise": "^7.1.0", - "eslint-plugin-rulesdir": "^0.2.2", + "eslint-plugin-promise": "7.1.0", "eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-tsdoc": "^0.3.0", "eslint-plugin-unicorn": "^55.0.0", @@ -112,6 +110,7 @@ "prettier-plugin-jsdoc": "^1.3.0", "std-env": "^3.7.0", "typescript": "~5.5.4", + "typescript-eslint": "^8.8.0", "vite": "^5.4.8", "vitest": "^2.1.1", "vitest-github-actions-reporter": "^0.11.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a0b54516..87c3bc51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -147,6 +147,9 @@ importers: specifier: ^2.5.1 version: 2.5.1 devDependencies: + '@eslint/js': + specifier: ^9.10.0 + version: 9.10.0 '@graphql-codegen/cli': specifier: 5.0.2 version: 5.0.2(@types/node@20.16.10)(graphql@16.9.0)(typescript@5.5.4) @@ -181,14 +184,14 @@ importers: specifier: ^20.16.10 version: 20.16.10 '@typescript-eslint/eslint-plugin': - specifier: ^7.18.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) + specifier: ^8.5.0 + version: 8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/parser': - specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) + specifier: ^8.5.0 + version: 8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/utils': - specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) + specifier: ^8.5.0 + version: 8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) '@vitest/coverage-v8': specifier: ^2.1.1 version: 2.1.1(vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1)) @@ -202,38 +205,29 @@ importers: specifier: ^0.24.2 version: 0.24.2 eslint: - specifier: ^8.57.1 - version: 8.57.1 + specifier: 9.11.1 + version: 9.11.1(jiti@1.21.6) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.1) + version: 9.1.0(eslint@9.11.1(jiti@1.21.6)) eslint-import-resolver-typescript: specifier: ^3.6.3 - version: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1) - eslint-plugin-import: - specifier: ^2.30.0 - version: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-n: - specifier: ^17.10.3 - version: 17.10.3(eslint@8.57.1) + version: 3.6.3(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@9.11.1(jiti@1.21.6)) eslint-plugin-promise: - specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.1) - eslint-plugin-rulesdir: - specifier: ^0.2.2 - version: 0.2.2 + specifier: 7.1.0 + version: 7.1.0(eslint@9.11.1(jiti@1.21.6)) eslint-plugin-simple-import-sort: specifier: ^12.1.1 - version: 12.1.1(eslint@8.57.1) + version: 12.1.1(eslint@9.11.1(jiti@1.21.6)) eslint-plugin-tsdoc: specifier: ^0.3.0 version: 0.3.0 eslint-plugin-unicorn: specifier: ^55.0.0 - version: 55.0.0(eslint@8.57.1) + version: 55.0.0(eslint@9.11.1(jiti@1.21.6)) eslint-plugin-unused-imports: specifier: ^4.1.4 - version: 4.1.4(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1) + version: 4.1.4(@typescript-eslint/eslint-plugin@8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6)) graphql-tag: specifier: ^2.12.6 version: 2.12.6(graphql@16.9.0) @@ -267,6 +261,9 @@ importers: typescript: specifier: ~5.5.4 version: 5.5.4 + typescript-eslint: + specifier: ^8.8.0 + version: 8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) vite: specifier: ^5.4.8 version: 5.4.8(@types/node@20.16.10) @@ -1315,17 +1312,37 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/core@0.6.0': + resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.10.0': + resolution: {integrity: sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.11.1': + resolution: {integrity: sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.0': + resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/accept-negotiator@2.0.0': resolution: {integrity: sha512-/Sce/kBzuTxIq5tJh85nVNOq9wKD8s+viIgX0fFMDBdw95gnpf53qmF1oBgJym3cPFliWUuSloVg/1w/rH0FcQ==} @@ -1591,18 +1608,13 @@ packages: peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - '@humanwhocodes/config-array@0.13.0': - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} '@ioredis/as-callback@3.0.0': resolution: {integrity: sha512-Kqv1rZ3WbgOrS+hgzJ5xG5WQuhvzzSTRYvNeyPMLOAM78MHSnuKI20JeJGbpuAt//LCuP0vsexZcorqW7kWhJg==} @@ -2113,6 +2125,9 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} @@ -2122,6 +2137,9 @@ packages: '@types/js-yaml@4.0.9': resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -2155,66 +2173,119 @@ packages: '@types/ws@8.5.12': resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} - '@typescript-eslint/eslint-plugin@7.18.0': - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.5.0': + resolution: {integrity: sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/eslint-plugin@8.8.0': + resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@7.18.0': - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.5.0': + resolution: {integrity: sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/scope-manager@7.18.0': - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.8.0': + resolution: {integrity: sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@8.5.0': + resolution: {integrity: sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.8.0': + resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.5.0': + resolution: {integrity: sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/type-utils@7.18.0': - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@8.8.0': + resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/types@7.18.0': - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.5.0': + resolution: {integrity: sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.8.0': + resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.5.0': + resolution: {integrity: sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.8.0': + resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/utils@7.18.0': - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.5.0': + resolution: {integrity: sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/utils@8.8.0': + resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@7.18.0': - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.5.0': + resolution: {integrity: sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@typescript-eslint/visitor-keys@8.8.0': + resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vitest/coverage-v8@2.1.1': resolution: {integrity: sha512-md/A7A3c42oTT8JUHSqjP5uKTWJejzUW4jalpvs+rZ27gsURsMU8DEb+8Jf8C6Kj2gwfSHJqobDNBuoqlm0cFw==} @@ -2850,10 +2921,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -3069,12 +3136,6 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-compat-utils@0.5.0: - resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=6.0.0' - eslint-config-prettier@9.1.0: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -3118,12 +3179,6 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-es-x@7.6.0: - resolution: {integrity: sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '>=8' - eslint-plugin-import@2.30.0: resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} engines: {node: '>=4'} @@ -3134,22 +3189,12 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-n@17.10.3: - resolution: {integrity: sha512-ySZBfKe49nQZWR1yFaA0v/GsH6Fgp8ah6XV0WDz6CN8WO0ek4McMzb7A2xnf4DCYV43frjCygvb9f/wx7UUxRw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.23.0' - eslint-plugin-promise@7.1.0: resolution: {integrity: sha512-8trNmPxdAy3W620WKDpaS65NlM5yAumod6XeC4LOb+jxlkG4IVcp68c6dXY2ev+uT4U1PtG57YDV6EGAXN0GbQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-rulesdir@0.2.2: - resolution: {integrity: sha512-qhBtmrWgehAIQeMDJ+Q+PnOz1DWUZMPeVrI0wE9NZtnpIMFUfh3aPKFYt2saeMSemZRrvUtjWfYwepsC8X+mjQ==} - engines: {node: '>=4.0.0'} - eslint-plugin-simple-import-sort@12.1.1: resolution: {integrity: sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA==} peerDependencies: @@ -3173,22 +3218,31 @@ packages: '@typescript-eslint/eslint-plugin': optional: true - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.11.1: + resolution: {integrity: sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} @@ -3338,9 +3392,9 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -3358,9 +3412,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} @@ -3460,9 +3514,9 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} globals@15.8.0: resolution: {integrity: sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==} @@ -4751,11 +4805,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rollup@4.21.2: resolution: {integrity: sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -5179,10 +5228,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -5273,6 +5318,15 @@ packages: typeorm-aurora-data-api-driver: optional: true + typescript-eslint@8.8.0: + resolution: {integrity: sha512-BjIT/VwJ8+0rVO01ZQ2ZVnjE1svFBiRczcpr1t1Yxt7sT25VSbPfrJtDsQ8uQTy2pilX5nI9gwxhUyLULNentw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -6734,19 +6788,29 @@ snapshots: '@esbuild/win32-x64@0.23.0': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.11.1(jiti@1.21.6))': dependencies: - eslint: 8.57.1 + eslint: 9.11.1(jiti@1.21.6) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} + '@eslint-community/regexpp@4.11.0': {} - '@eslint/eslintrc@2.1.4': + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.6(supports-color@5.5.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.6.0': {} + + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 debug: 4.3.6(supports-color@5.5.0) - espree: 9.6.1 - globals: 13.24.0 + espree: 10.1.0 + globals: 14.0.0 ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -6755,7 +6819,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.1': {} + '@eslint/js@9.10.0': {} + + '@eslint/js@9.11.1': {} + + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.2.0': + dependencies: + levn: 0.4.1 '@fastify/accept-negotiator@2.0.0': {} @@ -7282,17 +7354,9 @@ snapshots: dependencies: graphql: 16.9.0 - '@humanwhocodes/config-array@0.13.0': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6(supports-color@5.5.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.0': {} '@ioredis/as-callback@3.0.0': {} @@ -7496,7 +7560,8 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.21.2': optional: true - '@rtsao/scc@1.1.0': {} + '@rtsao/scc@1.1.0': + optional: true '@sec-ant/readable-stream@0.4.1': {} @@ -7873,6 +7938,8 @@ snapshots: '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/http-cache-semantics@4.0.4': {} '@types/ioredis-mock@8.2.5': @@ -7884,7 +7951,10 @@ snapshots: '@types/js-yaml@4.0.9': {} - '@types/json5@0.0.29': {} + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': + optional: true '@types/lodash-es@4.17.12': dependencies: @@ -7914,15 +7984,15 @@ snapshots: dependencies: '@types/node': 20.16.10 - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 8.57.1 + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.5.0 + '@typescript-eslint/type-utils': 8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.5.0 + eslint: 9.11.1(jiti@1.21.6) graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 @@ -7932,44 +8002,94 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.18.0 + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/type-utils': 8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.8.0 + eslint: 9.11.1(jiti@1.21.6) + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/scope-manager': 8.5.0 + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.5.0 + debug: 4.3.6(supports-color@5.5.0) + eslint: 9.11.1(jiti@1.21.6) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.8.0 debug: 4.3.6(supports-color@5.5.0) - eslint: 8.57.1 + eslint: 9.11.1(jiti@1.21.6) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.18.0': + '@typescript-eslint/scope-manager@8.5.0': dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/visitor-keys': 8.5.0 - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)': + '@typescript-eslint/scope-manager@8.8.0': dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 + + '@typescript-eslint/type-utils@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) debug: 4.3.6(supports-color@5.5.0) - eslint: 8.57.1 ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: + - eslint - supports-color - '@typescript-eslint/types@7.18.0': {} + '@typescript-eslint/type-utils@8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + debug: 4.3.6(supports-color@5.5.0) + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@8.5.0': {} - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': + '@typescript-eslint/types@8.8.0': {} + + '@typescript-eslint/typescript-estree@8.5.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/visitor-keys': 8.5.0 debug: 4.3.6(supports-color@5.5.0) - globby: 11.1.0 + fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 @@ -7979,23 +8099,52 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.8.0(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 + debug: 4.3.6(supports-color@5.5.0) + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.5.0 + '@typescript-eslint/types': 8.5.0 + '@typescript-eslint/typescript-estree': 8.5.0(typescript@5.5.4) + eslint: 9.11.1(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - eslint: 8.57.1 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.5.4) + eslint: 9.11.1(jiti@1.21.6) transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@7.18.0': + '@typescript-eslint/visitor-keys@8.5.0': dependencies: - '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/types': 8.5.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} + '@typescript-eslint/visitor-keys@8.8.0': + dependencies: + '@typescript-eslint/types': 8.8.0 + eslint-visitor-keys: 3.4.3 '@vitest/coverage-v8@2.1.1(vitest@2.1.1(@types/node@20.16.10)(@vitest/ui@2.1.1))': dependencies: @@ -8199,6 +8348,7 @@ snapshots: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 + optional: true array-includes@3.1.8: dependencies: @@ -8208,6 +8358,7 @@ snapshots: es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 + optional: true array-union@2.1.0: {} @@ -8219,6 +8370,7 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 + optional: true array.prototype.flat@1.3.2: dependencies: @@ -8226,6 +8378,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 + optional: true array.prototype.flatmap@1.3.2: dependencies: @@ -8233,6 +8386,7 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 + optional: true arraybuffer.prototype.slice@1.0.3: dependencies: @@ -8244,6 +8398,7 @@ snapshots: get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 + optional: true asap@2.0.6: {} @@ -8264,6 +8419,7 @@ snapshots: available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 + optional: true avvio@9.0.0: dependencies: @@ -8390,6 +8546,7 @@ snapshots: function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 + optional: true callsites@3.1.0: {} @@ -8630,18 +8787,21 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 + optional: true data-view-byte-length@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 + optional: true data-view-byte-offset@1.0.0: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 + optional: true dataloader@2.2.2: {} @@ -8686,12 +8846,14 @@ snapshots: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 + optional: true define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 + optional: true denque@2.1.0: {} @@ -8714,10 +8876,7 @@ snapshots: doctrine@2.1.0: dependencies: esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 + optional: true dot-case@3.0.4: dependencies: @@ -8843,32 +9002,39 @@ snapshots: typed-array-length: 1.0.6 unbox-primitive: 1.0.2 which-typed-array: 1.1.15 + optional: true es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 + optional: true - es-errors@1.3.0: {} + es-errors@1.3.0: + optional: true es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 + optional: true es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 + optional: true es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 + optional: true es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 + optional: true esbuild-register@3.6.0(esbuild@0.19.12): dependencies: @@ -8989,14 +9155,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.0(eslint@8.57.1): - dependencies: - eslint: 8.57.1 - semver: 7.6.3 - - eslint-config-prettier@9.1.0(eslint@8.57.1): + eslint-config-prettier@9.1.0(eslint@9.11.1(jiti@1.21.6)): dependencies: - eslint: 8.57.1 + eslint: 9.11.1(jiti@1.21.6) eslint-import-resolver-node@0.3.9: dependencies: @@ -9005,45 +9166,39 @@ snapshots: resolve: 1.22.8 transitivePeerDependencies: - supports-color + optional: true - eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1): + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@9.11.1(jiti@1.21.6)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.6(supports-color@5.5.0) enhanced-resolve: 5.17.0 - eslint: 8.57.1 - eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) + eslint: 9.11.1(jiti@1.21.6) + eslint-module-utils: 2.9.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) fast-glob: 3.3.2 get-tsconfig: 4.7.6 is-bun-module: 1.1.0 is-glob: 4.0.3 optionalDependencies: - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.9.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.9.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) - eslint: 8.57.1 + '@typescript-eslint/parser': 8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.11.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@9.11.1(jiti@1.21.6)) transitivePeerDependencies: - supports-color - eslint-plugin-es-x@7.6.0(eslint@8.57.1): - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.10.0 - eslint: 8.57.1 - eslint-compat-utils: 0.5.0(eslint@8.57.1) - - eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + eslint-plugin-import@2.30.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@9.11.1(jiti@1.21.6)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -9052,9 +9207,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.1 + eslint: 9.11.1(jiti@1.21.6) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.9.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.9.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@9.11.1(jiti@1.21.6)))(eslint@9.11.1(jiti@1.21.6)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -9065,47 +9220,34 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/parser': 8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + optional: true - eslint-plugin-n@17.10.3(eslint@8.57.1): - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - enhanced-resolve: 5.17.0 - eslint: 8.57.1 - eslint-plugin-es-x: 7.6.0(eslint@8.57.1) - get-tsconfig: 4.7.6 - globals: 15.8.0 - ignore: 5.3.1 - minimatch: 9.0.5 - semver: 7.6.3 - - eslint-plugin-promise@7.1.0(eslint@8.57.1): + eslint-plugin-promise@7.1.0(eslint@9.11.1(jiti@1.21.6)): dependencies: - eslint: 8.57.1 - - eslint-plugin-rulesdir@0.2.2: {} + eslint: 9.11.1(jiti@1.21.6) - eslint-plugin-simple-import-sort@12.1.1(eslint@8.57.1): + eslint-plugin-simple-import-sort@12.1.1(eslint@9.11.1(jiti@1.21.6)): dependencies: - eslint: 8.57.1 + eslint: 9.11.1(jiti@1.21.6) eslint-plugin-tsdoc@0.3.0: dependencies: '@microsoft/tsdoc': 0.15.0 '@microsoft/tsdoc-config': 0.17.0 - eslint-plugin-unicorn@55.0.0(eslint@8.57.1): + eslint-plugin-unicorn@55.0.0(eslint@9.11.1(jiti@1.21.6)): dependencies: '@babel/helper-validator-identifier': 7.24.7 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.6)) ci-info: 4.0.0 clean-regexp: 1.0.0 core-js-compat: 3.37.1 - eslint: 8.57.1 + eslint: 9.11.1(jiti@1.21.6) esquery: 1.5.0 globals: 15.8.0 indent-string: 4.0.0 @@ -9118,67 +9260,70 @@ snapshots: semver: 7.6.3 strip-indent: 3.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6)): dependencies: - eslint: 8.57.1 + eslint: 9.11.1(jiti@1.21.6) optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 8.5.0(@typescript-eslint/parser@8.5.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) - eslint-scope@7.2.2: + eslint-scope@8.0.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint@8.57.1: + eslint-visitor-keys@4.0.0: {} + + eslint@9.11.1(jiti@1.21.6): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.1 - '@humanwhocodes/config-array': 0.13.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.11.1(jiti@1.21.6)) + '@eslint-community/regexpp': 4.11.0 + '@eslint/config-array': 0.18.0 + '@eslint/core': 0.6.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.11.1 + '@eslint/plugin-kit': 0.2.0 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.6(supports-color@5.5.0) - 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 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 esquery: 1.5.0 esutils: 2.0.3 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.24.0 - graphemer: 1.4.0 ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 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 + optionalDependencies: + jiti: 1.21.6 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.1.0: dependencies: acorn: 8.12.0 acorn-jsx: 5.3.2(acorn@8.12.0) - eslint-visitor-keys: 3.4.3 + eslint-visitor-keys: 4.0.0 esquery@1.5.0: dependencies: @@ -9362,9 +9507,9 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 fill-range@7.1.1: dependencies: @@ -9386,17 +9531,17 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 flatted@3.3.1: {} for-each@0.3.3: dependencies: is-callable: 1.2.7 + optional: true foreground-child@3.1.1: dependencies: @@ -9420,8 +9565,10 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.3 functions-have-names: 1.2.3 + optional: true - functions-have-names@1.2.3: {} + functions-have-names@1.2.3: + optional: true generate-function@2.3.1: dependencies: @@ -9442,6 +9589,7 @@ snapshots: has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 + optional: true get-stream@8.0.1: {} @@ -9455,6 +9603,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 + optional: true get-tsconfig@4.7.6: dependencies: @@ -9497,15 +9646,14 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} globals@15.8.0: {} globalthis@1.0.3: dependencies: define-properties: 1.2.1 + optional: true globby@11.1.0: dependencies: @@ -9519,6 +9667,7 @@ snapshots: gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 + optional: true got@14.4.2: dependencies: @@ -9588,7 +9737,8 @@ snapshots: graphql@16.9.0: {} - has-bigints@1.0.2: {} + has-bigints@1.0.2: + optional: true has-flag@3.0.0: {} @@ -9597,14 +9747,18 @@ snapshots: has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 + optional: true - has-proto@1.0.3: {} + has-proto@1.0.3: + optional: true - has-symbols@1.0.3: {} + has-symbols@1.0.3: + optional: true has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 + optional: true hasown@2.0.2: dependencies: @@ -9717,6 +9871,7 @@ snapshots: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 + optional: true invariant@2.2.4: dependencies: @@ -9762,12 +9917,14 @@ snapshots: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 + optional: true is-arrayish@0.2.1: {} is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 + optional: true is-binary-path@2.1.0: dependencies: @@ -9777,6 +9934,7 @@ snapshots: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 + optional: true is-builtin-module@3.2.1: dependencies: @@ -9786,7 +9944,8 @@ snapshots: dependencies: semver: 7.6.3 - is-callable@1.2.7: {} + is-callable@1.2.7: + optional: true is-core-module@2.15.1: dependencies: @@ -9795,10 +9954,12 @@ snapshots: is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 + optional: true is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.2 + optional: true is-extglob@2.1.1: {} @@ -9820,11 +9981,13 @@ snapshots: dependencies: tslib: 2.7.0 - is-negative-zero@2.0.3: {} + is-negative-zero@2.0.3: + optional: true is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 + optional: true is-number@7.0.0: {} @@ -9836,6 +9999,7 @@ snapshots: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 + optional: true is-relative@1.0.0: dependencies: @@ -9844,6 +10008,7 @@ snapshots: is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 + optional: true is-stream@3.0.0: {} @@ -9852,14 +10017,17 @@ snapshots: is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 + optional: true is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 + optional: true is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 + optional: true is-unc-path@1.0.0: dependencies: @@ -9874,12 +10042,14 @@ snapshots: is-weakref@1.0.2: dependencies: call-bind: 1.0.7 + optional: true is-windows@1.0.2: {} isarray@1.0.0: {} - isarray@2.0.5: {} + isarray@2.0.5: + optional: true isexe@2.0.0: {} @@ -9974,6 +10144,7 @@ snapshots: json5@1.0.2: dependencies: minimist: 1.2.8 + optional: true json5@2.2.3: {} @@ -10471,9 +10642,11 @@ snapshots: object-assign@4.1.1: {} - object-inspect@1.13.1: {} + object-inspect@1.13.1: + optional: true - object-keys@1.1.1: {} + object-keys@1.1.1: + optional: true object.assign@4.1.5: dependencies: @@ -10481,6 +10654,7 @@ snapshots: define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 + optional: true object.fromentries@2.0.8: dependencies: @@ -10488,18 +10662,21 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 + optional: true object.groupby@1.0.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 + optional: true object.values@1.2.0: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 + optional: true ohm-js@16.6.0: {} @@ -10698,7 +10875,8 @@ snapshots: pluralize@8.0.0: {} - possible-typed-array-names@1.0.0: {} + possible-typed-array-names@1.0.0: + optional: true postcss@8.4.44: dependencies: @@ -10817,6 +10995,7 @@ snapshots: define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 + optional: true regjsparser@0.10.0: dependencies: @@ -10876,10 +11055,6 @@ snapshots: rfdc@1.4.1: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - rollup@4.21.2: dependencies: '@types/estree': 1.0.5 @@ -10918,6 +11093,7 @@ snapshots: get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 + optional: true safe-buffer@5.2.1: {} @@ -10926,6 +11102,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 + optional: true safe-regex2@4.0.0: dependencies: @@ -10965,6 +11142,7 @@ snapshots: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 + optional: true set-function-name@2.0.2: dependencies: @@ -10972,6 +11150,7 @@ snapshots: es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 + optional: true setimmediate@1.0.5: {} @@ -10996,6 +11175,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.1 + optional: true siginfo@2.0.0: {} @@ -11170,18 +11350,21 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 + optional: true string.prototype.trimend@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 + optional: true string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 + optional: true string_decoder@1.3.0: dependencies: @@ -11195,7 +11378,8 @@ snapshots: dependencies: ansi-regex: 6.0.1 - strip-bom@3.0.0: {} + strip-bom@3.0.0: + optional: true strip-final-newline@3.0.0: {} @@ -11304,6 +11488,7 @@ snapshots: json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 + optional: true tslib@2.6.2: {} @@ -11322,8 +11507,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.6.0: {} @@ -11337,6 +11520,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 + optional: true typed-array-byte-length@1.0.1: dependencies: @@ -11345,6 +11529,7 @@ snapshots: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 + optional: true typed-array-byte-offset@1.0.2: dependencies: @@ -11354,6 +11539,7 @@ snapshots: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 + optional: true typed-array-length@1.0.6: dependencies: @@ -11363,6 +11549,7 @@ snapshots: has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + optional: true typeorm@0.3.20(ioredis@5.4.1)(mysql2@3.11.3): dependencies: @@ -11387,6 +11574,17 @@ snapshots: transitivePeerDependencies: - supports-color + typescript-eslint@8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4): + dependencies: + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4))(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.8.0(eslint@9.11.1(jiti@1.21.6))(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + typescript@5.5.4: {} ua-parser-js@1.0.39: {} @@ -11397,6 +11595,7 @@ snapshots: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + optional: true unc-path-regex@0.1.2: {} @@ -11549,6 +11748,7 @@ snapshots: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 + optional: true which-module@2.0.1: {} @@ -11559,6 +11759,7 @@ snapshots: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 + optional: true which@2.0.2: dependencies: diff --git a/routes/admin/index.ts b/routes/admin/index.ts index 26e27825..12294b2a 100644 --- a/routes/admin/index.ts +++ b/routes/admin/index.ts @@ -10,7 +10,6 @@ import type { App } from '@app/routes/type.ts'; import * as ep from './ep.ts'; -// eslint-disable-next-line @typescript-eslint/require-await export async function setup(app: App) { app.addHook('preHandler', redirectIfNotLogin); diff --git a/routes/demo/index.ts b/routes/demo/index.ts index a51f1504..e712a198 100644 --- a/routes/demo/index.ts +++ b/routes/demo/index.ts @@ -23,7 +23,6 @@ declare module 'fastify' { } } -/* eslint-disable-next-line @typescript-eslint/require-await */ export async function setup(app: App) { await app.register(Cookie, { hook: 'preHandler', diff --git a/routes/hooks/pre-handler.ts b/routes/hooks/pre-handler.ts index 1bcc7779..55b2071a 100644 --- a/routes/hooks/pre-handler.ts +++ b/routes/hooks/pre-handler.ts @@ -104,7 +104,7 @@ export async function Auth(req: FastifyRequest, res: FastifyReply) { } export async function accessTokenAuth(req: FastifyRequest): Promise { - const token = req.headers['authorization']; + const token = req.headers.authorization; if (!token) { return false; } diff --git a/routes/hooks/rate-limit.ts b/routes/hooks/rate-limit.ts index 83c83141..7c7486aa 100644 --- a/routes/hooks/rate-limit.ts +++ b/routes/hooks/rate-limit.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/require-await */ import { createError } from '@fastify/error'; import type { IAuth } from '@app/lib/auth'; diff --git a/routes/oauth/index.test.ts b/routes/oauth/index.test.ts index 9517c309..9e36c442 100644 --- a/routes/oauth/index.test.ts +++ b/routes/oauth/index.test.ts @@ -126,7 +126,6 @@ describe('oauth', () => { }).toString(), }); - expect(refreshTokenResult.statusCode).toBe(200); expect(refreshTokenResult.json()).toMatchObject({ access_token: expect.any(String), expires_in: expect.any(Number), @@ -134,6 +133,7 @@ describe('oauth', () => { token_type: 'Bearer', user_id: expect.any(String), }); + expect(refreshTokenResult.statusCode).toBe(200); await expect( db diff --git a/routes/oauth/index.ts b/routes/oauth/index.ts index 14a75bd4..f2ff0dfb 100644 --- a/routes/oauth/index.ts +++ b/routes/oauth/index.ts @@ -39,29 +39,6 @@ interface TokenInfo { name: string; } -const TokenRequestCode = t.Object( - { - clientID: t.String(), - clientSecret: t.String(), - code: t.String(), - redirectUri: t.String(), - state: t.Optional(t.String()), - }, - { $id: 'TokenRequestCode' }, -); -type ITokenRequestCode = Static; - -const TokenRequestRefresh = t.Object( - { - clientID: t.String(), - clientSecret: t.String(), - refreshToken: t.String(), - redirectUri: t.String(), - }, - { $id: 'TokenRequestRefresh' }, -); -type ITokenRequestRefresh = Static; - const TokenResponse = t.Object( { access_token: t.String(), @@ -131,7 +108,6 @@ const InvalidClientIDError = createError<[]>( StatusCodes.BAD_REQUEST, ); -// eslint-disable-next-line @typescript-eslint/require-await export async function setup(app: App) { await app.register(Cookie, { hook: 'preHandler', @@ -259,7 +235,7 @@ export async function userOauthRoutes(app: App) { schema: { hide: true, body: t.Object({ - grant_type: t.String(), + grant_type: t.Union([t.Literal('authorization_code'), t.Literal('refresh_token')]), client_id: t.String(), client_secret: t.String(), code: t.Optional(t.String()), @@ -302,7 +278,13 @@ export async function userOauthRoutes(app: App) { ); } -async function tokenFromCode(req: ITokenRequestCode): Promise { +async function tokenFromCode(req: { + code: string; + clientID: string; + redirectUri: string; + clientSecret: string; + state?: string; +}): Promise { const [{ chii_oauth_clients: client = null, chii_apps: app = null } = {}] = await db .select() .from(chiiOauthClients) @@ -367,7 +349,12 @@ async function tokenFromCode(req: ITokenRequestCode): Promise { }; } -async function tokenFromRefresh(req: ITokenRequestRefresh): Promise { +async function tokenFromRefresh(req: { + refreshToken: string; + clientID: string; + redirectUri: string; + clientSecret: string; +}): Promise { const now = DateTime.now(); const refresh = await db.query.chiiOAuthRefreshToken.findFirst({ diff --git a/routes/private/routes/login.ts b/routes/private/routes/login.ts index f77c594e..367c69ca 100644 --- a/routes/private/routes/login.ts +++ b/routes/private/routes/login.ts @@ -61,7 +61,7 @@ export async function setup(app: App) { response: { 200: t.Ref(currentUser), 401: t.Ref(res.Error, { - examples: [res.formatError(NeedLoginError('get current user'))], + examples: [res.formatError(new NeedLoginError('get current user'))], }), }, }, @@ -99,7 +99,7 @@ export async function setup(app: App) { 401: t.Ref(res.Error, { description: '未登录', 'x-examples': { - NeedLoginError: { value: res.formatError(NeedLoginError('logout')) }, + NeedLoginError: { value: res.formatError(new NeedLoginError('logout')) }, }, }), }, @@ -178,7 +178,7 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, 'X-RateLimit-Limit': t.Integer({ description: 'limit per 10 minutes' }), 'X-RateLimit-Reset': t.Integer({ description: 'seconds to reset rate limit' }), }, - examples: [res.formatError(TooManyRequestsError())], + examples: [res.formatError(new TooManyRequestsError())], }), }, body: t.Ref(loginRequestBody), diff --git a/routes/private/routes/post.ts b/routes/private/routes/post.ts index c0f44a79..c7f99fa7 100644 --- a/routes/private/routes/post.ts +++ b/routes/private/routes/post.ts @@ -155,8 +155,8 @@ export async function setup(app: App) { throw new NotFoundError(`comments of ep id ${episodeID}`); } - const commentMap: Map = new Map(); - const repliesMap: Map = new Map(); + const commentMap = new Map(); + const repliesMap = new Map(); for (const comment of comments) { const u = await fetchUser(comment.creatorID); @@ -381,10 +381,10 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, response: { 200: t.Object({}), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(NotAllowedError('delete this comment')), + 'x-examples': formatErrors(new NotAllowedError('delete this comment')), }), 404: t.Ref(res.Error, { - 'x-examples': formatErrors(NotFoundError('comment')), + 'x-examples': formatErrors(new NotFoundError('comment')), }), }, security: [{ [Security.CookiesSession]: [], [Security.HTTPBearer]: [] }], @@ -420,7 +420,7 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, response: { 200: t.Ref(Reply), 404: t.Ref(res.Error, { - 'x-examples': formatErrors(NotFoundError('post')), + 'x-examples': formatErrors(new NotFoundError('post')), }), }, security: [{ [Security.CookiesSession]: [] }], @@ -455,7 +455,7 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, response: { 200: t.Object({}), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(NotAllowedError('edit reply')), + 'x-examples': formatErrors(new NotAllowedError('edit reply')), }), }, security: [{ [Security.CookiesSession]: [] }], @@ -530,10 +530,10 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, response: { 200: t.Object({}), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(NotAllowedError('delete this post')), + 'x-examples': formatErrors(new NotAllowedError('delete this post')), }), 404: t.Ref(res.Error, { - 'x-examples': formatErrors(NotFoundError('post')), + 'x-examples': formatErrors(new NotFoundError('post')), }), }, security: [{ [Security.CookiesSession]: [] }], @@ -568,7 +568,7 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, response: { 200: t.Ref(BasicReply), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(NotJoinPrivateGroupError('沙盒')), + 'x-examples': formatErrors(new NotJoinPrivateGroupError('沙盒')), }), }, security: [{ [Security.CookiesSession]: [] }], @@ -637,7 +637,7 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, response: { 200: t.Ref(BasicReply), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(NotJoinPrivateGroupError('沙盒')), + 'x-examples': formatErrors(new NotJoinPrivateGroupError('沙盒')), }), }, security: [{ [Security.CookiesSession]: [], [Security.HTTPBearer]: [] }], @@ -701,10 +701,10 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, response: { 200: t.Object({}), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(NotAllowedError('delete this post')), + 'x-examples': formatErrors(new NotAllowedError('delete this post')), }), 404: t.Ref(res.Error, { - 'x-examples': formatErrors(NotFoundError('post')), + 'x-examples': formatErrors(new NotFoundError('post')), }), }, security: [{ [Security.CookiesSession]: [], [Security.HTTPBearer]: [] }], @@ -740,7 +740,7 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, response: { 200: t.Ref(Reply), 404: t.Ref(res.Error, { - 'x-examples': formatErrors(NotFoundError('post')), + 'x-examples': formatErrors(new NotFoundError('post')), }), }, security: [{ [Security.CookiesSession]: [], [Security.HTTPBearer]: [] }], @@ -777,7 +777,7 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, response: { 200: t.Object({}), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(NotAllowedError('edit reply')), + 'x-examples': formatErrors(new NotAllowedError('edit reply')), }), }, security: [{ [Security.CookiesSession]: [], [Security.HTTPBearer]: [] }], diff --git a/routes/private/routes/topic.ts b/routes/private/routes/topic.ts index 4a6faa53..8162282e 100644 --- a/routes/private/routes/topic.ts +++ b/routes/private/routes/topic.ts @@ -185,7 +185,7 @@ export async function setup(app: App) { 404: t.Ref(res.Error, { description: '小组不存在', 'x-examples': { - NotFoundError: { value: res.formatError(NotFoundError('topic')) }, + NotFoundError: { value: res.formatError(new NotFoundError('topic')) }, }, }), }, @@ -253,7 +253,7 @@ export async function setup(app: App) { 404: t.Ref(res.Error, { description: '小组不存在', 'x-examples': { - NotFoundError: { value: res.formatError(NotFoundError('topic')) }, + NotFoundError: { value: res.formatError(new NotFoundError('topic')) }, }, }), }, @@ -333,7 +333,7 @@ export async function setup(app: App) { 404: t.Ref(res.Error, { description: '小组不存在', 'x-examples': { - NotFoundError: { value: res.formatError(NotFoundError('topic')) }, + NotFoundError: { value: res.formatError(new NotFoundError('topic')) }, }, }), }, @@ -375,7 +375,7 @@ export async function setup(app: App) { 404: t.Ref(res.Error, { description: '条目不存在', 'x-examples': { - NotFoundError: { value: res.formatError(NotFoundError('topic')) }, + NotFoundError: { value: res.formatError(new NotFoundError('topic')) }, }, }), }, @@ -461,7 +461,7 @@ export async function setup(app: App) { 200: t.Object({}), 400: t.Ref(res.Error), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(NotAllowedError('edit a topic')), + 'x-examples': formatErrors(new NotAllowedError('edit a topic')), }), }, security: [{ [Security.CookiesSession]: [] }], @@ -607,7 +607,7 @@ dev.bgm38.com 域名使用测试用的 site-key \`1x00000000000000000000AA\``, 200: t.Object({}), 400: t.Ref(res.Error), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(NotAllowedError('edit a topic')), + 'x-examples': formatErrors(new NotAllowedError('edit a topic')), }), }, security: [{ [Security.CookiesSession]: [], [Security.HTTPBearer]: [] }], diff --git a/routes/private/routes/user.ts b/routes/private/routes/user.ts index 6ece1771..af33f684 100644 --- a/routes/private/routes/user.ts +++ b/routes/private/routes/user.ts @@ -34,7 +34,7 @@ declare module 'fastify' { io: Server; } } -// eslint-disable-next-line @typescript-eslint/require-await + export async function setup(app: App) { app.addSchema(res.Error); app.addSchema(NoticeRes); @@ -57,7 +57,7 @@ export async function setup(app: App) { description: '未登录', 'x-examples': { NeedLoginError: { - value: res.formatError(NeedLoginError('getting notifications')), + value: res.formatError(new NeedLoginError('getting notifications')), }, }, }), @@ -115,7 +115,7 @@ export async function setup(app: App) { description: '未登录', 'x-examples': { NeedLoginError: { - value: res.formatError(NeedLoginError('marking notifications as read')), + value: res.formatError(new NeedLoginError('marking notifications as read')), }, }, }), diff --git a/routes/private/routes/wiki/index.ts b/routes/private/routes/wiki/index.ts index ad0950c7..fb304a00 100644 --- a/routes/private/routes/wiki/index.ts +++ b/routes/private/routes/wiki/index.ts @@ -11,7 +11,6 @@ import * as person from './person/index.ts'; import * as ep from './subject/ep.ts'; import * as subject from './subject/index.ts'; -// eslint-disable-next-line @typescript-eslint/require-await export async function setup(app: App) { await app.register(subject.setup); await app.register(person.setup); diff --git a/routes/private/routes/wiki/person/index.ts b/routes/private/routes/wiki/person/index.ts index 6ad0d98e..2682db2f 100644 --- a/routes/private/routes/wiki/person/index.ts +++ b/routes/private/routes/wiki/person/index.ts @@ -64,7 +64,7 @@ export async function setup(app: App) { response: { 200: t.Ref(PersonWikiInfo), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(InvalidWikiSyntaxError()), + 'x-examples': formatErrors(new InvalidWikiSyntaxError()), }), 404: t.Ref(res.Error, { description: '角色不存在', @@ -113,10 +113,10 @@ export async function setup(app: App) { response: { 200: t.Object({}), 400: t.Ref(res.Error, { - 'x-examples': formatErrors(WikiChangedError()), + 'x-examples': formatErrors(new WikiChangedError()), }), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(InvalidWikiSyntaxError()), + 'x-examples': formatErrors(new InvalidWikiSyntaxError()), }), }, }, @@ -138,7 +138,7 @@ export async function setup(app: App) { throw new NotFoundError(`person ${personID}`); } if (p.lock || p.redirect) { - throw BadRequestError('locked person'); + throw new BadRequestError('locked person'); } matchExpected(p, expectedRevision); @@ -180,7 +180,7 @@ function matchExpected>( } if (w[key as keyof A] !== value) { - throw WikiChangedError(); + throw new WikiChangedError(); } } } diff --git a/routes/private/routes/wiki/subject/ep.ts b/routes/private/routes/wiki/subject/ep.ts index db7ff564..1258fd23 100644 --- a/routes/private/routes/wiki/subject/ep.ts +++ b/routes/private/routes/wiki/subject/ep.ts @@ -73,7 +73,7 @@ export async function setup(app: App) { ] satisfies IEpisodeWikiInfo[], }), 404: t.Ref(res.Error, { - 'x-examples': formatErrors(NotFoundError('episode')), + 'x-examples': formatErrors(new NotFoundError('episode')), }), }, }, @@ -134,7 +134,7 @@ export async function setup(app: App) { response: { 200: t.Object({}), 400: t.Ref(res.Error, { description: 'invalid input' }), - 404: t.Ref(res.Error, { 'x-examples': formatErrors(NotFoundError('episode 1')) }), + 404: t.Ref(res.Error, { 'x-examples': formatErrors(new NotFoundError('episode 1')) }), }, }, preHandler: [ diff --git a/routes/private/routes/wiki/subject/image.ts b/routes/private/routes/wiki/subject/image.ts index 8d52dbf5..9930be68 100644 --- a/routes/private/routes/wiki/subject/image.ts +++ b/routes/private/routes/wiki/subject/image.ts @@ -156,7 +156,7 @@ export function setup(app: App) { ...errorResponses( ImageFileTooLarge(), UnsupportedImageFormat(), - NotAllowedError('non sandbox subject'), + new NotAllowedError('non sandbox subject'), ), }, body: t.Object({ diff --git a/routes/private/routes/wiki/subject/index.ts b/routes/private/routes/wiki/subject/index.ts index 5505e449..08fd4409 100644 --- a/routes/private/routes/wiki/subject/index.ts +++ b/routes/private/routes/wiki/subject/index.ts @@ -156,7 +156,7 @@ export async function setup(app: App) { response: { 200: t.Ref(SubjectWikiInfo), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(InvalidWikiSyntaxError()), + 'x-examples': formatErrors(new InvalidWikiSyntaxError()), }), }, }, @@ -202,7 +202,7 @@ export async function setup(app: App) { response: { 200: t.Object({ subjectID: t.Number() }), [StatusCodes.BAD_REQUEST]: t.Ref(res.Error, { - 'x-examples': formatErrors(InvalidWikiSyntaxError()), + 'x-examples': formatErrors(new InvalidWikiSyntaxError()), }), 401: t.Ref(res.Error, {}), }, @@ -343,7 +343,7 @@ export async function setup(app: App) { response: { 200: t.Array(t.Ref(HistorySummary)), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(InvalidWikiSyntaxError()), + 'x-examples': formatErrors(new InvalidWikiSyntaxError()), }), }, }, @@ -405,7 +405,7 @@ export async function setup(app: App) { response: { 200: t.Null(), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(InvalidWikiSyntaxError()), + 'x-examples': formatErrors(new InvalidWikiSyntaxError()), }), }, }, @@ -474,7 +474,7 @@ export async function setup(app: App) { response: { 200: t.Null(), 401: t.Ref(res.Error, { - 'x-examples': formatErrors(InvalidWikiSyntaxError()), + 'x-examples': formatErrors(new InvalidWikiSyntaxError()), }), }, }, diff --git a/routes/private/routes/wiki/subject/mgr.ts b/routes/private/routes/wiki/subject/mgr.ts index 9143a8e9..4c17e852 100644 --- a/routes/private/routes/wiki/subject/mgr.ts +++ b/routes/private/routes/wiki/subject/mgr.ts @@ -28,7 +28,7 @@ export function setup(app: App) { }, async ({ body, auth }) => { if (!auth.permission.subject_lock) { - throw NotAllowedError('lock a subject'); + throw new NotAllowedError('lock a subject'); } await AppDataSource.transaction(async (txn) => { @@ -75,7 +75,7 @@ export function setup(app: App) { }, async ({ body, auth }) => { if (!auth.permission.subject_lock) { - throw NotAllowedError('unlock a subject'); + throw new NotAllowedError('unlock a subject'); } await AppDataSource.transaction(async (txn) => { diff --git a/routes/swagger.ts b/routes/swagger.ts index fe266eca..e6f8fa06 100644 --- a/routes/swagger.ts +++ b/routes/swagger.ts @@ -66,7 +66,6 @@ type transformer = ({ }) => { schema: JSONObject; url: string }; const transform: transformer = ({ schema, url }) => { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!schema) { return { schema, url }; } diff --git a/scripts/build-common.cjs b/scripts/build-common.mjs similarity index 89% rename from scripts/build-common.cjs rename to scripts/build-common.mjs index e971d2cf..aae7fcee 100644 --- a/scripts/build-common.cjs +++ b/scripts/build-common.mjs @@ -1,5 +1,7 @@ -const fs = require('node:fs'); -const yaml = require('yaml'); +import * as console from 'node:console'; +import * as fs from 'node:fs'; + +import * as yaml from 'yaml'; const to_json = (file) => { try { diff --git a/tsconfig.json b/tsconfig.json index 5cd70134..580f72c0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,7 @@ "allowSyntheticDefaultImports": false, "useUnknownInCatchVariables": true, "esModuleInterop": false, + "allowJs": true, "noImplicitAny": true, "noUncheckedIndexedAccess": true, "strict": true, diff --git a/vendor/node-cache.ts b/vendor/node-cache.ts index bcdc037d..d0d23664 100644 --- a/vendor/node-cache.ts +++ b/vendor/node-cache.ts @@ -1,5 +1,6 @@ import { createRequire } from 'node:module'; +// eslint-disable-next-line @typescript-eslint/no-require-imports import type NodeCache = require('node-cache'); const require = createRequire(import.meta.url); diff --git a/vitest.config.ts b/vitest.config.ts index 17ab8656..f3ec6028 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,7 +3,6 @@ import 'dotenv/config'; import * as url from 'node:url'; import { isCI } from 'std-env'; -// eslint-disable-next-line import/extensions import { defineConfig } from 'vitest/config'; import GithubActionsReporter from 'vitest-github-actions-reporter';