diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index c6fe4f8067..0000000000 --- a/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules -/deploy -package.json -/.nx -/cache -/dev -/dist -/.vscode diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index a313bded55..0000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "root": true, - "ignorePatterns": ["**/*", "deploy/**/*"], - "plugins": ["@nx"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx", "*.json"], - "extends": ["plugin:prettier/recommended"], - "overrides": [ - { - "files": ["*.json"], - "parser": "jsonc-eslint-parser" - } - ] - }, - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": { - "@nx/enforce-module-boundaries": [ - "error", - { - "enforceBuildableLibDependency": true, - "allow": [], - "depConstraints": [ - { - "sourceTag": "*", - "onlyDependOnLibsWithTags": ["*"] - } - ] - } - ], - "no-restricted-imports": [ - "error", - { - "patterns": ["lodash", "lodash/*"] - } - ] - } - }, - { - "files": ["*.ts", "*.tsx"], - "extends": ["plugin:@nx/typescript"] - }, - { - "files": ["*.js", "*.jsx"], - "extends": ["plugin:@nx/javascript"] - }, - { - "files": ["*.spec.ts", "*.spec.tsx", "*.spec.js", "*.spec.jsx"], - "env": { - "jest": true - }, - "rules": {} - } - ], - "settings": { - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"] - }, - "import/resolver": { - "typescript": { - "project": ["tsconfig.json", "package/tsconfig.json"] - }, - "node": { - "project": ["tsconfig.json", "package/tsconfig.json"] - } - } - } -} diff --git a/.prettierrc b/.prettierrc index 9977c6465d..397c087d89 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,6 @@ { "singleQuote": true, "organizeImportsSkipDestructiveCodeActions": true, - "trailingComma": "all" + "trailingComma": "all", + "plugins": ["prettier-plugin-organize-imports"] } diff --git a/.vscode/launch.json b/.vscode/launch.json index 3c3e291fe5..07e0e1b45b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,33 +1,27 @@ { - "version": "0.2.0", - "configurations": [ - { - "name": "backend", - "port": 9229, - "request": "attach", - "skipFiles": [ - "/**", - "**/node_modules/**" - ], - "type": "node", - "localRoot": "${workspaceFolder}/packages/server/api/", - "remoteRoot": "/usr/src/app", - "restart": true, - "autoAttachChildProcesses": false - }, - { - "name": "engine", - "port": 9230, - "request": "attach", - "skipFiles": [ - "/**", - "**/node_modules/**" - ], - "type": "node", - "localRoot": "${workspaceFolder}/packages/engine", - "remoteRoot": "/usr/src/app", - "restart": true, - "autoAttachChildProcesses": false - } - ] + "version": "0.2.0", + "configurations": [ + { + "name": "backend", + "port": 9229, + "request": "attach", + "skipFiles": ["/**", "**/node_modules/**"], + "type": "node", + "localRoot": "${workspaceFolder}/packages/server/api/", + "remoteRoot": "/usr/src/app", + "restart": true, + "autoAttachChildProcesses": false + }, + { + "name": "engine", + "port": 9230, + "request": "attach", + "skipFiles": ["/**", "**/node_modules/**"], + "type": "node", + "localRoot": "${workspaceFolder}/packages/engine", + "remoteRoot": "/usr/src/app", + "restart": true, + "autoAttachChildProcesses": false + } + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 9923ebd313..ba98184865 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,37 +1,32 @@ { - "cSpell.words": [ - "OpenOps", - "Fastify", - "mpim", - "sendgrid" - ], - "eslint.workingDirectories": [ - { "pattern": "./packages/*" }, - { - "pattern": "./packages/server/*" - }, - { - "pattern": "./packages/blocks/*" - }, - ], - "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit" + "cSpell.words": ["OpenOps", "Fastify", "mpim", "sendgrid"], + "eslint.workingDirectories": [ + { "pattern": "./packages/*" }, + { + "pattern": "./packages/server/*" }, - "typescript.tsdk": "node_modules/typescript/lib", - "javascript.preferences.importModuleSpecifier": "project-relative", - "search.exclude": { - "**/.git": true, - "**/node_modules": true, - "**/.nx": true, - "**/cache": true, - "**/dev": true, - "**/dist": true, - }, - "jest.runMode": { - "type": "watch", - "deferred": true - }, - "jest.jestCommandLine": "/workspace/node_modules/.bin/jest", + { + "pattern": "./packages/blocks/*" + } + ], + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "typescript.tsdk": "node_modules/typescript/lib", + "javascript.preferences.importModuleSpecifier": "project-relative", + "search.exclude": { + "**/.git": true, + "**/node_modules": true, + "**/.nx": true, + "**/cache": true, + "**/dev": true, + "**/dist": true + }, + "jest.runMode": { + "type": "watch", + "deferred": true + }, + "jest.jestCommandLine": "/workspace/node_modules/.bin/jest" } diff --git a/AGENTS.md b/AGENTS.md index b2e2721e21..f37d0631c7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -260,7 +260,7 @@ Run "npx nx lint" to verify code style before committing. - Newline at end of file - **Linting:** Use ESLint as configured in each package - **Formatting:** Follow Prettier rules if configured -- Respect `.editorconfig`, `.eslintrc`, `.prettierrc`, and other config files +- Respect `.editorconfig`, `eslint.config.mjs`, `.prettierrc`, and other config files ### Naming Conventions diff --git a/eslint.base.config.mjs b/eslint.base.config.mjs new file mode 100644 index 0000000000..21a1cfb58f --- /dev/null +++ b/eslint.base.config.mjs @@ -0,0 +1,305 @@ +import js from '@eslint/js'; +import nx from '@nx/eslint-plugin'; +import vitest from '@vitest/eslint-plugin'; +import importX from 'eslint-plugin-import-x'; +import jestDom from 'eslint-plugin-jest-dom'; +import prettierRecommended from 'eslint-plugin-prettier/recommended'; +import testingLibrary from 'eslint-plugin-testing-library'; +import globals from 'globals'; +import * as jsoncParser from 'jsonc-eslint-parser'; +import tseslint from 'typescript-eslint'; + +/** + * Shared ESLint configuration for the workspace. + * + * Nx runs `eslint .` per project, so each project's `eslint.config.mjs` is the + * only config ESLint loads for that run — flat config has no cascade. Every + * project config therefore starts by spreading `baseConfig`. + * + * The frontend and server layers live here rather than in separate files so + * that Nx tracks a single file as a lint cache input. Adding another root + * config file would mean it is not matched by Nx's eslint config glob, and so + * changes to it would not invalidate the lint cache. + * + * Beware: cwd differs between the two ways Nx runs ESLint, and flat-config + * `files`/`ignores` patterns resolve against cwd. The `@nx/eslint:lint` + * executor (most projects) runs from the workspace root, while inferred targets + * (react-ui, ui-components, ui-kit) run from the project root. Prefer patterns + * that begin with a globstar, which behave the same either way. + */ + +const TS_JS_FILES = ['**/*.ts', '**/*.tsx', '**/*.js', '**/*.jsx']; + +/** + * Replaces the former root `.eslintignore`. + */ +const ignores = [ + '**/node_modules/**', + '**/dist/**', + '**/.nx/**', + '**/cache/**', + 'deploy/**', + 'dev/**', + '.vscode/**', + // Build and release tooling, not shipped code. No Nx project covers it, so + // `nx lint` never reached it anyway; ignoring it here stops editors and bare + // `eslint .` runs from reporting on it too. + 'tools/**', + // Carried over from `.eslintignore`. That entry had no leading slash, so it + // matched every package.json in the tree, which is what keeps + // `@nx/dependency-checks` inert in server/worker and server/shared. + // Preserved deliberately — enabling that rule is a separate change. + '**/package.json', +]; + +/** + * Prettier must be the last entry in any composed config so that it wins over + * the stylistic rules enabled by the plugin recommendations above it. + */ +const prettierLast = { + ...prettierRecommended, + files: [...TS_JS_FILES, '**/*.json'], +}; + +export const baseConfig = [ + { ignores }, + ...nx.configs['flat/base'], + ...nx.configs['flat/typescript'], + ...nx.configs['flat/javascript'], + { + files: TS_JS_FILES, + rules: { + '@nx/enforce-module-boundaries': [ + 'error', + { + enforceBuildableLibDependency: true, + allow: [], + depConstraints: [ + { + sourceTag: '*', + onlyDependOnLibsWithTags: ['*'], + }, + ], + }, + ], + 'no-restricted-imports': [ + 'error', + { + patterns: ['lodash', 'lodash/*'], + }, + ], + }, + }, + { + files: ['**/*.spec.ts', '**/*.spec.tsx', '**/*.spec.js', '**/*.spec.jsx'], + languageOptions: { + globals: { ...globals.jest }, + }, + }, + { + // Only the parser is wired up; no JSON rules are enabled. `@nx/dependency-checks` + // is configured in server/worker and server/shared but stays inert because + // package.json is ignored above. + files: ['**/*.json'], + languageOptions: { parser: jsoncParser }, + }, + { + settings: { + 'import/parsers': { + '@typescript-eslint/parser': ['.ts', '.tsx'], + }, + 'import/resolver': { + typescript: { + project: ['tsconfig.json', 'package/tsconfig.json'], + }, + node: { + project: ['tsconfig.json', 'package/tsconfig.json'], + }, + }, + }, + }, + prettierLast, +]; + +/** + * Shared by react-ui, ui-components and ui-kit. `nx.configs['flat/react']` + * supplies the import, react, react-hooks and jsx-a11y plugins, matching the + * former `plugin:@nx/react`. + */ +export const frontendConfig = [ + ...nx.configs['flat/react'], + { + ...js.configs.recommended, + files: ['**/*.ts', '**/*.tsx'], + }, + // `js.configs.recommended` re-enables base rules that TypeScript already + // covers (no-undef, no-unused-vars). Re-applying the typescript-eslint + // recommended set turns them back off, which is what the eslintrc extends + // order (eslint:recommended then plugin:@typescript-eslint/recommended) did. + ...tseslint.configs.recommended.map((config) => ({ + ...config, + files: ['**/*.ts', '**/*.tsx'], + })), + { + files: ['**/*.ts', '**/*.tsx'], + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + ...globals.es2021, + }, + }, + settings: { + react: { version: 'detect' }, + 'import/ignore': ['@vitejs/plugin-react'], + 'import/resolver': { + alias: { + map: [['@', './src']], + extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'], + }, + }, + }, + rules: { + 'react-hooks/rules-of-hooks': 'error', + 'react-hooks/exhaustive-deps': 'warn', + 'no-restricted-imports': [ + 'error', + { + paths: [ + { + name: 'classnames', + message: 'Please use cn instead of classnames.', + }, + ], + }, + ], + 'import/no-cycle': 'off', + 'linebreak-style': ['error', 'unix'], + 'import/no-unresolved': 'off', + 'import/default': 'off', + 'import/no-named-as-default-member': 'off', + 'import/no-named-as-default': 'off', + 'react/react-in-jsx-scope': 'off', + 'jsx-a11y/anchor-is-valid': 'off', + '@typescript-eslint/no-unused-vars': 'error', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, + }, + { + ...testingLibrary.configs['flat/react'], + files: ['**/*.ts', '**/*.tsx'], + }, + { + ...jestDom.configs['flat/recommended'], + files: ['**/*.ts', '**/*.tsx'], + }, + { + ...vitest.configs.recommended, + files: ['**/*.ts', '**/*.tsx'], + }, + { + files: ['**/*.ts', '**/*.tsx'], + rules: { + // TODO: pre-existing conditional `expect` calls in data-driven tests, newly + // reported after moving to @vitest/eslint-plugin. Fix the tests, then drop this. + 'vitest/no-conditional-expect': 'off', + }, + }, + prettierLast, +]; + +/** + * Shared by server/api and the packages that used to extend its config: + * shared, engine, server/worker and server/shared. + * + * Type-aware rules need `parserOptions.project`, which is project-specific, so + * each project supplies its own via `typeAwareParserOptions`. + */ +export const serverConfig = [ + { + ...importX.flatConfigs.recommended, + files: ['**/*.ts', '**/*.js'], + }, + { + // import-x v4 enables `named` in recommended, and it cannot see through + // TypeScript type-only exports. The plugin's own typescript config turns it + // off, matching how v0.5 behaved here. + ...importX.flatConfigs.typescript, + files: ['**/*.ts', '**/*.js'], + }, + ...tseslint.configs.strict.map((config) => ({ + ...config, + files: ['**/*.ts', '**/*.js'], + })), + { + files: ['**/*.ts', '**/*.js'], + settings: { + 'import-x/resolver': { + typescript: { + alwaysTryTypes: false, + }, + node: true, + }, + }, + rules: { + 'import-x/no-unresolved': 'off', + 'no-console': 'error', + 'object-shorthand': 'error', + '@typescript-eslint/switch-exhaustiveness-check': [ + 'error', + // v8 flipped this to false; kept true to preserve the previous behaviour. + { considerDefaultExhaustiveForUnions: true }, + ], + '@typescript-eslint/consistent-type-definitions': ['error', 'type'], + '@typescript-eslint/no-explicit-any': 'error', + '@typescript-eslint/no-redundant-type-constituents': 'error', + '@typescript-eslint/await-thenable': 'error', + '@typescript-eslint/adjacent-overload-signatures': 'error', + '@typescript-eslint/no-non-null-assertion': 'warn', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + varsIgnorePattern: '^_', + argsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/explicit-function-return-type': 'warn', + '@typescript-eslint/no-floating-promises': 'error', + '@typescript-eslint/no-misused-promises': 'warn', + 'no-return-await': 'off', + '@typescript-eslint/return-await': ['error', 'in-try-catch'], + 'default-case-last': 'error', + 'import-x/no-duplicates': 'error', + }, + }, + { + files: ['**/*.test.ts', '**/*.spec.ts'], + rules: { + '@typescript-eslint/no-require-imports': 'off', + }, + }, + prettierLast, +]; + +/** + * Type-aware linting needs tsconfig paths resolved relative to the project, not + * to the directory ESLint happens to run from: the Nx executor runs with the + * workspace root as cwd, while inferred targets run with the project root. + * + * @param {string} tsconfigRootDir pass `import.meta.dirname` + * @param {string[]} project tsconfig globs, relative to the project + */ +export const typeAwareParserOptions = ( + tsconfigRootDir, + project = ['tsconfig.*?.json'], +) => ({ + files: ['**/*.ts', '**/*.js'], + languageOptions: { + parserOptions: { project, tsconfigRootDir }, + }, +}); + +export default baseConfig; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000000..73c5085db8 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,8 @@ +import baseConfig from './eslint.base.config.mjs'; + +/** + * Root config. Projects without their own `eslint.config.mjs` resolve to this + * one, since both the Nx eslint executor and ESLint itself search upwards from + * the project directory. + */ +export default baseConfig; diff --git a/jest.config.ts b/jest.config.ts index 80f6602d28..24e93c6b8f 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -2,5 +2,5 @@ import { getJestProjects } from '@nx/jest'; export default { projects: getJestProjects(), - transformIgnorePatterns: ['^.+\\.js$'] + transformIgnorePatterns: ['^.+\\.js$'], }; diff --git a/nx.json b/nx.json index 9e5912f1a0..b0d771fa84 100644 --- a/nx.json +++ b/nx.json @@ -2,37 +2,25 @@ "$schema": "./node_modules/nx/schemas/nx-schema.json", "targetDefaults": { "build": { - "dependsOn": [ - "^build" - ], - "inputs": [ - "production", - "^production" - ], + "dependsOn": ["^build"], + "inputs": ["production", "^production"], "cache": true }, "lint": { "inputs": [ "default", - "{workspaceRoot}/.eslintrc.json" + "{workspaceRoot}/eslint.config.mjs", + "{workspaceRoot}/eslint.base.config.mjs" ], "cache": true }, "test": { - "inputs": [ - "default", - "^production", - "{workspaceRoot}/jest.preset.js" - ], + "inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"], "cache": true }, "@nx/jest:jest": { "cache": true, - "inputs": [ - "default", - "^production", - "{workspaceRoot}/jest.preset.js" - ], + "inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"], "options": { "passWithNoTests": true }, @@ -46,29 +34,22 @@ "@nx/eslint:lint": { "inputs": [ "default", - "{workspaceRoot}/.eslintrc.json" + "{workspaceRoot}/eslint.config.mjs", + "{workspaceRoot}/eslint.base.config.mjs" ], "cache": true }, "@nx/js:tsc": { "cache": true, - "dependsOn": [ - "^build" - ], - "inputs": [ - "production", - "^production" - ] + "dependsOn": ["^build"], + "inputs": ["production", "^production"] } }, "namedInputs": { - "default": [ - "{projectRoot}/**/*", - "sharedGlobals" - ], + "default": ["{projectRoot}/**/*", "sharedGlobals"], "production": [ "default", - "!{projectRoot}/.eslintrc.json", + "!{projectRoot}/eslint.config.mjs", "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", "!{projectRoot}/tsconfig.spec.json", "!{projectRoot}/jest.config.[jt]s", @@ -145,12 +126,7 @@ "default": { "runner": "nx/tasks-runners/default", "options": { - "cacheableOperations": [ - "build", - "lint", - "test", - "e2e" - ] + "cacheableOperations": ["build", "lint", "test", "e2e"] } } }, diff --git a/package-lock.json b/package-lock.json index eac97a6e78..f0176af0fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -283,6 +283,7 @@ "zustand": "4.5.7" }, "devDependencies": { + "@eslint/js": "9.39.5", "@faker-js/faker": "8.4.1", "@nx/devkit": "23.0.0", "@nx/esbuild": "23.0.0", @@ -336,10 +337,11 @@ "@types/turndown": "5.0.6", "@types/write-file-atomic": "4.0.3", "@types/xml2js": "0.4.14", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/eslint-plugin": "8.66.0", + "@typescript-eslint/parser": "8.66.0", + "@typescript-eslint/utils": "8.66.0", "@vitejs/plugin-react": "6.0.2", + "@vitest/eslint-plugin": "1.6.27", "@vitest/ui": "1.6.1", "autoprefixer": "10.5.0", "babel-jest": "29.7.0", @@ -347,29 +349,28 @@ "chromatic": "11.29.0", "concurrently": "8.2.2", "esbuild": "0.28.1", - "eslint": "8.57.1", - "eslint-config-prettier": "9.1.2", + "eslint": "9.39.5", + "eslint-config-prettier": "10.1.8", "eslint-import-resolver-alias": "1.1.2", - "eslint-import-resolver-typescript": "3.10.1", + "eslint-import-resolver-typescript": "4.4.5", "eslint-plugin-import": "2.32.0", - "eslint-plugin-import-x": "0.5.3", - "eslint-plugin-jest-dom": "5.5.0", + "eslint-plugin-import-x": "4.17.1", + "eslint-plugin-jest-dom": "5.10.1", "eslint-plugin-jsx-a11y": "6.10.2", - "eslint-plugin-prettier": "4.2.5", + "eslint-plugin-prettier": "5.5.6", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-storybook": "10.4.6", - "eslint-plugin-tailwindcss": "3.18.3", - "eslint-plugin-testing-library": "6.5.0", - "eslint-plugin-vitest": "0.5.4", + "eslint-plugin-testing-library": "7.16.2", "generate-license-file": "4.2.1", + "globals": "17.9.0", "husky": "9.1.7", "i18next-cli": "1.64.1", "inquirer": "8.2.7", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-environment-node": "29.7.0", - "jsonc-eslint-parser": "2.4.2", + "jsonc-eslint-parser": "3.3.0", "lint-staged": "15.5.2", "nx-cloud": "19.1.3", "pino-pretty": "9.4.1", @@ -377,13 +378,14 @@ "postcss-import": "14.1.0", "postcss-preset-env": "7.8.3", "postcss-url": "10.1.4", - "prettier": "2.8.8", + "prettier": "3.9.6", "prettier-plugin-organize-imports": "4.3.0", "storybook": "10.4.6", "tailwindcss": "3.4.19", "ts-jest": "29.4.11", "ts-node": "10.9.2", "typescript": "5.5.4", + "typescript-eslint": "8.66.0", "vite": "8.0.16", "vite-plugin-checker": "0.7.2", "vite-plugin-circular-dependency": "0.6.0", @@ -5628,25 +5630,97 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.21.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.7", + "debug": "^4.3.1", + "minimatch": "^3.1.5" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz", + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", + "ajv": "^6.14.0", "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", - "minimatch": "^3.1.2", + "js-yaml": "^4.3.0", + "minimatch": "^3.1.5", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -5677,9 +5751,9 @@ "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", - "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==", "dev": true, "license": "MIT", "dependencies": { @@ -5687,17 +5761,45 @@ "concat-map": "0.0.1" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/@eslint/eslintrc/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "type-fest": "^0.20.2" + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5714,9 +5816,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz", + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==", "dev": true, "funding": [ { @@ -5756,27 +5858,41 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz", + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://eslint.org/donate" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@faker-js/faker": { @@ -6549,51 +6665,42 @@ "react-hook-form": "^7.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/types": "^0.15.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", - "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", - "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -6610,13 +6717,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@iconify/types": { "version": "2.0.0", @@ -9816,16 +9929,6 @@ "node": ">= 8" } }, - "node_modules/@nolyfill/is-core-module": { - "version": "1.0.39", - "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", - "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.4.0" - } - }, "node_modules/@npmcli/agent": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.2.tgz", @@ -10316,132 +10419,23 @@ } } }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.0.tgz", - "integrity": "sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz", - "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.0.tgz", - "integrity": "sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.62.0", - "@typescript-eslint/tsconfig-utils": "8.62.0", - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0", - "debug": "^4.4.3", - "minimatch": "^10.2.2", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.0.tgz", - "integrity": "sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.62.0", - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/typescript-estree": "8.62.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/@nx/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.0.tgz", - "integrity": "sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==", + "node_modules/@nx/eslint-plugin/node_modules/jsonc-eslint-parser": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", + "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.0", - "eslint-visitor-keys": "^5.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@nx/eslint-plugin/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@nx/eslint-plugin/node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" + "url": "https://github.com/sponsors/ota-meshi" } }, "node_modules/@nx/eslint/node_modules/typescript": { @@ -19729,115 +19723,68 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz", - "integrity": "sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==", + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.66.0.tgz", + "integrity": "sha512-p088eaGrzYz1s+7cov0aMOCkNGTJlVxF4jgubf28c8L0Cv9Rloj8YBHnv4hXLq6IIEE1AsjNWavO+k+8kP2Y0A==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.66.0", + "@typescript-eslint/type-utils": "8.66.0", + "@typescript-eslint/utils": "8.66.0", + "@typescript-eslint/visitor-keys": "8.66.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz", - "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" + "@typescript-eslint/parser": "^8.66.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==", + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.66.0.tgz", + "integrity": "sha512-X6ypGChaWYk6PBtUg2BwuTZEFFcHJAtGTVJ9/lCTOufhZ4i9fNolQNnktq+kkMCwMj7V8Svsq7+TxSDslmhE0g==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.66.0", + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/typescript-estree": "8.66.0", + "@typescript-eslint/visitor-keys": "8.66.0", + "debug": "^4.4.3" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.62.0.tgz", - "integrity": "sha512-wexnCqiTg7BOGtbLDftYpRWlmLq4xfoMd7BKFR6Y75sZS3QmRKLdN3yWLhmIYgqMmP/OXWpj3H8odkb5nGURCQ==", + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.66.0.tgz", + "integrity": "sha512-7MthGPTt4BP69lSryqpqq8HQqxuzynssckL/jyDyk3+TNMQ3y2jFWkptCrktWvBrP+EH787Nl5N5Qpw7WZg+5g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.62.0", - "@typescript-eslint/types": "^8.62.0", + "@typescript-eslint/tsconfig-utils": "^8.66.0", + "@typescript-eslint/types": "^8.66.0", "debug": "^4.4.3" }, "engines": { @@ -19851,32 +19798,18 @@ "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz", - "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz", - "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==", + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.66.0.tgz", + "integrity": "sha512-8TGcH25j9zqJ/IULB/ppyhRvxA8QYfFEZ7nfbg6/BN9spDgb8fPWQXlE5l8TWBL50EtUx007uZ1o9VOwrq2/9g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/visitor-keys": "8.66.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -19884,9 +19817,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.62.0.tgz", - "integrity": "sha512-y2GAdB6ykaXUvuspbYnizQc4oDDz0Tz/Yc7iWrXf9mx8vm/L/0vLHCe0tS2boG96Zy+DivnVDQ9ZUEWoHqqx1g==", + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.66.0.tgz", + "integrity": "sha512-9D5gLYZG4rOjcoag8MQ/fWI8WqA9wcPDyOGyWtWFhvM1lHRbliqUSPIY5J3zqCU1tvSwzXxnnjhQhz5Ne7mJ4g==", "dev": true, "license": "MIT", "engines": { @@ -19901,15 +19834,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.62.0.tgz", - "integrity": "sha512-+g5O3j0w2ldzC86Pv6fvbO/xhAonbJFIdf/MKQ1d30gndlsVzUOE83ldfSE15Qrl9fhFjK6AovHs5Wpp6vx86w==", + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.66.0.tgz", + "integrity": "sha512-LG2dWfjZQQp0ADtAu/EWJVayefGL2UEZ3CDeI44D9v3rXB/WYUqE/jpO28KrEKul5AySrmI+Zh1v6v+xW2U9+g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/typescript-estree": "8.62.0", - "@typescript-eslint/utils": "8.62.0", + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/typescript-estree": "8.66.0", + "@typescript-eslint/utils": "8.66.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -19925,28 +19858,10 @@ "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.0.tgz", - "integrity": "sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz", - "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==", + "node_modules/@typescript-eslint/types": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.66.0.tgz", + "integrity": "sha512-H6gcYaSDOyvL3AD/jHUtUFo2jqGgn/F6nuyuZSu0QTesxL+cP4dQoIMrODRofuJC09g64+WgZ6tE19Y1N2YIFQ==", "dev": true, "license": "MIT", "engines": { @@ -19957,17 +19872,17 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.0.tgz", - "integrity": "sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.66.0.tgz", + "integrity": "sha512-8/x4INiiQb10jGgXYD7116/zQ+OL84ZIFn0za68wwFHCanT/VLbBEroWht8RV8fn0/ZCAoazHLQgwUC0UQcDfg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.62.0", - "@typescript-eslint/tsconfig-utils": "8.62.0", - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0", + "@typescript-eslint/project-service": "8.66.0", + "@typescript-eslint/tsconfig-utils": "8.66.0", + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/visitor-keys": "8.66.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -19985,17 +19900,17 @@ "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.0.tgz", - "integrity": "sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==", + "node_modules/@typescript-eslint/utils": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.66.0.tgz", + "integrity": "sha512-jasearZPolBw5NJNYGMwxzHMF83niVWmMU1VdHzG1CyfI2VS7f7nZltnKtHcg20hW+7Uo5GfK4MeDPoU3qI8EA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.62.0", - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/typescript-estree": "8.62.0" + "@typescript-eslint/scope-manager": "8.66.0", + "@typescript-eslint/types": "8.66.0", + "@typescript-eslint/typescript-estree": "8.66.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -20009,14 +19924,14 @@ "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.0.tgz", - "integrity": "sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.66.0.tgz", + "integrity": "sha512-dkKR8q+lKciskj1Y3vthHktl+3cMLWGyVUP23bRiPZ5O9BRT++4EqDDV+TVeIKBL1VXVEqrJlz8MYbcnvJcAlg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.62.0", + "@typescript-eslint/types": "8.66.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -20027,7 +19942,7 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/eslint-visitor-keys": { + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", @@ -20040,136 +19955,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz", - "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz", - "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", - "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz", - "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz", - "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typespec/ts-http-runtime": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.6.tgz", @@ -20748,6 +20533,37 @@ } } }, + "node_modules/@vitest/eslint-plugin": { + "version": "1.6.27", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.6.27.tgz", + "integrity": "sha512-X1RCAfwbatG4GFbJ/1PIHP9MSZMt0JJThqbYID+vS4L783k6QGlLPe421wQE8dHXuGCcenVLsydiM4qzsYWxhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "^8.58.0", + "@typescript-eslint/utils": "^8.58.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "*", + "eslint": ">=8.57.0", + "typescript": ">=5.0.0", + "vitest": "*" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, "node_modules/@vitest/expect": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", @@ -21988,16 +21804,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -24845,6 +24651,16 @@ "node": ">=16" } }, + "node_modules/comment-parser": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.8.tgz", + "integrity": "sha512-rKZTGo4fzKYna8UcL0isTg5wkBNla7bxTypLwZQXjIdi++IdP1OJ41rI5Mti3/jltkPujbu4i9LIARYA+zpotQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/common-ancestor-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-2.0.0.tgz", @@ -27555,19 +27371,6 @@ "htmlparser2": "^3.9.2" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", @@ -28439,75 +28242,106 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "9.39.5", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz", + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.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.2", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.6", + "@eslint/js": "9.39.5", + "@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", - "ajv": "^6.12.4", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", "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", + "minimatch": "^3.1.5", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.2.tgz", - "integrity": "sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==", + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, "peerDependencies": { "eslint": ">=7.0.0" } }, + "node_modules/eslint-import-context": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz", + "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-context" + }, + "peerDependencies": { + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } + } + }, "node_modules/eslint-import-resolver-alias": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz", @@ -28568,22 +28402,22 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.10.1.tgz", - "integrity": "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.5.tgz", + "integrity": "sha512-nbE5XLph6TLtGYcu/U6e6ZVXyKBhbDWK5cLGk76eJ7NdZpwf1P9EFkpt1Z01mNZNrrilsAYWKH6zUkL4reoXbw==", "dev": true, "license": "ISC", "dependencies": { - "@nolyfill/is-core-module": "1.0.39", - "debug": "^4.4.0", - "get-tsconfig": "^4.10.0", + "debug": "^4.4.1", + "eslint-import-context": "^0.1.8", + "get-tsconfig": "^4.10.1", "is-bun-module": "^2.0.0", - "stable-hash": "^0.0.5", - "tinyglobby": "^0.2.13", - "unrs-resolver": "^1.6.2" + "stable-hash-x": "^0.2.0", + "tinyglobby": "^0.2.14", + "unrs-resolver": "^1.7.11" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^16.17.0 || >=18.6.0" }, "funding": { "url": "https://opencollective.com/eslint-import-resolver-typescript" @@ -28665,70 +28499,42 @@ } }, "node_modules/eslint-plugin-import-x": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-0.5.3.tgz", - "integrity": "sha512-hJ/wkMcsLQXAZL3+txXIDpbW5cqwdm1rLTqV4VRY03aIbzE3zWE7rPZKW6Gzf7xyl1u3V1iYC6tOG77d9NF4GQ==", + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.17.1.tgz", + "integrity": "sha512-4cdstYkKCyjumM2Q9NSI03K8D2a9F4Ssz33K2lv2hQa4KmR9jPLwk3uWGtNvclfqBrPGfGuMBwsGMbe6dMRbfg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^7.4.0", - "debug": "^4.3.4", - "doctrine": "^3.0.0", - "eslint-import-resolver-node": "^0.3.9", - "get-tsconfig": "^4.7.3", + "@typescript-eslint/types": "^8.56.0", + "comment-parser": "^1.4.1", + "debug": "^4.4.1", + "eslint-import-context": "^0.1.9", "is-glob": "^4.0.3", - "minimatch": "^9.0.3", - "semver": "^7.6.0", - "stable-hash": "^0.0.4", - "tslib": "^2.6.2" + "minimatch": "^9.0.3 || ^10.1.2", + "semver": "^7.7.2", + "stable-hash-x": "^0.2.0", + "unrs-resolver": "^1.9.2" }, "engines": { - "node": ">=16" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "eslint": "^8.56.0 || ^9.0.0-0" - } - }, - "node_modules/eslint-plugin-import-x/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-import-x/node_modules/brace-expansion": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.2.tgz", - "integrity": "sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/eslint-plugin-import-x/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" + "funding": { + "url": "https://opencollective.com/eslint-plugin-import-x" }, - "engines": { - "node": ">=16 || 14 >=14.17" + "peerDependencies": { + "@typescript-eslint/utils": "^8.56.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "eslint-import-resolver-node": "*" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "@typescript-eslint/utils": { + "optional": true + }, + "eslint-import-resolver-node": { + "optional": true + } } }, - "node_modules/eslint-plugin-import-x/node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", - "dev": true, - "license": "MIT" - }, "node_modules/eslint-plugin-import/node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -28830,13 +28636,12 @@ } }, "node_modules/eslint-plugin-jest-dom": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-5.5.0.tgz", - "integrity": "sha512-CRlXfchTr7EgC3tDI7MGHY6QjdJU5Vv2RPaeeGtkXUHnKZf04kgzMPIJUXt4qKCvYWVVIEo9ut9Oq1vgXAykEA==", + "version": "5.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-5.10.1.tgz", + "integrity": "sha512-IIJdzbACbhJUJyMAqpA9E9gxp1Gv29TeQ3DtL+pepwP8Oq2WiqjOB2HbnEIs23h0ewdKIZRDI56yLro2eUO+DA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.16.3", "requireindex": "^1.2.0" }, "engines": { @@ -28846,7 +28651,7 @@ }, "peerDependencies": { "@testing-library/dom": "^8.0.0 || ^9.0.0 || ^10.0.0", - "eslint": "^6.8.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + "eslint": "^6.8.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { "@testing-library/dom": { @@ -28926,22 +28731,31 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.5.tgz", - "integrity": "sha512-9Ni+xgemM2IWLq6aXEpP2+V/V30GeA/46Ar629vcMqVPodFFWC9skHu/D1phvuqtS8bJCFnNf01/qcmqYEwNfg==", + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.6.tgz", + "integrity": "sha512-ifetmTcxWfz+4qRW3pH/ujdTq2jQIj59AxJMIN26K5avYgU8dxycUETQonWiW+wPrYXA0j3Try0l1CnwVQtDqQ==", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.13" }, "engines": { - "node": ">=12.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } @@ -29085,328 +28899,27 @@ "storybook": "^10.4.6" } }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/scope-manager": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.62.0.tgz", - "integrity": "sha512-1lX38kNxXIRb8mEc3lbq5mdHq1Pf2+U0nFU65KfT18mtPxxl0fvjuEE92mHuXPuCtElJhOrddOpyMlM3Z0umEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/types": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.62.0.tgz", - "integrity": "sha512-KvAclkktORPvM54TgLgA4z9HIV1M8zOgw9ZVNXl9f/8dLYfXYX1wkMXP7qmabpijQRV5bHJLOmoyGQbLMaUYeg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.62.0.tgz", - "integrity": "sha512-+hVbNxtW64pIcZWDPGbyaKF7vp2IBTVY5ma1blwwksrjdsbdqqEKvJWMGbBofei4F6Dovx1M0RJgoFeNu2279A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.62.0", - "@typescript-eslint/tsconfig-utils": "8.62.0", - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/visitor-keys": "8.62.0", - "debug": "^4.4.3", - "minimatch": "^10.2.2", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/utils": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.62.0.tgz", - "integrity": "sha512-82r66fi9zYwZ+mTq3vKgwjbZ1PVk/DJzrXFLpG6RnBbdvH8TEGVHIs9H4d2drhkOzf0syZuD/OZvvlu6GDbP4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.62.0", - "@typescript-eslint/types": "8.62.0", - "@typescript-eslint/typescript-estree": "8.62.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.62.0.tgz", - "integrity": "sha512-CY3uyFSRbcQv3nnSv8S0+lDftMVz6P963PoRlxrV7ew/Md564g9ut60PYzdLM5qW4jFn93GBF+Soi90ISAN+GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.62.0", - "eslint-visitor-keys": "^5.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/eslint-plugin-tailwindcss": { - "version": "3.18.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.18.3.tgz", - "integrity": "sha512-lqjNX7mt1Ip2qR236hvhbZ9ff2TFLUWou+tBHz82SA1nWFzOZSoEOI+9UBZmuf2977r2MMp9/y3/broyz8AYig==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.5", - "postcss": "^8.4.4", - "synckit": "^0.11.4", - "tailwind-api-utils": "^1.0.3" - }, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "tailwindcss": "^3.4.0 || ^4.0.0" - } - }, "node_modules/eslint-plugin-testing-library": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.5.0.tgz", - "integrity": "sha512-Ls5TUfLm5/snocMAOlofSOJxNN0aKqwTlco7CrNtMjkTdQlkpSMaeTCDHCuXfzrI97xcx2rSCNeKeJjtpkNC1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, - "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "license": "BSD-2-Clause", - "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" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "version": "7.16.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-7.16.2.tgz", + "integrity": "sha512-8gleGnQXK2ZA3hHwjCwpYTZvM+9VsrJ+/9kDI8CjqAQGAdMQOdn/rJNu7ZySENuiWlGKQWyZJ4ZjEg2zamaRHw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@typescript-eslint/scope-manager": "^8.56.0", + "@typescript-eslint/utils": "^8.56.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-plugin-testing-library/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-plugin-vitest": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-vitest/-/eslint-plugin-vitest-0.5.4.tgz", - "integrity": "sha512-um+odCkccAHU53WdKAw39MY61+1x990uXjSPguUCq3VcEHdqJrOb8OTMrbYlY6f9jAKx7x98kLVlIe3RJeJqoQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^7.7.1" - }, - "engines": { - "node": "^18.0.0 || >= 20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "vitest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "vitest": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -29414,7 +28927,7 @@ "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -29468,6 +28981,37 @@ "concat-map": "0.0.1" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -29498,22 +29042,6 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/eslint/node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -29524,29 +29052,6 @@ "node": ">= 4" } }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", - "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -29599,19 +29104,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -30683,16 +30175,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-type": { @@ -30955,18 +30447,17 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -31913,9 +31404,9 @@ } }, "node_modules/globals": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz", - "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==", + "version": "17.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.9.0.tgz", + "integrity": "sha512-m/MvAW61QVU5VDNF1Vj8axt016h8w7L5TU1e9zlab7XIttAT2YAlCwl75K1fOqvMM9apmD7lbCIRhpfkhmxhCg==", "dev": true, "license": "MIT", "engines": { @@ -31942,37 +31433,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, "node_modules/good-listener": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", @@ -32063,13 +31523,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/graphql": { "version": "15.10.2", "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.2.tgz", @@ -34235,16 +33688,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-plain-obj": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", @@ -39644,24 +39087,36 @@ } }, "node_modules/jsonc-eslint-parser": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.2.tgz", - "integrity": "sha512-1e4qoRgnn448pRuMvKGsFFymUCquZV0mpGgOyIKNgD3JVDTsVJyRBGH/Fm0tBb8WsWGgmB1mDe6/yJMQM37DUA==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-3.3.0.tgz", + "integrity": "sha512-hYTGkHGNRZnXOFZ1urhINADoqDrGfpy53cjw+dxk84QE0pUDujQzeUeamNs6Mz44/TKD49z2x6/GVSu4ZrtA+Q==", "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "semver": "^7.3.5" + "eslint-visitor-keys": "^5.0.0", + "verkit": "^0.3.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://github.com/sponsors/ota-meshi" } }, + "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/jsonc-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", @@ -47766,16 +47221,16 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz", + "integrity": "sha512-OpN0zzVdiaiAhxpuuj5efpIS4sY9j7bY6uR5mnj5yPzGkdkjNKSJeUThPb60Jw29QuAZgA4o+/iB49kFiaBX6g==", "dev": true, "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -52018,12 +51473,15 @@ "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/stable-hash": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", - "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "node_modules/stable-hash-x": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", + "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } }, "node_modules/stack-generator": { "version": "2.0.10", @@ -52875,24 +52333,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tailwind-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tailwind-api-utils/-/tailwind-api-utils-1.0.3.tgz", - "integrity": "sha512-KpzUHkH1ug1sq4394SLJX38ZtpeTiqQ1RVyFTTSY2XuHsNSTWUkRo108KmyyrMWdDbQrLYkSHaNKj/a3bmA4sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "enhanced-resolve": "^5.18.1", - "jiti": "^2.4.2", - "local-pkg": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/hyoban" - }, - "peerDependencies": { - "tailwindcss": "^3.3.0 || ^4.0.0 || ^4.0.0-beta" - } - }, "node_modules/tailwind-merge": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz", @@ -53350,13 +52790,6 @@ "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", "license": "MIT" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", @@ -53701,16 +53134,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-dedent": { @@ -53909,29 +53342,6 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, "node_modules/tuf-js": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", @@ -54366,6 +53776,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.66.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.66.0.tgz", + "integrity": "sha512-QlEbBPz/RuJ1XUHj29nm3t0F/O/cSlEnntozqPOYHnnTGAXFamnMBu5i9Vn6vhUPHGAjR+Vl+5J8vPN/BMUrJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.66.0", + "@typescript-eslint/parser": "8.66.0", + "@typescript-eslint/typescript-estree": "8.66.0", + "@typescript-eslint/utils": "8.66.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, "node_modules/uc.micro": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", @@ -55047,6 +54481,19 @@ "react-dom": "^16.8 || ^17.0 || ^18.0" } }, + "node_modules/verkit": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/verkit/-/verkit-0.3.2.tgz", + "integrity": "sha512-zj/ob3UsvJGN0whEAKFp53REA5X66hvffVqoCtVQAakJKnKlH+/PcOfMoFwIG/o4rElqLv/ycAFlx8ZlXUorCg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, "node_modules/vfile": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", diff --git a/package.json b/package.json index 14e9cf55d7..924f73c336 100644 --- a/package.json +++ b/package.json @@ -307,6 +307,7 @@ "zustand": "4.5.7" }, "devDependencies": { + "@eslint/js": "9.39.5", "@faker-js/faker": "8.4.1", "@nx/devkit": "23.0.0", "@nx/esbuild": "23.0.0", @@ -360,10 +361,11 @@ "@types/turndown": "5.0.6", "@types/write-file-atomic": "4.0.3", "@types/xml2js": "0.4.14", - "@typescript-eslint/eslint-plugin": "7.18.0", - "@typescript-eslint/parser": "7.18.0", - "@typescript-eslint/utils": "7.18.0", + "@typescript-eslint/eslint-plugin": "8.66.0", + "@typescript-eslint/parser": "8.66.0", + "@typescript-eslint/utils": "8.66.0", "@vitejs/plugin-react": "6.0.2", + "@vitest/eslint-plugin": "1.6.27", "@vitest/ui": "1.6.1", "autoprefixer": "10.5.0", "babel-jest": "29.7.0", @@ -371,29 +373,28 @@ "chromatic": "11.29.0", "concurrently": "8.2.2", "esbuild": "0.28.1", - "eslint": "8.57.1", - "eslint-config-prettier": "9.1.2", + "eslint": "9.39.5", + "eslint-config-prettier": "10.1.8", "eslint-import-resolver-alias": "1.1.2", - "eslint-import-resolver-typescript": "3.10.1", + "eslint-import-resolver-typescript": "4.4.5", "eslint-plugin-import": "2.32.0", - "eslint-plugin-import-x": "0.5.3", - "eslint-plugin-jest-dom": "5.5.0", + "eslint-plugin-import-x": "4.17.1", + "eslint-plugin-jest-dom": "5.10.1", "eslint-plugin-jsx-a11y": "6.10.2", - "eslint-plugin-prettier": "4.2.5", + "eslint-plugin-prettier": "5.5.6", "eslint-plugin-react": "7.37.5", "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-storybook": "10.4.6", - "eslint-plugin-tailwindcss": "3.18.3", - "eslint-plugin-testing-library": "6.5.0", - "eslint-plugin-vitest": "0.5.4", + "eslint-plugin-testing-library": "7.16.2", "generate-license-file": "4.2.1", + "globals": "17.9.0", "husky": "9.1.7", "i18next-cli": "1.64.1", "inquirer": "8.2.7", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-environment-node": "29.7.0", - "jsonc-eslint-parser": "2.4.2", + "jsonc-eslint-parser": "3.3.0", "lint-staged": "15.5.2", "nx-cloud": "19.1.3", "pino-pretty": "9.4.1", @@ -401,13 +402,14 @@ "postcss-import": "14.1.0", "postcss-preset-env": "7.8.3", "postcss-url": "10.1.4", - "prettier": "2.8.8", + "prettier": "3.9.6", "prettier-plugin-organize-imports": "4.3.0", "storybook": "10.4.6", "tailwindcss": "3.4.19", "ts-jest": "29.4.11", "ts-node": "10.9.2", "typescript": "5.5.4", + "typescript-eslint": "8.66.0", "vite": "8.0.16", "vite-plugin-checker": "0.7.2", "vite-plugin-circular-dependency": "0.6.0", diff --git a/packages/blocks/ai/.eslintrc.json b/packages/blocks/ai/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/ai/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/anodot/.eslintrc.json b/packages/blocks/anodot/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/anodot/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/anodot/src/lib/get-recommendations-action-predefined.ts b/packages/blocks/anodot/src/lib/get-recommendations-action-predefined.ts index fd880aa257..8e9e9ccbb6 100644 --- a/packages/blocks/anodot/src/lib/get-recommendations-action-predefined.ts +++ b/packages/blocks/anodot/src/lib/get-recommendations-action-predefined.ts @@ -49,8 +49,7 @@ export const getRecommendationsAction = createAction({ : ([parsedAccounts] as SelectedAccount[]); const recommendationTypes = context.propsValue.recommendationTypes as - | string[] - | undefined; + string[] | undefined; const props = { ...context.propsValue, diff --git a/packages/blocks/approval/.eslintrc.json b/packages/blocks/approval/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/approval/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/archera/.eslintrc.json b/packages/blocks/archera/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/archera/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/aws-athena/.eslintrc.json b/packages/blocks/aws-athena/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/aws-athena/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/aws-compute-optimizer/.eslintrc.json b/packages/blocks/aws-compute-optimizer/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/aws-compute-optimizer/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/aws-compute-optimizer/project.json b/packages/blocks/aws-compute-optimizer/project.json index 4ba56e9af5..34037135ec 100644 --- a/packages/blocks/aws-compute-optimizer/project.json +++ b/packages/blocks/aws-compute-optimizer/project.json @@ -6,37 +6,27 @@ "targets": { "build": { "executor": "@nx/js:tsc", - "outputs": [ - "{options.outputPath}" - ], + "outputs": ["{options.outputPath}"], "options": { "outputPath": "dist/packages/blocks/aws-compute-optimizer", "tsConfig": "packages/blocks/aws-compute-optimizer/tsconfig.lib.json", "packageJson": "packages/blocks/aws-compute-optimizer/package.json", "main": "packages/blocks/aws-compute-optimizer/src/index.ts", - "assets": [ - "packages/blocks/aws-compute-optimizer/*.md" - ], + "assets": ["packages/blocks/aws-compute-optimizer/*.md"], "buildableProjectDepsInPackageJsonType": "dependencies", "updateBuildableProjectDepsInPackageJson": true } }, "lint": { "executor": "@nx/eslint:lint", - "outputs": [ - "{options.outputFile}" - ], + "outputs": ["{options.outputFile}"], "options": { - "lintFilePatterns": [ - "packages/blocks/aws-compute-optimizer/**/*.ts" - ] + "lintFilePatterns": ["packages/blocks/aws-compute-optimizer/**/*.ts"] } }, "test": { "executor": "@nx/jest:jest", - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}" - ], + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { "jestConfig": "packages/blocks/aws-compute-optimizer/jest.config.ts", "passWithNoTests": true diff --git a/packages/blocks/aws-compute-optimizer/src/lib/actions/ebs-get-recommendations-action.ts b/packages/blocks/aws-compute-optimizer/src/lib/actions/ebs-get-recommendations-action.ts index be97159a54..bac3ccb457 100644 --- a/packages/blocks/aws-compute-optimizer/src/lib/actions/ebs-get-recommendations-action.ts +++ b/packages/blocks/aws-compute-optimizer/src/lib/actions/ebs-get-recommendations-action.ts @@ -85,8 +85,7 @@ export const ebsGetRecommendationsAction = createAction({ async run(context) { try { const accounts = context.propsValue['accounts']['accounts'] as unknown as - | string[] - | undefined; + string[] | undefined; const findingType = getFindingType(context); const resourceArns = context.propsValue.filterProperty['resourceARNs']; diff --git a/packages/blocks/aws-compute-optimizer/src/lib/actions/ec2-get-recommendations-action.ts b/packages/blocks/aws-compute-optimizer/src/lib/actions/ec2-get-recommendations-action.ts index b76f249f19..335271b781 100644 --- a/packages/blocks/aws-compute-optimizer/src/lib/actions/ec2-get-recommendations-action.ts +++ b/packages/blocks/aws-compute-optimizer/src/lib/actions/ec2-get-recommendations-action.ts @@ -88,8 +88,7 @@ export const ec2GetRecommendationsAction = createAction({ async run(context) { try { const accounts = context.propsValue['accounts']['accounts'] as unknown as - | string[] - | undefined; + string[] | undefined; const findingType = getFindingType(context); const resourceArns = context.propsValue.filterProperty['resourceARNs']; const partial = context.propsValue.allowPartialResults === true; diff --git a/packages/blocks/aws-compute-optimizer/src/lib/actions/get-recommendations-summary-action.ts b/packages/blocks/aws-compute-optimizer/src/lib/actions/get-recommendations-summary-action.ts index 9bb317a36a..23bcb627d4 100644 --- a/packages/blocks/aws-compute-optimizer/src/lib/actions/get-recommendations-summary-action.ts +++ b/packages/blocks/aws-compute-optimizer/src/lib/actions/get-recommendations-summary-action.ts @@ -31,8 +31,7 @@ export const getRecommendationsSummaryAction = createAction({ async run(context) { try { const accounts = context.propsValue['accounts']['accounts'] as unknown as - | string[] - | undefined; + string[] | undefined; const regions = convertToRegionsArrayWithValidation( context.propsValue.regions, ); diff --git a/packages/blocks/aws-compute-optimizer/src/lib/common/ebs-recommendations-builder.ts b/packages/blocks/aws-compute-optimizer/src/lib/common/ebs-recommendations-builder.ts index cc7f3ebe6f..a1e333ab1f 100644 --- a/packages/blocks/aws-compute-optimizer/src/lib/common/ebs-recommendations-builder.ts +++ b/packages/blocks/aws-compute-optimizer/src/lib/common/ebs-recommendations-builder.ts @@ -18,9 +18,10 @@ import { } from './get-recommendations'; import { RecommendationsBuilder } from './recommendations-builder'; -export class EbsRecommendationsBuilder - implements RecommendationsBuilder -{ +export class EbsRecommendationsBuilder implements RecommendationsBuilder< + EBSFinding, + VolumeRecommendation +> { recommendationType: any; findingType: EBSFinding; credentials: any; diff --git a/packages/blocks/aws-compute-optimizer/src/lib/common/ec2-recommendations-builder.ts b/packages/blocks/aws-compute-optimizer/src/lib/common/ec2-recommendations-builder.ts index bcff2809d2..969e6bff34 100644 --- a/packages/blocks/aws-compute-optimizer/src/lib/common/ec2-recommendations-builder.ts +++ b/packages/blocks/aws-compute-optimizer/src/lib/common/ec2-recommendations-builder.ts @@ -18,9 +18,10 @@ import { } from './get-recommendations'; import { RecommendationsBuilder } from './recommendations-builder'; -export class Ec2RecommendationsBuilder - implements RecommendationsBuilder -{ +export class Ec2RecommendationsBuilder implements RecommendationsBuilder< + Finding, + AwsRecommendation +> { recommendationType: string; findingType: Finding; credentials: any; diff --git a/packages/blocks/aws/.eslintrc.json b/packages/blocks/aws/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/aws/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/aws/src/lib/actions/get-account-id-action.ts b/packages/blocks/aws/src/lib/actions/get-account-id-action.ts index 4a8bb93db3..6a625fd79e 100644 --- a/packages/blocks/aws/src/lib/actions/get-account-id-action.ts +++ b/packages/blocks/aws/src/lib/actions/get-account-id-action.ts @@ -20,8 +20,7 @@ export const getAccountIdAction = createAction({ async run(context) { if (context.auth.roles && context.auth.roles.length > 0) { const accounts = context.propsValue['accounts']['accounts'] as unknown as - | string[] - | undefined; + string[] | undefined; const roles = context.auth.roles.filter( (role: any) => accounts?.length && diff --git a/packages/blocks/azure/.eslintrc.json b/packages/blocks/azure/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/azure/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/azure/src/lib/common-properties.ts b/packages/blocks/azure/src/lib/common-properties.ts index c7d6477963..50e703640b 100644 --- a/packages/blocks/azure/src/lib/common-properties.ts +++ b/packages/blocks/azure/src/lib/common-properties.ts @@ -99,8 +99,7 @@ export function createSubscriptionDynamicProperty( props: async ({ auth, useHostSession }) => { try { const useHost = useHostSession?.['useHostSessionCheckbox'] as - | boolean - | undefined; + boolean | undefined; if (!auth && !useHost) { return { @@ -116,9 +115,8 @@ export function createSubscriptionDynamicProperty( if (useHost) { dropdown = await getSubscriptionsDropdown(auth, config); } else { - const staticDropdown = await getAzureSubscriptionsStaticDropdown( - auth, - ); + const staticDropdown = + await getAzureSubscriptionsStaticDropdown(auth); dropdown = createSubscriptionDropdown(config, staticDropdown.options); } diff --git a/packages/blocks/cloudability/.eslintrc.json b/packages/blocks/cloudability/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/cloudability/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/cloudability/src/lib/common/recommendations-api.ts b/packages/blocks/cloudability/src/lib/common/recommendations-api.ts index 26c643ac5d..16e12e511e 100644 --- a/packages/blocks/cloudability/src/lib/common/recommendations-api.ts +++ b/packages/blocks/cloudability/src/lib/common/recommendations-api.ts @@ -118,7 +118,7 @@ export async function getRecommendations({ // The rightsizing API wraps recommendations as { result: [...] }; merge the // arrays across chunks and keep the shape the API responded with. const merged = responses.flatMap((response) => - Array.isArray(response) ? response : response?.result ?? [], + Array.isArray(response) ? response : (response?.result ?? []), ); // When chunked, apply the limit after merging; this truncates results in // chunk request order (and whatever order the API returns within each diff --git a/packages/blocks/cloudfix/.eslintrc.json b/packages/blocks/cloudfix/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/cloudfix/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/cloudformation/.eslintrc.json b/packages/blocks/cloudformation/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/cloudformation/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/cloudhealth/.eslintrc.json b/packages/blocks/cloudhealth/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/cloudhealth/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/cloudhealth/src/lib/actions/get-asset-perspectives.ts b/packages/blocks/cloudhealth/src/lib/actions/get-asset-perspectives.ts index 1ef424c5dd..d657eeecc5 100644 --- a/packages/blocks/cloudhealth/src/lib/actions/get-asset-perspectives.ts +++ b/packages/blocks/cloudhealth/src/lib/actions/get-asset-perspectives.ts @@ -122,11 +122,14 @@ function getAssetPerspectives(asset: any): Record { .map((s) => s.trim()) .filter(Boolean); - const perspectivesAsObject = perspectives.reduce((acc, item) => { - const [key, ...rest] = item.split(':'); - acc[key.trim()] = rest.join(':').trim(); - return acc; - }, {} as Record); + const perspectivesAsObject = perspectives.reduce( + (acc, item) => { + const [key, ...rest] = item.split(':'); + acc[key.trim()] = rest.join(':').trim(); + return acc; + }, + {} as Record, + ); return perspectivesAsObject; } diff --git a/packages/blocks/cloudzero/.eslintrc.json b/packages/blocks/cloudzero/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/cloudzero/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/common/.eslintrc.json b/packages/blocks/common/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/common/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/common/src/lib/http/core/delegating-authentication-converter.ts b/packages/blocks/common/src/lib/http/core/delegating-authentication-converter.ts index 8f9d8b6f7f..cb7a9baa70 100644 --- a/packages/blocks/common/src/lib/http/core/delegating-authentication-converter.ts +++ b/packages/blocks/common/src/lib/http/core/delegating-authentication-converter.ts @@ -7,9 +7,7 @@ import { import { HttpHeader } from './http-header'; import type { HttpHeaders } from './http-headers'; -export class DelegatingAuthenticationConverter - implements AuthenticationConverter -{ +export class DelegatingAuthenticationConverter implements AuthenticationConverter { private readonly converters: Record< AuthenticationType, AuthenticationConverter @@ -31,9 +29,7 @@ export class DelegatingAuthenticationConverter } } -class BearerTokenAuthenticationConverter - implements AuthenticationConverter -{ +class BearerTokenAuthenticationConverter implements AuthenticationConverter { convert( authentication: BearerTokenAuthentication, headers: HttpHeaders, @@ -43,9 +39,7 @@ class BearerTokenAuthenticationConverter } } -class BasicTokenAuthenticationConverter - implements AuthenticationConverter -{ +class BasicTokenAuthenticationConverter implements AuthenticationConverter { convert( authentication: BasicAuthentication, headers: HttpHeaders, diff --git a/packages/blocks/databricks/.eslintrc.json b/packages/blocks/databricks/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/databricks/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/date-helper/.eslintrc.json b/packages/blocks/date-helper/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/date-helper/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/delay/.eslintrc.json b/packages/blocks/delay/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/delay/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/end-flow/.eslintrc.json b/packages/blocks/end-flow/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/end-flow/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/file-helper/.eslintrc.json b/packages/blocks/file-helper/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/file-helper/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/finout/.eslintrc.json b/packages/blocks/finout/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/finout/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/flexera-one/.eslintrc.json b/packages/blocks/flexera-one/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/flexera-one/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/flexera/.eslintrc.json b/packages/blocks/flexera/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/flexera/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/framework/.eslintrc.json b/packages/blocks/framework/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/framework/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/framework/src/lib/action/action.ts b/packages/blocks/framework/src/lib/action/action.ts index 6763c2a3b4..306259df72 100644 --- a/packages/blocks/framework/src/lib/action/action.ts +++ b/packages/blocks/framework/src/lib/action/action.ts @@ -47,8 +47,7 @@ type CreateActionParams< export class IAction< BlockAuth extends BlockAuthProperty, ActionProps extends InputPropertyMap, -> implements ActionBase -{ +> implements ActionBase { constructor( public readonly name: string, public readonly displayName: string, diff --git a/packages/blocks/framework/src/lib/block.ts b/packages/blocks/framework/src/lib/block.ts index 68a33cdee3..76307aeefe 100644 --- a/packages/blocks/framework/src/lib/block.ts +++ b/packages/blocks/framework/src/lib/block.ts @@ -8,9 +8,9 @@ import { BlockBaseDetails, BlockMetadata } from './block-metadata'; import { BlockAuthProperty } from './property/authentication'; import { Trigger } from './trigger/trigger'; -export class Block - implements Omit -{ +export class Block< + BlockAuth extends BlockAuthProperty = BlockAuthProperty, +> implements Omit { private readonly _actions: Record = {}; private readonly _triggers: Record = {}; diff --git a/packages/blocks/framework/src/lib/context.ts b/packages/blocks/framework/src/lib/context.ts index ec94a1000e..8c8a1f4689 100644 --- a/packages/blocks/framework/src/lib/context.ts +++ b/packages/blocks/framework/src/lib/context.ts @@ -77,12 +77,12 @@ export type TriggerHookContext< > = S extends TriggerStrategy.APP_WEBHOOK ? AppWebhookTriggerHookContext : S extends TriggerStrategy.POLLING - ? PollingTriggerHookContext - : S extends TriggerStrategy.SCHEDULED - ? ScheduledTriggerHookContext - : S extends TriggerStrategy.WEBHOOK - ? WebhookTriggerHookContext - : never; + ? PollingTriggerHookContext + : S extends TriggerStrategy.SCHEDULED + ? ScheduledTriggerHookContext + : S extends TriggerStrategy.WEBHOOK + ? WebhookTriggerHookContext + : never; export type TestOrRunHookContext< BlockAuth extends BlockAuthProperty, diff --git a/packages/blocks/framework/src/lib/property/index.ts b/packages/blocks/framework/src/lib/property/index.ts index d2b8ac4b2d..fbcc5af19a 100644 --- a/packages/blocks/framework/src/lib/property/index.ts +++ b/packages/blocks/framework/src/lib/property/index.ts @@ -71,8 +71,8 @@ export interface InputPropertyMap { export type BlockPropValueSchema = T extends undefined ? undefined : T extends { required: true } - ? T['valueSchema'] - : T['valueSchema'] | undefined; + ? T['valueSchema'] + : T['valueSchema'] | undefined; export type StaticPropsValue = { [P in keyof T]: BlockPropValueSchema; diff --git a/packages/blocks/framework/src/lib/property/input/common.ts b/packages/blocks/framework/src/lib/property/input/common.ts index 3e6bbdff0a..9d0026bc8b 100644 --- a/packages/blocks/framework/src/lib/property/input/common.ts +++ b/packages/blocks/framework/src/lib/property/input/common.ts @@ -41,26 +41,26 @@ export type TPropertyValue< defaultValue?: U extends PropertyType.ARRAY ? unknown[] : U extends PropertyType.JSON - ? object - : U extends PropertyType.CHECKBOX - ? boolean - : U extends PropertyType.LONG_TEXT - ? string - : U extends PropertyType.SHORT_TEXT - ? string - : U extends PropertyType.NUMBER - ? number - : U extends PropertyType.DROPDOWN - ? unknown - : U extends PropertyType.MULTI_SELECT_DROPDOWN - ? unknown[] - : U extends PropertyType.STATIC_MULTI_SELECT_DROPDOWN - ? unknown[] - : U extends PropertyType.STATIC_DROPDOWN - ? unknown - : U extends PropertyType.DATE_TIME - ? string - : U extends PropertyType.FILE - ? WorkflowFile - : unknown; + ? object + : U extends PropertyType.CHECKBOX + ? boolean + : U extends PropertyType.LONG_TEXT + ? string + : U extends PropertyType.SHORT_TEXT + ? string + : U extends PropertyType.NUMBER + ? number + : U extends PropertyType.DROPDOWN + ? unknown + : U extends PropertyType.MULTI_SELECT_DROPDOWN + ? unknown[] + : U extends PropertyType.STATIC_MULTI_SELECT_DROPDOWN + ? unknown[] + : U extends PropertyType.STATIC_DROPDOWN + ? unknown + : U extends PropertyType.DATE_TIME + ? string + : U extends PropertyType.FILE + ? WorkflowFile + : unknown; }; diff --git a/packages/blocks/framework/src/lib/trigger/trigger.ts b/packages/blocks/framework/src/lib/trigger/trigger.ts index 3a9ce9f62a..40bd9cadea 100644 --- a/packages/blocks/framework/src/lib/trigger/trigger.ts +++ b/packages/blocks/framework/src/lib/trigger/trigger.ts @@ -108,8 +108,7 @@ export class ITrigger< TS extends TriggerStrategy, BlockAuth extends BlockAuthProperty, TriggerProps extends InputPropertyMap, -> implements TriggerBase -{ +> implements TriggerBase { constructor( public readonly name: string, public readonly displayName: string, diff --git a/packages/blocks/github/.eslintrc.json b/packages/blocks/github/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/github/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/google-cloud/.eslintrc.json b/packages/blocks/google-cloud/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/google-cloud/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/http/.eslintrc.json b/packages/blocks/http/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/http/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/http/package.json b/packages/blocks/http/package.json index 86f0e0e8f5..f8127bd297 100644 --- a/packages/blocks/http/package.json +++ b/packages/blocks/http/package.json @@ -2,4 +2,3 @@ "name": "@openops/block-http", "version": "0.5.1" } - diff --git a/packages/blocks/http/src/lib/actions/send-http-request-action.ts b/packages/blocks/http/src/lib/actions/send-http-request-action.ts index c266202928..031b07d442 100644 --- a/packages/blocks/http/src/lib/actions/send-http-request-action.ts +++ b/packages/blocks/http/src/lib/actions/send-http-request-action.ts @@ -176,8 +176,7 @@ export const httpSendRequestAction = createAction({ const headersArray = (context.auth?.headers as - | Array<{ key?: string; value?: string }> - | undefined) ?? []; + Array<{ key?: string; value?: string }> | undefined) ?? []; const authHeaders: HttpHeaders = {}; for (const item of headersArray) { if (item.key && item.value) { diff --git a/packages/blocks/hyperglance/.eslintrc.json b/packages/blocks/hyperglance/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/hyperglance/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/imap/.eslintrc.json b/packages/blocks/imap/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/imap/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/jira-cloud/.eslintrc.json b/packages/blocks/jira-cloud/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/jira-cloud/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/kion/.eslintrc.json b/packages/blocks/kion/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/kion/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/linear/.eslintrc.json b/packages/blocks/linear/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/linear/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/linear/src/lib/triggers/new-issue.ts b/packages/blocks/linear/src/lib/triggers/new-issue.ts index a738f29c9e..c5bf72feb5 100644 --- a/packages/blocks/linear/src/lib/triggers/new-issue.ts +++ b/packages/blocks/linear/src/lib/triggers/new-issue.ts @@ -84,9 +84,8 @@ export const linearNewIssue = createTrigger({ }, async onDisable(context) { const client = makeClient(context.auth); - const response = await context.store?.get( - '_new_issue_trigger', - ); + const response = + await context.store?.get('_new_issue_trigger'); if (response?.webhookId) { await client.deleteWebhook(response.webhookId); } diff --git a/packages/blocks/list-operations/.eslintrc.json b/packages/blocks/list-operations/.eslintrc.json deleted file mode 100644 index 19a99c9d96..0000000000 --- a/packages/blocks/list-operations/.eslintrc.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "extends": [ - "../../../.eslintrc.json" - ], - "ignorePatterns": [ - "!**/*" - ], - "overrides": [ - { - "files": [ - "*.ts", - "*.tsx", - "*.js", - "*.jsx" - ], - "rules": {} - }, - { - "files": [ - "*.ts", - "*.tsx" - ], - "rules": {} - }, - { - "files": [ - "*.js", - "*.jsx" - ], - "rules": {} - } - ] -} diff --git a/packages/blocks/list-operations/project.json b/packages/blocks/list-operations/project.json index ab50621cde..0a17ac9430 100644 --- a/packages/blocks/list-operations/project.json +++ b/packages/blocks/list-operations/project.json @@ -6,43 +6,31 @@ "targets": { "build": { "executor": "@nx/js:tsc", - "outputs": [ - "{options.outputPath}" - ], + "outputs": ["{options.outputPath}"], "options": { "outputPath": "dist/packages/blocks/list-operations", "tsConfig": "packages/blocks/list-operations/tsconfig.lib.json", "packageJson": "packages/blocks/list-operations/package.json", "main": "packages/blocks/list-operations/src/index.ts", - "assets": [ - "packages/blocks/list-operations/*.md" - ], + "assets": ["packages/blocks/list-operations/*.md"], "buildableProjectDepsInPackageJsonType": "dependencies", "updateBuildableProjectDepsInPackageJson": true } }, "publish": { "command": "node tools/scripts/publish.mjs blocks-list-operations {args.ver} {args.tag}", - "dependsOn": [ - "build" - ] + "dependsOn": ["build"] }, "lint": { "executor": "@nx/eslint:lint", - "outputs": [ - "{options.outputFile}" - ], + "outputs": ["{options.outputFile}"], "options": { - "lintFilePatterns": [ - "packages/blocks/list-operations/**/*.ts" - ] + "lintFilePatterns": ["packages/blocks/list-operations/**/*.ts"] } }, "test": { "executor": "@nx/jest:jest", - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}" - ], + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { "jestConfig": "packages/blocks/list-operations/jest.config.ts", "passWithNoTests": true diff --git a/packages/blocks/list-operations/src/lib/actions/group-by-action.ts b/packages/blocks/list-operations/src/lib/actions/group-by-action.ts index 6d4a8729cc..976425824f 100644 --- a/packages/blocks/list-operations/src/lib/actions/group-by-action.ts +++ b/packages/blocks/list-operations/src/lib/actions/group-by-action.ts @@ -29,13 +29,16 @@ export const groupByAction = createAction({ function groupItemsByKey(items: any[], groupKey: string): any[][] { return Object.values( - items.reduce((groupedItems, currentItem) => { - if (groupKey in currentItem) { - const keyValue = currentItem[groupKey]; - groupedItems[keyValue] = groupedItems[keyValue] || []; - groupedItems[keyValue].push(currentItem); - } - return groupedItems; - }, {} as Record), + items.reduce( + (groupedItems, currentItem) => { + if (groupKey in currentItem) { + const keyValue = currentItem[groupKey]; + groupedItems[keyValue] = groupedItems[keyValue] || []; + groupedItems[keyValue].push(currentItem); + } + return groupedItems; + }, + {} as Record, + ), ); } diff --git a/packages/blocks/math-helper/.eslintrc.json b/packages/blocks/math-helper/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/math-helper/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/microsoft-outlook/.eslintrc.json b/packages/blocks/microsoft-outlook/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/microsoft-outlook/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/microsoft-outlook/src/lib/actions/forward-email.ts b/packages/blocks/microsoft-outlook/src/lib/actions/forward-email.ts index 57ea023335..34b6ce005c 100644 --- a/packages/blocks/microsoft-outlook/src/lib/actions/forward-email.ts +++ b/packages/blocks/microsoft-outlook/src/lib/actions/forward-email.ts @@ -41,11 +41,9 @@ export const forwardEmailAction = createAction({ const { messageId, comment } = context.propsValue; const recipients = context.propsValue.recipients as string[]; const ccRecipients = context.propsValue.ccRecipients as - | string[] - | undefined; + string[] | undefined; const bccRecipients = context.propsValue.bccRecipients as - | string[] - | undefined; + string[] | undefined; const client = getMicrosoftGraphClient(context.auth.access_token); diff --git a/packages/blocks/microsoft-teams/.eslintrc.json b/packages/blocks/microsoft-teams/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/microsoft-teams/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/microsoft-teams/src/lib/actions/request-action-message.ts b/packages/blocks/microsoft-teams/src/lib/actions/request-action-message.ts index 6990e5d71a..af15d438ee 100644 --- a/packages/blocks/microsoft-teams/src/lib/actions/request-action-message.ts +++ b/packages/blocks/microsoft-teams/src/lib/actions/request-action-message.ts @@ -114,8 +114,7 @@ export const requestActionMessageAction = createAction({ }; let finalChatOrChannel: ChatOption | ChannelOption = chatOrChannel as - | ChatOption - | ChannelOption; + ChatOption | ChannelOption; if (typeof chatOrChannel === 'string') { if (isEmail(chatOrChannel)) { diff --git a/packages/blocks/microsoft-teams/src/lib/common/on-action-received.ts b/packages/blocks/microsoft-teams/src/lib/common/on-action-received.ts index ae5be361ff..bc822e7060 100644 --- a/packages/blocks/microsoft-teams/src/lib/common/on-action-received.ts +++ b/packages/blocks/microsoft-teams/src/lib/common/on-action-received.ts @@ -27,8 +27,7 @@ export const onActionReceived = async ({ context: any; }) => { const resumePayload = context.resumePayload?.queryParams as unknown as - | (InteractionPayload & Record) - | undefined; + (InteractionPayload & Record) | undefined; const isResumedDueToButtonClicked = !!resumePayload?.button; if (!isResumedDueToButtonClicked) { diff --git a/packages/blocks/monday/.eslintrc.json b/packages/blocks/monday/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/monday/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/monday/src/lib/common/helper.ts b/packages/blocks/monday/src/lib/common/helper.ts index ac668d9e38..267a179aea 100644 --- a/packages/blocks/monday/src/lib/common/helper.ts +++ b/packages/blocks/monday/src/lib/common/helper.ts @@ -207,8 +207,10 @@ export const convertPropValueToMondayColumnValue = ( case MondayColumnType.HOUR: { const [hour, minute] = propValue.split(':'); return { - hour: Number(hour) ?? 0, - minute: Number(minute) ?? 0, + // `??` never fired here: Number() returns NaN, not nullish, so a + // malformed value propagated NaN instead of falling back to 0. + hour: Number(hour) || 0, + minute: Number(minute) || 0, }; } case MondayColumnType.LINK: diff --git a/packages/blocks/nops/.eslintrc.json b/packages/blocks/nops/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/nops/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/openops-tables/.eslintrc.json b/packages/blocks/openops-tables/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/openops-tables/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/schedule/.eslintrc.json b/packages/blocks/schedule/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/schedule/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/servicenow/.eslintrc.json b/packages/blocks/servicenow/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/servicenow/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/sftp/.eslintrc.json b/packages/blocks/sftp/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/sftp/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/slack/.eslintrc.json b/packages/blocks/slack/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/slack/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/smtp/.eslintrc.json b/packages/blocks/smtp/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/smtp/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/snowflake/.eslintrc.json b/packages/blocks/snowflake/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/snowflake/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/store/.eslintrc.json b/packages/blocks/store/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/store/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/store/package.json b/packages/blocks/store/package.json index 1891bb99ce..b85cf8cb44 100644 --- a/packages/blocks/store/package.json +++ b/packages/blocks/store/package.json @@ -2,4 +2,3 @@ "name": "@openops/block-store", "version": "0.5.1" } - diff --git a/packages/blocks/ternary/.eslintrc.json b/packages/blocks/ternary/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/ternary/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/terraform/.eslintrc.json b/packages/blocks/terraform/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/terraform/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/terraform/src/lib/tfvars-parser.ts b/packages/blocks/terraform/src/lib/tfvars-parser.ts index d0c07d0094..c395276117 100644 --- a/packages/blocks/terraform/src/lib/tfvars-parser.ts +++ b/packages/blocks/terraform/src/lib/tfvars-parser.ts @@ -7,11 +7,7 @@ const messageInvalidFile = 'The provided file is not a valid Terraform variables file (tfvars).'; type TerraformVariableType = - | 'string' - | 'number' - | 'boolean' - | 'array' - | 'object'; + 'string' | 'number' | 'boolean' | 'array' | 'object'; export type TerraformVariable = { name: string; diff --git a/packages/blocks/text-helper/.eslintrc.json b/packages/blocks/text-helper/.eslintrc.json deleted file mode 100644 index aacb8793cc..0000000000 --- a/packages/blocks/text-helper/.eslintrc.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {}, - "extends": ["plugin:prettier/recommended"], - "plugins": ["prettier"] - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/vantage/.eslintrc.json b/packages/blocks/vantage/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/vantage/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/vegacloud/.eslintrc.json b/packages/blocks/vegacloud/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/vegacloud/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/vegacloud/src/lib/actions/get-anomalies-action.ts b/packages/blocks/vegacloud/src/lib/actions/get-anomalies-action.ts index d4eead6cd4..b3adae1066 100644 --- a/packages/blocks/vegacloud/src/lib/actions/get-anomalies-action.ts +++ b/packages/blocks/vegacloud/src/lib/actions/get-anomalies-action.ts @@ -122,8 +122,7 @@ async function getAnomalies({ toDate: string; limit: number; additionalFilters: - | { fieldName: string; operator: string; value: string }[] - | undefined; + { fieldName: string; operator: string; value: string }[] | undefined; }) { let query = `usage_day:between:${fromDate}-${toDate}`; diff --git a/packages/blocks/webhook/.eslintrc.json b/packages/blocks/webhook/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/webhook/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/blocks/zendesk/.eslintrc.json b/packages/blocks/zendesk/.eslintrc.json deleted file mode 100644 index 3456be9b90..0000000000 --- a/packages/blocks/zendesk/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/cli/.eslintrc.json b/packages/cli/.eslintrc.json deleted file mode 100644 index 052a5874e6..0000000000 --- a/packages/cli/.eslintrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": ["../../.eslintrc.json"], - "ignorePatterns": ["!**/*"] -} diff --git a/packages/cli/package.json b/packages/cli/package.json index f54c219b57..be414d9272 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,11 +1,11 @@ { - "name": "@openops/cli", - "version": "1.0.0", - "bin": { - "blocks-cli":"../../dist/cli/src/index.js" - }, - "scripts": { - "start": "ts-node src/index.ts", - "build": "tsc" - } + "name": "@openops/cli", + "version": "1.0.0", + "bin": { + "blocks-cli": "../../dist/cli/src/index.js" + }, + "scripts": { + "start": "ts-node src/index.ts", + "build": "tsc" } +} diff --git a/packages/cli/src/lib/commands/create-block.ts b/packages/cli/src/lib/commands/create-block.ts index 4d7b06ab4a..6be68c0db7 100644 --- a/packages/cli/src/lib/commands/create-block.ts +++ b/packages/cli/src/lib/commands/create-block.ts @@ -3,8 +3,8 @@ import { Command } from 'commander'; import inquirer from 'inquirer'; import { nxGenerateNodeLibrary, + removeGeneratedEslintConfig, removeUnusedFiles, - updateEslintFile, updateJestConfigFile, updateProjectJsonConfig, } from '../utils/block-generators'; @@ -28,7 +28,7 @@ const setupGeneratedLibrary = async ( await generateIndexTsFile(blockName, authType); await generateAuthFile(blockName, authType); await updateProjectJsonConfig(blockName); - await updateEslintFile(blockName); + await removeGeneratedEslintConfig(blockName); await updateJestConfigFile(blockName); if (createOpinionatedStructure) { diff --git a/packages/cli/src/lib/utils/block-generators.ts b/packages/cli/src/lib/utils/block-generators.ts index aa3859da1c..a0ac40aab9 100644 --- a/packages/cli/src/lib/utils/block-generators.ts +++ b/packages/cli/src/lib/utils/block-generators.ts @@ -5,10 +5,8 @@ import nodePath from 'node:path'; import { exec } from '../utils/exec'; import { readJestConfig, - readPackageEslint, readProjectJson, writeJestConfig, - writePackageEslint, writeProjectJson, } from '../utils/files'; @@ -58,8 +56,7 @@ export const updateProjectJsonConfig = async (blockName: string) => { projectJson.targets.build.options.buildableProjectDepsInPackageJsonType = 'dependencies'; - projectJson.targets.build.options.updateBuildableProjectDepsInPackageJson = - true; + projectJson.targets.build.options.updateBuildableProjectDepsInPackageJson = true; const lintFilePatterns = projectJson.targets.lint?.options?.lintFilePatterns; @@ -78,15 +75,18 @@ export const updateProjectJsonConfig = async (blockName: string) => { await writeProjectJson(`packages/blocks/${blockName}`, projectJson); }; -export const updateEslintFile = async (blockName: string) => { - const eslintFile = await readPackageEslint(`packages/blocks/${blockName}`); - const ruleIndex = eslintFile.overrides.findIndex( - (rule: any) => rule.files[0] == '*.json', - ); - if (ruleIndex !== -1) { - eslintFile.overrides.splice(ruleIndex, 1); +export const removeGeneratedEslintConfig = async (blockName: string) => { + // Blocks inherit the workspace flat config, so whatever ESLint config the Nx + // generator emitted is redundant. Every filename it might produce is removed, + // since its output depends on the config style it detects. + const path = `packages/blocks/${blockName}`; + for (const file of [ + 'eslint.config.mjs', + 'eslint.config.js', + '.eslintrc.json', + ]) { + await rm(nodePath.join(path, file), { force: true }); } - await writePackageEslint(`packages/blocks/${blockName}`, eslintFile); }; export const updateJestConfigFile = async (blockName: string) => { diff --git a/packages/cli/src/lib/utils/files.ts b/packages/cli/src/lib/utils/files.ts index 58374820e9..aa16c89b40 100644 --- a/packages/cli/src/lib/utils/files.ts +++ b/packages/cli/src/lib/utils/files.ts @@ -18,8 +18,7 @@ export type ProjectJson = { build?: { options?: { buildableProjectDepsInPackageJsonType?: - | 'peerDependencies' - | 'dependencies'; + 'peerDependencies' | 'dependencies'; updateBuildableProjectDepsInPackageJson: boolean; }; }; @@ -60,21 +59,10 @@ export const readProjectJson = async (path: string): Promise => { return await readJsonFile(`${path}/project.json`); }; -export const readPackageEslint = async (path: string): Promise => { - return await readJsonFile(`${path}/.eslintrc.json`); -}; - export const readJestConfig = async (path: string): Promise => { return await readFile(`${path}/jest.config.ts`); }; -export const writePackageEslint = async ( - path: string, - eslint: any, -): Promise => { - return await writeJsonFile(`${path}/.eslintrc.json`, eslint); -}; - export const writeJestConfig = async ( path: string, jestConfig: any, diff --git a/packages/engine/.eslintignore b/packages/engine/.eslintignore deleted file mode 100644 index 075e5321cc..0000000000 --- a/packages/engine/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -webpack.config.js -test/ \ No newline at end of file diff --git a/packages/engine/.eslintrc.json b/packages/engine/.eslintrc.json deleted file mode 100644 index 29ea518661..0000000000 --- a/packages/engine/.eslintrc.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": ["../server/api/.eslintrc.json"], - "overrides": [ - { - "files": ["*.ts", "*.js"], - "parserOptions": { - "project": ["packages/engine/tsconfig.*?.json"] - }, - "rules": { - "no-console": "off" - } - } - ] -} diff --git a/packages/engine/eslint.config.mjs b/packages/engine/eslint.config.mjs new file mode 100644 index 0000000000..724d00cf46 --- /dev/null +++ b/packages/engine/eslint.config.mjs @@ -0,0 +1,22 @@ +import { + baseConfig, + serverConfig, + typeAwareParserOptions, +} from '../../eslint.base.config.mjs'; + +export default [ + // Replaces packages/engine/.eslintignore, which flat config no longer reads. + // Patterns are `**/`-prefixed because the Nx eslint executor runs with the + // workspace root as cwd, and flat-config patterns resolve against cwd. Only + // engine files are in scope for this run, so these cannot over-match. + { ignores: ['**/webpack.config.js', '**/test/**'] }, + ...baseConfig, + ...serverConfig, + typeAwareParserOptions(import.meta.dirname), + { + files: ['**/*.ts', '**/*.js'], + rules: { + 'no-console': 'off', + }, + }, +]; diff --git a/packages/engine/project.json b/packages/engine/project.json index bd69fdd24a..8330140dba 100644 --- a/packages/engine/project.json +++ b/packages/engine/project.json @@ -26,8 +26,7 @@ "executor": "@nx/eslint:lint", "outputs": ["{options.outputFile}"], "options": { - "lintFilePatterns": ["packages/engine/**/*.{ts,js,json}"], - "ignorePath": "packages/engine/.eslintignore" + "lintFilePatterns": ["packages/engine/**/*.{ts,js,json}"] } }, "test": { diff --git a/packages/engine/src/get-feature-flag.ts b/packages/engine/src/get-feature-flag.ts index 50e70a593e..2aeda93acb 100644 --- a/packages/engine/src/get-feature-flag.ts +++ b/packages/engine/src/get-feature-flag.ts @@ -25,9 +25,8 @@ export async function getFeatureFlag( engineToken: string, flagId: FlagId, ): Promise { - let featureFlags = await cacheWrapper.getSerializedObject< - Record - >(cacheKey); + let featureFlags = + await cacheWrapper.getSerializedObject>(cacheKey); if (featureFlags) { return featureFlags[flagId] as T; diff --git a/packages/engine/src/lib/cancellation-request-validator.ts b/packages/engine/src/lib/cancellation-request-validator.ts index 60cbdffd2c..8ebed24f34 100644 --- a/packages/engine/src/lib/cancellation-request-validator.ts +++ b/packages/engine/src/lib/cancellation-request-validator.ts @@ -16,9 +16,8 @@ export class CancellationRequestedError extends Error { export async function throwIfCancellationRequested( flowRunId: FlowRunId, ): Promise { - const wasCancellationRequested = await wasWorkflowCancellationRequested( - flowRunId, - ); + const wasCancellationRequested = + await wasWorkflowCancellationRequested(flowRunId); if (wasCancellationRequested) { logger.info(defaultMessage); diff --git a/packages/engine/src/lib/core/code/v8-isolate-code-sandbox.ts b/packages/engine/src/lib/core/code/v8-isolate-code-sandbox.ts index 9c84ba5a3a..6681c6f3ab 100644 --- a/packages/engine/src/lib/core/code/v8-isolate-code-sandbox.ts +++ b/packages/engine/src/lib/core/code/v8-isolate-code-sandbox.ts @@ -13,6 +13,7 @@ const BLOCK_MEMORY_LIMIT_IN_MB = system.getNumberOrThrow( let ivmCache: any; const getIvm = () => { if (!ivmCache) { + // eslint-disable-next-line @typescript-eslint/no-require-imports -- must stay a lazy require; see the isolated-vm issue linked above ivmCache = require('isolated-vm'); } return ivmCache as typeof import('isolated-vm'); diff --git a/packages/engine/src/lib/engine-ipc.ts b/packages/engine/src/lib/engine-ipc.ts index 15e166e49a..6465cb421f 100644 --- a/packages/engine/src/lib/engine-ipc.ts +++ b/packages/engine/src/lib/engine-ipc.ts @@ -5,8 +5,7 @@ import { logger } from '@openops/server-shared'; * channel once an operation completes. */ export type ParentMessage = - | { type: 'result'; resultKey: string } - | { type: 'error'; message: string }; + { type: 'result'; resultKey: string } | { type: 'error'; message: string }; /** * Sends a message to the worker and invokes `callback` once the IPC channel has diff --git a/packages/engine/src/lib/handler/branch-executor.ts b/packages/engine/src/lib/handler/branch-executor.ts index d93f60f25d..9653da7fb5 100644 --- a/packages/engine/src/lib/handler/branch-executor.ts +++ b/packages/engine/src/lib/handler/branch-executor.ts @@ -342,8 +342,8 @@ function extractValue(value: unknown): unknown { typeof value === 'object' ? value : typeof value === 'string' - ? parseToList(value) - : value; + ? parseToList(value) + : value; if (returnValue === undefined) { returnValue = value; diff --git a/packages/engine/src/lib/operations.ts b/packages/engine/src/lib/operations.ts index 2e20375770..7089d19a58 100644 --- a/packages/engine/src/lib/operations.ts +++ b/packages/engine/src/lib/operations.ts @@ -73,8 +73,7 @@ async function executeStep( input: ExecuteStepOperation, ): Promise { const step = flowHelper.getStep(input.flowVersion, input.stepName) as - | Action - | undefined; + Action | undefined; if (isNil(step) || !Object.values(ActionType).includes(step.type)) { throw new Error('Step not found or not supported'); diff --git a/packages/engine/src/lib/variables/processors/array-zipper.ts b/packages/engine/src/lib/variables/processors/array-zipper.ts index fd6331c7e3..8e3811115b 100644 --- a/packages/engine/src/lib/variables/processors/array-zipper.ts +++ b/packages/engine/src/lib/variables/processors/array-zipper.ts @@ -13,10 +13,13 @@ function constructResultForIndex( props: Record, index: number, ): Record { - return Object.entries(props).reduce((result, [key, value]) => { - result[key] = Array.isArray(value) ? value[index] : value; - return result; - }, {} as Record); + return Object.entries(props).reduce( + (result, [key, value]) => { + result[key] = Array.isArray(value) ? value[index] : value; + return result; + }, + {} as Record, + ); } export const arrayZipperProcessor: ProcessorFn = (_property, value) => { diff --git a/packages/engine/src/lib/variables/props-resolver.ts b/packages/engine/src/lib/variables/props-resolver.ts index 32719db66b..d42bce7eb0 100644 --- a/packages/engine/src/lib/variables/props-resolver.ts +++ b/packages/engine/src/lib/variables/props-resolver.ts @@ -232,7 +232,6 @@ function parseSquareBracketConnectionPath(variableName: string): string | null { return null; } -// eslint-disable-next-line @typescript-eslint/ban-types async function evalInScope( js: string, contextAsScope: Record, diff --git a/packages/openops/.eslintrc.json b/packages/openops/.eslintrc.json deleted file mode 100644 index d75c3a7a0d..0000000000 --- a/packages/openops/.eslintrc.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "extends": "../../.eslintrc.json", - "ignorePatterns": [ - "!**/*" - ], - "overrides": [ - { - "files": [ - "*.ts", - "*.tsx", - "*.js", - "*.jsx" - ], - "rules": {}, - "parserOptions": { - "project": [ - "packages/openops/tsconfig.*?.json" - ] - } - } - ] -} diff --git a/packages/openops/eslint.config.mjs b/packages/openops/eslint.config.mjs new file mode 100644 index 0000000000..d3254e43d9 --- /dev/null +++ b/packages/openops/eslint.config.mjs @@ -0,0 +1,6 @@ +import { + baseConfig, + typeAwareParserOptions, +} from '../../eslint.base.config.mjs'; + +export default [...baseConfig, typeAwareParserOptions(import.meta.dirname)]; diff --git a/packages/openops/project.json b/packages/openops/project.json index 9f1ddb4f56..7838db66a1 100644 --- a/packages/openops/project.json +++ b/packages/openops/project.json @@ -6,43 +6,31 @@ "targets": { "build": { "executor": "@nx/js:tsc", - "outputs": [ - "{options.outputPath}" - ], + "outputs": ["{options.outputPath}"], "options": { "outputPath": "dist/packages/openops", "tsConfig": "packages/openops/tsconfig.lib.json", "packageJson": "packages/openops/package.json", "main": "packages/openops/src/index.ts", - "assets": [ - "packages/openops/*.md" - ], + "assets": ["packages/openops/*.md"], "buildableProjectDepsInPackageJsonType": "dependencies", "updateBuildableProjectDepsInPackageJson": true } }, "publish": { "command": "node tools/scripts/publish.mjs openops {args.ver} {args.tag}", - "dependsOn": [ - "build" - ] + "dependsOn": ["build"] }, "lint": { "executor": "@nx/eslint:lint", - "outputs": [ - "{options.outputFile}" - ], + "outputs": ["{options.outputFile}"], "options": { - "lintFilePatterns": [ - "packages/openops/**/*.ts" - ] + "lintFilePatterns": ["packages/openops/**/*.ts"] } }, "test": { "executor": "@nx/jest:jest", - "outputs": [ - "{workspaceRoot}/coverage/{projectRoot}" - ], + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { "jestConfig": "packages/openops/jest.config.ts", "passWithNoTests": true diff --git a/packages/openops/src/lib/ai/ai-auth.ts b/packages/openops/src/lib/ai/ai-auth.ts index c1b70b492f..b77936b96e 100644 --- a/packages/openops/src/lib/ai/ai-auth.ts +++ b/packages/openops/src/lib/ai/ai-auth.ts @@ -112,8 +112,7 @@ export const aiAuth = BlockAuth.CustomAuth({ providerSettings: Object.keys(providerSettings).length > 0 ? providerSettings : undefined, modelSettings: authObject['modelSettings'] as - | Record - | undefined, + Record | undefined, }; const result = await validateAiProviderConfig(payload); if (result.valid) { diff --git a/packages/openops/src/lib/aws/arn-handler.ts b/packages/openops/src/lib/aws/arn-handler.ts index d06ebba25a..beb37045d3 100644 --- a/packages/openops/src/lib/aws/arn-handler.ts +++ b/packages/openops/src/lib/aws/arn-handler.ts @@ -64,12 +64,15 @@ export function parseArn(arn: string): { } export function groupARNsByAccount(arns: string[]): Record { - return arns.reduce((acc, arn) => { - const { accountId } = parseArn(arn); - if (!acc[accountId]) { - acc[accountId] = []; - } - acc[accountId].push(arn); - return acc; - }, {} as Record); + return arns.reduce( + (acc, arn) => { + const { accountId } = parseArn(arn); + if (!acc[accountId]) { + acc[accountId] = []; + } + acc[accountId].push(arn); + return acc; + }, + {} as Record, + ); } diff --git a/packages/openops/src/lib/aws/azure-aws-federation.ts b/packages/openops/src/lib/aws/azure-aws-federation.ts index abec45ad71..2a44937675 100644 --- a/packages/openops/src/lib/aws/azure-aws-federation.ts +++ b/packages/openops/src/lib/aws/azure-aws-federation.ts @@ -23,9 +23,8 @@ export async function assumeTargetRoleViaAzureFederation( externalId?: string, endpoint?: string | undefined | null, ): Promise { - const sourceCredentials = await getAwsCredentialsFromAzureIdentity( - defaultRegion, - ); + const sourceCredentials = + await getAwsCredentialsFromAzureIdentity(defaultRegion); if (!sourceCredentials?.AccessKeyId || !sourceCredentials.SecretAccessKey) { throw new Error('Failed to get AWS credentials from Azure identity'); diff --git a/packages/openops/src/lib/aws/pricing.ts b/packages/openops/src/lib/aws/pricing.ts index 0368ec541e..8d4b2865db 100644 --- a/packages/openops/src/lib/aws/pricing.ts +++ b/packages/openops/src/lib/aws/pricing.ts @@ -15,9 +15,7 @@ import { getAwsClient } from './get-client'; // https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/using-price-list-query-api.html#price-list-query-api-endpoints export type SupportedPricingRegion = - | 'us-east-1' - | 'eu-central-1' - | 'ap-south-1'; + 'us-east-1' | 'eu-central-1' | 'ap-south-1'; export async function getServices( credentials: any, diff --git a/packages/openops/src/lib/promise-pool.ts b/packages/openops/src/lib/promise-pool.ts index ef467da3ac..d6720f5df6 100644 --- a/packages/openops/src/lib/promise-pool.ts +++ b/packages/openops/src/lib/promise-pool.ts @@ -1,6 +1,5 @@ export type PromiseResult = - | { status: 'fulfilled'; value: T } - | { status: 'rejected'; reason: unknown }; + { status: 'fulfilled'; value: T } | { status: 'rejected'; reason: unknown }; export async function promisePool( tasks: (() => Promise)[], diff --git a/packages/openops/src/lib/servicenow/get-state-fields.ts b/packages/openops/src/lib/servicenow/get-state-fields.ts index 85c2dea3da..c70bd2d199 100644 --- a/packages/openops/src/lib/servicenow/get-state-fields.ts +++ b/packages/openops/src/lib/servicenow/get-state-fields.ts @@ -33,7 +33,7 @@ export async function getServiceNowStateFields( const internalType = typeof f.internal_type === 'string' ? f.internal_type - : f.internal_type?.value ?? ''; + : (f.internal_type?.value ?? ''); return ( internalType === 'choice' || f.choice === '1' || f.choice === '3' ); @@ -44,7 +44,7 @@ export async function getServiceNowStateFields( internal_type: typeof f.internal_type === 'string' ? f.internal_type - : f.internal_type?.value ?? '', + : (f.internal_type?.value ?? ''), })); } catch (error) { logger.warn('Error fetching ServiceNow state fields', { error }); diff --git a/packages/openops/src/lib/servicenow/get-tables.ts b/packages/openops/src/lib/servicenow/get-tables.ts index 40777dc123..4418889bf9 100644 --- a/packages/openops/src/lib/servicenow/get-tables.ts +++ b/packages/openops/src/lib/servicenow/get-tables.ts @@ -20,9 +20,8 @@ export async function getServiceNowTables( }; if (options?.search) { - queryParams[ - 'sysparm_query' - ] = `nameLIKE${options.search}^ORlabelLIKE${options.search}`; + queryParams['sysparm_query'] = + `nameLIKE${options.search}^ORlabelLIKE${options.search}`; } else if (options?.query) { queryParams['sysparm_query'] = options.query; } diff --git a/packages/openops/test/aws/auth.test.ts b/packages/openops/test/aws/auth.test.ts index 6bc8103f6a..e6f3e91a39 100644 --- a/packages/openops/test/aws/auth.test.ts +++ b/packages/openops/test/aws/auth.test.ts @@ -64,9 +64,8 @@ async function reimportAuthWithImplicitRole() { mockSystem.getBoolean.mockReturnValue(true); jest.resetModules(); mockSystem.getBoolean.mockReturnValue(true); - const { amazonAuth: freshAmazonAuth } = await import( - '../../src/lib/aws/auth' - ); + const { amazonAuth: freshAmazonAuth } = + await import('../../src/lib/aws/auth'); return freshAmazonAuth; } diff --git a/packages/openops/test/aws/ssm/get-ssm-describe-document-info.test.ts b/packages/openops/test/aws/ssm/get-ssm-describe-document-info.test.ts index 918567bdb6..c2fdeee1e1 100644 --- a/packages/openops/test/aws/ssm/get-ssm-describe-document-info.test.ts +++ b/packages/openops/test/aws/ssm/get-ssm-describe-document-info.test.ts @@ -2,11 +2,12 @@ import { BlockPropValueSchema } from '@openops/blocks-framework'; import { getSsmDescribeDocumentInfo } from '../../../src/lib/aws/ssm/get-ssm-describe-document-info'; jest.mock('@aws-sdk/client-ssm', () => { - const DescribeDocumentCommand = jest - .fn() - .mockImplementation(function (this: any, input: any) { - this.input = input; - }); + const DescribeDocumentCommand = jest.fn().mockImplementation(function ( + this: any, + input: any, + ) { + this.input = input; + }); return { DescribeDocumentCommand, SSMClient: jest.fn(), diff --git a/packages/openops/test/aws/ssm/get-ssm-document-versions.test.ts b/packages/openops/test/aws/ssm/get-ssm-document-versions.test.ts index fb96d47e4a..265454aced 100644 --- a/packages/openops/test/aws/ssm/get-ssm-document-versions.test.ts +++ b/packages/openops/test/aws/ssm/get-ssm-document-versions.test.ts @@ -2,11 +2,12 @@ import { BlockPropValueSchema } from '@openops/blocks-framework'; import { getSsmDocumentVersions } from '../../../src/lib/aws/ssm/get-ssm-document-versions'; jest.mock('@aws-sdk/client-ssm', () => { - const ListDocumentVersionsCommand = jest - .fn() - .mockImplementation(function (this: any, input: any) { - this.input = input; - }); + const ListDocumentVersionsCommand = jest.fn().mockImplementation(function ( + this: any, + input: any, + ) { + this.input = input; + }); return { ListDocumentVersionsCommand, SSMClient: jest.fn(), diff --git a/packages/openops/test/aws/ssm/get-ssm-documents.test.ts b/packages/openops/test/aws/ssm/get-ssm-documents.test.ts index c6ee51564d..1dc986bc65 100644 --- a/packages/openops/test/aws/ssm/get-ssm-documents.test.ts +++ b/packages/openops/test/aws/ssm/get-ssm-documents.test.ts @@ -3,11 +3,12 @@ import { DocumentOwner } from '../../../src/lib/aws/ssm/document-owner'; import { getSsmDocuments } from '../../../src/lib/aws/ssm/get-ssm-documents'; jest.mock('@aws-sdk/client-ssm', () => { - const ListDocumentsCommand = jest - .fn() - .mockImplementation(function (this: any, input: any) { - this.input = input; - }); + const ListDocumentsCommand = jest.fn().mockImplementation(function ( + this: any, + input: any, + ) { + this.input = input; + }); return { ListDocumentsCommand, SSMClient: jest.fn(), diff --git a/packages/openops/test/azure/auth.test.ts b/packages/openops/test/azure/auth.test.ts index f40f08cdb2..0ae04caf6a 100644 --- a/packages/openops/test/azure/auth.test.ts +++ b/packages/openops/test/azure/auth.test.ts @@ -81,9 +81,8 @@ describe('authenticateUserWithAzure', () => { async (hostSessionValue: boolean | undefined, result: boolean) => { systemMock.getBoolean.mockReturnValue(hostSessionValue); jest.resetModules(); - const { azureAuth: freshAzureAuth } = await import( - '../../src/lib/azure/auth' - ); + const { azureAuth: freshAzureAuth } = + await import('../../src/lib/azure/auth'); expect(freshAzureAuth.required).toBe(result); }, ); diff --git a/packages/openops/tsconfig.lib.json b/packages/openops/tsconfig.lib.json index 6ba3d93ac9..ef03d40ed5 100644 --- a/packages/openops/tsconfig.lib.json +++ b/packages/openops/tsconfig.lib.json @@ -3,16 +3,8 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "declaration": true, - "types": [ - "node" - ] + "types": ["node"] }, - "exclude": [ - "jest.config.ts", - "src/**/*.spec.ts", - "src/**/*.test.ts" - ], - "include": [ - "src/**/*.ts" - ] -} \ No newline at end of file + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/packages/openops/tsconfig.spec.json b/packages/openops/tsconfig.spec.json index e61c0edad7..6dd28da456 100644 --- a/packages/openops/tsconfig.spec.json +++ b/packages/openops/tsconfig.spec.json @@ -3,10 +3,7 @@ "compilerOptions": { "outDir": "../../dist/out-tsc", "module": "commonjs", - "types": [ - "jest", - "node" - ] + "types": ["jest", "node"] }, "include": [ "jest.config.ts", @@ -16,6 +13,6 @@ "test/**/*.test.ts", "test/**/*.spec.ts", "test/**/*.d.ts", - "test/**/*.mock.ts", + "test/**/*.mock.ts" ] } diff --git a/packages/react-ui/.eslintrc.json b/packages/react-ui/.eslintrc.json deleted file mode 100644 index e68a3727cf..0000000000 --- a/packages/react-ui/.eslintrc.json +++ /dev/null @@ -1,131 +0,0 @@ -{ - "extends": ["plugin:@nx/react", "../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["**/*.ts", "**/*.tsx"], - "parser": "@typescript-eslint/parser", - "settings": { - "react": { - "version": "detect" - }, - "import/ignore": ["@vitejs/plugin-react"], - "import/resolver": { - "alias": { - "map": [["@", "./src"]], - "extensions": [".ts", ".tsx", ".js", ".jsx", ".json"], - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"] - }, - "import/resolver": { - "typescript": { - "project": ["tsconfig.json", "package/tsconfig.json"] - }, - "node": { - "project": ["tsconfig.json", "package/tsconfig.json"] - } - } - } - } - }, - "env": { - "browser": true, - "node": true, - "es6": true - }, - "extends": [ - "eslint:recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript", - "plugin:@typescript-eslint/recommended", - "plugin:react/recommended", - "plugin:react-hooks/recommended", - //"plugin:jsx-a11y/recommended", - "plugin:testing-library/react", - "plugin:jest-dom/recommended", - "plugin:vitest/legacy-recommended" - ], - "rules": { - "no-console": [ - "error", - { - "allow": ["warn", "error"] - } - ], - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "warn", - "no-restricted-imports": [ - "error", - { - "paths": [ - { - "name": "classnames", - "message": "Please use cn instead of classnames." - } - ] - } - ], - "import/no-restricted-paths": [ - "error", - { - "zones": [ - { - "target": "./src/app/features", - "from": ["./src/app/routes"] - }, - { - "target": "./src/app/common", - "from": ["./src/app/features", "./src/app/routes"] - }, - { - "target": "./src/app/constants", - "from": ["./src/app/features", "./src/app/common"] - }, - { - "target": "./src/app/lib", - "from": [ - "./src/app/features", - "./src/app/routes", - "./src/app/common" - ] - } - ] - } - ], - "import/no-cycle": "off", - "linebreak-style": ["error", "unix"], - "react/prop-types": "error", - "import/no-unresolved": "off", - "import/default": "off", - "import/no-named-as-default-member": "off", - "import/no-named-as-default": "off", - "react/react-in-jsx-scope": "off", - "jsx-a11y/anchor-is-valid": "off", - "@typescript-eslint/no-unused-vars": "error", - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/explicit-module-boundary-types": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-explicit-any": "off" - } - }, - { - "files": ["./src/**/*.{ts,tsx}"], - "rules": { - "react/prop-types": "off" - } - }, - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/react-ui/eslint.config.mjs b/packages/react-ui/eslint.config.mjs new file mode 100644 index 0000000000..e4d5b61d0c --- /dev/null +++ b/packages/react-ui/eslint.config.mjs @@ -0,0 +1,46 @@ +import { baseConfig, frontendConfig } from '../../eslint.base.config.mjs'; + +export default [ + ...baseConfig, + ...frontendConfig, + { + files: ['**/*.ts', '**/*.tsx'], + rules: { + 'no-console': ['error', { allow: ['warn', 'error'] }], + 'react/prop-types': 'error', + 'import/no-restricted-paths': [ + 'error', + { + zones: [ + { + target: './src/app/features', + from: ['./src/app/routes'], + }, + { + target: './src/app/common', + from: ['./src/app/features', './src/app/routes'], + }, + { + target: './src/app/constants', + from: ['./src/app/features', './src/app/common'], + }, + { + target: './src/app/lib', + from: [ + './src/app/features', + './src/app/routes', + './src/app/common', + ], + }, + ], + }, + ], + }, + }, + { + files: ['src/**/*.ts', 'src/**/*.tsx'], + rules: { + 'react/prop-types': 'off', + }, + }, +]; diff --git a/packages/react-ui/src/app/common/components/multi-select.tsx b/packages/react-ui/src/app/common/components/multi-select.tsx index ed473b76a8..62db9997f5 100644 --- a/packages/react-ui/src/app/common/components/multi-select.tsx +++ b/packages/react-ui/src/app/common/components/multi-select.tsx @@ -264,8 +264,9 @@ const MultiSelectTrigger = React.forwardRef< MultiSelectTrigger.displayName = 'MultiSelectTrigger'; -interface MultiSelectValueProps - extends ComponentPropsWithoutRef { +interface MultiSelectValueProps extends ComponentPropsWithoutRef< + typeof Primitive.div +> { placeholder?: string; maxDisplay?: number; maxItemLength?: number; @@ -519,7 +520,7 @@ const MultiSelectItem = React.forwardRef< const disabled = Boolean( disabledProp || - (!selected && maxCount && contextValue.length >= maxCount), + (!selected && maxCount && contextValue.length >= maxCount), ); const handleClick = () => { diff --git a/packages/react-ui/src/app/features/benchmark/use-provider-connections.ts b/packages/react-ui/src/app/features/benchmark/use-provider-connections.ts index dbabb40b62..374371a53d 100644 --- a/packages/react-ui/src/app/features/benchmark/use-provider-connections.ts +++ b/packages/react-ui/src/app/features/benchmark/use-provider-connections.ts @@ -15,8 +15,7 @@ import { function buildConnectedProvidersMap( groupedConnections: - | Record - | undefined, + Record | undefined, ): Record { return Object.fromEntries( getEnabledProviders().map((p) => [ diff --git a/packages/react-ui/src/app/features/builder/block-properties/dynamic-array/utils.ts b/packages/react-ui/src/app/features/builder/block-properties/dynamic-array/utils.ts index 8cdfa276cd..d8e36bd615 100644 --- a/packages/react-ui/src/app/features/builder/block-properties/dynamic-array/utils.ts +++ b/packages/react-ui/src/app/features/builder/block-properties/dynamic-array/utils.ts @@ -51,10 +51,13 @@ export const getDynamicInput = ( const dynamicProps = Object.entries(arrayContext?.properties?.dynamic || {}) .filter(([, prop]) => isDynamicProperty(prop)) - .reduce((acc, [key, prop]) => { - acc[key] = prop; - return acc; - }, {} as Record); + .reduce( + (acc, [key, prop]) => { + acc[key] = prop; + return acc; + }, + {} as Record, + ); if (Object.keys(dynamicProps).includes(propertyName)) { const index = extractIndex(inputName) ?? 0; diff --git a/packages/react-ui/src/app/features/builder/block-properties/form-utils.tsx b/packages/react-ui/src/app/features/builder/block-properties/form-utils.tsx index f9f20e2f6e..fe189f52f7 100644 --- a/packages/react-ui/src/app/features/builder/block-properties/form-utils.tsx +++ b/packages/react-ui/src/app/features/builder/block-properties/form-utils.tsx @@ -183,10 +183,10 @@ export const formUtils = { const actionName = selectedStep?.settings?.actionName; const requireAuth = isNil(actionName) ? false - : block?.actions?.[actionName]?.requireAuth ?? false; + : (block?.actions?.[actionName]?.requireAuth ?? false); const actionPropsWithoutAuth = actionName !== undefined - ? block?.actions?.[actionName]?.props ?? {} + ? (block?.actions?.[actionName]?.props ?? {}) : {}; const props = addAuthToBlockProps( actionPropsWithoutAuth, @@ -214,7 +214,7 @@ export const formUtils = { const triggerName = selectedStep?.settings?.triggerName; const triggerPropsWithoutAuth = triggerName !== undefined - ? block?.triggers?.[triggerName]?.props ?? {} + ? (block?.triggers?.[triggerName]?.props ?? {}) : {}; const props = addAuthToBlockProps( triggerPropsWithoutAuth, diff --git a/packages/react-ui/src/app/features/builder/builder-header/builder-publish-button.tsx b/packages/react-ui/src/app/features/builder/builder-header/builder-publish-button.tsx index 9b458dd86e..0d2273ffd3 100644 --- a/packages/react-ui/src/app/features/builder/builder-header/builder-publish-button.tsx +++ b/packages/react-ui/src/app/features/builder/builder-header/builder-publish-button.tsx @@ -106,8 +106,10 @@ const BuilderPublishButton = React.memo(() => { {isPublishedVersion ? t('Latest version is published') : !isValid - ? t('Your workflow has incomplete steps') - : t('Create & activate new workflow version, run on trigger')} + ? t('Your workflow has incomplete steps') + : t( + 'Create & activate new workflow version, run on trigger', + )} diff --git a/packages/react-ui/src/app/features/builder/data-selector/index.tsx b/packages/react-ui/src/app/features/builder/data-selector/index.tsx index b5908097f8..894ea9c19f 100644 --- a/packages/react-ui/src/app/features/builder/data-selector/index.tsx +++ b/packages/react-ui/src/app/features/builder/data-selector/index.tsx @@ -176,8 +176,8 @@ const DataSelector = ({ dataSelectorSize === DataSelectorSizeState.COLLAPSED ? '0px' : dataSelectorSize === DataSelectorSizeState.DOCKED - ? '450px' - : `${parentHeight - 180}px`, + ? '450px' + : `${parentHeight - 180}px`, width: dataSelectorSize !== DataSelectorSizeState.EXPANDED ? '450px' diff --git a/packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/flow-version-undo-redo.ts b/packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/flow-version-undo-redo.ts index 5532fb360a..d10b453954 100644 --- a/packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/flow-version-undo-redo.ts +++ b/packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/flow-version-undo-redo.ts @@ -96,7 +96,7 @@ const useFlowVersionUndoRedo = (): FlowVersionUndoRedo => { centerWorkflowViewOntoStep(stateToApply.spotlightStepName); } - } catch (error) { + } catch { toast(UNSAVED_CHANGES_TOAST); } finally { isBulkActionInProgress.current = false; // Unlock the processing diff --git a/packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/utils.ts b/packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/utils.ts index c93839bc28..1aafdedc9d 100644 --- a/packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/utils.ts +++ b/packages/react-ui/src/app/features/builder/flow-version-undo-redo/hooks/utils.ts @@ -46,9 +46,8 @@ const processMoveAction = async ( // Retrieve the operation from the source stack's top const operationKey = createKey(moveAction.from, flowId, metadata[fromTopKey]); - const operation = await localforage.getItem( - operationKey, - ); + const operation = + await localforage.getItem(operationKey); if (operation) { // Remove the operation from the source stack's top diff --git a/packages/react-ui/src/app/features/builder/hooks/tests/should-resync-step-settings.test.ts b/packages/react-ui/src/app/features/builder/hooks/tests/should-resync-step-settings.test.ts index 87c9199ad4..a7b9f9c494 100644 --- a/packages/react-ui/src/app/features/builder/hooks/tests/should-resync-step-settings.test.ts +++ b/packages/react-ui/src/app/features/builder/hooks/tests/should-resync-step-settings.test.ts @@ -2,7 +2,7 @@ import { FlowVersion } from '@openops/shared'; import { shouldResyncStepSettings } from '../should-resync-step-settings'; const version = (id: string, updated: string): FlowVersion => - ({ id, updated } as FlowVersion); + ({ id, updated }) as FlowVersion; describe('shouldResyncStepSettings', () => { it('does not resync when the refetched version matches the current one', () => { diff --git a/packages/react-ui/src/app/features/connections/components/basic-secret-connection-settings.tsx b/packages/react-ui/src/app/features/connections/components/basic-secret-connection-settings.tsx index 96a69953e7..2325516ba9 100644 --- a/packages/react-ui/src/app/features/connections/components/basic-secret-connection-settings.tsx +++ b/packages/react-ui/src/app/features/connections/components/basic-secret-connection-settings.tsx @@ -6,7 +6,7 @@ import { FormLabel, Input, } from '@openops/components/ui'; -import { Static, Type } from '@sinclair/typebox'; +import { Static } from '@sinclair/typebox'; import React from 'react'; import { useFormContext } from 'react-hook-form'; @@ -19,10 +19,9 @@ type BasicAuthConnectionSettingsProps = { const BasicAuthConnectionSettings = React.memo( ({ authProperty }: BasicAuthConnectionSettingsProps) => { - const forSchema = Type.Object({ - request: UpsertBasicAuthRequest, - }); - const form = useFormContext>(); + const form = useFormContext<{ + request: Static; + }>(); return ( <> diff --git a/packages/react-ui/src/app/features/connections/components/oauth2-connection-settings.tsx b/packages/react-ui/src/app/features/connections/components/oauth2-connection-settings.tsx index 8c34bf085a..139defe940 100644 --- a/packages/react-ui/src/app/features/connections/components/oauth2-connection-settings.tsx +++ b/packages/react-ui/src/app/features/connections/components/oauth2-connection-settings.tsx @@ -129,7 +129,7 @@ const OAuth2ConnectionSettings = ({ 'request.value.client_id', currentOAuth2Type === AppConnectionType.OAUTH2 ? '' - : predefinedClientId ?? '', + : (predefinedClientId ?? ''), { shouldValidate: true }, ); form.setValue('request.value.grant_type', authProperty.grantType, { diff --git a/packages/react-ui/src/app/features/connections/components/secret-text-connection-settings.tsx b/packages/react-ui/src/app/features/connections/components/secret-text-connection-settings.tsx index 525a164203..57dc376277 100644 --- a/packages/react-ui/src/app/features/connections/components/secret-text-connection-settings.tsx +++ b/packages/react-ui/src/app/features/connections/components/secret-text-connection-settings.tsx @@ -5,7 +5,7 @@ import { FormLabel, Input, } from '@openops/components/ui'; -import { Static, Type } from '@sinclair/typebox'; +import { Static } from '@sinclair/typebox'; import React from 'react'; import { useFormContext } from 'react-hook-form'; @@ -18,11 +18,9 @@ type SecretTextConnectionSettingsProps = { const SecretTextConnectionSettings = React.memo( ({ authProperty }: SecretTextConnectionSettingsProps) => { - const formSchema = Type.Object({ - request: UpsertSecretTextRequest, - }); - - const form = useFormContext>(); + const form = useFormContext<{ + request: Static; + }>(); return ( { return Object.values( - blocks?.reduce((acc, block) => { - const key = block.auth?.authProviderKey ?? ''; - if (!acc[key]) { - acc[key] = block; - } - return acc; - }, {} as Record) ?? {}, + blocks?.reduce( + (acc, block) => { + const key = block.auth?.authProviderKey ?? ''; + if (!acc[key]) { + acc[key] = block; + } + return acc; + }, + {} as Record, + ) ?? {}, ); }; diff --git a/packages/react-ui/src/app/features/flows/components/move-flow-dialog.tsx b/packages/react-ui/src/app/features/flows/components/move-flow-dialog.tsx index 843d912167..fa2293d941 100644 --- a/packages/react-ui/src/app/features/flows/components/move-flow-dialog.tsx +++ b/packages/react-ui/src/app/features/flows/components/move-flow-dialog.tsx @@ -15,11 +15,10 @@ import { } from '@/app/features/folders/component/move-to-folder-dialog'; import { flowsApi } from '../lib/flows-api'; -interface MoveFlowDialogProps - extends Pick< - MoveToFolderDialogProps, - 'children' | 'onMoveTo' - > { +interface MoveFlowDialogProps extends Pick< + MoveToFolderDialogProps, + 'children' | 'onMoveTo' +> { flow: Flow; flowVersion: FlowVersion; } diff --git a/packages/react-ui/src/app/features/folders/component/move-subfolder-dialog.tsx b/packages/react-ui/src/app/features/folders/component/move-subfolder-dialog.tsx index 8ac8975bde..4b1d6dc70c 100644 --- a/packages/react-ui/src/app/features/folders/component/move-subfolder-dialog.tsx +++ b/packages/react-ui/src/app/features/folders/component/move-subfolder-dialog.tsx @@ -9,8 +9,10 @@ import { MoveToFolderFormSchema, } from './move-to-folder-dialog'; -interface MoveSubfolderDialogProps - extends Pick, 'children' | 'onMoveTo'> { +interface MoveSubfolderDialogProps extends Pick< + MoveToFolderDialogProps, + 'children' | 'onMoveTo' +> { folder: FolderItem; } diff --git a/packages/react-ui/src/app/features/navigation/side-menu/left-sidebar.tsx b/packages/react-ui/src/app/features/navigation/side-menu/left-sidebar.tsx index 481f0794cc..e2d57258bc 100644 --- a/packages/react-ui/src/app/features/navigation/side-menu/left-sidebar.tsx +++ b/packages/react-ui/src/app/features/navigation/side-menu/left-sidebar.tsx @@ -17,8 +17,9 @@ import { import * as ResizablePrimitive from 'react-resizable-panels'; import { ImperativePanelHandle } from 'react-resizable-panels'; -interface ResizablePanelProps - extends ComponentProps { +interface ResizablePanelProps extends ComponentProps< + typeof ResizablePrimitive.Panel +> { className?: string; } diff --git a/packages/react-ui/src/app/features/templates/components/connections-picker/connections-picker.tsx b/packages/react-ui/src/app/features/templates/components/connections-picker/connections-picker.tsx index 2fd987a8e3..66c05d192e 100644 --- a/packages/react-ui/src/app/features/templates/components/connections-picker/connections-picker.tsx +++ b/packages/react-ui/src/app/features/templates/components/connections-picker/connections-picker.tsx @@ -125,7 +125,7 @@ const ConnectionsPicker = ({ const shouldPrefill = integration.auth?.required ?? false; connections[integration.name] = - usedConnection ?? (shouldPrefill ? options[0] ?? null : null); + usedConnection ?? (shouldPrefill ? (options[0] ?? null) : null); }); setSelectedConnections(connections); diff --git a/packages/react-ui/src/app/features/templates/components/public-flow-template-filter-sidebar-wrapper.tsx b/packages/react-ui/src/app/features/templates/components/public-flow-template-filter-sidebar-wrapper.tsx index 8f24451362..5461b775d0 100644 --- a/packages/react-ui/src/app/features/templates/components/public-flow-template-filter-sidebar-wrapper.tsx +++ b/packages/react-ui/src/app/features/templates/components/public-flow-template-filter-sidebar-wrapper.tsx @@ -89,20 +89,23 @@ const PublicFlowTemplateFilterSidebarWrapper = ({ const categoryLogos = useMemo(() => { if (!categories || !cloudBlocks) return {} as Record; - return categories.reduce((acc, category: TemplateSidebarCategory) => { - const block = cloudBlocks.find((block) => { - const normalizedName = category.name.toLowerCase(); - - return ( - block.name.includes(normalizedName) || - block.displayName.toLowerCase().includes(normalizedName) - ); - }); - if (block) { - acc[category.name] = block.logoUrl; - } - return acc; - }, {} as Record); + return categories.reduce( + (acc, category: TemplateSidebarCategory) => { + const block = cloudBlocks.find((block) => { + const normalizedName = category.name.toLowerCase(); + + return ( + block.name.includes(normalizedName) || + block.displayName.toLowerCase().includes(normalizedName) + ); + }); + if (block) { + acc[category.name] = block.logoUrl; + } + return acc; + }, + {} as Record, + ); }, [cloudBlocks, categories]); const blocksWithTemplates = blocks?.filter((block) => diff --git a/packages/react-ui/src/app/routes/settings/ai/index.tsx b/packages/react-ui/src/app/routes/settings/ai/index.tsx index c09147f159..0493dcf9d5 100644 --- a/packages/react-ui/src/app/routes/settings/ai/index.tsx +++ b/packages/react-ui/src/app/routes/settings/ai/index.tsx @@ -54,8 +54,7 @@ const AiSettingsPage = () => { onError: (error: AxiosError) => { let message = ''; const apError = error.response?.data as - | ApplicationErrorParams - | undefined; + ApplicationErrorParams | undefined; if ( apError?.code === ErrorCode.OPENAI_COMPATIBLE_PROVIDER_BASE_URL_REQUIRED @@ -63,8 +62,7 @@ const AiSettingsPage = () => { message = t('Base URL is required for OpenAI-compatible providers'); } else if (error.response?.status === 400) { const data = error.response?.data as - | { errorMessage?: string } - | undefined; + { errorMessage?: string } | undefined; message = data?.errorMessage ?? error.message; } else { message = error.message; diff --git a/packages/server/api/.eslintrc.json b/packages/server/api/.eslintrc.json deleted file mode 100644 index 18160e2254..0000000000 --- a/packages/server/api/.eslintrc.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "extends": [ - "../../../.eslintrc.json", - "plugin:@typescript-eslint/strict", - "plugin:import-x/recommended" - ], - "ignorePatterns": ["!**/*", "node_modules/**/*"], - "overrides": [ - { - "files": ["*.ts", "*.js"], - "parserOptions": { - "project": ["packages/server/api/tsconfig.*?.json"] - }, - "rules": { - "import-x/no-unresolved": "off", - "no-console": "error", - "object-shorthand": "error", - "@typescript-eslint/switch-exhaustiveness-check": "error", - "@typescript-eslint/consistent-type-definitions": ["error", "type"], - "@typescript-eslint/no-explicit-any": "error", - "@typescript-eslint/no-redundant-type-constituents": "error", - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/adjacent-overload-signatures": "error", - "@typescript-eslint/no-non-null-assertion": "warn", - "@typescript-eslint/no-unused-vars": [ - "warn", - { - "varsIgnorePattern": "^_", - "argsIgnorePattern": "^_" - } - ], - "@typescript-eslint/explicit-function-return-type": "warn", - "@typescript-eslint/no-floating-promises": "error", - "@typescript-eslint/no-misused-promises": "warn", - "no-return-await": "off", - "@typescript-eslint/return-await": ["error", "in-try-catch"], - "default-case-last": "error", - "import-x/no-duplicates": "error" - } - } - ], - "settings": { - "import/ignore:": ["node_modules"], - "import-x/resolver": { - "typescript": { - "alwaysTryTypes": false - }, - "node": true - } - } -} diff --git a/packages/server/api/__mocks__/isolated-vm.js b/packages/server/api/__mocks__/isolated-vm.js index ff86732d9d..c1351d462a 100644 --- a/packages/server/api/__mocks__/isolated-vm.js +++ b/packages/server/api/__mocks__/isolated-vm.js @@ -1 +1 @@ -module.exports = {}; // You can export a mock implementation if needed +module.exports = {}; // You can export a mock implementation if needed diff --git a/packages/server/api/eslint.config.mjs b/packages/server/api/eslint.config.mjs new file mode 100644 index 0000000000..87f6eeed56 --- /dev/null +++ b/packages/server/api/eslint.config.mjs @@ -0,0 +1,11 @@ +import { + baseConfig, + serverConfig, + typeAwareParserOptions, +} from '../../../eslint.base.config.mjs'; + +export default [ + ...baseConfig, + ...serverConfig, + typeAwareParserOptions(import.meta.dirname), +]; diff --git a/packages/server/api/src/app/ai/mcp/openops-tools.ts b/packages/server/api/src/app/ai/mcp/openops-tools.ts index 64fead52ef..6ad2d7d25b 100644 --- a/packages/server/api/src/app/ai/mcp/openops-tools.ts +++ b/packages/server/api/src/app/ai/mcp/openops-tools.ts @@ -80,9 +80,8 @@ export async function getOpenOpsTools( const tempSchemaPath = await getOpenApiSchemaPath(app); - const serviceToken = await accessTokenManager.generateServiceToken( - userAuthToken, - ); + const serviceToken = + await accessTokenManager.generateServiceToken(userAuthToken); const openopsClient = await createMCPClient({ transport: new StdioClientTransport({ diff --git a/packages/server/api/src/app/benchmark/attach-benchmark-flows.service.ts b/packages/server/api/src/app/benchmark/attach-benchmark-flows.service.ts index fdc3ed8ce8..32595067cf 100644 --- a/packages/server/api/src/app/benchmark/attach-benchmark-flows.service.ts +++ b/packages/server/api/src/app/benchmark/attach-benchmark-flows.service.ts @@ -96,9 +96,8 @@ async function insertBenchmarkRecords(params: { deletedAt: null as string | null, }; - const savedBenchmark = await benchmarkRepo(entityManager).save( - benchmarkRow, - ); + const savedBenchmark = + await benchmarkRepo(entityManager).save(benchmarkRow); const benchmarkFlowRows = workflows.map((w) => ({ id: openOpsId(), diff --git a/packages/server/api/src/app/database/migrations/1740463047000-InitializePostgresSchema.ts b/packages/server/api/src/app/database/migrations/1740463047000-InitializePostgresSchema.ts index 2645687eab..0735fd6d39 100644 --- a/packages/server/api/src/app/database/migrations/1740463047000-InitializePostgresSchema.ts +++ b/packages/server/api/src/app/database/migrations/1740463047000-InitializePostgresSchema.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class InitializePostgresSchema1740463047000 - implements MigrationInterface -{ +export class InitializePostgresSchema1740463047000 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { const userTableExistsQueryResponse: { exists: boolean }[] = await queryRunner.query( diff --git a/packages/server/api/src/app/database/migrations/1741016911542-AddColumnForStartupTemplates.ts b/packages/server/api/src/app/database/migrations/1741016911542-AddColumnForStartupTemplates.ts index 5a94fef201..1f4b333fba 100644 --- a/packages/server/api/src/app/database/migrations/1741016911542-AddColumnForStartupTemplates.ts +++ b/packages/server/api/src/app/database/migrations/1741016911542-AddColumnForStartupTemplates.ts @@ -1,8 +1,6 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddColumnForStartupTemplates1741016911542 - implements MigrationInterface -{ +export class AddColumnForStartupTemplates1741016911542 implements MigrationInterface { name = 'AddColumnForStartupTemplates1741016911542'; public async up(queryRunner: QueryRunner): Promise { diff --git a/packages/server/api/src/app/database/migrations/1741475952000-RenamePieceToBlock.ts b/packages/server/api/src/app/database/migrations/1741475952000-RenamePieceToBlock.ts index dd61aeb6a6..820e02a537 100644 --- a/packages/server/api/src/app/database/migrations/1741475952000-RenamePieceToBlock.ts +++ b/packages/server/api/src/app/database/migrations/1741475952000-RenamePieceToBlock.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class RenamePieceToBlockMigration1741475952000 - implements MigrationInterface -{ +export class RenamePieceToBlockMigration1741475952000 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('RenamePieceToBlockMigration1741475952000: starting'); diff --git a/packages/server/api/src/app/database/migrations/1741945618000-ReplaceSelectOptionsIdsWithNames.ts b/packages/server/api/src/app/database/migrations/1741945618000-ReplaceSelectOptionsIdsWithNames.ts index 0fd1ee283c..948012adf0 100644 --- a/packages/server/api/src/app/database/migrations/1741945618000-ReplaceSelectOptionsIdsWithNames.ts +++ b/packages/server/api/src/app/database/migrations/1741945618000-ReplaceSelectOptionsIdsWithNames.ts @@ -12,9 +12,7 @@ const mappingOfSelectOptionsIdToValuesInEveryTable = new Map< Map> >(); -export class ReplaceSelectOptionsIdsWithNames1741945618000 - implements MigrationInterface -{ +export class ReplaceSelectOptionsIdsWithNames1741945618000 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { const workflows = await queryRunner.query( 'SELECT "id", "trigger" FROM "flow_version"', diff --git a/packages/server/api/src/app/database/migrations/1745309649736-AddProviderSettingsAndConstraintForAiConfig.ts b/packages/server/api/src/app/database/migrations/1745309649736-AddProviderSettingsAndConstraintForAiConfig.ts index 9e194df156..11632db241 100644 --- a/packages/server/api/src/app/database/migrations/1745309649736-AddProviderSettingsAndConstraintForAiConfig.ts +++ b/packages/server/api/src/app/database/migrations/1745309649736-AddProviderSettingsAndConstraintForAiConfig.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddProviderSettingsAndConstraintForAiConfig1745309649736 - implements MigrationInterface -{ +export class AddProviderSettingsAndConstraintForAiConfig1745309649736 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info( 'AddProviderSettingsAndConstraintForAiConfig1745309649736: starting', diff --git a/packages/server/api/src/app/database/migrations/1746454781866-AddFlowStepTestOutputTable.ts b/packages/server/api/src/app/database/migrations/1746454781866-AddFlowStepTestOutputTable.ts index 7d0e37ffa4..bd4007e16b 100644 --- a/packages/server/api/src/app/database/migrations/1746454781866-AddFlowStepTestOutputTable.ts +++ b/packages/server/api/src/app/database/migrations/1746454781866-AddFlowStepTestOutputTable.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddFlowStepTestOutputTable1746454781866 - implements MigrationInterface -{ +export class AddFlowStepTestOutputTable1746454781866 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('AddFlowStepTestOutputTable1746454781866: starting'); diff --git a/packages/server/api/src/app/database/migrations/1746618034190-AddStepIdToExistingFlowVersionsAndInsertOutputInTestOutputTable.ts b/packages/server/api/src/app/database/migrations/1746618034190-AddStepIdToExistingFlowVersionsAndInsertOutputInTestOutputTable.ts index d09c0f385c..6ef694b1d8 100644 --- a/packages/server/api/src/app/database/migrations/1746618034190-AddStepIdToExistingFlowVersionsAndInsertOutputInTestOutputTable.ts +++ b/packages/server/api/src/app/database/migrations/1746618034190-AddStepIdToExistingFlowVersionsAndInsertOutputInTestOutputTable.ts @@ -3,9 +3,7 @@ import { encryptUtils, fileCompressor, logger } from '@openops/server-shared'; import { FileCompression, openOpsId } from '@openops/shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddStepIdToExistingFlowVersionsAndInsertOutputInTestOutputTable1746454781866 - implements MigrationInterface -{ +export class AddStepIdToExistingFlowVersionsAndInsertOutputInTestOutputTable1746454781866 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info( 'AddStepIdToExistingFlowVersionsAndInsertOutputInTestOutputTable1746454781866: starting', diff --git a/packages/server/api/src/app/database/migrations/1748356358053-AddProviderToAppConnectionTable.ts b/packages/server/api/src/app/database/migrations/1748356358053-AddProviderToAppConnectionTable.ts index 709406e453..7041d11d10 100644 --- a/packages/server/api/src/app/database/migrations/1748356358053-AddProviderToAppConnectionTable.ts +++ b/packages/server/api/src/app/database/migrations/1748356358053-AddProviderToAppConnectionTable.ts @@ -1,8 +1,6 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddProviderToAppConnectionTable1748356358053 - implements MigrationInterface -{ +export class AddProviderToAppConnectionTable1748356358053 implements MigrationInterface { name = 'AddProviderToAppConnectionTable1748356358053'; public async up(queryRunner: QueryRunner): Promise { diff --git a/packages/server/api/src/app/database/migrations/1749066895522-AddAuthProviderKeyToAppConnectionTable.ts b/packages/server/api/src/app/database/migrations/1749066895522-AddAuthProviderKeyToAppConnectionTable.ts index c2ee9537ad..e2b08e8f76 100644 --- a/packages/server/api/src/app/database/migrations/1749066895522-AddAuthProviderKeyToAppConnectionTable.ts +++ b/packages/server/api/src/app/database/migrations/1749066895522-AddAuthProviderKeyToAppConnectionTable.ts @@ -1,8 +1,6 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddAuthProviderKeyToAppConnectionTable1749066895522 - implements MigrationInterface -{ +export class AddAuthProviderKeyToAppConnectionTable1749066895522 implements MigrationInterface { name = 'AddAuthProviderKeyToAppConnectionTable1749066895522'; public async up(queryRunner: QueryRunner): Promise { diff --git a/packages/server/api/src/app/database/migrations/1749111073431-AddAuthProviderKeyToExistingAppConnections.ts b/packages/server/api/src/app/database/migrations/1749111073431-AddAuthProviderKeyToExistingAppConnections.ts index 506dcda32d..e0477f2fae 100644 --- a/packages/server/api/src/app/database/migrations/1749111073431-AddAuthProviderKeyToExistingAppConnections.ts +++ b/packages/server/api/src/app/database/migrations/1749111073431-AddAuthProviderKeyToExistingAppConnections.ts @@ -1,9 +1,7 @@ import { fileBlocksUtils, logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddAuthProviderKeyToExistingAppConnections1749111073431 - implements MigrationInterface -{ +export class AddAuthProviderKeyToExistingAppConnections1749111073431 implements MigrationInterface { name = 'AddAuthProviderKeyToExistingAppConnections1749111073431'; public async up(queryRunner: QueryRunner): Promise { diff --git a/packages/server/api/src/app/database/migrations/1749644220381-AddStepIdToExistingFlowVersions.ts b/packages/server/api/src/app/database/migrations/1749644220381-AddStepIdToExistingFlowVersions.ts index 0da240a876..ab8a346bb9 100644 --- a/packages/server/api/src/app/database/migrations/1749644220381-AddStepIdToExistingFlowVersions.ts +++ b/packages/server/api/src/app/database/migrations/1749644220381-AddStepIdToExistingFlowVersions.ts @@ -3,9 +3,7 @@ import { logger } from '@openops/server-shared'; import { openOpsId } from '@openops/shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddStepIdToExistingFlowVersions1749644220381 - implements MigrationInterface -{ +export class AddStepIdToExistingFlowVersions1749644220381 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('AddStepIdToExistingFlowVersions1749644220381: starting'); diff --git a/packages/server/api/src/app/database/migrations/1749809813762-SetBlockNameAsNullableInConnectionsTable.ts b/packages/server/api/src/app/database/migrations/1749809813762-SetBlockNameAsNullableInConnectionsTable.ts index 0a84ffa23b..3d4e37ea16 100644 --- a/packages/server/api/src/app/database/migrations/1749809813762-SetBlockNameAsNullableInConnectionsTable.ts +++ b/packages/server/api/src/app/database/migrations/1749809813762-SetBlockNameAsNullableInConnectionsTable.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class SetBlockNameAsNullableInConnectionsTable1749809813762 - implements MigrationInterface -{ +export class SetBlockNameAsNullableInConnectionsTable1749809813762 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info( 'SetBlockNameAsNullableInConnectionsTable1749809813762: starting', diff --git a/packages/server/api/src/app/database/migrations/1750161024797-RemoveBlockNameFromConnectionsTable.ts b/packages/server/api/src/app/database/migrations/1750161024797-RemoveBlockNameFromConnectionsTable.ts index 004f381896..7ef56d244a 100644 --- a/packages/server/api/src/app/database/migrations/1750161024797-RemoveBlockNameFromConnectionsTable.ts +++ b/packages/server/api/src/app/database/migrations/1750161024797-RemoveBlockNameFromConnectionsTable.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class RemoveBlockNameFromConnectionsTable1750161024797 - implements MigrationInterface -{ +export class RemoveBlockNameFromConnectionsTable1750161024797 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('RemoveBlockNameFromConnectionsTable1750161024797: starting'); diff --git a/packages/server/api/src/app/database/migrations/1750933522145-AddInputToTestOutputTable.ts b/packages/server/api/src/app/database/migrations/1750933522145-AddInputToTestOutputTable.ts index 944868cf60..a2d921ecce 100644 --- a/packages/server/api/src/app/database/migrations/1750933522145-AddInputToTestOutputTable.ts +++ b/packages/server/api/src/app/database/migrations/1750933522145-AddInputToTestOutputTable.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddInputToTestOutputTable1750933522145 - implements MigrationInterface -{ +export class AddInputToTestOutputTable1750933522145 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('AddInputToTestOutputTable1750933522145: starting'); diff --git a/packages/server/api/src/app/database/migrations/1751282188913-AddInputToTriggerEventTable.ts b/packages/server/api/src/app/database/migrations/1751282188913-AddInputToTriggerEventTable.ts index 62b5bc68c9..2feb8e813e 100644 --- a/packages/server/api/src/app/database/migrations/1751282188913-AddInputToTriggerEventTable.ts +++ b/packages/server/api/src/app/database/migrations/1751282188913-AddInputToTriggerEventTable.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddInputToTriggerEventTable1751282188913 - implements MigrationInterface -{ +export class AddInputToTriggerEventTable1751282188913 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('AddInputToTriggerEventTable1751282188913: starting'); diff --git a/packages/server/api/src/app/database/migrations/1752487641303-AddSuccessToFlowStepTestOutputTable.ts b/packages/server/api/src/app/database/migrations/1752487641303-AddSuccessToFlowStepTestOutputTable.ts index 9f3c2d87ba..5e11ba99ee 100644 --- a/packages/server/api/src/app/database/migrations/1752487641303-AddSuccessToFlowStepTestOutputTable.ts +++ b/packages/server/api/src/app/database/migrations/1752487641303-AddSuccessToFlowStepTestOutputTable.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddSuccessToFlowStepTestOutputTable1752487641303 - implements MigrationInterface -{ +export class AddSuccessToFlowStepTestOutputTable1752487641303 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('AddSuccessToFlowStepTestOutputTable1752487641303: starting'); diff --git a/packages/server/api/src/app/database/migrations/1752758891771-UpdateUmbrellaRecommendationTypesAcrossFlowVersions.ts b/packages/server/api/src/app/database/migrations/1752758891771-UpdateUmbrellaRecommendationTypesAcrossFlowVersions.ts index 75e6fcb13a..0fb593aa8d 100644 --- a/packages/server/api/src/app/database/migrations/1752758891771-UpdateUmbrellaRecommendationTypesAcrossFlowVersions.ts +++ b/packages/server/api/src/app/database/migrations/1752758891771-UpdateUmbrellaRecommendationTypesAcrossFlowVersions.ts @@ -2,9 +2,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; import { applyUpdateToFlowVersion } from './common/apply-update-to-flow-version'; -export class UpdateUmbrellaRecommendationTypesAcrossFlowVersions1752758891771 - implements MigrationInterface -{ +export class UpdateUmbrellaRecommendationTypesAcrossFlowVersions1752758891771 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info( 'UpdateUmbrellaRecommendationTypesAcrossFlowVersions1752758891771: starting', diff --git a/packages/server/api/src/app/database/migrations/1754489349007-AddTriggerSourceToFlowRun.ts b/packages/server/api/src/app/database/migrations/1754489349007-AddTriggerSourceToFlowRun.ts index 6a50a48740..119af2b23f 100644 --- a/packages/server/api/src/app/database/migrations/1754489349007-AddTriggerSourceToFlowRun.ts +++ b/packages/server/api/src/app/database/migrations/1754489349007-AddTriggerSourceToFlowRun.ts @@ -1,9 +1,7 @@ import { FlowRunTriggerSource } from '@openops/shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddTriggerSourceToFlowRun1754489349007 - implements MigrationInterface -{ +export class AddTriggerSourceToFlowRun1754489349007 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` ALTER TABLE flow_run diff --git a/packages/server/api/src/app/database/migrations/1755942417309-MigrateStepTestOutputToNewCompressionAlgorithm.ts b/packages/server/api/src/app/database/migrations/1755942417309-MigrateStepTestOutputToNewCompressionAlgorithm.ts index 13d69a75f4..d364cf9285 100644 --- a/packages/server/api/src/app/database/migrations/1755942417309-MigrateStepTestOutputToNewCompressionAlgorithm.ts +++ b/packages/server/api/src/app/database/migrations/1755942417309-MigrateStepTestOutputToNewCompressionAlgorithm.ts @@ -7,9 +7,7 @@ import { import { FileCompression } from '@openops/shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class MigrateStepTestOutputToNewCompressionAlgorithm1755942417309 - implements MigrationInterface -{ +export class MigrateStepTestOutputToNewCompressionAlgorithm1755942417309 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info( 'MigrateStepTestOutputToNewCompressionAlgorithm1755942417309: starting', diff --git a/packages/server/api/src/app/database/migrations/1756298583000-AddIsWorkflowToFlowTable.ts b/packages/server/api/src/app/database/migrations/1756298583000-AddIsWorkflowToFlowTable.ts index f6a78e182b..b48e281d3f 100644 --- a/packages/server/api/src/app/database/migrations/1756298583000-AddIsWorkflowToFlowTable.ts +++ b/packages/server/api/src/app/database/migrations/1756298583000-AddIsWorkflowToFlowTable.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddIsWorkflowToFlowTable1756298583000 - implements MigrationInterface -{ +export class AddIsWorkflowToFlowTable1756298583000 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('AddIsWorkflowToFlowTable1756298583000: starting'); diff --git a/packages/server/api/src/app/database/migrations/1756377588949-RenameIsWorkflowToIsInternal.ts b/packages/server/api/src/app/database/migrations/1756377588949-RenameIsWorkflowToIsInternal.ts index cbffc9c333..19c3f224a1 100644 --- a/packages/server/api/src/app/database/migrations/1756377588949-RenameIsWorkflowToIsInternal.ts +++ b/packages/server/api/src/app/database/migrations/1756377588949-RenameIsWorkflowToIsInternal.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class RenameIsWorkflowToIsInternal1756377588949 - implements MigrationInterface -{ +export class RenameIsWorkflowToIsInternal1756377588949 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('RenameIsWorkflowToIsInternal1756377588949: starting'); diff --git a/packages/server/api/src/app/database/migrations/1759242268873-MigrateAiConfigToAppConnection.ts b/packages/server/api/src/app/database/migrations/1759242268873-MigrateAiConfigToAppConnection.ts index cc13c8b760..6dc87189cf 100644 --- a/packages/server/api/src/app/database/migrations/1759242268873-MigrateAiConfigToAppConnection.ts +++ b/packages/server/api/src/app/database/migrations/1759242268873-MigrateAiConfigToAppConnection.ts @@ -2,9 +2,7 @@ import { encryptUtils, logger } from '@openops/server-shared'; import { EncryptedObject } from '@openops/shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class MigrateAiConfigToAppConnection1759242268873 - implements MigrationInterface -{ +export class MigrateAiConfigToAppConnection1759242268873 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('MigrateAiConfigToAppConnection1759242268873: starting'); diff --git a/packages/server/api/src/app/database/migrations/1760429290001-AddTestRunActionLimitsToFlowVersion.ts b/packages/server/api/src/app/database/migrations/1760429290001-AddTestRunActionLimitsToFlowVersion.ts index f1c8211b88..fd252032b3 100644 --- a/packages/server/api/src/app/database/migrations/1760429290001-AddTestRunActionLimitsToFlowVersion.ts +++ b/packages/server/api/src/app/database/migrations/1760429290001-AddTestRunActionLimitsToFlowVersion.ts @@ -3,9 +3,7 @@ import { Trigger } from '@openops/shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; import { calculateTestRunActionLimits } from '../../flows/flow-version/test-run-action-limits-calculator'; -export class AddTestRunActionLimitsToFlowVersion1760429290001 - implements MigrationInterface -{ +export class AddTestRunActionLimitsToFlowVersion1760429290001 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('AddTestRunActionLimitsToFlowVersion1760429290001: starting'); diff --git a/packages/server/api/src/app/database/migrations/1760500000000-MoveTablesWorkspaceIdFromOrganizationToProject.ts b/packages/server/api/src/app/database/migrations/1760500000000-MoveTablesWorkspaceIdFromOrganizationToProject.ts index 8192bd80b2..9f888145a6 100644 --- a/packages/server/api/src/app/database/migrations/1760500000000-MoveTablesWorkspaceIdFromOrganizationToProject.ts +++ b/packages/server/api/src/app/database/migrations/1760500000000-MoveTablesWorkspaceIdFromOrganizationToProject.ts @@ -1,8 +1,6 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -export class MoveTablesWorkspaceIdFromOrganizationToProject1760500000000 - implements MigrationInterface -{ +export class MoveTablesWorkspaceIdFromOrganizationToProject1760500000000 implements MigrationInterface { name = 'MoveTablesWorkspaceIdFromOrganizationToProject1760500000000'; public async up(queryRunner: QueryRunner): Promise { diff --git a/packages/server/api/src/app/database/migrations/1763131154284-AddTablesTokenToProject.ts b/packages/server/api/src/app/database/migrations/1763131154284-AddTablesTokenToProject.ts index 3f965df459..3ccaee074b 100644 --- a/packages/server/api/src/app/database/migrations/1763131154284-AddTablesTokenToProject.ts +++ b/packages/server/api/src/app/database/migrations/1763131154284-AddTablesTokenToProject.ts @@ -1,8 +1,6 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddTablesTokenToProject1763131154284 - implements MigrationInterface -{ +export class AddTablesTokenToProject1763131154284 implements MigrationInterface { name = 'AddTablesTokenToProject1763131154284'; public async up(queryRunner: QueryRunner): Promise { diff --git a/packages/server/api/src/app/database/migrations/1763394159990-AddTablesTokenToProject.ts b/packages/server/api/src/app/database/migrations/1763394159990-AddTablesTokenToProject.ts index 5eeb4f05ef..4930af2bcb 100644 --- a/packages/server/api/src/app/database/migrations/1763394159990-AddTablesTokenToProject.ts +++ b/packages/server/api/src/app/database/migrations/1763394159990-AddTablesTokenToProject.ts @@ -3,9 +3,7 @@ import { MigrationInterface, QueryRunner } from 'typeorm'; import { openopsTables } from '../../openops-tables'; import { authAdminUserOnTables } from './common/authenticate-tables-admin'; -export class AddTablesDatabaseTokenToProject1763394159990 - implements MigrationInterface -{ +export class AddTablesDatabaseTokenToProject1763394159990 implements MigrationInterface { name = 'AddTablesDatabaseTokenToProject1763394159990'; public async up(queryRunner: QueryRunner): Promise { diff --git a/packages/server/api/src/app/database/migrations/1763755045436-MigrateTablesUserPassword.ts b/packages/server/api/src/app/database/migrations/1763755045436-MigrateTablesUserPassword.ts index 11e9f0493e..77cb80d003 100644 --- a/packages/server/api/src/app/database/migrations/1763755045436-MigrateTablesUserPassword.ts +++ b/packages/server/api/src/app/database/migrations/1763755045436-MigrateTablesUserPassword.ts @@ -3,9 +3,7 @@ import { AppSystemProp, system } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; import { authAdminUserOnTables } from './common/authenticate-tables-admin'; -export class MigrateTablesUserPassword1763755045436 - implements MigrationInterface -{ +export class MigrateTablesUserPassword1763755045436 implements MigrationInterface { name = 'MigrateTablesUserPassword1763755045436'; public async up(queryRunner: QueryRunner): Promise { diff --git a/packages/server/api/src/app/database/migrations/1770297289194-AddBenchmarkAndBenchmarkFlowTables.ts b/packages/server/api/src/app/database/migrations/1770297289194-AddBenchmarkAndBenchmarkFlowTables.ts index dbd9c91597..cdab706cef 100644 --- a/packages/server/api/src/app/database/migrations/1770297289194-AddBenchmarkAndBenchmarkFlowTables.ts +++ b/packages/server/api/src/app/database/migrations/1770297289194-AddBenchmarkAndBenchmarkFlowTables.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddBenchmarkAndBenchmarkFlowTables1770297289194 - implements MigrationInterface -{ +export class AddBenchmarkAndBenchmarkFlowTables1770297289194 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('AddBenchmarkAndBenchmarkFlowTables1770297289194: starting'); diff --git a/packages/server/api/src/app/database/migrations/1772449919844-DropLastRunIdFromBenchmark.ts b/packages/server/api/src/app/database/migrations/1772449919844-DropLastRunIdFromBenchmark.ts index 10ea3f6d25..3c201be732 100644 --- a/packages/server/api/src/app/database/migrations/1772449919844-DropLastRunIdFromBenchmark.ts +++ b/packages/server/api/src/app/database/migrations/1772449919844-DropLastRunIdFromBenchmark.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class DropLastRunIdFromBenchmark1772449919844 - implements MigrationInterface -{ +export class DropLastRunIdFromBenchmark1772449919844 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('DropLastRunIdFromBenchmark1772449919844: starting'); diff --git a/packages/server/api/src/app/database/migrations/1773046640936-AddIsCleanupToBenchmarkFlow.ts b/packages/server/api/src/app/database/migrations/1773046640936-AddIsCleanupToBenchmarkFlow.ts index 701f02b5b1..1b3a315a12 100644 --- a/packages/server/api/src/app/database/migrations/1773046640936-AddIsCleanupToBenchmarkFlow.ts +++ b/packages/server/api/src/app/database/migrations/1773046640936-AddIsCleanupToBenchmarkFlow.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class AddIsCleanupToBenchmarkFlow1773046640936 - implements MigrationInterface -{ +export class AddIsCleanupToBenchmarkFlow1773046640936 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('AddIsCleanupToBenchmarkFlow1773046640936: starting'); diff --git a/packages/server/api/src/app/database/migrations/1776097737024-FixFolderUniqueConstraint.ts b/packages/server/api/src/app/database/migrations/1776097737024-FixFolderUniqueConstraint.ts index bf80d77580..3c0d7af073 100644 --- a/packages/server/api/src/app/database/migrations/1776097737024-FixFolderUniqueConstraint.ts +++ b/packages/server/api/src/app/database/migrations/1776097737024-FixFolderUniqueConstraint.ts @@ -1,9 +1,7 @@ import { logger } from '@openops/server-shared'; import { MigrationInterface, QueryRunner } from 'typeorm'; -export class FixFolderUniqueConstraint1776097737024 - implements MigrationInterface -{ +export class FixFolderUniqueConstraint1776097737024 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise { logger.info('FixFolderUniqueConstraint1776097737024: starting'); diff --git a/packages/server/api/src/app/database/seeds/ensure-tables-mcp-endpoint-exists.ts b/packages/server/api/src/app/database/seeds/ensure-tables-mcp-endpoint-exists.ts index 54f35271c0..0f8c55be47 100644 --- a/packages/server/api/src/app/database/seeds/ensure-tables-mcp-endpoint-exists.ts +++ b/packages/server/api/src/app/database/seeds/ensure-tables-mcp-endpoint-exists.ts @@ -7,9 +7,8 @@ export const ensureTablesMcpEndpointExists = async (): Promise => { await applyToEachTablesDatabase(async (tablesContext): Promise => { const tokenOrResolver = await resolveTokenProvider(tablesContext); - const mcpEndpoints = await openopsTables.getMcpEndpointList( - tokenOrResolver, - ); + const mcpEndpoints = + await openopsTables.getMcpEndpointList(tokenOrResolver); const endpointExists = mcpEndpoints.some( (endpoint) => endpoint.workspace_id === tablesContext.tablesWorkspaceId, diff --git a/packages/server/api/src/app/database/seeds/seed-admin.ts b/packages/server/api/src/app/database/seeds/seed-admin.ts index c16d62ab86..f7be4ffddd 100644 --- a/packages/server/api/src/app/database/seeds/seed-admin.ts +++ b/packages/server/api/src/app/database/seeds/seed-admin.ts @@ -31,8 +31,7 @@ export const upsertAdminUser = async (): Promise => { let { organization, project } = await resolveUserOrganizationContext(user); let tablesWorkspaceContext: - | TablesWorkspaceContext - | undefined = undefined; + TablesWorkspaceContext | undefined = undefined; if (project) { tablesWorkspaceContext = { databaseToken: project.tablesDatabaseToken, diff --git a/packages/server/api/src/app/flows/flow-run/flow-run-service.ts b/packages/server/api/src/app/flows/flow-run/flow-run-service.ts index b86a6d4754..d722aaae5a 100644 --- a/packages/server/api/src/app/flows/flow-run/flow-run-service.ts +++ b/packages/server/api/src/app/flows/flow-run/flow-run-service.ts @@ -464,9 +464,9 @@ export const flowRunService = { const stateToPersist = hasSteps ? executionState - : (await inFlightRunStateCache.get(flowRunId)) ?? + : ((await inFlightRunStateCache.get(flowRunId)) ?? executionState ?? - null; + null); const logFileId = await updateLogs({ logsFileId: flowRun.logsFileId || null, diff --git a/packages/server/api/src/app/flows/flow/flow-version.controller.ts b/packages/server/api/src/app/flows/flow/flow-version.controller.ts index 140d9cae88..c2f4adcaa8 100644 --- a/packages/server/api/src/app/flows/flow/flow-version.controller.ts +++ b/packages/server/api/src/app/flows/flow/flow-version.controller.ts @@ -61,9 +61,8 @@ export const flowVersionController: FastifyPluginAsyncTypebox = async ( const { flowVersionId } = request.params; const updateData = request.body; try { - const flowVersion = await flowVersionService.getOneOrThrow( - flowVersionId, - ); + const flowVersion = + await flowVersionService.getOneOrThrow(flowVersionId); if (flowVersion.flowId !== updateData.flowId) { await reply.status(StatusCodes.BAD_REQUEST).send({ success: false, @@ -233,9 +232,8 @@ export const flowVersionController: FastifyPluginAsyncTypebox = async ( const { flowVersionId } = request.params; const { stepId, input, output, success } = request.body; try { - const flowVersion = await flowVersionService.getOneOrThrow( - flowVersionId, - ); + const flowVersion = + await flowVersionService.getOneOrThrow(flowVersionId); await assertFlowVersionBelongsToProject( flowVersion, diff --git a/packages/server/api/src/app/flows/flow/resolve-manual-run-payload.ts b/packages/server/api/src/app/flows/flow/resolve-manual-run-payload.ts index 90217e7dbe..cc58d19f02 100644 --- a/packages/server/api/src/app/flows/flow/resolve-manual-run-payload.ts +++ b/packages/server/api/src/app/flows/flow/resolve-manual-run-payload.ts @@ -58,7 +58,7 @@ export async function resolveManualPayload( const payload = result?.success && Array.isArray(result.output) - ? result.output[0] ?? {} + ? (result.output[0] ?? {}) : {}; return { diff --git a/packages/server/api/src/app/oauth/oauth-cleanup-job.ts b/packages/server/api/src/app/oauth/oauth-cleanup-job.ts index 445fcd0aba..d970aa6adf 100644 --- a/packages/server/api/src/app/oauth/oauth-cleanup-job.ts +++ b/packages/server/api/src/app/oauth/oauth-cleanup-job.ts @@ -85,9 +85,8 @@ export const oauthCleanupJobHandler = async (): Promise => { const authorizationCodes = await codeRepo().delete({ expiresAt: earlierThan(nowDate), }); - const pendingAuthorizations = await pendingAuthorizationService.deleteExpired( - nowDate, - ); + const pendingAuthorizations = + await pendingAuthorizationService.deleteExpired(nowDate); // Expiry is the only anchor, revoked rows included: keeping a rotated token until it // could no longer be used anyway is what lets reuse detection still recognise a replay // as a compromise rather than a plain `invalid refresh token`. diff --git a/packages/server/api/src/app/oauth/projects/available-projects.ts b/packages/server/api/src/app/oauth/projects/available-projects.ts index 79a2c660e3..a33b4cf945 100644 --- a/packages/server/api/src/app/oauth/projects/available-projects.ts +++ b/packages/server/api/src/app/oauth/projects/available-projects.ts @@ -19,9 +19,8 @@ export async function listAvailableProjects( return []; } - const memberships = await getOAuthProjectMembershipService().listForUser( - user, - ); + const memberships = + await getOAuthProjectMembershipService().listForUser(user); // One query rather than one per membership: agents poll this to decide where to switch. const projects = await projectService.getManyByIds( diff --git a/packages/server/api/src/app/oauth/tokens/tokens.service.ts b/packages/server/api/src/app/oauth/tokens/tokens.service.ts index d313c48048..01844fe597 100644 --- a/packages/server/api/src/app/oauth/tokens/tokens.service.ts +++ b/packages/server/api/src/app/oauth/tokens/tokens.service.ts @@ -52,9 +52,8 @@ async function loadActiveUserOrThrow(userId: string): Promise { } async function resolveDefaultProjectId(user: User): Promise { - const membership = await getOAuthProjectMembershipService().getDefaultForUser( - user, - ); + const membership = + await getOAuthProjectMembershipService().getDefaultForUser(user); if (isNil(membership)) { throw invalidGrant('the user has no accessible project'); diff --git a/packages/server/api/src/app/openops-analytics/analytics-seeding-service.ts b/packages/server/api/src/app/openops-analytics/analytics-seeding-service.ts index 87bf6a7f27..0f56bbcd7f 100644 --- a/packages/server/api/src/app/openops-analytics/analytics-seeding-service.ts +++ b/packages/server/api/src/app/openops-analytics/analytics-seeding-service.ts @@ -24,9 +24,8 @@ export async function seedAnalyticsDashboards(): Promise { const { access_token } = await authenticateOpenOpsAnalyticsAdmin(); - const dbConnection = await getOrCreateOpenOpsTablesDatabaseConnection( - access_token, - ); + const dbConnection = + await getOrCreateOpenOpsTablesDatabaseConnection(access_token); const homepage = await createOrGetDashboard( access_token, diff --git a/packages/server/api/src/app/openops-analytics/benchmark/create-aws-benchmark-dashboard.ts b/packages/server/api/src/app/openops-analytics/benchmark/create-aws-benchmark-dashboard.ts index e76c3fc561..99d202fb47 100644 --- a/packages/server/api/src/app/openops-analytics/benchmark/create-aws-benchmark-dashboard.ts +++ b/packages/server/api/src/app/openops-analytics/benchmark/create-aws-benchmark-dashboard.ts @@ -26,9 +26,8 @@ export async function createAwsBenchmarkDashboard(): Promise { const { access_token } = await authenticateOpenOpsAnalyticsAdmin(); - const dbConnection = await getOrCreateOpenOpsTablesDatabaseConnection( - access_token, - ); + const dbConnection = + await getOrCreateOpenOpsTablesDatabaseConnection(access_token); const organization = await organizationService.getOldestOrganization(); assertNotNullOrUndefined(organization, 'Organization not found'); diff --git a/packages/server/api/src/app/openops-analytics/benchmark/create-azure-benchmark-dashboard.ts b/packages/server/api/src/app/openops-analytics/benchmark/create-azure-benchmark-dashboard.ts index 24cc9e4fda..b3c21fc6ae 100644 --- a/packages/server/api/src/app/openops-analytics/benchmark/create-azure-benchmark-dashboard.ts +++ b/packages/server/api/src/app/openops-analytics/benchmark/create-azure-benchmark-dashboard.ts @@ -26,9 +26,8 @@ export async function createAzureBenchmarkDashboard(): Promise { const { access_token } = await authenticateOpenOpsAnalyticsAdmin(); - const dbConnection = await getOrCreateOpenOpsTablesDatabaseConnection( - access_token, - ); + const dbConnection = + await getOrCreateOpenOpsTablesDatabaseConnection(access_token); const organization = await organizationService.getOldestOrganization(); assertNotNullOrUndefined(organization, 'Organization not found'); diff --git a/packages/server/api/src/app/wizard/resolvers/aws/aws-option-resolver.ts b/packages/server/api/src/app/wizard/resolvers/aws/aws-option-resolver.ts index 3ba37ad6a5..c64ff0a96c 100644 --- a/packages/server/api/src/app/wizard/resolvers/aws/aws-option-resolver.ts +++ b/packages/server/api/src/app/wizard/resolvers/aws/aws-option-resolver.ts @@ -46,8 +46,7 @@ export async function getConnectionAccounts( }); const props = (connection.value as CustomAuthConnectionValue)?.props as - | AwsAuthProps - | undefined; + AwsAuthProps | undefined; const roles = props?.roles; if (!roles?.length) { return []; diff --git a/packages/server/api/src/app/workers/queue/queue-manager.ts b/packages/server/api/src/app/workers/queue/queue-manager.ts index 6c675c7e5d..e66f74c60a 100644 --- a/packages/server/api/src/app/workers/queue/queue-manager.ts +++ b/packages/server/api/src/app/workers/queue/queue-manager.ts @@ -97,9 +97,9 @@ type OneTimeJobAddParams = BaseAddParams< export type AddParams = JT extends JobType.ONE_TIME ? OneTimeJobAddParams : JT extends JobType.REPEATING - ? RepeatingJobAddParams | RenewWebhookJobAddParams - : JT extends JobType.DELAYED - ? DelayedJobAddParams - : JT extends JobType.WEBHOOK - ? WebhookJobAddParams - : never; + ? RepeatingJobAddParams | RenewWebhookJobAddParams + : JT extends JobType.DELAYED + ? DelayedJobAddParams + : JT extends JobType.WEBHOOK + ? WebhookJobAddParams + : never; diff --git a/packages/server/api/src/app/workers/redis/flow-run-cleaner.ts b/packages/server/api/src/app/workers/redis/flow-run-cleaner.ts index ed239c0f81..2177f7d996 100644 --- a/packages/server/api/src/app/workers/redis/flow-run-cleaner.ts +++ b/packages/server/api/src/app/workers/redis/flow-run-cleaner.ts @@ -37,9 +37,8 @@ async function markExpiredWorkflowsAsFailed( expiredISOString: string, ): Promise { try { - const expiredFlowRuns = await flowRunService.getRunningWorkflowsOlderThan( - expiredISOString, - ); + const expiredFlowRuns = + await flowRunService.getRunningWorkflowsOlderThan(expiredISOString); for (const flowRun of expiredFlowRuns) { await flowRunService.updateStatus({ diff --git a/packages/server/api/src/app/workers/redis/redis-migration.ts b/packages/server/api/src/app/workers/redis/redis-migration.ts index 045319542e..d170480462 100644 --- a/packages/server/api/src/app/workers/redis/redis-migration.ts +++ b/packages/server/api/src/app/workers/redis/redis-migration.ts @@ -97,9 +97,8 @@ async function migrateJob(job: Job): Promise { if (modifiedJobData.schemaVersion === 4) { modifiedJobData.schemaVersion = 5; - modifiedJobData = await addTriggerStrategyForRepeatableJobType( - modifiedJobData, - ); + modifiedJobData = + await addTriggerStrategyForRepeatableJobType(modifiedJobData); await job.updateData(modifiedJobData); } diff --git a/packages/server/api/src/app/workers/worker-controller.ts b/packages/server/api/src/app/workers/worker-controller.ts index f990ced263..139b7f732c 100644 --- a/packages/server/api/src/app/workers/worker-controller.ts +++ b/packages/server/api/src/app/workers/worker-controller.ts @@ -113,7 +113,7 @@ export const flowWorkerController: FastifyPluginAsyncTypebox = async (app) => { }, async (request) => { const { flowId, projectId, payloads } = request.body; - const savePayloads = payloads.map((payload) => + payloads.forEach((payload) => rejectedPromiseHandler( triggerEventService.saveEvent({ flowId, @@ -123,7 +123,6 @@ export const flowWorkerController: FastifyPluginAsyncTypebox = async (app) => { }), ), ); - rejectedPromiseHandler(Promise.all(savePayloads)); return {}; }, ); diff --git a/packages/server/api/test/integration/ce/flows/test-run-action-limits-calculator.test.ts b/packages/server/api/test/integration/ce/flows/test-run-action-limits-calculator.test.ts index 7f8d4e6df1..fbb1245c10 100644 --- a/packages/server/api/test/integration/ce/flows/test-run-action-limits-calculator.test.ts +++ b/packages/server/api/test/integration/ce/flows/test-run-action-limits-calculator.test.ts @@ -313,7 +313,9 @@ describe('shouldRecalculateTestRunActionLimits', () => { shouldRecalculateTestRunActionLimits({ type: FlowOperationType.ADD_ACTION, request: {}, - } as unknown as Parameters[0]), + } as unknown as Parameters< + typeof shouldRecalculateTestRunActionLimits + >[0]), ).toBe(true); }); @@ -322,7 +324,9 @@ describe('shouldRecalculateTestRunActionLimits', () => { shouldRecalculateTestRunActionLimits({ type: FlowOperationType.CHANGE_NAME, request: {}, - } as unknown as Parameters[0]), + } as unknown as Parameters< + typeof shouldRecalculateTestRunActionLimits + >[0]), ).toBe(false); }); }); diff --git a/packages/server/api/test/integration/cloud/project/project.service.test.ts b/packages/server/api/test/integration/cloud/project/project.service.test.ts index 5d86ce5c5a..126b4a44f5 100644 --- a/packages/server/api/test/integration/cloud/project/project.service.test.ts +++ b/packages/server/api/test/integration/cloud/project/project.service.test.ts @@ -240,9 +240,8 @@ describe('Project Service', () => { it('should return null when organization does not exist', async () => { const nonExistentOrgId = openOpsId(); - const result = await projectService.getOneForOrganization( - nonExistentOrgId, - ); + const result = + await projectService.getOneForOrganization(nonExistentOrgId); expect(result).toBeNull(); }); diff --git a/packages/server/api/test/unit/authentication/authentication.controller.test.ts b/packages/server/api/test/unit/authentication/authentication.controller.test.ts index 61e667b7c9..4801615f90 100644 --- a/packages/server/api/test/unit/authentication/authentication.controller.test.ts +++ b/packages/server/api/test/unit/authentication/authentication.controller.test.ts @@ -31,9 +31,8 @@ describe('authenticationController analytics routes', () => { post: jest.Mock; get: jest.Mock; }> => { - const { authenticationController } = await import( - '../../../src/app/authentication/authentication.controller' - ); + const { authenticationController } = + await import('../../../src/app/authentication/authentication.controller'); const appMock = { post: jest.fn().mockReturnThis(), diff --git a/packages/server/api/test/unit/benchmark/benchmark-feature-guard.test.ts b/packages/server/api/test/unit/benchmark/benchmark-feature-guard.test.ts index 702b784d35..fb5dd35af9 100644 --- a/packages/server/api/test/unit/benchmark/benchmark-feature-guard.test.ts +++ b/packages/server/api/test/unit/benchmark/benchmark-feature-guard.test.ts @@ -20,7 +20,7 @@ import { assertBenchmarkFeatureEnabled } from '../../../src/app/benchmark/benchm const mockFastifyInstance = {} as FastifyInstance; const mockRequest = (projectId: string) => - ({ principal: { projectId } } as unknown as FastifyRequest); + ({ principal: { projectId } }) as unknown as FastifyRequest; const mockReply = {} as FastifyReply; diff --git a/packages/server/api/test/unit/flow-template/flow-template.service.test.ts b/packages/server/api/test/unit/flow-template/flow-template.service.test.ts index 34122fe2bd..8d02b1ca84 100644 --- a/packages/server/api/test/unit/flow-template/flow-template.service.test.ts +++ b/packages/server/api/test/unit/flow-template/flow-template.service.test.ts @@ -220,9 +220,8 @@ describe('flowTemplateService', () => { const insertResult = { id: 'some-flow-id' }; mockedRepo.save = jest.fn().mockResolvedValue(insertResult); - const result = await flowTemplateService.createFlowTemplate( - requestOptions, - ); + const result = + await flowTemplateService.createFlowTemplate(requestOptions); expect(flowServiceMock.getOnePopulatedOrThrow).toHaveBeenCalledWith({ id: requestOptions.flowId, diff --git a/packages/server/api/test/unit/oauth/clients/clients.service.test.ts b/packages/server/api/test/unit/oauth/clients/clients.service.test.ts index 62325fbb46..c2d0536369 100644 --- a/packages/server/api/test/unit/oauth/clients/clients.service.test.ts +++ b/packages/server/api/test/unit/oauth/clients/clients.service.test.ts @@ -261,7 +261,7 @@ describe('clientsService', () => { grantTypes, tokenEndpointAuthMethod: 'none', clientSecretHash: null, - } as OAuthClient); + }) as OAuthClient; it('allows a grant type the client registered', () => { expect(() => @@ -419,9 +419,8 @@ describe('clientsService', () => { 'basic ', ); - const client = await clientsService.authenticateResourceServerClient( - header, - ); + const client = + await clientsService.authenticateResourceServerClient(header); expect(client.id).toBe(RS_CLIENT_ID); }); @@ -437,9 +436,8 @@ describe('clientsService', () => { `${RS_CLIENT_ID}:${encodeURIComponent(secret)}`, ).toString('base64')}`; - const client = await clientsService.authenticateResourceServerClient( - header, - ); + const client = + await clientsService.authenticateResourceServerClient(header); expect(client.id).toBe(RS_CLIENT_ID); }); diff --git a/packages/server/api/test/unit/oauth/projects/oauth-principal.test.ts b/packages/server/api/test/unit/oauth/projects/oauth-principal.test.ts index 458002aa15..41b00e8a49 100644 --- a/packages/server/api/test/unit/oauth/projects/oauth-principal.test.ts +++ b/packages/server/api/test/unit/oauth/projects/oauth-principal.test.ts @@ -145,9 +145,8 @@ describe('extractPrincipal with OAuth tokens', () => { * names. Do not widen this to USER. */ it('builds a SERVICE principal on the grant active project', async () => { - const principal = await accessTokenManager.extractPrincipal( - signOAuthToken(), - ); + const principal = + await accessTokenManager.extractPrincipal(signOAuthToken()); expect(principal).toEqual({ id: 'user-1', @@ -197,9 +196,8 @@ describe('extractPrincipal with OAuth tokens', () => { projectRole: 'VIEWER', }); - const principal = await accessTokenManager.extractPrincipal( - signOAuthToken(), - ); + const principal = + await accessTokenManager.extractPrincipal(signOAuthToken()); expect(principal.projectRole).toBe('VIEWER'); }); diff --git a/packages/server/shared/.eslintrc.json b/packages/server/shared/.eslintrc.json deleted file mode 100644 index 1ad57779dd..0000000000 --- a/packages/server/shared/.eslintrc.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "extends": ["../api/.eslintrc.json"], - "ignorePatterns": ["!**/*", "**/*.config.ts"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {}, - "parserOptions": { - "project": [ - "packages/server/shared/tsconfig.lib.json", - "packages/server/api/tsconfig.app.json", - "packages/server/api/tsconfig.spec.json" - ] - } - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.test.ts"], - "parserOptions": { - "project": ["packages/server/shared/tsconfig.spec.json"] - } - }, - { - "files": ["*.json"], - "parser": "jsonc-eslint-parser", - "rules": { - "@nx/dependency-checks": "error" - } - } - ] -} diff --git a/packages/server/shared/eslint.config.mjs b/packages/server/shared/eslint.config.mjs new file mode 100644 index 0000000000..f92aba2c36 --- /dev/null +++ b/packages/server/shared/eslint.config.mjs @@ -0,0 +1,33 @@ +import { + baseConfig, + serverConfig, + typeAwareParserOptions, +} from '../../../eslint.base.config.mjs'; + +export default [ + { ignores: ['**/*.config.ts'] }, + ...baseConfig, + ...serverConfig, + typeAwareParserOptions(import.meta.dirname, [ + 'tsconfig.lib.json', + '../api/tsconfig.app.json', + '../api/tsconfig.spec.json', + ]), + { + files: ['**/*.test.ts'], + languageOptions: { + parserOptions: { + project: ['tsconfig.spec.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, + }, + { + // Inert while package.json is ignored in the base config; kept so the intent + // survives the migration. + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': 'error', + }, + }, +]; diff --git a/packages/server/shared/src/lib/blocks/file-blocks-utils.ts b/packages/server/shared/src/lib/blocks/file-blocks-utils.ts index 37d28b496a..81d69e0a05 100644 --- a/packages/server/shared/src/lib/blocks/file-blocks-utils.ts +++ b/packages/server/shared/src/lib/blocks/file-blocks-utils.ts @@ -150,18 +150,16 @@ export async function loadBlockMetadataFromFolder( `${blockName}-${blockVersion}-${stats.mtime.getTime()}-${system.calculateConfigurationHash()}`; if (!bypassCache) { - let blockMetadata = await cacheWrapper.getSerializedObject( - cacheKey, - ); + let blockMetadata = + await cacheWrapper.getSerializedObject(cacheKey); if (blockMetadata) { return blockMetadata; } lock = await memoryLock.acquire(`${cacheKey}`); - blockMetadata = await cacheWrapper.getSerializedObject( - cacheKey, - ); + blockMetadata = + await cacheWrapper.getSerializedObject(cacheKey); if (blockMetadata) { return blockMetadata; } diff --git a/packages/server/shared/test/cache/memory-wrapper.test.ts b/packages/server/shared/test/cache/memory-wrapper.test.ts index d94918ec73..80017f2642 100644 --- a/packages/server/shared/test/cache/memory-wrapper.test.ts +++ b/packages/server/shared/test/cache/memory-wrapper.test.ts @@ -43,16 +43,18 @@ describe('memoryWrapper', () => { test('setSerializedObject and getSerializedObject should store and retrieve a serialized object', async () => { await memoryWrapper.setSerializedObject(serializedObjectKey, testObject); - const result = await memoryWrapper.getSerializedObject( - serializedObjectKey, - ); + const result = + await memoryWrapper.getSerializedObject( + serializedObjectKey, + ); expect(result).toEqual(testObject); }); test('getSerializedObject should return null for a non-existent key', async () => { - const result = await memoryWrapper.getSerializedObject( - 'nonExistentKey', - ); + const result = + await memoryWrapper.getSerializedObject( + 'nonExistentKey', + ); expect(result).toBeNull(); }); diff --git a/packages/server/worker/.eslintrc.json b/packages/server/worker/.eslintrc.json deleted file mode 100644 index bbd0d4c5a9..0000000000 --- a/packages/server/worker/.eslintrc.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": ["../api/.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.js"], - "parserOptions": { - "project": ["./tsconfig.*?.json"] - }, - "rules": {} - }, - { - "files": ["*.json"], - "parser": "jsonc-eslint-parser", - "rules": { - "@nx/dependency-checks": "error" - } - } - ] -} diff --git a/packages/server/worker/eslint.config.mjs b/packages/server/worker/eslint.config.mjs new file mode 100644 index 0000000000..98674ce5f3 --- /dev/null +++ b/packages/server/worker/eslint.config.mjs @@ -0,0 +1,19 @@ +import { + baseConfig, + serverConfig, + typeAwareParserOptions, +} from '../../../eslint.base.config.mjs'; + +export default [ + ...baseConfig, + ...serverConfig, + typeAwareParserOptions(import.meta.dirname), + { + // Inert while package.json is ignored in the base config; kept so the intent + // survives the migration. + files: ['**/*.json'], + rules: { + '@nx/dependency-checks': 'error', + }, + }, +]; diff --git a/packages/server/worker/src/lib/api/axios-client.ts b/packages/server/worker/src/lib/api/axios-client.ts index 8e427bba3b..b19c540dc3 100644 --- a/packages/server/worker/src/lib/api/axios-client.ts +++ b/packages/server/worker/src/lib/api/axios-client.ts @@ -4,7 +4,10 @@ import axiosRetry from 'axios-retry'; import { StatusCodes } from 'http-status-codes'; export class ApplicationAxiosError extends Error { - constructor(public error: AxiosError, message?: string) { + constructor( + public error: AxiosError, + message?: string, + ) { super(message); } } diff --git a/packages/server/worker/src/lib/engine/call-engine.ts b/packages/server/worker/src/lib/engine/call-engine.ts index 65cea38fe2..fd41369b17 100644 --- a/packages/server/worker/src/lib/engine/call-engine.ts +++ b/packages/server/worker/src/lib/engine/call-engine.ts @@ -63,9 +63,8 @@ export async function callEngine( try { if (shouldUseCache(operation) && requestKey) { - engineResult = await cacheWrapper.getSerializedObject( - requestKey, - ); + engineResult = + await cacheWrapper.getSerializedObject(requestKey); if (engineResult) { return parseEngineResponse(engineResult); diff --git a/packages/server/worker/src/lib/engine/engine-runner.ts b/packages/server/worker/src/lib/engine/engine-runner.ts index 6df3775d5f..e12b014a0c 100644 --- a/packages/server/worker/src/lib/engine/engine-runner.ts +++ b/packages/server/worker/src/lib/engine/engine-runner.ts @@ -30,8 +30,7 @@ export type EngineHelperTriggerResult< > = ExecuteTriggerResponse; export type EngineHelperPropResult = - | DropdownState - | Record; + DropdownState | Record; export type EngineHelperActionResult = ExecuteActionResponse; diff --git a/packages/server/worker/src/lib/engine/flow-enginer-util.ts b/packages/server/worker/src/lib/engine/flow-enginer-util.ts index dc5b5a7637..5b3ec3850d 100644 --- a/packages/server/worker/src/lib/engine/flow-enginer-util.ts +++ b/packages/server/worker/src/lib/engine/flow-enginer-util.ts @@ -107,8 +107,7 @@ export const blockEngineUtil = { step: Action | Trigger, ): Promise { const blockSettings = step.settings as - | BlockTriggerSettings - | BlockActionSettings; + BlockTriggerSettings | BlockActionSettings; const { blockName, blockVersion, blockType, packageType } = blockSettings; return this.getExactBlockVersion(engineToken, { blockName, diff --git a/packages/shared/.eslintrc.json b/packages/shared/.eslintrc.json deleted file mode 100644 index bca4a8a554..0000000000 --- a/packages/shared/.eslintrc.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": ["../server/api/.eslintrc.json"], - "overrides": [ - { - "files": ["*.ts", "*.js"], - "parserOptions": { - "project": ["packages/shared/tsconfig.*?.json"] - } - } - ] -} diff --git a/packages/shared/eslint.config.mjs b/packages/shared/eslint.config.mjs new file mode 100644 index 0000000000..e65ff6e474 --- /dev/null +++ b/packages/shared/eslint.config.mjs @@ -0,0 +1,11 @@ +import { + baseConfig, + serverConfig, + typeAwareParserOptions, +} from '../../eslint.base.config.mjs'; + +export default [ + ...baseConfig, + ...serverConfig, + typeAwareParserOptions(import.meta.dirname), +]; diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 319b86e8ab..14fcab4bf4 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -20,7 +20,6 @@ export * from './lib/cloud-providers'; export * from './lib/code/dto/code-request'; export * from './lib/common'; export * from './lib/common/application-error'; -export * from './lib/common/base-model'; export * from './lib/common/id-generator'; export * from './lib/common/seek-page'; export * from './lib/email-validation'; @@ -43,7 +42,6 @@ export * from './lib/flows/dto/delete-flows-request'; export * from './lib/flows/dto/flow-template-request'; export * from './lib/flows/dto/list-flows-request'; export * from './lib/flows/dto/move-flows-request'; -export * from './lib/flows/flow'; export * from './lib/flows/flow-helper'; export * from './lib/flows/flow-operations'; export * from './lib/flows/flow-step-test-output'; @@ -52,7 +50,6 @@ export * from './lib/flows/folders/content-type'; export * from './lib/flows/folders/folder'; export * from './lib/flows/folders/folder-requests'; export * from './lib/flows/sample-data'; -export * from './lib/flows/step-run'; export * from './lib/flows/trigger-events/trigger-event'; export * from './lib/flows/trigger-events/trigger-events-dto'; export * from './lib/flows/triggers/trigger'; diff --git a/packages/shared/src/lib/app-connection/app-connection.ts b/packages/shared/src/lib/app-connection/app-connection.ts index c33bcb5b72..b7f90248e7 100644 --- a/packages/shared/src/lib/app-connection/app-connection.ts +++ b/packages/shared/src/lib/app-connection/app-connection.ts @@ -70,16 +70,16 @@ export type AppConnectionValue< > = T extends AppConnectionType.SECRET_TEXT ? SecretTextConnectionValue : T extends AppConnectionType.BASIC_AUTH - ? BasicAuthConnectionValue - : T extends AppConnectionType.CLOUD_OAUTH2 - ? CloudOAuth2ConnectionValue - : T extends AppConnectionType.PLATFORM_OAUTH2 - ? PlatformOAuth2ConnectionValue - : T extends AppConnectionType.OAUTH2 - ? OAuth2ConnectionValueWithApp - : T extends AppConnectionType.CUSTOM_AUTH - ? CustomAuthConnectionValue - : never; + ? BasicAuthConnectionValue + : T extends AppConnectionType.CLOUD_OAUTH2 + ? CloudOAuth2ConnectionValue + : T extends AppConnectionType.PLATFORM_OAUTH2 + ? PlatformOAuth2ConnectionValue + : T extends AppConnectionType.OAUTH2 + ? OAuth2ConnectionValueWithApp + : T extends AppConnectionType.CUSTOM_AUTH + ? CustomAuthConnectionValue + : never; export type AppConnection = BaseModel & { diff --git a/packages/shared/src/lib/common/application-error.ts b/packages/shared/src/lib/common/application-error.ts index e10ca0f60b..58b2def5fb 100644 --- a/packages/shared/src/lib/common/application-error.ts +++ b/packages/shared/src/lib/common/application-error.ts @@ -8,7 +8,10 @@ import { OpenOpsId } from './id-generator'; import { Permission } from './security'; export class ApplicationError extends Error { - constructor(public error: ApplicationErrorParams, message?: string) { + constructor( + public error: ApplicationErrorParams, + message?: string, + ) { super(error.code + (message ? `: ${message}` : '')); } } diff --git a/packages/shared/src/lib/engine/engine-operation.ts b/packages/shared/src/lib/engine/engine-operation.ts index 0956857030..27fa58a986 100644 --- a/packages/shared/src/lib/engine/engine-operation.ts +++ b/packages/shared/src/lib/engine/engine-operation.ts @@ -102,8 +102,7 @@ export type ResumeExecuteFlowOperation = } & ExecutionState; export type ExecuteFlowOperation = - | BeginExecuteFlowOperation - | ResumeExecuteFlowOperation; + BeginExecuteFlowOperation | ResumeExecuteFlowOperation; export type ExecuteTriggerOperation = BaseEngineOperation & { @@ -178,14 +177,14 @@ export type ExecuteTriggerResponse = H extends TriggerHookType.RUN ? ExecuteTestOrRunTriggerResponse : H extends TriggerHookType.HANDSHAKE - ? ExecuteHandshakeTriggerResponse - : H extends TriggerHookType.TEST - ? ExecuteTestOrRunTriggerResponse - : H extends TriggerHookType.RENEW - ? Record - : H extends TriggerHookType.ON_DISABLE - ? Record - : ExecuteOnEnableTriggerResponse; + ? ExecuteHandshakeTriggerResponse + : H extends TriggerHookType.TEST + ? ExecuteTestOrRunTriggerResponse + : H extends TriggerHookType.RENEW + ? Record + : H extends TriggerHookType.ON_DISABLE + ? Record + : ExecuteOnEnableTriggerResponse; export type ExecuteActionResponse = { success: boolean; diff --git a/packages/shared/src/lib/flow-run/execution/step-output.ts b/packages/shared/src/lib/flow-run/execution/step-output.ts index e41167d864..a251c59674 100644 --- a/packages/shared/src/lib/flow-run/execution/step-output.ts +++ b/packages/shared/src/lib/flow-run/execution/step-output.ts @@ -12,9 +12,7 @@ export enum StepOutputStatus { } export type StepRetryMetadataType = - | 'AZURE_429' - | 'HTTP_429' - | 'HTTP_CLIENT_ERROR'; + 'AZURE_429' | 'HTTP_429' | 'HTTP_CLIENT_ERROR'; export type StepRetryMetadata = { type: StepRetryMetadataType; diff --git a/packages/tests-e2e/.eslintrc.json b/packages/tests-e2e/.eslintrc.json deleted file mode 100644 index 9d9c0db55b..0000000000 --- a/packages/tests-e2e/.eslintrc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "extends": ["../../.eslintrc.json"], - "ignorePatterns": ["!**/*"], - "overrides": [ - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/ui-components/.eslintrc.json b/packages/ui-components/.eslintrc.json deleted file mode 100644 index 5fd2386ac8..0000000000 --- a/packages/ui-components/.eslintrc.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "extends": [ - "plugin:@nx/react", - "../../.eslintrc.json", - "plugin:storybook/recommended" - ], - "ignorePatterns": ["!**/*", "node_modules", "storybook-static"], - "overrides": [ - { - "files": ["**/*.ts", "**/*.tsx"], - "parser": "@typescript-eslint/parser", - "settings": { - "react": { - "version": "detect" - }, - "import/ignore": ["@vitejs/plugin-react"], - "import/resolver": { - "alias": { - "map": [["@", "./src"]], - "extensions": [".ts", ".tsx", ".js", ".jsx", ".json"], - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"] - }, - "import/resolver": { - "typescript": { - "project": ["tsconfig.json", "package/tsconfig.json"] - }, - "node": { - "project": ["tsconfig.json", "package/tsconfig.json"] - } - } - } - } - }, - "env": { - "browser": true, - "node": true, - "es6": true - }, - "extends": [ - "eslint:recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript", - "plugin:@typescript-eslint/recommended", - "plugin:react/recommended", - "plugin:react-hooks/recommended", - //"plugin:jsx-a11y/recommended", - "plugin:testing-library/react", - "plugin:jest-dom/recommended", - "plugin:vitest/legacy-recommended" - ], - "rules": { - "no-console": "error", - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "warn", - "no-restricted-imports": [ - "error", - { - "paths": [ - { - "name": "classnames", - "message": "Please use cn instead of classnames." - } - ] - } - ], - "import/no-cycle": "off", - "linebreak-style": ["error", "unix"], - "react/prop-types": "off", - "import/no-unresolved": "off", - "import/default": "off", - "import/no-named-as-default-member": "off", - "import/no-named-as-default": "off", - "react/react-in-jsx-scope": "off", - "jsx-a11y/anchor-is-valid": "off", - "testing-library/prefer-screen-queries": "off", - "@typescript-eslint/no-unused-vars": ["error"], - "@typescript-eslint/explicit-function-return-type": ["off"], - "@typescript-eslint/explicit-module-boundary-types": ["off"], - "@typescript-eslint/no-empty-function": ["off"], - "@typescript-eslint/no-explicit-any": ["off"] - } - }, - { - "files": ["./src/components/**/*.{ts,tsx}"], - "rules": { - "react/prop-types": "off" - } - }, - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/ui-components/eslint.config.mjs b/packages/ui-components/eslint.config.mjs new file mode 100644 index 0000000000..8e19194f13 --- /dev/null +++ b/packages/ui-components/eslint.config.mjs @@ -0,0 +1,17 @@ +import storybook from 'eslint-plugin-storybook'; +import { baseConfig, frontendConfig } from '../../eslint.base.config.mjs'; + +export default [ + { ignores: ['**/storybook-static/**'] }, + ...baseConfig, + ...frontendConfig, + ...storybook.configs['flat/recommended'], + { + files: ['**/*.ts', '**/*.tsx'], + rules: { + 'no-console': 'error', + 'react/prop-types': 'off', + 'testing-library/prefer-screen-queries': 'off', + }, + }, +]; diff --git a/packages/ui-components/src/components/assistant-ui/tooltip-copy-button/tooltip-copy-button.tsx b/packages/ui-components/src/components/assistant-ui/tooltip-copy-button/tooltip-copy-button.tsx index 8f78215107..9e2dfd260a 100644 --- a/packages/ui-components/src/components/assistant-ui/tooltip-copy-button/tooltip-copy-button.tsx +++ b/packages/ui-components/src/components/assistant-ui/tooltip-copy-button/tooltip-copy-button.tsx @@ -11,12 +11,7 @@ type TooltipCopyButtonProps = { tooltip?: string; className?: string; variant?: - | 'default' - | 'destructive' - | 'outline' - | 'secondary' - | 'ghost' - | 'link'; + 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'; size?: 'default' | 'sm' | 'lg' | 'icon'; iconClassName?: string; }; diff --git a/packages/ui-components/src/components/flow-canvas/edges/utils.ts b/packages/ui-components/src/components/flow-canvas/edges/utils.ts index 7f4c99e7d7..83e0552514 100644 --- a/packages/ui-components/src/components/flow-canvas/edges/utils.ts +++ b/packages/ui-components/src/components/flow-canvas/edges/utils.ts @@ -40,8 +40,7 @@ export const getBranchNodeId = ( ): string | undefined => { const splitEdgeTargetNode = nodes.find((node) => node.id === targetNodeId); const branchNodeId = splitEdgeTargetNode?.data?.branchNodeId as - | string - | undefined; + string | undefined; return branchNodeId; }; diff --git a/packages/ui-components/src/lib/types.ts b/packages/ui-components/src/lib/types.ts index 34c4a49c0d..7a7430d1e2 100644 --- a/packages/ui-components/src/lib/types.ts +++ b/packages/ui-components/src/lib/types.ts @@ -31,8 +31,7 @@ export type BlockStepMetadataWithSuggestions = BlockStepMetadata & Pick; export type StepMetadataWithSuggestions = - | BlockStepMetadataWithSuggestions - | PrimitiveStepMetadata; + BlockStepMetadataWithSuggestions | PrimitiveStepMetadata; export type StepMetadata = BlockStepMetadata | PrimitiveStepMetadata; @@ -68,8 +67,4 @@ export type HandleSelectCallback = ( ) => void; export type BenchmarkRunPhase = - | 'idle' - | 'running' - | 'failed' - | 'succeeded' - | 'succeeded_with_failures'; + 'idle' | 'running' | 'failed' | 'succeeded' | 'succeeded_with_failures'; diff --git a/packages/ui-components/src/stories/select-all-checkbox.stories.tsx b/packages/ui-components/src/stories/select-all-checkbox.stories.tsx index 12da14f9fb..8256c95cea 100644 --- a/packages/ui-components/src/stories/select-all-checkbox.stories.tsx +++ b/packages/ui-components/src/stories/select-all-checkbox.stories.tsx @@ -30,7 +30,8 @@ const listItemVariants = cva('flex items-center px-4 py-3 min-h-[49px]', { }); interface ListItemProps - extends React.HTMLAttributes, + extends + React.HTMLAttributes, VariantProps { children: React.ReactNode; } diff --git a/packages/ui-components/src/stories/sidebar/sidebar.stories.tsx b/packages/ui-components/src/stories/sidebar/sidebar.stories.tsx index 4854455d5a..fa2cc4c785 100644 --- a/packages/ui-components/src/stories/sidebar/sidebar.stories.tsx +++ b/packages/ui-components/src/stories/sidebar/sidebar.stories.tsx @@ -142,8 +142,8 @@ const SidebarWrapper = ({ const footer = isAiEnabled ? AiFooter(isMinimized, cloudConfigOverride) : isFullCatalog - ? FooterWrapperConnectedToCloud - : FooterWrapperNotConnectedToCloud; + ? FooterWrapperConnectedToCloud + : FooterWrapperNotConnectedToCloud; let MenuFooterWrapped: React.ReactNode; if (cloudConfigOverride) { diff --git a/packages/ui-components/src/ui/badge.tsx b/packages/ui-components/src/ui/badge.tsx index 59f65a2c41..d386bec0a2 100644 --- a/packages/ui-components/src/ui/badge.tsx +++ b/packages/ui-components/src/ui/badge.tsx @@ -24,7 +24,8 @@ const badgeVariants = cva( ); export interface BadgeProps - extends React.HTMLAttributes, + extends + React.HTMLAttributes, VariantProps {} function Badge({ className, variant, ...props }: BadgeProps) { diff --git a/packages/ui-components/src/ui/button.tsx b/packages/ui-components/src/ui/button.tsx index 8d953aea42..6b9c2fb623 100644 --- a/packages/ui-components/src/ui/button.tsx +++ b/packages/ui-components/src/ui/button.tsx @@ -48,7 +48,8 @@ const buttonVariants = cva( ); export interface ButtonProps - extends React.ButtonHTMLAttributes, + extends + React.ButtonHTMLAttributes, VariantProps { asChild?: boolean; loading?: boolean; diff --git a/packages/ui-components/src/ui/data-table-column-header.tsx b/packages/ui-components/src/ui/data-table-column-header.tsx index f7922db4a3..282fd37f62 100644 --- a/packages/ui-components/src/ui/data-table-column-header.tsx +++ b/packages/ui-components/src/ui/data-table-column-header.tsx @@ -3,8 +3,10 @@ import { ArrowDown, ArrowUp, ArrowUpDown } from 'lucide-react'; import { Button } from './button'; -interface DataTableColumnHeaderProps - extends React.HTMLAttributes { +interface DataTableColumnHeaderProps< + TData, + TValue, +> extends React.HTMLAttributes { column: Column; title: string; } diff --git a/packages/ui-components/src/ui/data-table.tsx b/packages/ui-components/src/ui/data-table.tsx index 5376d69728..5fdbde38f3 100644 --- a/packages/ui-components/src/ui/data-table.tsx +++ b/packages/ui-components/src/ui/data-table.tsx @@ -313,13 +313,17 @@ export function DataTable< const filterNames = (filters ?? []).map((filter) => filter.accessorKey); const paramsObject = filterNames .map((key) => [key, params.getAll(key)] as const) - .reduce((acc, [key, values]) => { - const value = values.length === 1 ? values?.[0] || undefined : values; - if (!value) { - return acc; - } - return { ...acc, [key]: value }; - }, {} as FilterRecord); + .reduce( + (acc, [key, values]) => { + const value = + values.length === 1 ? values?.[0] || undefined : values; + if (!value) { + return acc; + } + return { ...acc, [key]: value }; + }, + {} as FilterRecord, + ); const response = await fetchData(paramsObject, { cursor: params.get(DATA_TABLE_SEARCH_PARAM.CURSOR) ?? undefined, @@ -500,8 +504,7 @@ export function DataTable< {headerGroup.headers.map((header) => { const meta = header.column.columnDef.meta as - | { className?: string } - | undefined; + { className?: string } | undefined; return ( @@ -540,8 +543,7 @@ export function DataTable< > {row.getVisibleCells().map((cell) => { const meta = cell.column.columnDef.meta as - | { className?: string } - | undefined; + { className?: string } | undefined; return ( , + extends + VariantProps, React.HTMLAttributes { animation?: boolean; } diff --git a/packages/ui-components/src/ui/image-with-fallback.tsx b/packages/ui-components/src/ui/image-with-fallback.tsx index 991c46bd5e..55a53fe5de 100644 --- a/packages/ui-components/src/ui/image-with-fallback.tsx +++ b/packages/ui-components/src/ui/image-with-fallback.tsx @@ -2,8 +2,7 @@ import React, { useState } from 'react'; import { cn } from '../lib/cn'; -interface ImageWithFallbackProps - extends React.ImgHTMLAttributes { +interface ImageWithFallbackProps extends React.ImgHTMLAttributes { fallback?: React.ReactNode; } diff --git a/packages/ui-components/src/ui/multi-step-form/multi-step-form-header.tsx b/packages/ui-components/src/ui/multi-step-form/multi-step-form-header.tsx index 7a8b272777..eee69e5b80 100644 --- a/packages/ui-components/src/ui/multi-step-form/multi-step-form-header.tsx +++ b/packages/ui-components/src/ui/multi-step-form/multi-step-form-header.tsx @@ -47,8 +47,7 @@ const MultiStepFormTitle = React.forwardRef< }); MultiStepFormTitle.displayName = 'MultiStepFormTitle'; -interface MultiStepFormCloseProps - extends React.ButtonHTMLAttributes { +interface MultiStepFormCloseProps extends React.ButtonHTMLAttributes { onClose?: () => void; } diff --git a/packages/ui-components/src/ui/numeric-input.tsx b/packages/ui-components/src/ui/numeric-input.tsx index b5a843769f..8ef0c481ad 100644 --- a/packages/ui-components/src/ui/numeric-input.tsx +++ b/packages/ui-components/src/ui/numeric-input.tsx @@ -6,11 +6,10 @@ import { cn } from '../lib/cn'; import { Button } from './button'; import { Input } from './input'; -export interface NumericInputProps - extends Omit< - React.InputHTMLAttributes, - 'type' | 'onChange' - > { +export interface NumericInputProps extends Omit< + React.InputHTMLAttributes, + 'type' | 'onChange' +> { value?: number; onChange?: (value: number | undefined) => void; min?: number; diff --git a/packages/ui-components/src/ui/select-all-checkbox/select-all-checkbox.tsx b/packages/ui-components/src/ui/select-all-checkbox/select-all-checkbox.tsx index 97f51517f3..b806c7a36b 100644 --- a/packages/ui-components/src/ui/select-all-checkbox/select-all-checkbox.tsx +++ b/packages/ui-components/src/ui/select-all-checkbox/select-all-checkbox.tsx @@ -23,7 +23,8 @@ const checkboxVariants = cva('flex items-center justify-center rounded-xs', { }); export interface SelectAllCheckboxProps - extends React.HTMLAttributes, + extends + React.HTMLAttributes, VariantProps { id?: string; selectedCount: number; diff --git a/packages/ui-components/src/ui/sortable.tsx b/packages/ui-components/src/ui/sortable.tsx index 0bccd87a30..3aaf2704c6 100644 --- a/packages/ui-components/src/ui/sortable.tsx +++ b/packages/ui-components/src/ui/sortable.tsx @@ -54,8 +54,9 @@ const orientationConfig = { }, }; -interface SortableProps - extends DndContextProps { +interface SortableProps< + TData extends { id: UniqueIdentifier }, +> extends DndContextProps { /** * An array of data items that the sortable component will render. * @example @@ -187,8 +188,9 @@ const dropAnimationOpts: DropAnimation = { }), }; -interface SortableOverlayProps - extends React.ComponentPropsWithRef { +interface SortableOverlayProps extends React.ComponentPropsWithRef< + typeof DragOverlay +> { activeId?: UniqueIdentifier | null; } diff --git a/packages/ui-components/src/ui/status-icon-with-text.tsx b/packages/ui-components/src/ui/status-icon-with-text.tsx index 000b283d53..c761f261ca 100644 --- a/packages/ui-components/src/ui/status-icon-with-text.tsx +++ b/packages/ui-components/src/ui/status-icon-with-text.tsx @@ -17,8 +17,9 @@ const statusCodeVariants = cva( }, ); -interface StatusIconWithTextProps - extends VariantProps { +interface StatusIconWithTextProps extends VariantProps< + typeof statusCodeVariants +> { icon: any; text: string; explanation?: string; diff --git a/packages/ui-components/src/ui/tree-view.tsx b/packages/ui-components/src/ui/tree-view.tsx index bcd8c2b314..0e7906977d 100644 --- a/packages/ui-components/src/ui/tree-view.tsx +++ b/packages/ui-components/src/ui/tree-view.tsx @@ -96,8 +96,8 @@ const TreeViewItem = forwardRef< level === 1 && !isBranch ? xPadding : level - ? levelPadding * (level - 1) + xPadding - : levelPadding, + ? levelPadding * (level - 1) + xPadding + : levelPadding, ...props.style, }} data-treeview-is-branch={isBranch} diff --git a/packages/ui-components/src/ui/use-toast.tsx b/packages/ui-components/src/ui/use-toast.tsx index 64eb66836f..e5823309a3 100644 --- a/packages/ui-components/src/ui/use-toast.tsx +++ b/packages/ui-components/src/ui/use-toast.tsx @@ -37,13 +37,6 @@ type ToasterUserProps = { type ToasterToast = ToastProps & ToasterUserProps; -const actionTypes = { - ADD_TOAST: 'ADD_TOAST', - UPDATE_TOAST: 'UPDATE_TOAST', - DISMISS_TOAST: 'DISMISS_TOAST', - REMOVE_TOAST: 'REMOVE_TOAST', -} as const; - let count = 0; function genId() { @@ -51,7 +44,12 @@ function genId() { return count.toString(); } -type ActionType = typeof actionTypes; +type ActionType = { + ADD_TOAST: 'ADD_TOAST'; + UPDATE_TOAST: 'UPDATE_TOAST'; + DISMISS_TOAST: 'DISMISS_TOAST'; + REMOVE_TOAST: 'REMOVE_TOAST'; +}; type Action = | { diff --git a/packages/ui-kit/.eslintrc.json b/packages/ui-kit/.eslintrc.json deleted file mode 100644 index 8d4974339b..0000000000 --- a/packages/ui-kit/.eslintrc.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "extends": ["plugin:@nx/react", "../../.eslintrc.json"], - "ignorePatterns": ["!**/*", "node_modules", "dist"], - "overrides": [ - { - "files": ["**/*.ts", "**/*.tsx"], - "parser": "@typescript-eslint/parser", - "settings": { - "react": { - "version": "detect" - }, - "import/ignore": ["@vitejs/plugin-react"], - "import/resolver": { - "alias": { - "map": [["@", "./src"]], - "extensions": [".ts", ".tsx", ".js", ".jsx", ".json"], - "import/parsers": { - "@typescript-eslint/parser": [".ts", ".tsx"] - }, - "import/resolver": { - "typescript": { - "project": ["tsconfig.json", "package/tsconfig.json"] - }, - "node": { - "project": ["tsconfig.json", "package/tsconfig.json"] - } - } - } - } - }, - "env": { - "browser": true, - "node": true, - "es6": true - }, - "extends": [ - "eslint:recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript", - "plugin:@typescript-eslint/recommended", - "plugin:react/recommended", - "plugin:react-hooks/recommended", - //"plugin:jsx-a11y/recommended", - "plugin:testing-library/react", - "plugin:jest-dom/recommended", - "plugin:vitest/legacy-recommended" - ], - "rules": { - "no-console": "error", - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "warn", - "no-restricted-imports": [ - "error", - { - "paths": [ - { - "name": "classnames", - "message": "Please use cn instead of classnames." - } - ] - } - ], - "import/no-cycle": "off", - "linebreak-style": ["error", "unix"], - "import/no-unresolved": "off", - "import/default": "off", - "import/no-named-as-default-member": "off", - "import/no-named-as-default": "off", - "react/react-in-jsx-scope": "off", - "jsx-a11y/anchor-is-valid": "off", - "react/prop-types": "off", - "testing-library/prefer-screen-queries": "off", - "@typescript-eslint/no-unused-vars": ["error"], - "@typescript-eslint/explicit-function-return-type": ["off"], - "@typescript-eslint/explicit-module-boundary-types": ["off"], - "@typescript-eslint/no-empty-function": ["off"], - "@typescript-eslint/no-explicit-any": ["off"], - "@nx/enforce-module-boundaries": "off" - } - }, - { - "files": ["./src/components/**/*.{ts,tsx}"], - "rules": { - "react/prop-types": "off" - } - }, - { - "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], - "rules": {} - }, - { - "files": ["*.ts", "*.tsx"], - "rules": {} - }, - { - "files": ["*.js", "*.jsx"], - "rules": {} - } - ] -} diff --git a/packages/ui-kit/eslint.config.mjs b/packages/ui-kit/eslint.config.mjs new file mode 100644 index 0000000000..11a5acd01e --- /dev/null +++ b/packages/ui-kit/eslint.config.mjs @@ -0,0 +1,15 @@ +import { baseConfig, frontendConfig } from '../../eslint.base.config.mjs'; + +export default [ + ...baseConfig, + ...frontendConfig, + { + files: ['**/*.ts', '**/*.tsx'], + rules: { + 'no-console': 'error', + 'react/prop-types': 'off', + 'testing-library/prefer-screen-queries': 'off', + '@nx/enforce-module-boundaries': 'off', + }, + }, +]; diff --git a/tools/scripts/utils/files.ts b/tools/scripts/utils/files.ts index a303b3463c..f657a60404 100644 --- a/tools/scripts/utils/files.ts +++ b/tools/scripts/utils/files.ts @@ -43,17 +43,6 @@ export const readProjectJson = async (path: string): Promise => { return await readJsonFile(`${path}/project.json`); }; -export const readPackageEslint = async (path: string): Promise => { - return await readJsonFile(`${path}/.eslintrc.json`); -}; - -export const writePackageEslint = async ( - path: string, - eslint: any, -): Promise => { - return await writeJsonFile(`${path}/.eslintrc.json`, eslint); -}; - export const writeProjectJson = async ( path: string, projectJson: ProjectJson,